X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5acfd58da0032c752ca9c21d355058e774d5d8d9..48d16e09ad7dc9ef461faba277f5075ee71a5826:/acinclude.m4 diff --git a/acinclude.m4 b/acinclude.m4 index d6c0566e8f..f1b9dff20d 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -132,7 +132,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]) @@ -228,39 +228,67 @@ AC_DEFUN([WX_CPP_EXPLICIT], ]) dnl --------------------------------------------------------------------------- -dnl WX_CHECK_DECLS(TARGET..., -dnl HEADER, +dnl WX_CHECK_FUNCS(FUNCTIONS..., dnl [ACTION-IF-FOUND], -dnl [ACTION-IF-NOT-FOUND]) +dnl [ACTION-IF-NOT-FOUND], +dnl [EXTRA-DEFINES-AND-INCLUDES], +dnl [EXTRA-TEST-CODE]) dnl -dnl Checks that the functions, macros or variables listed in TARGET are -dnl declared when HEADER is included. +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_DECLS], +AC_DEFUN([WX_CHECK_FUNCS], [ - for target in $1 + for wx_func in $1 do - AC_CACHE_CHECK([for $target in $2], - [wx_cv_decl_$target], - [ - AC_TRY_COMPILE([#include <$2>], - [ - #ifndef $target - &$target; - #endif - ], - [eval wx_cv_decl_$target=yes], - [eval wx_cv_decl_$target=no]) - ]) - - if eval test \$wx_cv_decl_$target = yes + 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([HAVE_`echo $target | tr 'a-z' 'A-Z'`]) - $3 + AC_DEFINE_UNQUOTED([AS_TR_CPP([HAVE_$wx_func])]) + $2 else : - $4 + $3 fi done ]) @@ -322,41 +350,50 @@ AC_DEFUN([WX_ARG_CACHE_FLUSH], mv ${wx_arg_cache_file}.tmp ${wx_arg_cache_file} ]) +dnl return the name of the variable to store the value of the given +dnl WX_ARG_WITH/ENABLE option +AC_DEFUN([WX_ARG_CACHE_NAME],) + 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 + cache=yes ], [ - LINE=`grep "$3" ${wx_arg_cache_file}` + LINE=`grep "^$3=" ${wx_arg_cache_file}` if test "x$LINE" != x ; then - eval "DEFAULT_$LINE" + eval "DEFAULT_$LINE" + cache=yes else - no_cache=1 + cache=no 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 + eval "$AS_TR_SH(wx_cv_use_$1)" + if test "x$cache" = xyes; then + echo "$3=$$3" >> ${wx_arg_cache_file}.tmp fi if test "$$3" = yes; then @@ -376,82 +413,126 @@ dnl this macro checks for a command line argument and caches the result dnl usage: WX_ARG_WITH(option, helpmessage, variable-name, [withstring]) AC_DEFUN([WX_ARG_WITH], [ - withstring=$4 + 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]) - 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' else - ac_cv_use_$1='$3=no' + AS_TR_SH(wx_cv_use_$1)='$3=no' fi + cache=yes ], [ - LINE=`grep "$3" ${wx_arg_cache_file}` + LINE=`grep "^$3=" ${wx_arg_cache_file}` if test "x$LINE" != x ; then - eval "DEFAULT_$LINE" + eval "DEFAULT_$LINE" + cache=yes else - no_cache=1 + cache=no 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 + eval "$AS_TR_SH(wx_cv_use_$1)" + if test "x$cache" = xyes; then + echo "$3=$$3" >> ${wx_arg_cache_file}.tmp fi - 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 + cache=yes ], [ - LINE=`grep "$3" ${wx_arg_cache_file}` + LINE=`grep "^$3=" ${wx_arg_cache_file}` if test "x$LINE" != x ; then - eval "DEFAULT_$LINE" + eval "DEFAULT_$LINE" + cache=yes else - no_cache=1 + cache=no 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 + eval "$AS_TR_SH(wx_cv_use_$1)" + if test "x$cache" = xyes; then + echo "$3=$$3" >> ${wx_arg_cache_file}.tmp fi - if test "$$3" = yes; then - AC_MSG_RESULT(yes) + if test x"$enablestring" = xdisable; 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 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 @@ -460,35 +541,37 @@ 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 dnl --enable-foo wxUSE_FOO=yes dnl --disable-foo wxUSE_FOO=no dnl --enable-foo=bar wxUSE_FOO=bar -dnl value from configarg.cache or wxUSE_FOO=no -dnl +dnl value from configarg.cache or +dnl wxUSE_FOO=$DEFAULT_wxUSE_FOO +dnl AC_DEFUN([WX_ARG_ENABLE_PARAM], [ enablestring=$4 AC_MSG_CHECKING([for --${enablestring:-enable}-$1]) - no_cache=0 AC_ARG_ENABLE($1, [$2], [ wx_cv_use_$1="$3='$enableval'" + cache=yes ], [ - LINE=`grep "$3" ${wx_arg_cache_file}` + LINE=`grep "^$3=" ${wx_arg_cache_file}` if test "x$LINE" != x ; then eval "DEFAULT_$LINE" - wx_cv_use_$1='$3='$DEFAULT_$3 + cache=yes else - no_cache=1 - wx_cv_use_$1="$3=no" + cache=no fi + + wx_cv_use_$1='$3='$DEFAULT_$3 ]) eval "$wx_cv_use_$1" - if test "$no_cache" != 1; then - echo $wx_cv_use_$1 >> ${wx_arg_cache_file}.tmp + if test "x$cache" = xyes; then + echo "$3=$$3" >> ${wx_arg_cache_file}.tmp fi AC_MSG_RESULT([$$3]) @@ -507,81 +590,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 - - 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 + 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 - 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 - fi + ;; + esac ])