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 ---------------------------------------------------------------------------
11 dnl ===========================================================================
12 dnl macros to detect specialty compiler options
13 dnl ===========================================================================
15 dnl Figure out if we need to pass -ext o to compiler (MetroWerks)
16 AC_DEFUN([AC_WX_METROWERKS_EXTO],
17 [AC_CACHE_CHECK([if the _AC_LANG compiler requires -ext o], wx_cv_[]_AC_LANG_ABBREV[]_exto,
18 dnl First create an empty conf test
19 [AC_LANG_CONFTEST([AC_LANG_PROGRAM()])
20 dnl Now remove .o and .c.o or .cc.o
21 rm -f conftest.$ac_objext conftest.$ac_ext.o
22 dnl Now compile the test
23 AS_IF([AC_TRY_EVAL(ac_compile)],
24 dnl If the test succeeded look for conftest.c.o or conftest.cc.o
25 [for ac_file in `(ls conftest.* 2>/dev/null)`; do
28 wx_cv_[]_AC_LANG_ABBREV[]_exto="-ext o"
34 [AC_MSG_FAILURE([cannot figure out if compiler needs -ext o: cannot compile])
37 rm -f conftest.$ac_ext.o conftest.$ac_objext conftest.$ac_ext
40 if test "x$wx_cv_[]_AC_LANG_ABBREV[]_exto" '!=' "x"; then
41 if test "[]_AC_LANG_ABBREV[]" = "c"; then
42 CFLAGS="$wx_cv_[]_AC_LANG_ABBREV[]_exto $CFLAGS"
44 if test "[]_AC_LANG_ABBREV[]" = "cxx"; then
45 CXXFLAGS="$wx_cv_[]_AC_LANG_ABBREV[]_exto $CXXFLAGS"
51 dnl ===========================================================================
52 dnl macros to find the a file in the list of include/lib paths
53 dnl ===========================================================================
55 dnl ---------------------------------------------------------------------------
56 dnl call WX_PATH_FIND_INCLUDES(search path, header name), sets ac_find_includes
57 dnl to the full name of the file that was found or leaves it empty if not found
58 dnl ---------------------------------------------------------------------------
59 AC_DEFUN([WX_PATH_FIND_INCLUDES],
62 for ac_dir in $1 /usr/include;
64 if test -f "$ac_dir/$2"; then
65 ac_find_includes=$ac_dir
71 dnl ---------------------------------------------------------------------------
72 dnl call WX_PATH_FIND_LIBRARIES(search path, header name), sets ac_find_libraries
73 dnl to the full name of the file that was found or leaves it empty if not found
74 dnl ---------------------------------------------------------------------------
75 AC_DEFUN([WX_PATH_FIND_LIBRARIES],
78 for ac_dir in $1 /usr/lib;
80 for ac_extension in a so sl dylib; do
81 if test -f "$ac_dir/lib$2.$ac_extension"; then
82 ac_find_libraries=$ac_dir
89 dnl ---------------------------------------------------------------------------
90 dnl Path to include, already defined
91 dnl ---------------------------------------------------------------------------
92 AC_DEFUN([WX_INCLUDE_PATH_EXIST],
94 dnl never add -I/usr/include to the CPPFLAGS
95 if test "x$1" = "x/usr/include"; then
98 echo "$2" | grep "\-I$1" > /dev/null
100 if test $result = 0; then
101 ac_path_to_include=""
103 ac_path_to_include=" -I$1"
108 dnl ---------------------------------------------------------------------------
109 dnl Path to link, already defined
110 dnl ---------------------------------------------------------------------------
111 AC_DEFUN([WX_LINK_PATH_EXIST],
113 echo "$2" | grep "\-L$1" > /dev/null
115 if test $result = 0; then
118 ac_path_to_link=" -L$1"
122 dnl ===========================================================================
123 dnl C++ features test
124 dnl ===========================================================================
126 dnl ---------------------------------------------------------------------------
127 dnl WX_CPP_NEW_HEADERS checks whether the compiler has "new" <iostream> header
128 dnl or only the old <iostream.h> one - it may be generally assumed that if
129 dnl <iostream> exists, the other "new" headers (without .h) exist too.
131 dnl call WX_CPP_NEW_HEADERS(actiof-if-true, action-if-false)
132 dnl ---------------------------------------------------------------------------
134 AC_DEFUN([WX_CPP_NEW_HEADERS],
139 AC_CHECK_HEADERS(iostream)
141 if test "$ac_cv_header_iostream" = "yes" ; then
142 ifelse([$1], , :, [$1])
144 ifelse([$2], , :, [$2])
150 dnl ---------------------------------------------------------------------------
151 dnl WX_CPP_BOOL checks whether the C++ compiler has a built in bool type
153 dnl call WX_CPP_BOOL - will define HAVE_BOOL if the compiler supports bool
154 dnl ---------------------------------------------------------------------------
156 AC_DEFUN([WX_CPP_BOOL],
158 AC_CACHE_CHECK([if C++ compiler supports bool], wx_cv_cpp_bool,
182 if test "$wx_cv_cpp_bool" = "yes"; then
187 dnl ---------------------------------------------------------------------------
188 dnl WX_CPP_EXPLICIT checks whether the C++ compiler support the explicit
189 dnl keyword and defines HAVE_EXPLICIT if this is the case
190 dnl ---------------------------------------------------------------------------
192 AC_DEFUN([WX_CPP_EXPLICIT],
194 AC_CACHE_CHECK([if C++ compiler supports the explicit keyword],
200 dnl do the test in 2 steps: first check that the compiler knows about the
201 dnl explicit keyword at all and then verify that it really honours it
204 class Foo { public: explicit Foo(int) {} };
212 class Foo { public: explicit Foo(int) {} };
213 static void TakeFoo(const Foo& foo) { }
229 if test "$wx_cv_explicit" = "yes"; then
230 AC_DEFINE(HAVE_EXPLICIT)
234 dnl ---------------------------------------------------------------------------
235 dnl a slightly better AC_C_BIGENDIAN macro which allows cross-compiling
236 dnl ---------------------------------------------------------------------------
238 AC_DEFUN([WX_C_BIGENDIAN],
239 [AC_CACHE_CHECK([whether byte ordering is bigendian], ac_cv_c_bigendian,
240 [ac_cv_c_bigendian=unknown
241 # See if sys/param.h defines the BYTE_ORDER macro.
242 AC_TRY_COMPILE([#include <sys/types.h>
243 #include <sys/param.h>], [
244 #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
246 #endif], [# It does; now see whether it defined to BIG_ENDIAN or not.
247 AC_TRY_COMPILE([#include <sys/types.h>
248 #include <sys/param.h>], [
249 #if BYTE_ORDER != BIG_ENDIAN
251 #endif], ac_cv_c_bigendian=yes, ac_cv_c_bigendian=no)])
252 if test $ac_cv_c_bigendian = unknown; then
253 AC_TRY_RUN([main () {
254 /* Are we little or big endian? From Harbison&Steele. */
258 char c[sizeof (long)];
261 exit (u.c[sizeof (long) - 1] == 1);
262 }], [ac_cv_c_bigendian=no], [ac_cv_c_bigendian=yes], [ac_cv_c_bigendian=unknown])
264 if test $ac_cv_c_bigendian = unknown; then
265 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])
267 if test $ac_cv_c_bigendian = yes; then
268 AC_DEFINE(WORDS_BIGENDIAN)
272 dnl ---------------------------------------------------------------------------
273 dnl override AC_ARG_ENABLE/WITH to cache the results in .cache file
274 dnl ---------------------------------------------------------------------------
276 AC_DEFUN([WX_ARG_CACHE_INIT],
278 wx_arg_cache_file="configarg.cache"
279 echo "loading argument cache $wx_arg_cache_file"
280 rm -f ${wx_arg_cache_file}.tmp
281 touch ${wx_arg_cache_file}.tmp
282 touch ${wx_arg_cache_file}
285 AC_DEFUN([WX_ARG_CACHE_FLUSH],
287 echo "saving argument cache $wx_arg_cache_file"
288 mv ${wx_arg_cache_file}.tmp ${wx_arg_cache_file}
291 dnl this macro checks for a three-valued command line --with argument:
292 dnl possible arguments are 'yes', 'no', 'sys', or 'builtin'
293 dnl usage: WX_ARG_SYS_WITH(option, helpmessage, variable-name)
294 AC_DEFUN([WX_ARG_SYS_WITH],
296 AC_MSG_CHECKING([for --with-$1])
298 AC_ARG_WITH($1, [$2],
300 if test "$withval" = yes; then
301 ac_cv_use_$1='$3=yes'
302 elif test "$withval" = no; then
304 elif test "$withval" = sys; then
305 ac_cv_use_$1='$3=sys'
306 elif test "$withval" = builtin; then
307 ac_cv_use_$1='$3=builtin'
309 AC_MSG_ERROR([Invalid value for --with-$1: should be yes, no, sys, or builtin])
313 LINE=`grep "$3" ${wx_arg_cache_file}`
314 if test "x$LINE" != x ; then
320 ac_cv_use_$1='$3='$DEFAULT_$3
324 if test "$no_cache" != 1; then
325 echo $ac_cv_use_$1 >> ${wx_arg_cache_file}.tmp
328 if test "$$3" = yes; then
330 elif test "$$3" = no; then
332 elif test "$$3" = sys; then
333 AC_MSG_RESULT([system version])
334 elif test "$$3" = builtin; then
335 AC_MSG_RESULT([builtin version])
337 AC_MSG_ERROR([Invalid value for --with-$1: should be yes, no, sys, or builtin])
341 dnl this macro checks for a command line argument and caches the result
342 dnl usage: WX_ARG_WITH(option, helpmessage, variable-name)
343 AC_DEFUN([WX_ARG_WITH],
345 AC_MSG_CHECKING([for --with-$1])
347 AC_ARG_WITH($1, [$2],
349 if test "$withval" = yes; then
350 ac_cv_use_$1='$3=yes'
356 LINE=`grep "$3" ${wx_arg_cache_file}`
357 if test "x$LINE" != x ; then
363 ac_cv_use_$1='$3='$DEFAULT_$3
367 if test "$no_cache" != 1; then
368 echo $ac_cv_use_$1 >> ${wx_arg_cache_file}.tmp
371 if test "$$3" = yes; then
378 dnl like WX_ARG_WITH but uses AC_ARG_ENABLE instead of AC_ARG_WITH
379 dnl usage: WX_ARG_ENABLE(option, helpmessage, variable-name, enablestring)
381 dnl enablestring is a hack and allows to show "checking for --disable-foo"
382 dnl message when running configure instead of the default "checking for
383 dnl --enable-foo" one whih is useful for the options enabled by default
384 AC_DEFUN([WX_ARG_ENABLE],
387 AC_MSG_CHECKING([for --${enablestring:-enable}-$1])
389 AC_ARG_ENABLE($1, [$2],
391 if test "$enableval" = yes; then
392 ac_cv_use_$1='$3=yes'
398 LINE=`grep "$3" ${wx_arg_cache_file}`
399 if test "x$LINE" != x ; then
405 ac_cv_use_$1='$3='$DEFAULT_$3
409 if test "$no_cache" != 1; then
410 echo $ac_cv_use_$1 >> ${wx_arg_cache_file}.tmp
413 if test "$$3" = yes; then
421 dnl ===========================================================================
422 dnl Linker features test
423 dnl ===========================================================================
425 dnl ---------------------------------------------------------------------------
426 dnl WX_VERSIONED_SYMBOLS checks whether the linker can create versioned
427 dnl symbols. If it can, sets LDFLAGS_VERSIONING to $CXX flags needed to use
428 dnl version script file named versionfile
430 dnl call WX_VERSIONED_SYMBOLS(versionfile)
431 dnl ---------------------------------------------------------------------------
432 AC_DEFUN([WX_VERSIONED_SYMBOLS],
436 dnl FIXME - doesn't work, Solaris linker doesn't accept wildcards
438 dnl dnl Check for known non-gcc cases:
439 dnl case "${host}" in
441 dnl if test "x$GCC" != "xyes" ; then
442 dnl LDFLAGS_VERSIONING="-M $1"
443 dnl found_versioning=yes
448 dnl Generic check for GCC or GCC-like behaviour (Intel C++, GCC):
449 if test $found_versioning = no ; then
450 AC_CACHE_CHECK([if the linker accepts --version-script], wx_cv_version_script,
452 echo "VER_1 { *; };" >conftest.sym
453 echo "int main() { return 0; }" >conftest.cpp
456 $CXX -o conftest.output $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.cpp
457 -Wl,--version-script,conftest.sym >/dev/null 2>conftest.stderr]) ; then
458 if test -s conftest.stderr ; then
459 wx_cv_version_script=no
461 wx_cv_version_script=yes
464 wx_cv_version_script=no
466 rm -f conftest.output conftest.stderr conftest.sym conftest.cpp
468 if test $wx_cv_version_script = yes ; then
469 LDFLAGS_VERSIONING="-Wl,--version-script,$1"
475 dnl ===========================================================================
476 dnl "3rd party" macros included here because they are not widely available
477 dnl ===========================================================================
479 dnl ---------------------------------------------------------------------------
480 dnl test for availability of iconv()
481 dnl ---------------------------------------------------------------------------
483 dnl From Bruno Haible.
487 dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
488 dnl those with the standalone portable GNU libiconv installed).
490 AC_ARG_WITH([libiconv-prefix],
491 [ --with-libiconv-prefix=DIR search for libiconv in DIR/include and DIR/lib], [
492 for dir in `echo "$withval" | tr : ' '`; do
493 if test -d $dir/include; then CPPFLAGS="$CPPFLAGS -I$dir/include"; fi
494 if test -d $dir/lib; then LDFLAGS="$LDFLAGS -L$dir/lib"; fi
498 AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
499 am_cv_func_iconv="no, consider installing GNU libiconv"
501 AC_TRY_LINK([#include <stdlib.h>
503 [iconv_t cd = iconv_open("","");
504 iconv(cd,NULL,NULL,NULL,NULL);
506 am_cv_func_iconv=yes)
507 if test "$am_cv_func_iconv" != yes; then
510 AC_TRY_LINK([#include <stdlib.h>
512 [iconv_t cd = iconv_open("","");
513 iconv(cd,NULL,NULL,NULL,NULL);
516 am_cv_func_iconv=yes)
520 if test "$am_cv_func_iconv" = yes; then
521 AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
522 AC_CACHE_CHECK([if iconv needs const], wx_cv_func_iconv_const,
530 #if defined(__STDC__) || defined(__cplusplus)
531 size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
537 wx_cv_func_iconv_const="no",
538 wx_cv_func_iconv_const="yes"
543 if test "x$wx_cv_func_iconv_const" = "xyes"; then
547 AC_DEFINE_UNQUOTED(ICONV_CONST, $iconv_const,
548 [Define as const if the declaration of iconv() needs const.])
551 if test "$am_cv_lib_iconv" = yes; then
557 dnl ---------------------------------------------------------------------------
558 dnl AC_SYS_LARGEFILE (partly based on the code from autoconf 2.5x)
559 dnl ---------------------------------------------------------------------------
561 dnl WX_SYS_LARGEFILE_TEST
563 dnl NB: original autoconf test was checking if compiler supported 6 bit off_t
564 dnl arithmetic properly but this failed miserably with gcc under Linux
565 dnl whereas the system still supports 64 bit files, so now simply check
566 dnl that off_t is big enough
567 define(WX_SYS_LARGEFILE_TEST,
569 unsigned int field: sizeof(off_t) == 8;
574 dnl WX_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE, CACHE-VAR)
575 define(WX_SYS_LARGEFILE_MACRO_VALUE,
577 AC_CACHE_CHECK([for $1 value needed for large files], [$3],
579 AC_TRY_COMPILE([#define $1 $2
580 #include <sys/types.h>],
581 WX_SYS_LARGEFILE_TEST,
587 if test "$$3" != no; then
589 AC_DEFINE_UNQUOTED([$1], [$$3])
596 dnl By default, many hosts won't let programs access large files;
597 dnl one must use special compiler options to get large-file access to work.
598 dnl For more details about this brain damage please see:
599 dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
600 AC_DEFUN([AC_SYS_LARGEFILE],
601 [AC_ARG_ENABLE(largefile,
602 [ --disable-largefile omit support for large files])
603 if test "$enable_largefile" != no; then
604 dnl _FILE_OFFSET_BITS==64 is needed for Linux, Solaris, ...
605 dnl _LARGE_FILES -- for AIX
607 WX_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, 64, ac_cv_sys_file_offset_bits)
608 if test "x$wx_largefile" != "xyes"; then
609 WX_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1, ac_cv_sys_large_files)
612 AC_MSG_CHECKING(if large file support is available)
613 if test "x$wx_largefile" = "xyes"; then
614 AC_DEFINE(HAVE_LARGEFILE_SUPPORT)
616 AC_MSG_RESULT($wx_largefile)
621 dnl Available from the GNU Autoconf Macro Archive at:
622 dnl http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_const_cast.html
624 AC_DEFUN([AC_CXX_CONST_CAST],
625 [AC_CACHE_CHECK(whether the compiler supports const_cast<>,
626 ac_cv_cxx_const_cast,
629 AC_TRY_COMPILE(,[int x = 0;const int& y = x;int& z = const_cast<int&>(y);return z;],
630 ac_cv_cxx_const_cast=yes, ac_cv_cxx_const_cast=no)
633 if test "$ac_cv_cxx_const_cast" = yes; then
634 AC_DEFINE(HAVE_CONST_CAST,,[define if the compiler supports const_cast<>])
638 dnl http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_reinterpret_cast.html
639 AC_DEFUN([AC_CXX_REINTERPRET_CAST],
640 [AC_CACHE_CHECK(whether the compiler supports reinterpret_cast<>,
641 ac_cv_cxx_reinterpret_cast,
644 AC_TRY_COMPILE([#include <typeinfo>
645 class Base { public : Base () {} virtual void f () = 0;};
646 class Derived : public Base { public : Derived () {} virtual void f () {} };
647 class Unrelated { public : Unrelated () {} };
648 int g (Unrelated&) { return 0; }],[
649 Derived d;Base& b=d;Unrelated& e=reinterpret_cast<Unrelated&>(b);return g(e);],
650 ac_cv_cxx_reinterpret_cast=yes, ac_cv_cxx_reinterpret_cast=no)
653 if test "$ac_cv_cxx_reinterpret_cast" = yes; then
654 AC_DEFINE(HAVE_REINTERPRET_CAST,,
655 [define if the compiler supports reinterpret_cast<>])
659 dnl and http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_static_cast.html
660 AC_DEFUN([AC_CXX_STATIC_CAST],
661 [AC_CACHE_CHECK(whether the compiler supports static_cast<>,
662 ac_cv_cxx_static_cast,
665 AC_TRY_COMPILE([#include <typeinfo>
666 class Base { public : Base () {} virtual void f () = 0; };
667 class Derived : public Base { public : Derived () {} virtual void f () {} };
668 int g (Derived&) { return 0; }],[
669 Derived d; Base& b = d; Derived& s = static_cast<Derived&> (b); return g (s);],
670 ac_cv_cxx_static_cast=yes, ac_cv_cxx_static_cast=no)
673 if test "$ac_cv_cxx_static_cast" = yes; then
674 AC_DEFINE(HAVE_STATIC_CAST,, [define if the compiler supports static_cast<>])