X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6ff53182ef3447c7fcdde1928e4669424070f324..9705fbe9042fd947be91ad3242b70df8c5274187:/aclocal.m4 diff --git a/aclocal.m4 b/aclocal.m4 index c2d2be391f..dad125c8c5 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -21,6 +21,20 @@ dnl dnl Version: $Id$ dnl --------------------------------------------------------------------------- + +dnl =========================================================================== +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 the a file in the list of include/lib paths dnl =========================================================================== @@ -436,7 +450,44 @@ AC_DEFUN([WX_VERSIONED_SYMBOLS], 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" @@ -648,6 +699,167 @@ if test "$ac_cv_cxx_static_cast" = yes; then fi ]) +dnl http://autoconf-archive.cryp.to/ac_cxx_dynamic_cast.html +AC_DEFUN([AC_CXX_DYNAMIC_CAST], +[AC_CACHE_CHECK(whether the compiler supports dynamic_cast<>, +ac_cv_cxx_dynamic_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 () {} };],[ +Derived d; Base& b=d; return dynamic_cast(&b) ? 0 : 1;], + ac_cv_cxx_dynamic_cast=yes, ac_cv_cxx_dynamic_cast=no) + AC_LANG_RESTORE +]) +if test "$ac_cv_cxx_dynamic_cast" = yes; then + AC_DEFINE(HAVE_DYNAMIC_CAST,,[define if the compiler supports dynamic_cast<>]) +fi +]) + + +dnl --------------------------------------------------------------------------- +dnl Compiler detection macros by David Elliott +dnl --------------------------------------------------------------------------- + + +dnl =========================================================================== +dnl Macros to detect non-GNU compilers (MetroWerks, XLC) +dnl =========================================================================== + +dnl Based on autoconf _AC_LANG_COMPILER_GNU +AC_DEFUN([_AC_BAKEFILE_LANG_COMPILER_MWERKS], +[AC_CACHE_CHECK([whether we are using the Metrowerks _AC_LANG compiler], + [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_mwerks], + [AC_TRY_COMPILE([],[#ifndef __MWERKS__ + choke me +#endif +], + [bakefile_compiler_mwerks=yes], + [bakefile_compiler_mwerks=no]) + bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_mwerks=$bakefile_compiler_mwerks + ]) +]) + +dnl Loosely based on autoconf AC_PROG_CC +dnl TODO: Maybe this should wrap the call to AC_PROG_CC and be used instead. +AC_DEFUN([AC_BAKEFILE_PROG_MWCC], +[AC_LANG_PUSH(C) +_AC_BAKEFILE_LANG_COMPILER_MWERKS +MWCC=`test $bakefile_cv_c_compiler_mwerks = yes && echo yes` +AC_LANG_POP(C) +]) + +dnl Loosely based on autoconf AC_PROG_CXX +dnl TODO: Maybe this should wrap the call to AC_PROG_CXX and be used instead. +AC_DEFUN([AC_BAKEFILE_PROG_MWCXX], +[AC_LANG_PUSH(C++) +_AC_BAKEFILE_LANG_COMPILER_MWERKS +MWCXX=`test $bakefile_cv_cxx_compiler_mwerks = yes && echo yes` +AC_LANG_POP(C++) +]) + +dnl Based on autoconf _AC_LANG_COMPILER_GNU +AC_DEFUN([_AC_BAKEFILE_LANG_COMPILER_XLC], +[AC_CACHE_CHECK([whether we are using the IBM xlC _AC_LANG compiler], + [wx_cv_[]_AC_LANG_ABBREV[]_compiler_xlc], + [AC_TRY_COMPILE([],[#ifndef __xlC__ + choke me +#endif +], + [wx_compiler_xlc=yes], + [wx_compiler_xlc=no]) + wx_cv_[]_AC_LANG_ABBREV[]_compiler_xlc=$wx_compiler_xlc + ]) +]) + +dnl Loosely based on autoconf AC_PROG_CC +AC_DEFUN([AC_BAKEFILE_PROG_XLCC], +[AC_LANG_PUSH(C) +_AC_BAKEFILE_LANG_COMPILER_XLC +XLCC=`test $wx_cv_c_compiler_xlc = yes && echo yes` +AC_LANG_POP(C) +]) + +dnl Loosely based on autoconf AC_PROG_CXX +AC_DEFUN([AC_BAKEFILE_PROG_XLCXX], +[AC_LANG_PUSH(C++) +_AC_BAKEFILE_LANG_COMPILER_XLC +XLCXX=`test $wx_cv_cxx_compiler_xlc = yes && echo yes` +AC_LANG_POP(C++) +]) + + +dnl =========================================================================== +dnl macros to detect specialty compiler options +dnl =========================================================================== + +dnl Figure out if we need to pass -ext o to compiler (MetroWerks) +AC_DEFUN([AC_BAKEFILE_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 + + +dnl =========================================================================== +dnl Macros to do all of the compiler detections as one macro +dnl =========================================================================== +AC_DEFUN([AC_BAKEFILE_PROG_CC], +[ + AC_PROG_CC + AC_BAKEFILE_METROWERKS_EXTO + dnl By the time we find out that we need -ext o some tests have failed. + if test "x$wx_cv_c_exto" '!=' "x"; then + unset ac_cv_prog_cc_g + _AC_PROG_CC_G + fi + AC_BAKEFILE_PROG_MWCC + AC_BAKEFILE_PROG_XLCC +]) + +AC_DEFUN([AC_BAKEFILE_PROG_CXX], +[ + AC_PROG_CXX + AC_BAKEFILE_METROWERKS_EXTO + dnl By the time we find out that we need -ext o some tests have failed. + if test "x$wx_cv_cxx_exto" '!=' "x"; then + unset ac_cv_prog_cxx_g + _AC_PROG_CXX_G + fi + AC_BAKEFILE_PROG_MWCXX + AC_BAKEFILE_PROG_XLCXX +]) + + # Configure paths for GTK+ # Owen Taylor 1997-2001 @@ -1279,6 +1491,30 @@ int main(int argc, char *argv[]) rm -f conf.sdltest ]) +dnl Perform a check for a GStreamer element using gst-inspect +dnl Thomas Vander Stichele +dnl Last modification: 25/01/2005 + +dnl AM_GST_ELEMENT_CHECK(ELEMENT-NAME, ACTION-IF-FOUND, ACTION-IF-NOT-FOUND) + +AC_DEFUN([AM_GST_ELEMENT_CHECK], +[ + if test "x$GST_INSPECT" == "x"; then + AC_CHECK_PROG(GST_INSPECT, gst-inspect, gst-inspect, []) + fi + + if test "x$GST_INSPECT" != "x"; then + AC_MSG_CHECKING(GStreamer element $1) + if [ $GST_INSPECT $1 > /dev/null 2> /dev/null ]; then + AC_MSG_RESULT(found.) + $2 + else + AC_MSG_RESULT(not found.) + $3 + fi + fi +]) + dnl --------------------------------------------------------------------------- dnl Support macros for makefiles generated by BAKEFILE. dnl --------------------------------------------------------------------------- @@ -1649,8 +1885,8 @@ AC_DEFUN([AC_BAKEFILE_SHARED_LD], ;; *-pc-os2_emx | *-pc-os2-emx ) - SHARED_LD_CC="`pwd`/dllar.sh -o" - SHARED_LD_CXX="`pwd`/dllar.sh -o" + SHARED_LD_CC="`pwd`/dllar.sh -libf INITINSTANCE -libf TERMINSTANCE -o" + SHARED_LD_CXX="`pwd`/dllar.sh -libf INITINSTANCE -libf TERMINSTANCE -o" PIC_FLAG="" AC_BAKEFILE_CREATE_FILE_DLLAR_SH chmod +x dllar.sh @@ -1661,7 +1897,8 @@ AC_DEFUN([AC_BAKEFILE_SHARED_LD], *-*-sunos4* | \ *-*-osf* | \ *-*-dgux5* | \ - *-*-sysv5* ) + *-*-sysv5* | \ + *-pc-msdosdjgpp ) dnl defaults are ok ;; @@ -1704,7 +1941,7 @@ AC_DEFUN([AC_BAKEFILE_SHARED_VERSIONS], SONAME_FLAG= case "${BAKEFILE_HOST}" in - *-*-linux* ) + *-*-linux* | *-*-freebsd* ) SONAME_FLAG="-Wl,-soname," USE_SOVERSION=1 USE_SOVERLINUX=1 @@ -1759,6 +1996,11 @@ AC_DEFUN([AC_BAKEFILE_DEPS], ;; esac AC_MSG_RESULT([gcc]) + elif test "x$MWCC" = "xyes"; then + DEPSMODE=mwcc + DEPS_TRACKING=1 + DEPSFLAG_MWCC="-MM" + AC_MSG_RESULT([mwcc]) else AC_MSG_RESULT([none]) fi @@ -1896,7 +2138,7 @@ AC_DEFUN([AC_BAKEFILE_PRECOMP_HEADERS], dnl --------------------------------------------------------------------------- -dnl AC_BAKEFILE +dnl AC_BAKEFILE([autoconf_inc.m4 inclusion]) dnl dnl To be used in configure.in of any project using Bakefile-generated mks dnl @@ -1906,6 +2148,14 @@ dnl to perform check for basic tools like ranlib dnl BAKEFILE_HOST set this to override host detection, defaults dnl to ${host} dnl BAKEFILE_FORCE_PLATFORM set to override platform detection +dnl +dnl Example usage: +dnl +dnl AC_BAKEFILE([FOO(autoconf_inc.m4)]) +dnl +dnl (replace FOO with m4_include above, aclocal would die otherwise) +dnl (yes, it's ugly, but thanks to a bug in aclocal, it's the only thing +dnl we can do...) dnl --------------------------------------------------------------------------- AC_DEFUN([AC_BAKEFILE], @@ -1928,9 +2178,10 @@ AC_DEFUN([AC_BAKEFILE], AC_BAKEFILE_DEPS AC_BAKEFILE_RES_COMPILERS - BAKEFILE_BAKEFILE_M4_VERSION="0.1.4" - - builtin(include, autoconf_inc.m4) + BAKEFILE_BAKEFILE_M4_VERSION="0.1.8" + + dnl includes autoconf_inc.m4: + $1 if test "$BAKEFILE_BAKEFILE_M4_VERSION" != "$BAKEFILE_AUTOCONF_INC_M4_VERSION" ; then AC_MSG_ERROR([Versions of Bakefile used to generate makefiles ($BAKEFILE_AUTOCONF_INC_M4_VERSION) and configure ($BAKEFILE_BAKEFILE_M4_VERSION) do not match.]) @@ -1945,6 +2196,8 @@ dnl --------------------------------------------------------------------------- AC_DEFUN([AC_BAKEFILE_CREATE_FILE_DLLAR_SH], [ dnl ===================== dllar.sh begins here ===================== +dnl (Created by merge-scripts.py from dllar.sh +dnl file do not edit here!) D='$' cat <dllar.sh #!/bin/sh @@ -2041,10 +2294,11 @@ CleanUp() { # Print usage and exit script with rc=1. PrintHelp() { - echo 'Usage: dllar @<:@-o@<:${utput}:>@ output_file@:>@ @<:@-i@<:${mport}:>@ importlib_name@:>@' - echo ' @<:@-d@<:${escription}:>@ "dll descrption"@:>@ @<:@-cc "CC"@:>@ @<:@-f@<:${lags}:>@ "CFLAGS"@:>@' - echo ' @<:@-ord@<:${inals}:>@@:>@ -ex@<:${clude}:>@ "symbol(s)"' - echo ' @<:@-libf@<:${lags}:>@ "{INIT|TERM}{GLOBAL|INSTANCE}"@:>@ @<:@-nocrt@<:${dll}:>@@:>@ @<:@-nolxl@<:${ite}:>@@:>@' + echo 'Usage: dllar.sh @<:@-o@<:@utput@:>@ output_file@:>@ @<:@-i@<:@mport@:>@ importlib_name@:>@' + echo ' @<:@-name-mangler-script script.sh@:>@' + echo ' @<:@-d@<:@escription@:>@ "dll descrption"@:>@ @<:@-cc "CC"@:>@ @<:@-f@<:@lags@:>@ "CFLAGS"@:>@' + echo ' @<:@-ord@<:@inals@:>@@:>@ -ex@<:@clude@:>@ "symbol(s)"' + echo ' @<:@-libf@<:@lags@:>@ "{INIT|TERM}{GLOBAL|INSTANCE}"@:>@ @<:@-nocrt@<:@dll@:>@@:>@ @<:@-nolxl@<:@ite@:>@@:>@' echo ' @<:@*.o@:>@ @<:@*.a@:>@' echo '*> "output_file" should have no extension.' echo ' If it has the .o, .a or .dll extension, it is automatically removed.' @@ -2055,19 +2309,26 @@ PrintHelp() { echo ' This name is used as the import library name and may be longer and' echo ' more descriptive than the DLL name which has to follow the old ' echo ' 8.3 convention of FAT.' + echo '*> "script.sh may be given to override the output_file name by a' + echo ' different name. It is mainly useful if the regular make process' + echo ' of some package does not take into account OS/2 restriction of' + echo ' DLL name lengths. It takes the importlib name as input and is' + echo ' supposed to procude a shorter name as output. The script should' + echo ' expect to get importlib_name without extension and should produce' + echo ' a (max.) 8 letter name without extension.' echo '*> "cc" is used to use another GCC executable. (default: gcc.exe)' echo '*> "flags" should be any set of valid GCC flags. (default: -s -Zcrtdll)' echo ' These flags will be put at the start of GCC command line.' - echo '*> -ord@<:${inals}:>@ tells dllar to export entries by ordinals. Be careful.' - echo '*> -ex@<:${clude}:>@ defines symbols which will not be exported. You can define' + echo '*> -ord@<:@inals@:>@ tells dllar to export entries by ordinals. Be careful.' + echo '*> -ex@<:@clude@:>@ defines symbols which will not be exported. You can define' echo ' multiple symbols, for example -ex "myfunc yourfunc _GLOBAL*".' echo ' If the last character of a symbol is "*", all symbols beginning' echo ' with the prefix before "*" will be exclude, (see _GLOBAL* above).' - echo '*> -libf@<:${lags}:>@ can be used to add INITGLOBAL/INITINSTANCE and/or' + echo '*> -libf@<:@lags@:>@ can be used to add INITGLOBAL/INITINSTANCE and/or' echo ' TERMGLOBAL/TERMINSTANCE flags to the dynamically-linked library.' - echo '*> -nocrt@<:${dll}:>@ switch will disable linking the library against emx''s' + echo '*> -nocrt@<:@dll@:>@ switch will disable linking the library against emx''s' echo ' C runtime DLLs.' - echo '*> -nolxl@<:${ite}:>@ switch will disable running lxlite on the resulting DLL.' + echo '*> -nolxl@<:@ite@:>@ switch will disable running lxlite on the resulting DLL.' echo '*> All other switches (for example -L./ or -lmylib) will be passed' echo ' unchanged to GCC at the end of command line.' echo '*> If you create a DLL from a library and you do not specify -o,' @@ -2104,6 +2365,7 @@ cmdLine=${D}* outFile="" outimpFile="" inputFiles="" +renameScript="" description="" CC=gcc.exe CFLAGS="-s -Zcrtdll" @@ -2122,6 +2384,7 @@ case ${D}curDirS in esac # Parse commandline libsToLink=0 +omfLinking=0 while @<:@ ${D}1 @:>@; do case ${D}1 in -ord*) @@ -2135,6 +2398,10 @@ while @<:@ ${D}1 @:>@; do shift outimpFile=${D}1 ;; + -name-mangler-script) + shift + renameScript=${D}1 + ;; -d*) shift description=${D}1 @@ -2169,11 +2436,22 @@ while @<:@ ${D}1 @:>@; do -L* | -l*) libsToLink=1 ;; + -Zomf) + omfLinking=1 + ;; *) ;; esac EXTRA_CFLAGS=${D}{EXTRA_CFLAGS}" "${D}1 ;; + *.dll) + EXTRA_CFLAGS="${D}{EXTRA_CFLAGS} \`basnam ${D}1 .dll\`" + if @<:@ ${D}omfLinking -eq 1 @:>@; then + EXTRA_CFLAGS="${D}{EXTRA_CFLAGS}.lib" + else + EXTRA_CFLAGS="${D}{EXTRA_CFLAGS}.a" + fi + ;; *) found=0; if @<:@ ${D}libsToLink -ne 0 @:>@; then @@ -2304,9 +2582,13 @@ fi defFile="${D}{outFile}.def" arcFile="${D}{outimpFile}.a" arcFile2="${D}{outimpFile}.lib" -dllFile="${D}outFile" -# Add suffix to dllFile later, first we need a version to use as -# name in .def file. + +#create ${D}dllFile as something matching 8.3 restrictions, +if @<:@ -z ${D}renameScript @:>@ ; then + dllFile="${D}outFile" +else + dllFile=\`${D}renameScript ${D}outimpFile\` +fi if @<:@ ${D}do_backup -ne 0 @:>@ ; then if @<:@ -f ${D}arcFile @:>@ ; then @@ -2333,8 +2615,8 @@ done # Create the def file. rm -f ${D}defFile echo "LIBRARY \`basnam ${D}dllFile\` ${D}library_flags" >> ${D}defFile -dllFile="${D}dllFile.dll" -if @<:@ -n ${D}description @:>@; then +dllFile="${D}{dllFile}.dll" +if @<:@ ! -z ${D}description @:>@; then echo "DESCRIPTION \\"${D}{description}\\"" >> ${D}defFile fi echo "EXPORTS" >> ${D}defFile @@ -2398,6 +2680,8 @@ dnl ===================== dllar.sh ends here ===================== AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_DEPS], [ dnl ===================== bk-deps begins here ===================== +dnl (Created by merge-scripts.py from bk-deps +dnl file do not edit here!) D='$' cat <bk-deps #!/bin/sh @@ -2410,6 +2694,7 @@ cat <bk-deps DEPSMODE=${DEPSMODE} DEPSDIR=.deps DEPSFLAG_GCC="${DEPSFLAG_GCC}" +DEPSFLAG_MWCC="${DEPSFLAG_MWCC}" mkdir -p ${D}DEPSDIR @@ -2447,6 +2732,31 @@ if test ${D}DEPSMODE = gcc ; then fi fi exit 0 +elif test ${D}DEPSMODE = mwcc ; then + ${D}* + status=${D}? + if test ${D}{status} != 0 ; then + exit ${D}{status} + fi + # Run mwcc again with -MM and redirect into the dep file we want + # NOTE: We can't use shift here because we need ${D}* to be valid + prevarg= + for arg in ${D}* ; do + if test "${D}prevarg" = "-o"; then + objfile=${D}arg + else + case "${D}arg" in + -* ) + ;; + * ) + srcfile=${D}arg + ;; + esac + fi + prevarg="${D}arg" + done + ${D}* ${D}DEPSFLAG_MWCC >${D}{DEPSDIR}/${D}{objfile}.d + exit 0 else ${D}* exit ${D}? @@ -2458,6 +2768,8 @@ dnl ===================== bk-deps ends here ===================== AC_DEFUN([AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH], [ dnl ===================== shared-ld-sh begins here ===================== +dnl (Created by merge-scripts.py from shared-ld-sh +dnl file do not edit here!) D='$' cat <shared-ld-sh #!/bin/sh @@ -2487,7 +2799,7 @@ while test ${D}# -gt 0; do shift ;; - -l*|-L*|-flat_namespace|-headerpad_max_install_names) + -l*|-L*|-Wl,*|-flat_namespace|-headerpad_max_install_names) # collect these options args="${D}{args} ${D}1" ;; @@ -2552,6 +2864,8 @@ dnl ===================== shared-ld-sh ends here ===================== AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH], [ dnl ===================== bk-make-pch begins here ===================== +dnl (Created by merge-scripts.py from bk-make-pch +dnl file do not edit here!) D='$' cat <bk-make-pch #!/bin/sh