From 5acfd58da0032c752ca9c21d355058e774d5d8d9 Mon Sep 17 00:00:00 2001 From: Michael Wetherell Date: Tue, 22 Aug 2006 21:15:21 +0000 Subject: [PATCH] Add WX_CHECK_DECLS macro and try it out on strtok_r. Otherwise the test for strtok_r succeeds on Minix though the function is not available. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40754 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- acinclude.m4 | 38 +++++++++++++++++++ configure | 118 +++++++++++++++++++++++++---------------------------------- configure.in | 7 +++- 3 files changed, 92 insertions(+), 71 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index dcd3a5e..d6c0566 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -228,6 +228,44 @@ AC_DEFUN([WX_CPP_EXPLICIT], ]) dnl --------------------------------------------------------------------------- +dnl WX_CHECK_DECLS(TARGET..., +dnl HEADER, +dnl [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl +dnl Checks that the functions, macros or variables listed in TARGET are +dnl declared when HEADER is included. +dnl --------------------------------------------------------------------------- + +AC_DEFUN([WX_CHECK_DECLS], +[ + for target 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 + then + AC_DEFINE_UNQUOTED([HAVE_`echo $target | tr 'a-z' 'A-Z'`]) + $3 + else + : + $4 + fi + done +]) + +dnl --------------------------------------------------------------------------- dnl a slightly better AC_C_BIGENDIAN macro which allows cross-compiling dnl --------------------------------------------------------------------------- diff --git a/configure b/configure index 3e3da0f..60e9df6 100755 --- a/configure +++ b/configure @@ -2124,6 +2124,9 @@ _ACEOF echo "$as_me: WARNING: *** System type ${host} is unknown, assuming generic Unix and continuing nevertheless." >&2;} { echo "$as_me:$LINENO: WARNING: *** Please report the build results to wx-dev@lists.wxwidgets.org." >&5 echo "$as_me: WARNING: *** Please report the build results to wx-dev@lists.wxwidgets.org." >&2;} + + DEFAULT_DEFAULT_wxUSE_X11=1 + DEFAULT_wxUSE_SHARED=no esac @@ -2145,7 +2148,7 @@ if test $DEBUG_CONFIGURE = 1; then DEFAULT_wxUSE_THREADS=yes - DEFAULT_wxUSE_SHARED=yes + DEFAULT_wxUSE_SHARED=${DEFAULT_wxUSE_SHARED:-yes} DEFAULT_wxUSE_OPTIMISE=no DEFAULT_wxUSE_PROFILE=no DEFAULT_wxUSE_NO_DEPS=no @@ -2359,7 +2362,7 @@ else DEFAULT_wxUSE_THREADS=yes - DEFAULT_wxUSE_SHARED=yes + DEFAULT_wxUSE_SHARED=${DEFAULT_wxUSE_SHARED:-yes} DEFAULT_wxUSE_OPTIMISE=yes DEFAULT_wxUSE_PROFILE=no DEFAULT_wxUSE_NO_DEPS=no @@ -28758,7 +28761,7 @@ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include +#include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 @@ -28785,7 +28788,7 @@ else sed 's/^/| /' conftest.$ac_ext >&5 for ac_dir in $ac_x_header_dirs; do - if test -r "$ac_dir/X11/Xlib.h"; then + if test -r "$ac_dir/X11/Intrinsic.h"; then ac_x_includes=$ac_dir break fi @@ -28799,18 +28802,18 @@ if test "$ac_x_libraries" = no; then # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS - LIBS="-lX11 $LIBS" + LIBS="-lXt $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include +#include int main () { -XrmInitialize () +XtMalloc (0) ; return 0; } @@ -28848,7 +28851,7 @@ for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl; do - if test -r $ac_dir/libX11.$ac_extension; then + if test -r $ac_dir/libXt.$ac_extension; then ac_x_libraries=$ac_dir break 2 fi @@ -36955,69 +36958,39 @@ fi done +SAVE_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS -D_REENTRANT" -for ac_func in strtok_r -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then + for target in strtok_r + do + echo "$as_me:$LINENO: checking for $target in string.h" >&5 +echo $ECHO_N "checking for $target in string.h... $ECHO_C" >&6 +if eval "test \"\${wx_cv_decl_$target+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF + + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - +#include int main () { -return f != $ac_func; + + #ifndef $target + &$target; + #endif + ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 @@ -37030,32 +37003,39 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' + { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - eval "$as_ac_var=yes" + eval wx_cv_decl_$target=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -eval "$as_ac_var=no" +eval wx_cv_decl_$target=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +echo "$as_me:$LINENO: result: `eval echo '${'wx_cv_decl_$target'}'`" >&5 +echo "${ECHO_T}`eval echo '${'wx_cv_decl_$target'}'`" >&6 + + if eval test \$wx_cv_decl_$target = yes + then + cat >>confdefs.h <<_ACEOF +#define HAVE_`echo $target | tr 'a-z' 'A-Z'` 1 _ACEOF -fi -done + else + : + + fi + done + +CPPFLAGS="$SAVE_CPPFLAGS" INET_LINK= @@ -40539,7 +40519,7 @@ _ACEOF SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS thread" else - if test "$ac_cv_func_strtok_r" = "yes"; then + if test "$wx_cv_decl_strtok_r" = "yes"; then echo "$as_me:$LINENO: checking if -D_REENTRANT is needed" >&5 echo $ECHO_N "checking if -D_REENTRANT is needed... $ECHO_C" >&6 if test "$NEEDS_D_REENTRANT_FOR_R_FUNCS" = 1; then diff --git a/configure.in b/configure.in index f4f186e..d35dcb0 100644 --- a/configure.in +++ b/configure.in @@ -4664,7 +4664,10 @@ fi dnl check for uname (POSIX) and gethostname (BSD) AC_CHECK_FUNCS(uname gethostname, break) -AC_CHECK_FUNCS(strtok_r) +SAVE_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS -D_REENTRANT" +WX_CHECK_DECLS(strtok_r, string.h) +CPPFLAGS="$SAVE_CPPFLAGS" dnl check for inet_addr and inet_aton (these may live either in libc, or in dnl libnsl or libresolv or libsocket) @@ -5139,7 +5142,7 @@ if test "$wxUSE_THREADS" = "yes"; then else dnl on some systems, _REENTRANT should be defined if we want to use any _r() dnl functions - add tests for other functions here as well - if test "$ac_cv_func_strtok_r" = "yes"; then + if test "$wx_cv_decl_strtok_r" = "yes"; then AC_MSG_CHECKING(if -D_REENTRANT is needed) if test "$NEEDS_D_REENTRANT_FOR_R_FUNCS" = 1; then WXCONFIG_CPPFLAGS="$WXCONFIG_CPPFLAGS -D_REENTRANT" -- 2.7.4