1 dnl ---------------------------------------------------------------------------
3 dnl Macros for configure.in for wxWindows by Robert Roebling, Phil Blecker,
4 dnl Vadim Zeitlin and Ron Lee
6 dnl This script is under the wxWindows licence.
9 dnl ---------------------------------------------------------------------------
12 dnl ===========================================================================
13 dnl Objective-C(++) related macros
14 dnl ===========================================================================
15 m4_define([AC_WX_LANG_OBJECTIVEC],
20 m4_define([AC_WX_LANG_OBJECTIVECPLUSPLUS],
25 dnl ===========================================================================
26 dnl macros to find the a file in the list of include/lib paths
27 dnl ===========================================================================
29 dnl ---------------------------------------------------------------------------
30 dnl call WX_PATH_FIND_INCLUDES(search path, header name), sets ac_find_includes
31 dnl to the full name of the file that was found or leaves it empty if not found
32 dnl ---------------------------------------------------------------------------
33 AC_DEFUN([WX_PATH_FIND_INCLUDES],
36 for ac_dir in $1 /usr/include;
38 if test -f "$ac_dir/$2"; then
39 ac_find_includes=$ac_dir
45 dnl ---------------------------------------------------------------------------
46 dnl WX_PATH_FIND_LIBRARIES helper
47 dnl ---------------------------------------------------------------------------
48 AC_DEFUN([WX_PATH_FIND_LIBRARIES_IN_PATH],
53 for ac_extension in a so sl dylib dll.a; do
54 if test -f "$ac_dir/lib$2.$ac_extension"; then
55 ac_find_libraries=$ac_dir
62 dnl ---------------------------------------------------------------------------
63 dnl return list of standard library paths
64 dnl ---------------------------------------------------------------------------
65 dnl return all default locations:
66 dnl - /usr/lib: standard
67 dnl - /usr/lib32: n32 ABI on IRIX
68 dnl - /usr/lib64: n64 ABI on IRIX
69 dnl - /usr/lib/64: 64 bit ABI on Solaris and Linux x86-64
71 dnl NB: if any of directories in the list is not a subdir of /usr, code setting
72 dnl wx_cv_std_libpath needs to be updated
73 AC_DEFUN([WX_STD_LIBPATH], [/usr/lib /usr/lib32 /usr/lib/64 /usr/lib64])
75 dnl ---------------------------------------------------------------------------
76 dnl call WX_PATH_FIND_LIBRARIES(search path, lib name), sets ac_find_libraries
77 dnl to the full name of the file that was found or leaves it empty if not found
78 dnl ---------------------------------------------------------------------------
79 AC_DEFUN([WX_PATH_FIND_LIBRARIES],
81 WX_PATH_FIND_LIBRARIES_IN_PATH($1, $2)
82 if test "x$ac_find_libraries" = "x" ; then
83 WX_PATH_FIND_LIBRARIES_IN_PATH(WX_STD_LIBPATH(), $2)
84 if test "x$ac_find_libraries" != "x" ; then
85 ac_find_libraries="default location"
90 dnl ---------------------------------------------------------------------------
91 dnl Path to include, already defined
92 dnl ---------------------------------------------------------------------------
93 AC_DEFUN([WX_INCLUDE_PATH_EXIST],
95 dnl never add -I/usr/include to the CPPFLAGS
96 if test "x$1" = "x/usr/include"; then
99 echo "$2" | grep "\-I$1" > /dev/null
101 if test $result = 0; then
102 ac_path_to_include=""
104 ac_path_to_include=" -I$1"
109 dnl ---------------------------------------------------------------------------
110 dnl Usage: WX_LINK_PATH_EXIST(path, libpath)
112 dnl Set ac_path_to_link to nothing if path is already in libpath of to -Lpath
113 dnl if it is not, so that libpath can be set to "$libpath$ac_path_to_link"
114 dnl after calling this function
115 dnl ---------------------------------------------------------------------------
116 AC_DEFUN([WX_LINK_PATH_EXIST],
118 dnl never add -L/usr/libXXX explicitely to libpath
119 if test "$1" = "default location"; then
122 echo "$2" | grep "\-L$1" > /dev/null
124 if test $result = 0; then
127 ac_path_to_link=" -L$1"
132 dnl ===========================================================================
133 dnl C++ features test
134 dnl ===========================================================================
136 dnl ---------------------------------------------------------------------------
137 dnl WX_CPP_NEW_HEADERS checks whether the compiler has "new" <iostream> header
138 dnl or only the old <iostream.h> one - it may be generally assumed that if
139 dnl <iostream> exists, the other "new" headers (without .h) exist too.
141 dnl call WX_CPP_NEW_HEADERS(actiof-if-true, action-if-false)
142 dnl ---------------------------------------------------------------------------
144 AC_DEFUN([WX_CPP_NEW_HEADERS],
149 AC_CHECK_HEADERS(iostream)
151 if test "$ac_cv_header_iostream" = "yes" ; then
152 ifelse([$1], , :, [$1])
154 ifelse([$2], , :, [$2])
160 dnl ---------------------------------------------------------------------------
161 dnl WX_CPP_BOOL checks whether the C++ compiler has a built in bool type
163 dnl call WX_CPP_BOOL - will define HAVE_BOOL if the compiler supports bool
164 dnl ---------------------------------------------------------------------------
166 AC_DEFUN([WX_CPP_BOOL],
168 AC_CACHE_CHECK([if C++ compiler supports bool], wx_cv_cpp_bool,
192 if test "$wx_cv_cpp_bool" = "yes"; then
197 dnl ---------------------------------------------------------------------------
198 dnl WX_CPP_EXPLICIT checks whether the C++ compiler support the explicit
199 dnl keyword and defines HAVE_EXPLICIT if this is the case
200 dnl ---------------------------------------------------------------------------
202 AC_DEFUN([WX_CPP_EXPLICIT],
204 AC_CACHE_CHECK([if C++ compiler supports the explicit keyword],
210 dnl do the test in 2 steps: first check that the compiler knows about the
211 dnl explicit keyword at all and then verify that it really honours it
214 class Foo { public: explicit Foo(int) {} };
222 class Foo { public: explicit Foo(int) {} };
223 static void TakeFoo(const Foo& foo) { }
239 if test "$wx_cv_explicit" = "yes"; then
240 AC_DEFINE(HAVE_EXPLICIT)
244 dnl ---------------------------------------------------------------------------
245 dnl a slightly better AC_C_BIGENDIAN macro which allows cross-compiling
246 dnl ---------------------------------------------------------------------------
248 AC_DEFUN([WX_C_BIGENDIAN],
249 [AC_CACHE_CHECK([whether byte ordering is bigendian], ac_cv_c_bigendian,
250 [ac_cv_c_bigendian=unknown
251 # See if sys/param.h defines the BYTE_ORDER macro.
252 AC_TRY_COMPILE([#include <sys/types.h>
253 #include <sys/param.h>], [
254 #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
256 #endif], [# It does; now see whether it defined to BIG_ENDIAN or not.
257 AC_TRY_COMPILE([#include <sys/types.h>
258 #include <sys/param.h>], [
259 #if BYTE_ORDER != BIG_ENDIAN
261 #endif], ac_cv_c_bigendian=yes, ac_cv_c_bigendian=no)])
262 if test $ac_cv_c_bigendian = unknown; then
263 AC_TRY_RUN([main () {
264 /* Are we little or big endian? From Harbison&Steele. */
268 char c[sizeof (long)];
271 exit (u.c[sizeof (long) - 1] == 1);
272 }], [ac_cv_c_bigendian=no], [ac_cv_c_bigendian=yes], [ac_cv_c_bigendian=unknown])
274 if test $ac_cv_c_bigendian = unknown; then
275 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])
277 if test $ac_cv_c_bigendian = yes; then
278 AC_DEFINE(WORDS_BIGENDIAN)
282 dnl ---------------------------------------------------------------------------
283 dnl override AC_ARG_ENABLE/WITH to cache the results in .cache file
284 dnl ---------------------------------------------------------------------------
286 AC_DEFUN([WX_ARG_CACHE_INIT],
288 wx_arg_cache_file="configarg.cache"
289 echo "loading argument cache $wx_arg_cache_file"
290 rm -f ${wx_arg_cache_file}.tmp
291 touch ${wx_arg_cache_file}.tmp
292 touch ${wx_arg_cache_file}
295 AC_DEFUN([WX_ARG_CACHE_FLUSH],
297 echo "saving argument cache $wx_arg_cache_file"
298 mv ${wx_arg_cache_file}.tmp ${wx_arg_cache_file}
301 dnl this macro checks for a three-valued command line --with argument:
302 dnl possible arguments are 'yes', 'no', 'sys', or 'builtin'
303 dnl usage: WX_ARG_SYS_WITH(option, helpmessage, variable-name)
304 AC_DEFUN([WX_ARG_SYS_WITH],
306 AC_MSG_CHECKING([for --with-$1])
308 AC_ARG_WITH($1, [$2],
310 if test "$withval" = yes; then
311 ac_cv_use_$1='$3=yes'
312 elif test "$withval" = no; then
314 elif test "$withval" = sys; then
315 ac_cv_use_$1='$3=sys'
316 elif test "$withval" = builtin; then
317 ac_cv_use_$1='$3=builtin'
319 AC_MSG_ERROR([Invalid value for --with-$1: should be yes, no, sys, or builtin])
323 LINE=`grep "$3" ${wx_arg_cache_file}`
324 if test "x$LINE" != x ; then
330 ac_cv_use_$1='$3='$DEFAULT_$3
334 if test "$no_cache" != 1; then
335 echo $ac_cv_use_$1 >> ${wx_arg_cache_file}.tmp
338 if test "$$3" = yes; then
340 elif test "$$3" = no; then
342 elif test "$$3" = sys; then
343 AC_MSG_RESULT([system version])
344 elif test "$$3" = builtin; then
345 AC_MSG_RESULT([builtin version])
347 AC_MSG_ERROR([Invalid value for --with-$1: should be yes, no, sys, or builtin])
351 dnl this macro checks for a command line argument and caches the result
352 dnl usage: WX_ARG_WITH(option, helpmessage, variable-name)
353 AC_DEFUN([WX_ARG_WITH],
355 AC_MSG_CHECKING([for --with-$1])
357 AC_ARG_WITH($1, [$2],
359 if test "$withval" = yes; then
360 ac_cv_use_$1='$3=yes'
366 LINE=`grep "$3" ${wx_arg_cache_file}`
367 if test "x$LINE" != x ; then
373 ac_cv_use_$1='$3='$DEFAULT_$3
377 if test "$no_cache" != 1; then
378 echo $ac_cv_use_$1 >> ${wx_arg_cache_file}.tmp
381 if test "$$3" = yes; then
388 dnl like WX_ARG_WITH but uses AC_ARG_ENABLE instead of AC_ARG_WITH
389 dnl usage: WX_ARG_ENABLE(option, helpmessage, variable-name, enablestring)
391 dnl enablestring is a hack and allows to show "checking for --disable-foo"
392 dnl message when running configure instead of the default "checking for
393 dnl --enable-foo" one whih is useful for the options enabled by default
394 AC_DEFUN([WX_ARG_ENABLE],
397 AC_MSG_CHECKING([for --${enablestring:-enable}-$1])
399 AC_ARG_ENABLE($1, [$2],
401 if test "$enableval" = yes; then
402 ac_cv_use_$1='$3=yes'
408 LINE=`grep "$3" ${wx_arg_cache_file}`
409 if test "x$LINE" != x ; then
415 ac_cv_use_$1='$3='$DEFAULT_$3
419 if test "$no_cache" != 1; then
420 echo $ac_cv_use_$1 >> ${wx_arg_cache_file}.tmp
423 if test "$$3" = yes; then
431 dnl ===========================================================================
432 dnl Linker features test
433 dnl ===========================================================================
435 dnl ---------------------------------------------------------------------------
436 dnl WX_VERSIONED_SYMBOLS checks whether the linker can create versioned
437 dnl symbols. If it can, sets LDFLAGS_VERSIONING to $CXX flags needed to use
438 dnl version script file named versionfile
440 dnl call WX_VERSIONED_SYMBOLS(versionfile)
441 dnl ---------------------------------------------------------------------------
442 AC_DEFUN([WX_VERSIONED_SYMBOLS],
446 dnl FIXME - doesn't work, Solaris linker doesn't accept wildcards
448 dnl dnl Check for known non-gcc cases:
449 dnl case "${host}" in
451 dnl if test "x$GCC" != "xyes" ; then
452 dnl LDFLAGS_VERSIONING="-M $1"
453 dnl found_versioning=yes
458 dnl Generic check for GCC or GCC-like behaviour (Intel C++, GCC):
459 if test $found_versioning = no ; then
460 AC_CACHE_CHECK([if the linker accepts --version-script], wx_cv_version_script,
462 echo "VER_1 { *; };" >conftest.sym
463 echo "int main() { return 0; }" >conftest.cpp
466 $CXX -o conftest.output $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.cpp
467 -Wl,--version-script,conftest.sym >/dev/null 2>conftest.stderr]) ; then
468 if test -s conftest.stderr ; then
469 wx_cv_version_script=no
471 wx_cv_version_script=yes
474 wx_cv_version_script=no
477 dnl There's a problem in some old linkers with --version-script that
478 dnl can cause linking to fail when you have objects with vtables in
479 dnl libs 3 deep. This is known to happen in netbsd and openbsd with
482 dnl To test for this we need to make some shared libs and
483 dnl unfortunately we can't be sure of the right way to do that. If the
484 dnl first two compiles don't succeed then it looks like the test isn't
485 dnl working and the result is ignored, but if OTOH the first two
486 dnl succeed but the third does not then the bug has been detected and
487 dnl the --version-script flag is dropped.
488 if test $wx_cv_version_script = yes
490 echo "struct B { virtual ~B() { } }; \
491 struct D : public B { }; \
492 void F() { D d; }" > conftest.cpp
495 $CXX -shared -fPIC -o conftest1.output $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.cpp
496 -Wl,--version-script,conftest.sym >/dev/null 2>/dev/null]) &&
498 $CXX -shared -fPIC -o conftest2.output $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.cpp
499 -Wl,--version-script,conftest.sym conftest1.output >/dev/null 2>/dev/null])
502 $CXX -shared -fPIC -o conftest3.output $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.cpp
503 -Wl,--version-script,conftest.sym conftest2.output conftest1.output >/dev/null 2>/dev/null])
505 wx_cv_version_script=yes
507 wx_cv_version_script=no
512 rm -f conftest.output conftest.stderr conftest.sym conftest.cpp
513 rm -f conftest1.output conftest2.output conftest3.output
515 if test $wx_cv_version_script = yes ; then
516 LDFLAGS_VERSIONING="-Wl,--version-script,$1"
522 dnl ===========================================================================
523 dnl "3rd party" macros included here because they are not widely available
524 dnl ===========================================================================
526 dnl ---------------------------------------------------------------------------
527 dnl test for availability of iconv()
528 dnl ---------------------------------------------------------------------------
530 dnl From Bruno Haible.
534 dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
535 dnl those with the standalone portable GNU libiconv installed).
537 AC_ARG_WITH([libiconv-prefix],
538 [ --with-libiconv-prefix=DIR search for libiconv in DIR/include and DIR/lib], [
539 for dir in `echo "$withval" | tr : ' '`; do
540 if test -d $dir/include; then CPPFLAGS="$CPPFLAGS -I$dir/include"; fi
541 if test -d $dir/lib; then LDFLAGS="$LDFLAGS -L$dir/lib"; fi
545 AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
546 am_cv_func_iconv="no, consider installing GNU libiconv"
548 AC_TRY_LINK([#include <stdlib.h>
550 [iconv_t cd = iconv_open("","");
551 iconv(cd,NULL,NULL,NULL,NULL);
553 am_cv_func_iconv=yes)
554 if test "$am_cv_func_iconv" != yes; then
557 AC_TRY_LINK([#include <stdlib.h>
559 [iconv_t cd = iconv_open("","");
560 iconv(cd,NULL,NULL,NULL,NULL);
563 am_cv_func_iconv=yes)
567 if test "$am_cv_func_iconv" = yes; then
568 AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
569 AC_CACHE_CHECK([if iconv needs const], wx_cv_func_iconv_const,
577 #if defined(__STDC__) || defined(__cplusplus)
578 size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
584 wx_cv_func_iconv_const="no",
585 wx_cv_func_iconv_const="yes"
590 if test "x$wx_cv_func_iconv_const" = "xyes"; then
594 AC_DEFINE_UNQUOTED(ICONV_CONST, $iconv_const,
595 [Define as const if the declaration of iconv() needs const.])
598 if test "$am_cv_lib_iconv" = yes; then
604 dnl ---------------------------------------------------------------------------
605 dnl AC_SYS_LARGEFILE (partly based on the code from autoconf 2.5x)
606 dnl ---------------------------------------------------------------------------
608 dnl WX_SYS_LARGEFILE_TEST
610 dnl NB: original autoconf test was checking if compiler supported 6 bit off_t
611 dnl arithmetic properly but this failed miserably with gcc under Linux
612 dnl whereas the system still supports 64 bit files, so now simply check
613 dnl that off_t is big enough
614 define(WX_SYS_LARGEFILE_TEST,
616 unsigned int field: sizeof(off_t) == 8;
621 dnl WX_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE, CACHE-VAR)
622 define(WX_SYS_LARGEFILE_MACRO_VALUE,
624 AC_CACHE_CHECK([for $1 value needed for large files], [$3],
626 AC_TRY_COMPILE([#define $1 $2
627 #include <sys/types.h>],
628 WX_SYS_LARGEFILE_TEST,
634 if test "$$3" != no; then
636 AC_DEFINE_UNQUOTED([$1], [$$3])
643 dnl By default, many hosts won't let programs access large files;
644 dnl one must use special compiler options to get large-file access to work.
645 dnl For more details about this brain damage please see:
646 dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
647 AC_DEFUN([AC_SYS_LARGEFILE],
648 [AC_ARG_ENABLE(largefile,
649 [ --disable-largefile omit support for large files])
650 if test "$enable_largefile" != no; then
651 dnl _FILE_OFFSET_BITS==64 is needed for Linux, Solaris, ...
652 dnl _LARGE_FILES -- for AIX
654 WX_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, 64, ac_cv_sys_file_offset_bits)
655 if test "x$wx_largefile" != "xyes"; then
656 WX_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1, ac_cv_sys_large_files)
659 AC_MSG_CHECKING(if large file support is available)
660 if test "x$wx_largefile" = "xyes"; then
661 AC_DEFINE(HAVE_LARGEFILE_SUPPORT)
663 AC_MSG_RESULT($wx_largefile)
668 dnl Available from the GNU Autoconf Macro Archive at:
669 dnl http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_const_cast.html
671 AC_DEFUN([AC_CXX_CONST_CAST],
672 [AC_CACHE_CHECK(whether the compiler supports const_cast<>,
673 ac_cv_cxx_const_cast,
676 AC_TRY_COMPILE(,[int x = 0;const int& y = x;int& z = const_cast<int&>(y);return z;],
677 ac_cv_cxx_const_cast=yes, ac_cv_cxx_const_cast=no)
680 if test "$ac_cv_cxx_const_cast" = yes; then
681 AC_DEFINE(HAVE_CONST_CAST,,[define if the compiler supports const_cast<>])
685 dnl http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_reinterpret_cast.html
686 AC_DEFUN([AC_CXX_REINTERPRET_CAST],
687 [AC_CACHE_CHECK(whether the compiler supports reinterpret_cast<>,
688 ac_cv_cxx_reinterpret_cast,
691 AC_TRY_COMPILE([#include <typeinfo>
692 class Base { public : Base () {} virtual void f () = 0;};
693 class Derived : public Base { public : Derived () {} virtual void f () {} };
694 class Unrelated { public : Unrelated () {} };
695 int g (Unrelated&) { return 0; }],[
696 Derived d;Base& b=d;Unrelated& e=reinterpret_cast<Unrelated&>(b);return g(e);],
697 ac_cv_cxx_reinterpret_cast=yes, ac_cv_cxx_reinterpret_cast=no)
700 if test "$ac_cv_cxx_reinterpret_cast" = yes; then
701 AC_DEFINE(HAVE_REINTERPRET_CAST,,
702 [define if the compiler supports reinterpret_cast<>])
706 dnl and http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_static_cast.html
707 AC_DEFUN([AC_CXX_STATIC_CAST],
708 [AC_CACHE_CHECK(whether the compiler supports static_cast<>,
709 ac_cv_cxx_static_cast,
712 AC_TRY_COMPILE([#include <typeinfo>
713 class Base { public : Base () {} virtual void f () = 0; };
714 class Derived : public Base { public : Derived () {} virtual void f () {} };
715 int g (Derived&) { return 0; }],[
716 Derived d; Base& b = d; Derived& s = static_cast<Derived&> (b); return g (s);],
717 ac_cv_cxx_static_cast=yes, ac_cv_cxx_static_cast=no)
720 if test "$ac_cv_cxx_static_cast" = yes; then
721 AC_DEFINE(HAVE_STATIC_CAST,, [define if the compiler supports static_cast<>])
725 dnl http://autoconf-archive.cryp.to/ac_cxx_dynamic_cast.html
726 AC_DEFUN([AC_CXX_DYNAMIC_CAST],
727 [AC_CACHE_CHECK(whether the compiler supports dynamic_cast<>,
728 ac_cv_cxx_dynamic_cast,
731 AC_TRY_COMPILE([#include <typeinfo>
732 class Base { public : Base () {} virtual void f () = 0;};
733 class Derived : public Base { public : Derived () {} virtual void f () {} };],[
734 Derived d; Base& b=d; return dynamic_cast<Derived*>(&b) ? 0 : 1;],
735 ac_cv_cxx_dynamic_cast=yes, ac_cv_cxx_dynamic_cast=no)
738 if test "$ac_cv_cxx_dynamic_cast" = yes; then
739 AC_DEFINE(HAVE_DYNAMIC_CAST,,[define if the compiler supports dynamic_cast<>])