## (C) 1998 Stephan Kulow ## Modified by Tero Pulkkinen ## Modified by Karl Nelson ## Modified by makeLyXsigc.sh (Allan Rae) AC_INIT(slot.cc) AC_DEFUN(LYX_FIX_MAKEFILE_IN,[ ## modify Makefile.in if need be -- since we still use automake for dir in $srcdir $srcdir/macros ; do ( cd $dir ; sed < Makefile.in > Makefile_tmp \ -e 's/all: all-redirect/all: all-@USE_INCLUDED_SIGC@\ all-yes: all-redirect\ all-no:/' ; mv Makefile_tmp Makefile.in ) done ]) LYX_FIX_MAKEFILE_IN define(AC_PUSH_LIB,[dnl ifdef([__LIB__],,[define([__LIB__],0)])dnl ac_save_LIBS[]__LIB__="$LIBS" define([__LIB__],builtin(eval,(__LIB__ + 1)))dnl LIBS="$1"]) define(AC_POP_LIB,[dnl define([__LIB__],builtin(eval,(__LIB__ - 1)))dnl LIBS="$ac_save_LIBS[]__LIB__"]) dnl dnl Source packaging numbers SIGC_MAJOR_VERSION=1 SIGC_MINOR_VERSION=0 SIGC_MICRO_VERSION=1 dnl Library extension SIGC_RELEASE=1.0 SIGC_VERSION=$SIGC_MAJOR_VERSION.$SIGC_MINOR_VERSION.$SIGC_MICRO_VERSION # # +1 : ? : +1 == new interface that does not break old one # +1 : ? : 0 == new interface that breaks old one # ? : ? : 0 == no new interfaces, but breaks apps # ? :+1 : ? == just some internal changes, nothing breaks but might work # better # CURRENT : REVISION : AGE LIBSIGC_SO_VERSION=0:0:0 AC_SUBST(LIBSIGC_SO_VERSION, $LIBSIGC_SO_VERSION) AC_SUBST(SIGC_RELEASE, $SIGC_RELEASE) AC_SUBST(SIGC_VERSION) AC_DEFINE_UNQUOTED(SIGC_MAJOR_VERSION, $SIGC_MAJOR_VERSION) AC_DEFINE_UNQUOTED(SIGC_MINOR_VERSION, $SIGC_MINOR_VERSION) AC_DEFINE_UNQUOTED(SIGC_MICRO_VERSION, $SIGC_MICRO_VERSION) AC_CONFIG_AUX_DIR(../config) dnl For automake. VERSION=$SIGC_VERSION PACKAGE=libsigc++ dnl Initialize automake stuff AM_INIT_AUTOMAKE($PACKAGE, $VERSION) dnl Specify a configuration file AM_CONFIG_HEADER(sigc++config.h) AC_ARG_WITH([included-libsigc], [ --without-included-libsigc Use the libsigc++ installed on the system Used when libsigc++ is bundled with applications], [sigc_use_included_libsigc=$withval], [sigc_use_included_libsigc=yes]) if test x$sigc_use_included_libsigc = xno; then ## just change the setting for the Makefile USE_INCLUDED_SIGC=no AC_SUBST(USE_INCLUDED_SIGC) else ### ### This else..fi goes till the end of the file! ### USE_INCLUDED_SIGC=yes AC_SUBST(USE_INCLUDED_SIGC) AC_ARG_ENABLE(threads, [ --disable-threads disables support threading.], enable_threads=$enableval,enable_threads="yes") AC_ARG_ENABLE(checks, [ --disable-checks disables unnecessary tests needed for bug reports.], enable_checks=$enableval,enable_checks="yes" ) AC_PROG_CC AC_PROG_CPP AM_DISABLE_SHARED dnl Instruct build of dll for cygwin (libtool 1.3) dnl Exports screw up badly on libtool 1.3, backing off to 1.2f dnl A C_LIBTOOL_WIN32_DLL dnl libtool does all checks with $CC, not with $CXX dnl maybe this should be fixed in libtool, not here AM_PROG_LIBTOOL dnl On FreeBSD 3.0 (and perhaps some other systems) GNU m4 is dnl called `gm4' where `m4' is the system's own m4. AC_CHECK_PROGS(M4, gm4 m4, m4) AC_PROG_CXX AC_LANG_CPLUSPLUS dnl Checking if linker supports global constructors dnl This is largely information for me if someone files a bug report if test "X$enable_checks" = "Xyes"; then AC_MSG_CHECKING([if linker supports global constructors]) cat > mylib.$ac_ext < struct A {A() {printf("PASS\n");} }; A a; int foo() {return 1;} EOF cat > mytest.$ac_ext < extern int foo(); int main(int argc,char **argv) { int i=foo(); if (i!=1) printf("FAIL\n"); } EOF sh libtool --mode=compile $CXX -c mylib.$ac_ext >&5 sh libtool --mode=link $CXX -o libtest.la -rpath / -version-info 0 mylib.lo >&5 $CXX -c $CFLAGS $CPPFLAGS mytest.$ac_ext >&5 sh libtool --mode=link $CXX -o mytest mytest.o libtest.la >&5 2>/dev/null if test -x mytest; then myresult=`./mytest` if test "X$myresult" = "XPASS"; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) AC_MSG_WARN([ =================================================================== WARNING: This platform lacks support of construction of global objects in shared librarys. Although not required by this library, this is a serious problem for building C++ libraries. You will not be able to use any shared libraries that contain global objects with contructors. See ftp://rtfm.mit.edu/pub/usenet/news.answers/g++-FAQ/plain for details about this problem. Also for possible solutions http://www.informatik.uni-frankfurt.de/~fp/Tcl/tcl-c++/tcl-c++.html =================================================================== ]) fi else AC_MSG_RESULT(unknown) fi rm -f mylib.* mytest.* libtest.la .libs/libtest* mytest .libs/mytest >&5 fi AC_MSG_CHECKING(if C++ compiler uses std namespace ) AC_TRY_COMPILE( [ #include namespace std{ void kludge(); } using namespace std; ],[ cout << "test" << endl; ],[ ac_std_namespace=yes AC_MSG_RESULT([yes]) ],[ ac_std_namespace=maybe ]) if test "x$ac_std_namespace" = xmaybe ; then AC_TRY_COMPILE( [ #include namespace std{ void kludge(); } using namespace std; ],[ cout << "test" << endl; ],[ ac_std_namespace=yes AC_MSG_RESULT([yes]) AC_MSG_WARN([ =================================================================== WARNING: This compiler platform does not have the iostream library in the std namespace. This presents a problem for writing portable STL code. To run the demos, you will need to place a file with the following in a file called "iostream" in your include directory. ---------------------------iostream-------------------------------- #ifndef IOSTREAM_KLUDGE #define IOSTREAM_KLUDGE #include namespace std { void iostream_kludge(); }; #endif =================================================================== ]) ],[ ac_std_namespace=no AC_MSG_RESULT([no]) AC_MSG_WARN([ =================================================================== WARNING: This compiler platform does not support iostream or namespaces. You will not be able to run the demos as they use STL. This does not affect use of the library, only the demos. =================================================================== ]) ]) fi dnl dnl C++ compiler feature check start here AC_MSG_CHECKING(if C++ compiler supports bool (required)) AC_TRY_COMPILE( [ ],[ bool b=true; bool b1=false; ],[ ac_bool=yes AC_MSG_RESULT([$ac_bool]) ],[ config_error=yes AC_MSG_RESULT([$ac_bool]) AC_WARN(bool type is not supported by your compiler) ]) AC_MSG_CHECKING([if C++ compiler supports const_cast<> (required)]) AC_TRY_COMPILE( [ class foo; ],[ const foo *c=0; foo *c1=const_cast(c); ],[ ac_const_cast=yes AC_MSG_RESULT([$ac_const_cast]) ],[ AC_MSG_RESULT([$ac_const_cast]) AC_WARN(C++ compiler const_cast<> does not work) config_error=yes ]) # Member function templates AC_MSG_CHECKING(if C++ compiler supports member function templates) AC_TRY_COMPILE( [ class foo { public: template void method(T t); }; template void foo::method(T t) {t = 0;} ],[ ],[ ac_member_func_templates=yes AC_DEFINE(SIGC_CXX_MEMBER_FUNC_TEMPLATES) AC_MSG_RESULT([$ac_member_func_templates]) ],[ ac_member_func_templates=no AC_MSG_RESULT([$ac_member_func_templates]) config_error=yes AC_MSG_WARN([Test for member templates failed. This disables some methods that requires member template support. If your compiler should support member templates, see config.log to figure out why the test failed.]) ]) # Member class templates AC_MSG_CHECKING(if C++ compiler supports member class templates) AC_TRY_COMPILE( [ struct S { template struct A {}; template struct B {}; }; ],[ ],[ ac_member_class_templates=yes AC_DEFINE(SIGC_CXX_MEMBER_CLASS_TEMPLATES) AC_MSG_RESULT([$ac_member_class_templates]) ],[ ac_member_class_templates=no AC_MSG_RESULT([$ac_member_class_templates]) AC_MSG_WARN([Test for member templates failed. This disables some methods that requires member template support. If your compiler should support member templates, see config.log to figure out why the test failed.]) ]) # Mutable AC_MSG_CHECKING(if C++ compiler supports mutable) AC_TRY_COMPILE( [ class k { mutable char *c; public: void foo() const { c=0; } }; ],[ ],[ ac_cxx_mutable=yes AC_DEFINE(SIGC_CXX_MUTABLE) ],[ ac_cxx_mutable=no ]) AC_MSG_RESULT([$ac_cxx_mutable]) # Partial Specialization AC_MSG_CHECKING([if C++ compiler supports partial specialization(required)]) AC_TRY_COMPILE( [ template class k { public: }; template class k { }; ],[ k b; k a; ],[ ac_cxx_partial_specialization=yes AC_MSG_RESULT([$ac_cxx_partial_specialization]) AC_DEFINE(SIGC_CXX_PARTIAL_SPEC) ],[ config_error=yes ac_cxx_partial_specialization=no AC_MSG_RESULT([$ac_cxx_partial_specialization]) AC_MSG_WARN([Partial specialization is needed for signal templates.]) ]) AC_MSG_CHECKING(if C++ compiler supports name spaces) AC_TRY_COMPILE( [ namespace Check { int i; } ],[ Check::i=1; ],[ ac_cxx_namespaces=yes AC_MSG_RESULT([$ac_cxx_namespaces]) AC_DEFINE(SIGC_CXX_NAMESPACES) ],[ ac_cxx_namespaces=no AC_MSG_RESULT([$ac_cxx_namespaces]) AC_MSG_WARN([Without namespaces all classes will be global.]) ]) AC_MSG_CHECKING(if C++ compiler supports friend template) AC_TRY_COMPILE( [ struct A { template friend T* gen(); }; ],[ ],[ ac_cxx_friend_templates=yes AC_MSG_RESULT([$ac_cxx_friend_templates]) AC_DEFINE(SIGC_CXX_FRIEND_TEMPLATES) ],[ ac_cxx_friend_templates=no AC_MSG_RESULT([$ac_cxx_friend_templates]) AC_MSG_WARN([Access to dynamic will not be controlled.]) ]) AC_MSG_CHECKING(if C++ compiler has intrinsic constructors) AC_TRY_COMPILE( [ template struct A { T t; A(): t() {} }; A i; ],[ ],[ AC_DEFINE(SIGC_CXX_INT_CTOR) ac_cxx_tmpl_intctor=yes ],[ ac_cxx_tmpl_intctor=no ]) AC_MSG_RESULT([$ac_cxx_tmpl_intctor]) AC_MSG_CHECKING(if C++ compiler uses template copy ctor) AC_TRY_COMPILE( [ template struct A { A(const A&) {} template A(const T1&) {} }; ],[ ],[ ac_cxx_template_cctor=no ],[ AC_DEFINE(SIGC_CXX_TEMPLATE_CCTOR) ac_cxx_template_cctor=yes ]) AC_MSG_RESULT([$ac_cxx_template_cctor]) AC_MSG_CHECKING(if C++ compiler allows void returns) AC_TRY_COMPILE( [ void g(int *p) {} void h(int *p) {return g(p);} ],[ ],[ ac_cxx_void_return=yes AC_DEFINE(SIGC_CXX_VOID_RETURN) ],[ ac_cxx_void_return=no ]) AC_MSG_RESULT([$ac_cxx_void_return]) AC_MSG_CHECKING(if C++ compiler allows specialization of references) AC_TRY_COMPILE( [ struct A {}; struct B {}; template struct P { typedef A* ptr; }; template struct P { typedef B* ptr; }; ],[ A* a; B* b; P::ptr p=a; P::ptr q=b; ],[ ac_cxx_specialize_references=yes AC_DEFINE(SIGC_CXX_SPECIALIZE_REFERENCES) ],[ ac_cxx_specialize_references=no ]) AC_MSG_RESULT([$ac_cxx_specialize_references]) dnl unused at the moment, disabled dnl mirko, 99/1/15 dnl AC_MSG_CHECKING(if C++ compiler supports qualification of return types with templates) dnl AC_TRY_COMPILE( dnl [ dnl template dnl class foo { dnl public: dnl typedef int iterator; dnl iterator begin(); dnl }; dnl template foo::iterator foo::begin() { } dnl ],[ dnl foo f; dnl f.begin(); dnl ],[ dnl ac_template_qualification=yes dnl ],[ dnl AC_DEFINE(SIGC_CXX_NO_TEMPLATE_QUALIFICATION) dnl ac_template_qualification=no dnl ]) dnl AC_MSG_RESULT([$ac_template_qualification]) dnl unused at the moment, disabled dnl mirko, 99/1/15 dnl AC_MSG_CHECKING(if C++ compiler supports static data inside templates) dnl AC_TRY_LINK( dnl [ dnl template dnl class foo { public: static T a; }; dnl template dnl static T foo::a=0; dnl ],[ dnl foo b; dnl ],[ dnl ac_static_templates=yes dnl ],[ dnl AC_DEFINE(SIGC_CXX_NO_STATIC_TEMPLATES) dnl ac_static_templates=no dnl ]) dnl AC_MSG_RESULT([$ac_static_templates]) AC_MSG_CHECKING(if C++ environment provides all required features) if test "x$config_error" = xyes ; then AC_MSG_RESULT([no]) AC_MSG_ERROR([Your compiler is not powerful enough to compile libsigc++. If it should be, see config.log for more information of why it failed.]) fi AC_MSG_RESULT([yes]) dnl dnl PTHREADS dnl AC_CHECK_HEADER(pthread.h,,[enable_threads="no"]) if test "x$enable_threads" = "xyes" ; then enable_threads="no" AC_CHECK_LIB(pthread,pthread_self,[enable_threads="yes";THREAD_LIB="-lpthread"]) AC_CHECK_LIB(cma,pthread_self,[enable_threads="yes";THREAD_LIB="-lcma"]) AC_PUSH_LIB($THREAD_LIB) AC_CHECK_FUNC(pthread_keycreate,[AC_DEFINE(SIGC_PTHREAD_DCE)]) AC_POP_LIB() AC_SUBST(THREAD_LIB) fi AC_MSG_CHECKING(if should compile with pthreads) if test "x$enable_threads" = "xyes" ; then AC_DEFINE(SIGC_PTHREADS) AC_MSG_RESULT([yes]) AC_MSG_CHECKING([sizes of threading elements]) # Check for size of threading elements so that we don't expose # the implementation AC_TRY_RUN([ #include #include #ifdef SIGC_PTHREAD_DCE typedef pthread_condattr_t CondAttr; typedef pthread_mutexattr_t MutexAttr; typedef pthread_attr_t ThreadAttr; #else typedef pthread_condattr_t* CondAttr; typedef pthread_mutexattr_t* MutexAttr; typedef pthread_attr_t* ThreadAttr; #endif typedef pthread_mutex_t MutexImpl; typedef pthread_cond_t CondImpl; typedef pthread_key_t KeyImpl; typedef pthread_t ThreadImpl; int main() { FILE *fptr; fptr=fopen("ac_thread.sh","w"); fprintf(fptr,"ac_thread_cond_attr_size=%d\n",sizeof(CondAttr)); fprintf(fptr,"ac_thread_cond_impl_size=%d\n",sizeof(CondImpl)); fprintf(fptr,"ac_thread_mutex_attr_size=%d\n",sizeof(MutexAttr)); fprintf(fptr,"ac_thread_mutex_impl_size=%d\n",sizeof(MutexImpl)); fprintf(fptr,"ac_thread_thread_attr_size=%d\n",sizeof(ThreadAttr)); fprintf(fptr,"ac_thread_thread_impl_size=%d\n",sizeof(ThreadImpl)); fprintf(fptr,"ac_thread_key_impl_size=%d\n",sizeof(KeyImpl)); return 0; } ],[ . ./ac_thread.sh rm ac_thread.sh AC_MSG_RESULT(found) ],[ AC_MSG_RESULT(failed) AC_ERROR( [Could not compile a program with threads, please see config.log for details. ]) ], [ AC_MSG_RESULT(cross) if test ! -f ac_thread.h; then echo ' ac_thread_cond_attr_size= ac_thread_cond_impl_size= ac_thread_mutex_attr_size= ac_thread_mutex_impl_size= ac_thread_thread_attr_size= ac_thread_thread_impl_size= ac_thread_key_impl_size= ' > ./ac_thread.sh AC_MSG_ERROR( [You are attempting a cross compile, but the necessary information regarding your thread library is not available. Please fill out the ac_thread.sh file. ]) else . ./ac_thread.sh fi ]) AC_DEFINE_UNQUOTED(SIGC_PTHREAD_COND_ATTR,$ac_thread_cond_attr_size) AC_DEFINE_UNQUOTED(SIGC_PTHREAD_COND_IMPL,$ac_thread_cond_impl_size) AC_DEFINE_UNQUOTED(SIGC_PTHREAD_MUTEX_ATTR,$ac_thread_mutex_attr_size) AC_DEFINE_UNQUOTED(SIGC_PTHREAD_MUTEX_IMPL,$ac_thread_mutex_impl_size) AC_DEFINE_UNQUOTED(SIGC_PTHREAD_THREAD_ATTR,$ac_thread_thread_attr_size) AC_DEFINE_UNQUOTED(SIGC_PTHREAD_THREAD_IMPL,$ac_thread_thread_impl_size) AC_DEFINE_UNQUOTED(SIGC_PTHREAD_KEY_IMPL,$ac_thread_key_impl_size) else AC_MSG_RESULT([no]) fi ### ### This is the end of the massive if..then..else..fi ### fi AC_OUTPUT([Makefile sigc-config macros/Makefile ],[chmod a+x sigc-config])