X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/480ccd2194ae492b878e1659b99d0108157eae01..3dd30495169b650e8a37699d714f183691d8f2c5:/acinclude.m4 diff --git a/acinclude.m4 b/acinclude.m4 index 18ea55aad3..c700ef0eee 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -8,48 +8,22 @@ dnl dnl Version: $Id$ dnl --------------------------------------------------------------------------- + dnl =========================================================================== -dnl macros to detect specialty compiler options +dnl Objective-C(++) related macros dnl =========================================================================== +m4_define([AC_WX_LANG_OBJECTIVEC], +[AC_LANG(C) +ac_ext=m +]) -dnl Figure out if we need to pass -ext o to compiler (MetroWerks) -AC_DEFUN([AC_WX_METROWERKS_EXTO], -[AC_CACHE_CHECK([if the _AC_LANG compiler requires -ext o], wx_cv_[]_AC_LANG_ABBREV[]_exto, -dnl First create an empty conf test -[AC_LANG_CONFTEST([AC_LANG_PROGRAM()]) -dnl Now remove .o and .c.o or .cc.o -rm -f conftest.$ac_objext conftest.$ac_ext.o -dnl Now compile the test -AS_IF([AC_TRY_EVAL(ac_compile)], -dnl If the test succeeded look for conftest.c.o or conftest.cc.o -[for ac_file in `(ls conftest.* 2>/dev/null)`; do - case $ac_file in - conftest.$ac_ext.o) - wx_cv_[]_AC_LANG_ABBREV[]_exto="-ext o" - ;; - *) - ;; - esac -done], -[AC_MSG_FAILURE([cannot figure out if compiler needs -ext o: cannot compile]) -]) dnl AS_IF - -rm -f conftest.$ac_ext.o conftest.$ac_objext conftest.$ac_ext -]) dnl AC_CACHE_CHECK - -if test "x$wx_cv_[]_AC_LANG_ABBREV[]_exto" '!=' "x"; then - if test "[]_AC_LANG_ABBREV[]" = "c"; then - CFLAGS="$wx_cv_[]_AC_LANG_ABBREV[]_exto $CFLAGS" - fi - if test "[]_AC_LANG_ABBREV[]" = "cxx"; then - CXXFLAGS="$wx_cv_[]_AC_LANG_ABBREV[]_exto $CXXFLAGS" - fi -fi -]) dnl AC_DEFUN - +m4_define([AC_WX_LANG_OBJECTIVECPLUSPLUS], +[AC_LANG(C++) +ac_ext=mm +]) dnl =========================================================================== -dnl macros to find the a file in the list of include/lib paths +dnl macros to find a file in the list of include/lib paths dnl =========================================================================== dnl --------------------------------------------------------------------------- @@ -59,7 +33,7 @@ dnl --------------------------------------------------------------------------- AC_DEFUN([WX_PATH_FIND_INCLUDES], [ ac_find_includes= -for ac_dir in $1 /usr/include; +for ac_dir in $1 /usr/include do if test -f "$ac_dir/$2"; then ac_find_includes=$ac_dir @@ -69,16 +43,17 @@ for ac_dir in $1 /usr/include; ]) dnl --------------------------------------------------------------------------- -dnl call WX_PATH_FIND_LIBRARIES(search path, header name), sets ac_find_libraries -dnl to the full name of the file that was found or leaves it empty if not found +dnl call WX_PATH_FIND_LIBRARIES(lib name, [optional extra search paths]) +dnl sets ac_find_libraries to the full name of the file that was found +dnl or leaves it empty if not found dnl --------------------------------------------------------------------------- AC_DEFUN([WX_PATH_FIND_LIBRARIES], [ -ac_find_libraries= -for ac_dir in $1 /usr/lib; + ac_find_libraries= + for ac_dir in $2 $SEARCH_LIB do - for ac_extension in a so sl dylib; do - if test -f "$ac_dir/lib$2.$ac_extension"; then + for ac_extension in a so sl dylib dll.a; do + if test -f "$ac_dir/lib$1.$ac_extension"; then ac_find_libraries=$ac_dir break 2 fi @@ -86,6 +61,19 @@ for ac_dir in $1 /usr/lib; done ]) +dnl --------------------------------------------------------------------------- +dnl return list of standard library paths +dnl --------------------------------------------------------------------------- +dnl return all default locations: +dnl - /usr/lib: standard +dnl - /usr/lib32: n32 ABI on IRIX +dnl - /usr/lib64: n64 ABI on IRIX +dnl - /usr/lib/64: 64 bit ABI on Solaris and Linux x86-64 +dnl +dnl NB: if any of directories in the list is not a subdir of /usr, code setting +dnl wx_cv_std_libpath needs to be updated +AC_DEFUN([WX_STD_LIBPATH], [/usr/lib /usr/lib32 /usr/lib/64 /usr/lib64]) + dnl --------------------------------------------------------------------------- dnl Path to include, already defined dnl --------------------------------------------------------------------------- @@ -106,19 +94,94 @@ AC_DEFUN([WX_INCLUDE_PATH_EXIST], ]) dnl --------------------------------------------------------------------------- -dnl Path to link, already defined +dnl Usage: WX_LINK_PATH_EXIST(path, libpath) +dnl +dnl Set ac_path_to_link to nothing if path is already in libpath, or to -Lpath +dnl if it is not, so that libpath can be set to "$libpath$ac_path_to_link" +dnl after calling this function dnl --------------------------------------------------------------------------- AC_DEFUN([WX_LINK_PATH_EXIST], [ - echo "$2" | grep "\-L$1" > /dev/null - result=$? - if test $result = 0; then + dnl never add -L/usr/libXXX explicitly to libpath + if test "$1" = "default location"; then ac_path_to_link="" else - ac_path_to_link=" -L$1" + echo "$2" | grep "\-L$1" > /dev/null + result=$? + if test $result = 0; then + ac_path_to_link="" + else + ac_path_to_link=" -L$1" + fi fi ]) +dnl --------------------------------------------------------------------------- +dnl Usage: WX_FIND_LIB(lib-name, [lib-function to test], [extra search paths]) +dnl +dnl Tests in a variety of ways for the presence of lib-name +dnl +dnl On success, returns any novel path found in ac_find_libraries; else "std" +dnl and any cflags in ac_find_cflags +dnl On failure, ac_find_libraries will be empty +dnl --------------------------------------------------------------------------- +AC_DEFUN([WX_FIND_LIB], +[ + ac_find_libraries= + + dnl Try with pkg-config first. It requires its lib-name parameter lowercase + fl_pkgname=`echo "$1" | tr [[:upper:]] [[:lower:]]` + dnl suppress PKG_PROG_PKG_CONFIG output; we don't want to keep seeing it + PKG_PROG_PKG_CONFIG() AS_MESSAGE_FD> /dev/null + PKG_CHECK_MODULES([$1], [$fl_pkgname], + [ + dnl Start by assuming there are no novel lib paths + ac_find_libraries="std" + + dnl A simple copy of the internal vars $1_CFLAGS $1_LIBS doesn't work + dnl inside the macro + dnl + dnl TODO: When we stop being autoconf 2.61 compatible, the next 2 lines + dnl should become: + dnl AS_VAR_COPY([ac_find_cflags], [$1_CFLAGS]) + dnl AS_VAR_COPY([fl_libs], [$1_LIBS]) + eval ac_find_cflags=\$$1_CFLAGS + eval fl_libs=\$$1_LIBS + + dnl fl_libs may now contain -Lfoopath -lfoo (only non-standard paths are + dnl added) We only want the path bit, not the lib names + for fl_path in $fl_libs + do + if test `echo "$fl_path" | cut -c 1-2` = "-L"; then + dnl there shouldn't be >1 novel path + dnl return it without the -L, ready for WX_LINK_PATH_EXIST + ac_find_libraries=`echo "$fl_path" | cut -c 3-` + fi + done + ], + [ + if test "x$ac_find_libraries" = "x"; then + dnl Next with AC_CHECK_LIB, if a test function was provided + if test "x$2" != "x"; then + AC_CHECK_LIB([$1], [$2], [ac_find_libraries="std"]) + fi + fi + + if test "x$ac_find_libraries" = "x"; then + dnl Finally try the search path + dnl Output a message again, as AC_CHECK_LIB will just have said "no" + AC_MSG_CHECKING([elsewhere]) + dnl $3 will occasionally hold extra path(s) to search + WX_PATH_FIND_LIBRARIES([$1], [$3]) + if test "x$ac_find_libraries" != "x"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + fi + ]) +]) + dnl =========================================================================== dnl C++ features test dnl =========================================================================== @@ -128,7 +191,7 @@ dnl WX_CPP_NEW_HEADERS checks whether the compiler has "new" header dnl or only the old one - it may be generally assumed that if dnl exists, the other "new" headers (without .h) exist too. dnl -dnl call WX_CPP_NEW_HEADERS(actiof-if-true, action-if-false) +dnl call WX_CPP_NEW_HEADERS(action-if-true, action-if-false) dnl --------------------------------------------------------------------------- AC_DEFUN([WX_CPP_NEW_HEADERS], @@ -136,7 +199,7 @@ AC_DEFUN([WX_CPP_NEW_HEADERS], AC_LANG_SAVE AC_LANG_CPLUSPLUS - AC_CHECK_HEADERS(iostream) + AC_CHECK_HEADERS([iostream],,, [ ]) if test "$ac_cv_header_iostream" = "yes" ; then ifelse([$1], , :, [$1]) @@ -147,43 +210,6 @@ AC_DEFUN([WX_CPP_NEW_HEADERS], AC_LANG_RESTORE ]) -dnl --------------------------------------------------------------------------- -dnl WX_CPP_BOOL checks whether the C++ compiler has a built in bool type -dnl -dnl call WX_CPP_BOOL - will define HAVE_BOOL if the compiler supports bool -dnl --------------------------------------------------------------------------- - -AC_DEFUN([WX_CPP_BOOL], -[ - AC_CACHE_CHECK([if C++ compiler supports bool], wx_cv_cpp_bool, - [ - AC_LANG_SAVE - AC_LANG_CPLUSPLUS - - AC_TRY_COMPILE( - [ - ], - [ - bool b = true; - - return 0; - ], - [ - wx_cv_cpp_bool=yes - ], - [ - wx_cv_cpp_bool=no - ] - ) - - AC_LANG_RESTORE - ]) - - if test "$wx_cv_cpp_bool" = "yes"; then - AC_DEFINE(HAVE_BOOL) - fi -]) - dnl --------------------------------------------------------------------------- dnl WX_CPP_EXPLICIT checks whether the C++ compiler support the explicit dnl keyword and defines HAVE_EXPLICIT if this is the case @@ -231,6 +257,72 @@ AC_DEFUN([WX_CPP_EXPLICIT], fi ]) +dnl --------------------------------------------------------------------------- +dnl WX_CHECK_FUNCS(FUNCTIONS..., +dnl [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND], +dnl [EXTRA-DEFINES-AND-INCLUDES], +dnl [EXTRA-TEST-CODE]) +dnl +dnl Checks that the functions listed in FUNCTIONS exist in the headers and the +dnl libs. For each function, if it is found then defines 'HAVE_FUNCTION' and +dnl executes ACTION-IF-FOUND, otherwise executes ACTION-IF-NOT-FOUND. +dnl +dnl The code from EXTRA-DEFINES-AND-INCLUDES is inserted into the test before +dnl the default headers are included, and EXTRA-TEST-CODE is inserted into +dnl the main() function after the default test for existence. +dnl +dnl Examples: +dnl # the simple case +dnl WX_CHECK_FUNCS(stat) +dnl # use break to finish the loop early +dnl WX_CHECK_FUNCS(mkstemp mktemp, break) +dnl # extra defines +dnl WX_CHECK_FUNCS(strtok_r, [], [], [#define _RREENTRANT]) +dnl # extra includes +dnl WX_CHECK_FUNCS(swprintf, [], [], [#include ]) +dnl # checking the signature with extra test code +dnl WX_CHECK_FUNCS(gettimeofday, [], [], [#include ] +dnl [struct timeval tv; struct timezone tz; gettimeofday(&tv, &tz)]) +dnl --------------------------------------------------------------------------- + +AC_DEFUN([WX_CHECK_FUNCS], +[ + for wx_func in $1 + do + AC_CACHE_CHECK( + [for $wx_func], + [wx_cv_func_$wx_func], + [ + AC_LINK_IFELSE( + [ + AC_LANG_PROGRAM( + [ + $4 + AC_INCLUDES_DEFAULT + ], + [ + #ifndef $wx_func + &$wx_func; + #endif + $5 + ]) + ], + [eval wx_cv_func_$wx_func=yes], + [eval wx_cv_func_$wx_func=no]) + ]) + + if eval test \$wx_cv_func_$wx_func = yes + then + AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$wx_func])) + $2 + else + : + $3 + fi + done +]) + dnl --------------------------------------------------------------------------- dnl a slightly better AC_C_BIGENDIAN macro which allows cross-compiling dnl --------------------------------------------------------------------------- @@ -262,7 +354,7 @@ AC_TRY_RUN([main () { }], [ac_cv_c_bigendian=no], [ac_cv_c_bigendian=yes], [ac_cv_c_bigendian=unknown]) fi]) if test $ac_cv_c_bigendian = unknown; then - AC_MSG_WARN([Assuming little-endian target machine - this may be overriden by adding the line "ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}" to config.cache file]) + AC_MSG_WARN([Assuming little-endian target machine - this may be overridden by adding the line "ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}" to config.cache file]) fi if test $ac_cv_c_bigendian = yes; then AC_DEFINE(WORDS_BIGENDIAN) @@ -270,60 +362,38 @@ fi ]) dnl --------------------------------------------------------------------------- -dnl override AC_ARG_ENABLE/WITH to cache the results in .cache file +dnl override AC_ARG_ENABLE/WITH to handle options defaults dnl --------------------------------------------------------------------------- -AC_DEFUN([WX_ARG_CACHE_INIT], - [ - wx_arg_cache_file="configarg.cache" - echo "loading argument cache $wx_arg_cache_file" - rm -f ${wx_arg_cache_file}.tmp - touch ${wx_arg_cache_file}.tmp - touch ${wx_arg_cache_file} - ]) - -AC_DEFUN([WX_ARG_CACHE_FLUSH], - [ - echo "saving argument cache $wx_arg_cache_file" - mv ${wx_arg_cache_file}.tmp ${wx_arg_cache_file} - ]) - dnl this macro checks for a three-valued command line --with argument: dnl possible arguments are 'yes', 'no', 'sys', or 'builtin' dnl usage: WX_ARG_SYS_WITH(option, helpmessage, variable-name) +dnl +dnl the default value (used if the option is not specified at all) is the value +dnl of wxUSE_ALL_FEATURES (which is "yes" by default but can be changed by +dnl giving configure --disable-all-features option) AC_DEFUN([WX_ARG_SYS_WITH], [ AC_MSG_CHECKING([for --with-$1]) - no_cache=0 AC_ARG_WITH($1, [$2], [ if test "$withval" = yes; then - ac_cv_use_$1='$3=yes' + AS_TR_SH(wx_cv_use_$1)='$3=yes' elif test "$withval" = no; then - ac_cv_use_$1='$3=no' + AS_TR_SH(wx_cv_use_$1)='$3=no' elif test "$withval" = sys; then - ac_cv_use_$1='$3=sys' + AS_TR_SH(wx_cv_use_$1)='$3=sys' elif test "$withval" = builtin; then - ac_cv_use_$1='$3=builtin' + AS_TR_SH(wx_cv_use_$1)='$3=builtin' else AC_MSG_ERROR([Invalid value for --with-$1: should be yes, no, sys, or builtin]) fi ], [ - LINE=`grep "$3" ${wx_arg_cache_file}` - if test "x$LINE" != x ; then - eval "DEFAULT_$LINE" - else - no_cache=1 - fi - - ac_cv_use_$1='$3='$DEFAULT_$3 + AS_TR_SH(wx_cv_use_$1)='$3=${'DEFAULT_$3":-$wxUSE_ALL_FEATURES}" ]) - eval "$ac_cv_use_$1" - if test "$no_cache" != 1; then - echo $ac_cv_use_$1 >> ${wx_arg_cache_file}.tmp - fi + eval "$AS_TR_SH(wx_cv_use_$1)" if test "$$3" = yes; then AC_MSG_RESULT(yes) @@ -338,85 +408,136 @@ AC_DEFUN([WX_ARG_SYS_WITH], fi ]) -dnl this macro checks for a command line argument and caches the result -dnl usage: WX_ARG_WITH(option, helpmessage, variable-name) +dnl this macro simply checks for a command line argument +dnl usage: WX_ARG_WITH(option, helpmessage, variable-name, [withstring]) AC_DEFUN([WX_ARG_WITH], [ - AC_MSG_CHECKING([for --with-$1]) - no_cache=0 + withstring=$4 + defaultval=$wxUSE_ALL_FEATURES + if test -z "$defaultval"; then + if test x"$withstring" = xwithout; then + defaultval=yes + else + defaultval=no + fi + fi + AC_MSG_CHECKING([for --${withstring:-with}-$1]) AC_ARG_WITH($1, [$2], [ if test "$withval" = yes; then - ac_cv_use_$1='$3=yes' + AS_TR_SH(wx_cv_use_$1)='$3=yes' else - ac_cv_use_$1='$3=no' + AS_TR_SH(wx_cv_use_$1)='$3=no' fi ], [ - LINE=`grep "$3" ${wx_arg_cache_file}` - if test "x$LINE" != x ; then - eval "DEFAULT_$LINE" - else - no_cache=1 - fi - - ac_cv_use_$1='$3='$DEFAULT_$3 + AS_TR_SH(wx_cv_use_$1)='$3=${'DEFAULT_$3":-$defaultval}" ]) - eval "$ac_cv_use_$1" - if test "$no_cache" != 1; then - echo $ac_cv_use_$1 >> ${wx_arg_cache_file}.tmp - fi + eval "$AS_TR_SH(wx_cv_use_$1)" - if test "$$3" = yes; then - AC_MSG_RESULT(yes) + if test x"$withstring" = xwithout; then + if test $$3 = yes; then + result=no + else + result=yes + fi else - AC_MSG_RESULT(no) + result=$$3 fi + + AC_MSG_RESULT($result) ]) +dnl same as WX_ARG_WITH but makes it clear that the option is enabled by default +AC_DEFUN([WX_ARG_WITHOUT], [WX_ARG_WITH($1, [$2], $3, without)]) + dnl like WX_ARG_WITH but uses AC_ARG_ENABLE instead of AC_ARG_WITH -dnl usage: WX_ARG_ENABLE(option, helpmessage, variable-name, enablestring) +dnl usage: WX_ARG_ENABLE(option, helpmessage, var, [enablestring], [default]) +dnl +dnl enablestring can be omitted or a literal string "disable" and allows to +dnl show "checking for --disable-foo" message when running configure instead of +dnl the default "checking for --enable-foo" one whih is useful for the options +dnl enabled by default dnl -dnl enablestring is a hack and allows to show "checking for --disable-foo" -dnl message when running configure instead of the default "checking for -dnl --enable-foo" one whih is useful for the options enabled by default +dnl the "default" argument can be omitted or contain the default value to use +dnl for the option if it's unspecified AC_DEFUN([WX_ARG_ENABLE], [ - enablestring=$4 + enablestring=$4 + defaultval=$5 + if test -z "$defaultval"; then + if test x"$enablestring" = xdisable; then + defaultval=yes + else + defaultval=no + fi + fi + AC_MSG_CHECKING([for --${enablestring:-enable}-$1]) - no_cache=0 AC_ARG_ENABLE($1, [$2], [ if test "$enableval" = yes; then - ac_cv_use_$1='$3=yes' + AS_TR_SH(wx_cv_use_$1)='$3=yes' else - ac_cv_use_$1='$3=no' + AS_TR_SH(wx_cv_use_$1)='$3=no' fi ], [ - LINE=`grep "$3" ${wx_arg_cache_file}` - if test "x$LINE" != x ; then - eval "DEFAULT_$LINE" - else - no_cache=1 - fi - - ac_cv_use_$1='$3='$DEFAULT_$3 + AS_TR_SH(wx_cv_use_$1)='$3=${'DEFAULT_$3":-$defaultval}" ]) - eval "$ac_cv_use_$1" - if test "$no_cache" != 1; then - echo $ac_cv_use_$1 >> ${wx_arg_cache_file}.tmp - fi + eval "$AS_TR_SH(wx_cv_use_$1)" - if test "$$3" = yes; then - AC_MSG_RESULT(yes) + if test x"$enablestring" = xdisable; then + if test $$3 = no; then + result=yes + else + result=no + fi else - AC_MSG_RESULT(no) + result=$$3 fi + + AC_MSG_RESULT($result) ]) +dnl the same as WX_ARG_ENABLE but makes it more clear that the option is +dnl enabled by default +AC_DEFUN([WX_ARG_DISABLE], [WX_ARG_ENABLE($1, [$2], $3, disable)]) + +dnl same as WX_ARG_ENABLE but defaults to wxUSE_ALL_FEATURES instead of "yes" +AC_DEFUN([WX_ARG_FEATURE], [WX_ARG_ENABLE($1, [$2], $3,, $wxUSE_ALL_FEATURES)]) + +dnl Like WX_ARG_ENABLE but accepts a parameter. +dnl +dnl Usage: +dnl WX_ARG_ENABLE_PARAM(option, helpmessage, variable-name, enablestring) +dnl +dnl Example: +dnl WX_ARG_ENABLE_PARAM(foo, [[ --enable-foo[=bar] use foo]], wxUSE_FOO) +dnl +dnl --enable-foo wxUSE_FOO=yes +dnl --disable-foo wxUSE_FOO=no +dnl --enable-foo=bar wxUSE_FOO=bar +dnl wxUSE_FOO=$DEFAULT_wxUSE_FOO +dnl +AC_DEFUN([WX_ARG_ENABLE_PARAM], + [ + enablestring=$4 + AC_MSG_CHECKING([for --${enablestring:-enable}-$1]) + AC_ARG_ENABLE($1, [$2], + [ + wx_cv_use_$1="$3='$enableval'" + ], + [ + wx_cv_use_$1='$3='$DEFAULT_$3 + ]) + + eval "$wx_cv_use_$1" + + AC_MSG_RESULT([$$3]) + ]) dnl =========================================================================== dnl Linker features test @@ -431,44 +552,80 @@ dnl call WX_VERSIONED_SYMBOLS(versionfile) dnl --------------------------------------------------------------------------- AC_DEFUN([WX_VERSIONED_SYMBOLS], [ - found_versioning=no - - dnl FIXME - doesn't work, Solaris linker doesn't accept wildcards - dnl in the script. - dnl dnl Check for known non-gcc cases: - dnl case "${host}" in - dnl *-*-solaris2* ) - dnl if test "x$GCC" != "xyes" ; then - dnl LDFLAGS_VERSIONING="-M $1" - dnl found_versioning=yes - dnl fi - dnl ;; - dnl esac - - dnl Generic check for GCC or GCC-like behaviour (Intel C++, GCC): - if test $found_versioning = no ; then - AC_CACHE_CHECK([if the linker accepts --version-script], wx_cv_version_script, - [ - echo "VER_1 { *; };" >conftest.sym - echo "int main() { return 0; }" >conftest.cpp - - if AC_TRY_COMMAND([ - $CXX -o conftest.output $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.cpp - -Wl,--version-script,conftest.sym >/dev/null 2>conftest.stderr]) ; then - if test -s conftest.stderr ; then - wx_cv_version_script=no - else - wx_cv_version_script=yes - fi - else - wx_cv_version_script=no - fi - rm -f conftest.output conftest.stderr conftest.sym conftest.cpp - ]) - if test $wx_cv_version_script = yes ; then - LDFLAGS_VERSIONING="-Wl,--version-script,$1" - fi - fi + case "${host}" in + *-*-cygwin* | *-*-mingw* ) + dnl although ld does support version script option on these + dnl platforms, it doesn't make much sense to use it under Win32 + dnl and, moreover, this breaks linking because of a bug in handling + dnl paths in -Wl,--version-script,path option (if we ever do need + dnl to use it for cygwin/mingw32, keep in mind that replacing last + dnl comma with the equal sign works) so + dnl simply disable it + wx_cv_version_script=no + ;; + + *) + AC_CACHE_CHECK([if the linker accepts --version-script], wx_cv_version_script, + [ + echo "VER_1 { *; };" >conftest.sym + echo "int main() { return 0; }" >conftest.cpp + + if AC_TRY_COMMAND([ + $CXX -o conftest.output $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.cpp + -Wl,--version-script,conftest.sym >/dev/null 2>conftest.stderr]) ; then + if test -s conftest.stderr ; then + wx_cv_version_script=no + else + wx_cv_version_script=yes + fi + else + wx_cv_version_script=no + fi + + dnl There's a problem in some old linkers with --version-script that + dnl can cause linking to fail when you have objects with vtables in + dnl libs 3 deep. This is known to happen in netbsd and openbsd with + dnl ld 2.11.2. + dnl + dnl To test for this we need to make some shared libs and + dnl unfortunately we can't be sure of the right way to do that. If the + dnl first two compiles don't succeed then it looks like the test isn't + dnl working and the result is ignored, but if OTOH the first two + dnl succeed but the third does not then the bug has been detected and + dnl the --version-script flag is dropped. + if test $wx_cv_version_script = yes + then + echo "struct B { virtual ~B() { } }; \ + struct D : public B { }; \ + void F() { D d; }" > conftest.cpp + + if AC_TRY_COMMAND([ + $CXX -shared -fPIC -o conftest1.output $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.cpp + -Wl,--version-script,conftest.sym >/dev/null 2>/dev/null]) && + AC_TRY_COMMAND([ + $CXX -shared -fPIC -o conftest2.output $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.cpp + -Wl,--version-script,conftest.sym conftest1.output >/dev/null 2>/dev/null]) + then + if AC_TRY_COMMAND([ + $CXX -shared -fPIC -o conftest3.output $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.cpp + -Wl,--version-script,conftest.sym conftest2.output conftest1.output >/dev/null 2>/dev/null]) + then + wx_cv_version_script=yes + else + wx_cv_version_script=no + fi + fi + fi + + rm -f conftest.output conftest.stderr conftest.sym conftest.cpp + rm -f conftest1.output conftest2.output conftest3.output + ]) + + if test $wx_cv_version_script = yes ; then + LDFLAGS_VERSIONING="-Wl,--version-script,$1" + fi + ;; + esac ]) @@ -617,60 +774,3 @@ if test "$enable_largefile" != no; then fi ]) - -dnl Available from the GNU Autoconf Macro Archive at: -dnl http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_const_cast.html -dnl -AC_DEFUN([AC_CXX_CONST_CAST], -[AC_CACHE_CHECK(whether the compiler supports const_cast<>, -ac_cv_cxx_const_cast, -[AC_LANG_SAVE - AC_LANG_CPLUSPLUS - AC_TRY_COMPILE(,[int x = 0;const int& y = x;int& z = const_cast(y);return z;], - ac_cv_cxx_const_cast=yes, ac_cv_cxx_const_cast=no) - AC_LANG_RESTORE -]) -if test "$ac_cv_cxx_const_cast" = yes; then - AC_DEFINE(HAVE_CONST_CAST,,[define if the compiler supports const_cast<>]) -fi -]) - -dnl http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_reinterpret_cast.html -AC_DEFUN([AC_CXX_REINTERPRET_CAST], -[AC_CACHE_CHECK(whether the compiler supports reinterpret_cast<>, -ac_cv_cxx_reinterpret_cast, -[AC_LANG_SAVE - AC_LANG_CPLUSPLUS - AC_TRY_COMPILE([#include -class Base { public : Base () {} virtual void f () = 0;}; -class Derived : public Base { public : Derived () {} virtual void f () {} }; -class Unrelated { public : Unrelated () {} }; -int g (Unrelated&) { return 0; }],[ -Derived d;Base& b=d;Unrelated& e=reinterpret_cast(b);return g(e);], - ac_cv_cxx_reinterpret_cast=yes, ac_cv_cxx_reinterpret_cast=no) - AC_LANG_RESTORE -]) -if test "$ac_cv_cxx_reinterpret_cast" = yes; then - AC_DEFINE(HAVE_REINTERPRET_CAST,, - [define if the compiler supports reinterpret_cast<>]) -fi -]) - -dnl and http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_static_cast.html -AC_DEFUN([AC_CXX_STATIC_CAST], -[AC_CACHE_CHECK(whether the compiler supports static_cast<>, -ac_cv_cxx_static_cast, -[AC_LANG_SAVE - AC_LANG_CPLUSPLUS - AC_TRY_COMPILE([#include -class Base { public : Base () {} virtual void f () = 0; }; -class Derived : public Base { public : Derived () {} virtual void f () {} }; -int g (Derived&) { return 0; }],[ -Derived d; Base& b = d; Derived& s = static_cast (b); return g (s);], - ac_cv_cxx_static_cast=yes, ac_cv_cxx_static_cast=no) - AC_LANG_RESTORE -]) -if test "$ac_cv_cxx_static_cast" = yes; then - AC_DEFINE(HAVE_STATIC_CAST,, [define if the compiler supports static_cast<>]) -fi -])