+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> value from configarg.cache or wxUSE_FOO=no
+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'"
+ ],
+ [
+ LINE=`grep "$3" ${wx_arg_cache_file}`
+ if test "x$LINE" != x ; then
+ eval "DEFAULT_$LINE"
+ wx_cv_use_$1='$3='$DEFAULT_$3
+ else
+ no_cache=1
+ wx_cv_use_$1="$3=no"
+ fi
+ ])
+
+ eval "$wx_cv_use_$1"
+ if test "$no_cache" != 1; then
+ echo $wx_cv_use_$1 >> ${wx_arg_cache_file}.tmp
+ fi
+
+ AC_MSG_RESULT([$$3])
+ ])
+
+dnl ===========================================================================
+dnl Linker features test
+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
+])
+