]> git.saurik.com Git - wxWidgets.git/blobdiff - acinclude.m4
Fix configure check for gcc atomics on 32-bit x86.
[wxWidgets.git] / acinclude.m4
index 0f77f7d51eeda7c62168db9a4c41b92910fc4c95..bd17ead502a60b9b4f42ab647344a598e498c259 100644 (file)
@@ -4,12 +4,24 @@ dnl Macros for configure.in for wxWindows by Robert Roebling, Phil Blecker,
 dnl Vadim Zeitlin and Ron Lee
 dnl
 dnl This script is under the wxWindows licence.
 dnl Vadim Zeitlin and Ron Lee
 dnl
 dnl This script is under the wxWindows licence.
-dnl
-dnl Version: $Id$
 dnl ---------------------------------------------------------------------------
 
 dnl ---------------------------------------------------------------------------
 
+
 dnl ===========================================================================
 dnl ===========================================================================
-dnl macros to find the a file in the list of include/lib paths
+dnl Objective-C(++) related macros
+dnl ===========================================================================
+m4_define([AC_WX_LANG_OBJECTIVEC],
+[AC_LANG(C)
+ac_ext=m
+])
+
+m4_define([AC_WX_LANG_OBJECTIVECPLUSPLUS],
+[AC_LANG(C++)
+ac_ext=mm
+])
+
+dnl ===========================================================================
+dnl macros to find a file in the list of include/lib paths
 dnl ===========================================================================
 
 dnl ---------------------------------------------------------------------------
 dnl ===========================================================================
 
 dnl ---------------------------------------------------------------------------
@@ -19,7 +31,7 @@ dnl ---------------------------------------------------------------------------
 AC_DEFUN([WX_PATH_FIND_INCLUDES],
 [
 ac_find_includes=
 AC_DEFUN([WX_PATH_FIND_INCLUDES],
 [
 ac_find_includes=
-for ac_dir in $1;
+for ac_dir in $1 /usr/include
   do
     if test -f "$ac_dir/$2"; then
       ac_find_includes=$ac_dir
   do
     if test -f "$ac_dir/$2"; then
       ac_find_includes=$ac_dir
@@ -29,16 +41,17 @@ for ac_dir in $1;
 ])
 
 dnl ---------------------------------------------------------------------------
 ])
 
 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],
 [
 dnl ---------------------------------------------------------------------------
 AC_DEFUN([WX_PATH_FIND_LIBRARIES],
 [
-ac_find_libraries=
-for ac_dir in $1;
+  ac_find_libraries=
+  for ac_dir in $2 $SEARCH_LIB
   do
   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
         ac_find_libraries=$ac_dir
         break 2
       fi
@@ -46,35 +59,127 @@ for ac_dir in $1;
   done
 ])
 
   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 ---------------------------------------------------------------------------
 AC_DEFUN([WX_INCLUDE_PATH_EXIST],
 [
 dnl ---------------------------------------------------------------------------
 dnl Path to include, already defined
 dnl ---------------------------------------------------------------------------
 AC_DEFUN([WX_INCLUDE_PATH_EXIST],
 [
-  ac_path_to_include=$1
-  echo "$2" | grep "\-I$1" > /dev/null
-  result=$?
-  if test $result = 0; then
+  dnl never add -I/usr/include to the CPPFLAGS
+  if test "x$1" = "x/usr/include"; then
     ac_path_to_include=""
   else
     ac_path_to_include=""
   else
-    ac_path_to_include=" -I$1"
+    echo "$2" | grep "\-I$1" > /dev/null
+    result=$?
+    if test $result = 0; then
+      ac_path_to_include=""
+    else
+      ac_path_to_include=" -I$1"
+    fi
   fi
 ])
 
 dnl ---------------------------------------------------------------------------
   fi
 ])
 
 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],
 [
 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=""
   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
 ])
 
   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 ===========================================================================
 dnl ===========================================================================
 dnl C++ features test
 dnl ===========================================================================
@@ -84,18 +189,15 @@ dnl WX_CPP_NEW_HEADERS checks whether the compiler has "new" <iostream> header
 dnl or only the old <iostream.h> one - it may be generally assumed that if
 dnl <iostream> exists, the other "new" headers (without .h) exist too.
 dnl
 dnl or only the old <iostream.h> one - it may be generally assumed that if
 dnl <iostream> exists, the other "new" headers (without .h) exist too.
 dnl
-dnl call WX_CPP_NEW_HEADERS(actiof-if-true, action-if-false-or-cross-compiling)
+dnl call WX_CPP_NEW_HEADERS(action-if-true, action-if-false)
 dnl ---------------------------------------------------------------------------
 
 AC_DEFUN([WX_CPP_NEW_HEADERS],
 [
 dnl ---------------------------------------------------------------------------
 
 AC_DEFUN([WX_CPP_NEW_HEADERS],
 [
-  if test "$cross_compiling" = "yes"; then
-    ifelse([$2], , :, [$2])
-  else
     AC_LANG_SAVE
     AC_LANG_CPLUSPLUS
 
     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])
 
     if test "$ac_cv_header_iostream" = "yes" ; then
       ifelse([$1], , :, [$1])
@@ -104,46 +206,121 @@ AC_DEFUN([WX_CPP_NEW_HEADERS],
     fi
 
     AC_LANG_RESTORE
     fi
 
     AC_LANG_RESTORE
-  fi
 ])
 
 dnl ---------------------------------------------------------------------------
 ])
 
 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 WX_CPP_EXPLICIT checks whether the C++ compiler support the explicit
+dnl keyword and defines HAVE_EXPLICIT if this is the case
 dnl ---------------------------------------------------------------------------
 
 dnl ---------------------------------------------------------------------------
 
-AC_DEFUN([WX_CPP_BOOL],
+AC_DEFUN([WX_CPP_EXPLICIT],
 [
 [
-  AC_CACHE_CHECK([if C++ compiler supports bool], wx_cv_cpp_bool,
+  AC_CACHE_CHECK([if C++ compiler supports the explicit keyword],
+                 wx_cv_explicit,
   [
     AC_LANG_SAVE
     AC_LANG_CPLUSPLUS
 
   [
     AC_LANG_SAVE
     AC_LANG_CPLUSPLUS
 
+    dnl do the test in 2 steps: first check that the compiler knows about the
+    dnl explicit keyword at all and then verify that it really honours it
     AC_TRY_COMPILE(
       [
     AC_TRY_COMPILE(
       [
+        class Foo { public: explicit Foo(int) {} };
       ],
       [
       ],
       [
-        bool b = true;
-
         return 0;
       ],
       [
         return 0;
       ],
       [
-        wx_cv_cpp_bool=yes
+        AC_TRY_COMPILE(
+            [
+                class Foo { public: explicit Foo(int) {} };
+                static void TakeFoo(const Foo& foo) { }
+            ],
+            [
+                TakeFoo(17);
+                return 0;
+            ],
+            wx_cv_explicit=no,
+            wx_cv_explicit=yes
+        )
       ],
       ],
-      [
-        wx_cv_cpp_bool=no
-      ]
+      wx_cv_explicit=no
     )
 
     AC_LANG_RESTORE
   ])
 
     )
 
     AC_LANG_RESTORE
   ])
 
-  if test "$wx_cv_cpp_bool" = "yes"; then
-    AC_DEFINE(HAVE_BOOL)
+  if test "$wx_cv_explicit" = "yes"; then
+    AC_DEFINE(HAVE_EXPLICIT)
   fi
 ])
 
   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 <wchar.h>])
+dnl   # checking the signature with extra test code
+dnl   WX_CHECK_FUNCS(gettimeofday, [], [], [#include <sys/time.h>]
+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 ---------------------------------------------------------------------------
 dnl ---------------------------------------------------------------------------
 dnl a slightly better AC_C_BIGENDIAN macro which allows cross-compiling
 dnl ---------------------------------------------------------------------------
@@ -175,7 +352,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_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)
 fi
 if test $ac_cv_c_bigendian = yes; then
   AC_DEFINE(WORDS_BIGENDIAN)
@@ -183,60 +360,38 @@ fi
 ])
 
 dnl ---------------------------------------------------------------------------
 ])
 
 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 ---------------------------------------------------------------------------
 
 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 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])
 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_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
                         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
                         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
                         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
                       ],
                       [
                         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)
 
           if test "$$3" = yes; then
             AC_MSG_RESULT(yes)
@@ -251,86 +406,230 @@ AC_DEFUN([WX_ARG_SYS_WITH],
           fi
         ])
 
           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_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_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
                         else
-                          ac_cv_use_$1='$3=no'
+                          AS_TR_SH(wx_cv_use_$1)='$3=no'
                         fi
                       ],
                       [
                         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
           else
-            AC_MSG_RESULT(no)
+            result=$$3
           fi
           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 like WX_ARG_WITH but uses AC_ARG_ENABLE instead of AC_ARG_WITH
-dnl usage: WX_ARG_ENABLE(option, helpmessage, variable-name)
+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 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],
         [
 AC_DEFUN([WX_ARG_ENABLE],
         [
-          AC_MSG_CHECKING([for --enable-$1])
-          no_cache=0
+          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])
           AC_ARG_ENABLE($1, [$2],
                         [
                           if test "$enableval" = yes; then
           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
                           else
-                            ac_cv_use_$1='$3=no'
+                            AS_TR_SH(wx_cv_use_$1)='$3=no'
                           fi
                         ],
                         [
                           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
           else
-            AC_MSG_RESULT(no)
+            result=$$3
           fi
           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  <not given>        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 ===========================================================================
-dnl "3rd party" macros included here because they are not widely available
+dnl Linker features test
 dnl ===========================================================================
 
 dnl ===========================================================================
 
+dnl ---------------------------------------------------------------------------
+dnl WX_VERSIONED_SYMBOLS checks whether the linker can create versioned
+dnl symbols. If it can, sets LDFLAGS_VERSIONING to $CXX flags needed to use
+dnl version script file named versionfile
+dnl
+dnl call WX_VERSIONED_SYMBOLS(versionfile)
+dnl ---------------------------------------------------------------------------
+AC_DEFUN([WX_VERSIONED_SYMBOLS],
+[
+    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
+])
+
+
+dnl ===========================================================================
+dnl "3rd party" macros included here because they are not widely available
+dnl ===========================================================================
 
 dnl ---------------------------------------------------------------------------
 dnl test for availability of iconv()
 
 dnl ---------------------------------------------------------------------------
 dnl test for availability of iconv()
@@ -396,7 +695,7 @@ size_t iconv();
     )
 
     iconv_const=
     )
 
     iconv_const=
-    if test "x$wx_cv_func_iconv_const" != "xyes"; then
+    if test "x$wx_cv_func_iconv_const" = "xyes"; then
         iconv_const="const"
     fi
 
         iconv_const="const"
     fi
 
@@ -410,199 +709,66 @@ size_t iconv();
   AC_SUBST(LIBICONV)
 ])
 
   AC_SUBST(LIBICONV)
 ])
 
-
 dnl ---------------------------------------------------------------------------
 dnl ---------------------------------------------------------------------------
-dnl test for GTK+ 2.0
+dnl AC_SYS_LARGEFILE (partly based on the code from autoconf 2.5x)
 dnl ---------------------------------------------------------------------------
 
 dnl ---------------------------------------------------------------------------
 
-dnl AM_PATH_GTK_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
-dnl Test for GTK, and define GTK_CFLAGS and GTK_LIBS
-dnl
-AC_DEFUN(AM_PATH_GTK_2_0,
-[dnl
-dnl Get the cflags and libraries from the gtk-config-2.0 script
+dnl WX_SYS_LARGEFILE_TEST
 dnl
 dnl
-AC_ARG_WITH(gtk-prefix,[  --with-gtk-prefix=PFX   Prefix where GTK is installed (optional)],
-            gtk_config_prefix="$withval", gtk_config_prefix="")
-AC_ARG_WITH(gtk-exec-prefix,[  --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional)],
-            gtk_config_exec_prefix="$withval", gtk_config_exec_prefix="")
-AC_ARG_ENABLE(gtktest, [  --disable-gtktest       Do not try to compile and run a test GTK program],
-                    , enable_gtktest=yes)
-
-  for module in . $4
-  do
-      case "$module" in
-         gthread)
-             gtk_config_args="$gtk_config_args gthread"
-         ;;
-      esac
-  done
+dnl NB: original autoconf test was checking if compiler supported 6 bit off_t
+dnl     arithmetic properly but this failed miserably with gcc under Linux
+dnl     whereas the system still supports 64 bit files, so now simply check
+dnl     that off_t is big enough
+define(WX_SYS_LARGEFILE_TEST,
+[typedef struct {
+    unsigned int field: sizeof(off_t) == 8;
+} wxlf;
+])
 
 
-  if test x$gtk_config_exec_prefix != x ; then
-     gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix"
-     if test x${GTK_CONFIG_2_0+set} != xset ; then
-        GTK_CONFIG_2_0=$gtk_config_exec_prefix/bin/gtk-config-2.0
-     fi
-  fi
-  if test x$gtk_config_prefix != x ; then
-     gtk_config_args="$gtk_config_args --prefix=$gtk_config_prefix"
-     if test x${GTK_CONFIG_2_0+set} != xset ; then
-        GTK_CONFIG_2_0=$gtk_config_prefix/bin/gtk-config-2.0
-     fi
-  fi
 
 
-  AC_PATH_PROG(GTK_CONFIG_2_0, gtk-config-2.0, no)
-  min_gtk_version=ifelse([$1], ,1.3.1,$1)
-  AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
-  no_gtk=""
-  if test "$GTK_CONFIG_2_0" = "no" ; then
-    no_gtk=yes
-  else
-    GTK_CFLAGS=`$GTK_CONFIG_2_0 $gtk_config_args --cflags`
-    GTK_LIBS=`$GTK_CONFIG_2_0 $gtk_config_args --libs`
-    gtk_config_major_version=`$GTK_CONFIG_2_0 $gtk_config_args --version | \
-           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
-    gtk_config_minor_version=`$GTK_CONFIG_2_0 $gtk_config_args --version | \
-           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
-    gtk_config_micro_version=`$GTK_CONFIG_2_0 $gtk_config_args --version | \
-           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
-    if test "x$enable_gtktest" = "xyes" ; then
-      ac_save_CFLAGS="$CFLAGS"
-      ac_save_LIBS="$LIBS"
-      CFLAGS="$CFLAGS $GTK_CFLAGS"
-      LIBS="$GTK_LIBS $LIBS"
-dnl
-dnl Now check if the installed GTK is sufficiently new. (Also sanity
-dnl checks the results of gtk-config-2.0 to some extent
-dnl
-      rm -f conf.gtktest
-      AC_TRY_RUN([
-#include <gtk/gtk.h>
-#include <stdio.h>
-#include <stdlib.h>
+dnl WX_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE, CACHE-VAR)
+define(WX_SYS_LARGEFILE_MACRO_VALUE,
+[
+    AC_CACHE_CHECK([for $1 value needed for large files], [$3],
+        [
+          AC_TRY_COMPILE([#define $1 $2
+                          #include <sys/types.h>],
+                         WX_SYS_LARGEFILE_TEST,
+                         [$3=$2],
+                         [$3=no])
+        ]
+    )
 
 
-int
-main ()
-{
-  int major, minor, micro;
-  char *tmp_version;
-
-  system ("touch conf.gtktest");
-
-  /* HP/UX 9 (%@#!) writes to sscanf strings */
-  tmp_version = g_strdup("$min_gtk_version");
-  if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
-     printf("%s, bad version string\n", "$min_gtk_version");
-     exit(1);
-   }
-
-  if ((gtk_major_version != $gtk_config_major_version) ||
-      (gtk_minor_version != $gtk_config_minor_version) ||
-      (gtk_micro_version != $gtk_config_micro_version))
-    {
-      printf("\n*** 'gtk-config-2.0 --version' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n",
-             $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version,
-             gtk_major_version, gtk_minor_version, gtk_micro_version);
-      printf ("*** was found! If gtk-config-2.0 was correct, then it is best\n");
-      printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n");
-      printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
-      printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
-      printf("*** required on your system.\n");
-      printf("*** If gtk-config-2.0 was wrong, set the environment variable GTK_CONFIG_2_0\n");
-      printf("*** to point to the correct copy of gtk-config-2.0, and remove the file config.cache\n");
-      printf("*** before re-running configure\n");
-    }
-#if defined (GTK_MAJOR_VERSION) && defined (GTK_MINOR_VERSION) && defined (GTK_MICRO_VERSION)
-  else if ((gtk_major_version != GTK_MAJOR_VERSION) ||
-           (gtk_minor_version != GTK_MINOR_VERSION) ||
-           (gtk_micro_version != GTK_MICRO_VERSION))
-    {
-      printf("*** GTK+ header files (version %d.%d.%d) do not match\n",
-             GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION);
-      printf("*** library (version %d.%d.%d)\n",
-             gtk_major_version, gtk_minor_version, gtk_micro_version);
-    }
-#endif /* defined (GTK_MAJOR_VERSION) ... */
-  else
-    {
-      if ((gtk_major_version > major) ||
-        ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
-        ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro)))
-      {
-        return 0;
-       }
-     else
-      {
-        printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n",
-               gtk_major_version, gtk_minor_version, gtk_micro_version);
-        printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n",
-               major, minor, micro);
-        printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n");
-        printf("***\n");
-        printf("*** If you have already installed a sufficiently new version, this error\n");
-        printf("*** probably means that the wrong copy of the gtk-config-2.0 shell script is\n");
-        printf("*** being found. The easiest way to fix this is to remove the old version\n");
-        printf("*** of GTK+, but you can also set the GTK_CONFIG_2_0 environment to point to the\n");
-        printf("*** correct copy of gtk-config-2.0. (In this case, you will have to\n");
-        printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
-        printf("*** so that the correct libraries are found at run-time))\n");
-      }
-    }
-  return 1;
-}
-],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
-       CFLAGS="$ac_save_CFLAGS"
-       LIBS="$ac_save_LIBS"
-     fi
-  fi
-  if test "x$no_gtk" = x ; then
-     AC_MSG_RESULT(yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version))
-     ifelse([$2], , :, [$2])
-  else
-     AC_MSG_RESULT(no)
-     if test "$GTK_CONFIG_2_0" = "no" ; then
-       echo "*** The gtk-config-2.0 script installed by GTK could not be found"
-       echo "*** If GTK was installed in PREFIX, make sure PREFIX/bin is in"
-       echo "*** your path, or set the GTK_CONFIG_2_0 environment variable to the"
-       echo "*** full path to gtk-config-2.0."
-     else
-       if test -f conf.gtktest ; then
-        :
-       else
-          echo "*** Could not run GTK test program, checking why..."
-          CFLAGS="$CFLAGS $GTK_CFLAGS"
-          LIBS="$LIBS $GTK_LIBS"
-          AC_TRY_LINK([
-#include <gtk/gtk.h>
-#include <stdio.h>
-],      [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ],
-        [ echo "*** The test program compiled, but did not run. This usually means"
-          echo "*** that the run-time linker is not finding GTK or finding the wrong"
-          echo "*** version of GTK. If it is not finding GTK, you'll need to set your"
-          echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
-          echo "*** to the installed location  Also, make sure you have run ldconfig if that"
-          echo "*** is required on your system"
-          echo "***"
-          echo "*** If you have an old version installed, it is best to remove it, although"
-          echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
-          echo "***"
-          echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that"
-          echo "*** came with the system with the command"
-          echo "***"
-          echo "***    rpm --erase --nodeps gtk gtk-devel" ],
-        [ echo "*** The test program failed to compile or link. See the file config.log for the"
-          echo "*** exact error that occured. This usually means GTK was incorrectly installed"
-          echo "*** or that you have moved GTK since it was installed. In the latter case, you"
-          echo "*** may want to edit the gtk-config-2.0 script: $GTK_CONFIG_2_0" ])
-          CFLAGS="$ac_save_CFLAGS"
-          LIBS="$ac_save_LIBS"
-       fi
-     fi
-     GTK_CFLAGS=""
-     GTK_LIBS=""
-     ifelse([$3], , :, [$3])
-  fi
-  AC_SUBST(GTK_CFLAGS)
-  AC_SUBST(GTK_LIBS)
-  rm -f conf.gtktest
+    if test "$$3" != no; then
+        wx_largefile=yes
+        AC_DEFINE_UNQUOTED([$1], [$$3])
+    fi
 ])
 ])
+
+
+dnl AC_SYS_LARGEFILE
+dnl ----------------
+dnl By default, many hosts won't let programs access large files;
+dnl one must use special compiler options to get large-file access to work.
+dnl For more details about this brain damage please see:
+dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
+AC_DEFUN([AC_SYS_LARGEFILE],
+[AC_ARG_ENABLE(largefile,
+               [  --disable-largefile     omit support for large files])
+if test "$enable_largefile" != no; then
+    dnl _FILE_OFFSET_BITS==64 is needed for Linux, Solaris, ...
+    dnl _LARGE_FILES -- for AIX
+    wx_largefile=no
+    WX_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, 64, ac_cv_sys_file_offset_bits)
+    if test "x$wx_largefile" != "xyes"; then
+        WX_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1, ac_cv_sys_large_files)
+    fi
+
+    AC_MSG_CHECKING(if large file support is available)
+    if test "x$wx_largefile" = "xyes"; then
+        AC_DEFINE(HAVE_LARGEFILE_SUPPORT)
+    fi
+    AC_MSG_RESULT($wx_largefile)
+fi
+])
+