]> git.saurik.com Git - wxWidgets.git/blob - acinclude.m4
make it non mach-o carbon savvy
[wxWidgets.git] / acinclude.m4
1 dnl ---------------------------------------------------------------------------
2 dnl
3 dnl Macros for configure.in for wxWindows by Robert Roebling, Phil Blecker,
4 dnl Vadim Zeitlin and Ron Lee
5 dnl
6 dnl This script is under the wxWindows licence.
7 dnl
8 dnl Version: $Id$
9 dnl ---------------------------------------------------------------------------
10
11 dnl ===========================================================================
12 dnl macros to find the a file in the list of include/lib paths
13 dnl ===========================================================================
14
15 dnl ---------------------------------------------------------------------------
16 dnl call WX_PATH_FIND_INCLUDES(search path, header name), sets ac_find_includes
17 dnl to the full name of the file that was found or leaves it empty if not found
18 dnl ---------------------------------------------------------------------------
19 AC_DEFUN([WX_PATH_FIND_INCLUDES],
20 [
21 ac_find_includes=
22 for ac_dir in $1 /usr/include;
23 do
24 if test -f "$ac_dir/$2"; then
25 ac_find_includes=$ac_dir
26 break
27 fi
28 done
29 ])
30
31 dnl ---------------------------------------------------------------------------
32 dnl call WX_PATH_FIND_LIBRARIES(search path, header name), sets ac_find_libraries
33 dnl to the full name of the file that was found or leaves it empty if not found
34 dnl ---------------------------------------------------------------------------
35 AC_DEFUN([WX_PATH_FIND_LIBRARIES],
36 [
37 ac_find_libraries=
38 for ac_dir in $1 /usr/lib;
39 do
40 for ac_extension in a so sl dylib; do
41 if test -f "$ac_dir/lib$2.$ac_extension"; then
42 ac_find_libraries=$ac_dir
43 break 2
44 fi
45 done
46 done
47 ])
48
49 dnl ---------------------------------------------------------------------------
50 dnl Path to include, already defined
51 dnl ---------------------------------------------------------------------------
52 AC_DEFUN([WX_INCLUDE_PATH_EXIST],
53 [
54 dnl never add -I/usr/include to the CPPFLAGS
55 if test "x$1" = "x/usr/include"; then
56 ac_path_to_include=""
57 else
58 echo "$2" | grep "\-I$1" > /dev/null
59 result=$?
60 if test $result = 0; then
61 ac_path_to_include=""
62 else
63 ac_path_to_include=" -I$1"
64 fi
65 fi
66 ])
67
68 dnl ---------------------------------------------------------------------------
69 dnl Path to link, already defined
70 dnl ---------------------------------------------------------------------------
71 AC_DEFUN([WX_LINK_PATH_EXIST],
72 [
73 echo "$2" | grep "\-L$1" > /dev/null
74 result=$?
75 if test $result = 0; then
76 ac_path_to_link=""
77 else
78 ac_path_to_link=" -L$1"
79 fi
80 ])
81
82 dnl ===========================================================================
83 dnl C++ features test
84 dnl ===========================================================================
85
86 dnl ---------------------------------------------------------------------------
87 dnl WX_CPP_NEW_HEADERS checks whether the compiler has "new" <iostream> header
88 dnl or only the old <iostream.h> one - it may be generally assumed that if
89 dnl <iostream> exists, the other "new" headers (without .h) exist too.
90 dnl
91 dnl call WX_CPP_NEW_HEADERS(actiof-if-true, action-if-false-or-cross-compiling)
92 dnl ---------------------------------------------------------------------------
93
94 AC_DEFUN([WX_CPP_NEW_HEADERS],
95 [
96 if test "$cross_compiling" = "yes"; then
97 ifelse([$2], , :, [$2])
98 else
99 AC_LANG_SAVE
100 AC_LANG_CPLUSPLUS
101
102 AC_CHECK_HEADERS(iostream)
103
104 if test "$ac_cv_header_iostream" = "yes" ; then
105 ifelse([$1], , :, [$1])
106 else
107 ifelse([$2], , :, [$2])
108 fi
109
110 AC_LANG_RESTORE
111 fi
112 ])
113
114 dnl ---------------------------------------------------------------------------
115 dnl WX_CPP_BOOL checks whether the C++ compiler has a built in bool type
116 dnl
117 dnl call WX_CPP_BOOL - will define HAVE_BOOL if the compiler supports bool
118 dnl ---------------------------------------------------------------------------
119
120 AC_DEFUN([WX_CPP_BOOL],
121 [
122 AC_CACHE_CHECK([if C++ compiler supports bool], wx_cv_cpp_bool,
123 [
124 AC_LANG_SAVE
125 AC_LANG_CPLUSPLUS
126
127 AC_TRY_COMPILE(
128 [
129 ],
130 [
131 bool b = true;
132
133 return 0;
134 ],
135 [
136 wx_cv_cpp_bool=yes
137 ],
138 [
139 wx_cv_cpp_bool=no
140 ]
141 )
142
143 AC_LANG_RESTORE
144 ])
145
146 if test "$wx_cv_cpp_bool" = "yes"; then
147 AC_DEFINE(HAVE_BOOL)
148 fi
149 ])
150
151 dnl ---------------------------------------------------------------------------
152 dnl WX_CPP_EXPLICIT checks whether the C++ compiler support the explicit
153 dnl keyword and defines HAVE_EXPLICIT if this is the case
154 dnl ---------------------------------------------------------------------------
155
156 AC_DEFUN([WX_CPP_EXPLICIT],
157 [
158 AC_CACHE_CHECK([if C++ compiler supports the explicit keyword],
159 wx_cv_explicit,
160 [
161 AC_LANG_SAVE
162 AC_LANG_CPLUSPLUS
163
164 dnl do the test in 2 steps: first check that the compiler knows about the
165 dnl explicit keyword at all and then verify that it really honours it
166 AC_TRY_COMPILE(
167 [
168 class Foo { public: explicit Foo(int) {} };
169 ],
170 [
171 return 0;
172 ],
173 [
174 AC_TRY_COMPILE(
175 [
176 class Foo { public: explicit Foo(int) {} };
177 static void TakeFoo(const Foo& foo) { }
178 ],
179 [
180 TakeFoo(17);
181 return 0;
182 ],
183 wx_cv_explicit=no,
184 wx_cv_explicit=yes
185 )
186 ],
187 wx_cv_explicit=no
188 )
189
190 AC_LANG_RESTORE
191 ])
192
193 if test "$wx_cv_explicit" = "yes"; then
194 AC_DEFINE(HAVE_EXPLICIT)
195 fi
196 ])
197
198 dnl ---------------------------------------------------------------------------
199 dnl a slightly better AC_C_BIGENDIAN macro which allows cross-compiling
200 dnl ---------------------------------------------------------------------------
201
202 AC_DEFUN([WX_C_BIGENDIAN],
203 [AC_CACHE_CHECK([whether byte ordering is bigendian], ac_cv_c_bigendian,
204 [ac_cv_c_bigendian=unknown
205 # See if sys/param.h defines the BYTE_ORDER macro.
206 AC_TRY_COMPILE([#include <sys/types.h>
207 #include <sys/param.h>], [
208 #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
209 bogus endian macros
210 #endif], [# It does; now see whether it defined to BIG_ENDIAN or not.
211 AC_TRY_COMPILE([#include <sys/types.h>
212 #include <sys/param.h>], [
213 #if BYTE_ORDER != BIG_ENDIAN
214 not big endian
215 #endif], ac_cv_c_bigendian=yes, ac_cv_c_bigendian=no)])
216 if test $ac_cv_c_bigendian = unknown; then
217 AC_TRY_RUN([main () {
218 /* Are we little or big endian? From Harbison&Steele. */
219 union
220 {
221 long l;
222 char c[sizeof (long)];
223 } u;
224 u.l = 1;
225 exit (u.c[sizeof (long) - 1] == 1);
226 }], [ac_cv_c_bigendian=no], [ac_cv_c_bigendian=yes], [ac_cv_c_bigendian=unknown])
227 fi])
228 if test $ac_cv_c_bigendian = unknown; then
229 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])
230 fi
231 if test $ac_cv_c_bigendian = yes; then
232 AC_DEFINE(WORDS_BIGENDIAN)
233 fi
234 ])
235
236 dnl ---------------------------------------------------------------------------
237 dnl override AC_ARG_ENABLE/WITH to cache the results in .cache file
238 dnl ---------------------------------------------------------------------------
239
240 AC_DEFUN([WX_ARG_CACHE_INIT],
241 [
242 wx_arg_cache_file="configarg.cache"
243 echo "loading argument cache $wx_arg_cache_file"
244 rm -f ${wx_arg_cache_file}.tmp
245 touch ${wx_arg_cache_file}.tmp
246 touch ${wx_arg_cache_file}
247 ])
248
249 AC_DEFUN([WX_ARG_CACHE_FLUSH],
250 [
251 echo "saving argument cache $wx_arg_cache_file"
252 mv ${wx_arg_cache_file}.tmp ${wx_arg_cache_file}
253 ])
254
255 dnl this macro checks for a three-valued command line --with argument:
256 dnl possible arguments are 'yes', 'no', 'sys', or 'builtin'
257 dnl usage: WX_ARG_SYS_WITH(option, helpmessage, variable-name)
258 AC_DEFUN([WX_ARG_SYS_WITH],
259 [
260 AC_MSG_CHECKING([for --with-$1])
261 no_cache=0
262 AC_ARG_WITH($1, [$2],
263 [
264 if test "$withval" = yes; then
265 ac_cv_use_$1='$3=yes'
266 elif test "$withval" = no; then
267 ac_cv_use_$1='$3=no'
268 elif test "$withval" = sys; then
269 ac_cv_use_$1='$3=sys'
270 elif test "$withval" = builtin; then
271 ac_cv_use_$1='$3=builtin'
272 else
273 AC_MSG_ERROR([Invalid value for --with-$1: should be yes, no, sys, or builtin])
274 fi
275 ],
276 [
277 LINE=`grep "$3" ${wx_arg_cache_file}`
278 if test "x$LINE" != x ; then
279 eval "DEFAULT_$LINE"
280 else
281 no_cache=1
282 fi
283
284 ac_cv_use_$1='$3='$DEFAULT_$3
285 ])
286
287 eval "$ac_cv_use_$1"
288 if test "$no_cache" != 1; then
289 echo $ac_cv_use_$1 >> ${wx_arg_cache_file}.tmp
290 fi
291
292 if test "$$3" = yes; then
293 AC_MSG_RESULT(yes)
294 elif test "$$3" = no; then
295 AC_MSG_RESULT(no)
296 elif test "$$3" = sys; then
297 AC_MSG_RESULT([system version])
298 elif test "$$3" = builtin; then
299 AC_MSG_RESULT([builtin version])
300 else
301 AC_MSG_ERROR([Invalid value for --with-$1: should be yes, no, sys, or builtin])
302 fi
303 ])
304
305 dnl this macro checks for a command line argument and caches the result
306 dnl usage: WX_ARG_WITH(option, helpmessage, variable-name)
307 AC_DEFUN([WX_ARG_WITH],
308 [
309 AC_MSG_CHECKING([for --with-$1])
310 no_cache=0
311 AC_ARG_WITH($1, [$2],
312 [
313 if test "$withval" = yes; then
314 ac_cv_use_$1='$3=yes'
315 else
316 ac_cv_use_$1='$3=no'
317 fi
318 ],
319 [
320 LINE=`grep "$3" ${wx_arg_cache_file}`
321 if test "x$LINE" != x ; then
322 eval "DEFAULT_$LINE"
323 else
324 no_cache=1
325 fi
326
327 ac_cv_use_$1='$3='$DEFAULT_$3
328 ])
329
330 eval "$ac_cv_use_$1"
331 if test "$no_cache" != 1; then
332 echo $ac_cv_use_$1 >> ${wx_arg_cache_file}.tmp
333 fi
334
335 if test "$$3" = yes; then
336 AC_MSG_RESULT(yes)
337 else
338 AC_MSG_RESULT(no)
339 fi
340 ])
341
342 dnl like WX_ARG_WITH but uses AC_ARG_ENABLE instead of AC_ARG_WITH
343 dnl usage: WX_ARG_ENABLE(option, helpmessage, variable-name, enablestring)
344 dnl
345 dnl enablestring is a hack and allows to show "checking for --disable-foo"
346 dnl message when running configure instead of the default "checking for
347 dnl --enable-foo" one whih is useful for the options enabled by default
348 AC_DEFUN([WX_ARG_ENABLE],
349 [
350 enablestring=$4
351 AC_MSG_CHECKING([for --${enablestring:-enable}-$1])
352 no_cache=0
353 AC_ARG_ENABLE($1, [$2],
354 [
355 if test "$enableval" = yes; then
356 ac_cv_use_$1='$3=yes'
357 else
358 ac_cv_use_$1='$3=no'
359 fi
360 ],
361 [
362 LINE=`grep "$3" ${wx_arg_cache_file}`
363 if test "x$LINE" != x ; then
364 eval "DEFAULT_$LINE"
365 else
366 no_cache=1
367 fi
368
369 ac_cv_use_$1='$3='$DEFAULT_$3
370 ])
371
372 eval "$ac_cv_use_$1"
373 if test "$no_cache" != 1; then
374 echo $ac_cv_use_$1 >> ${wx_arg_cache_file}.tmp
375 fi
376
377 if test "$$3" = yes; then
378 AC_MSG_RESULT(yes)
379 else
380 AC_MSG_RESULT(no)
381 fi
382 ])
383
384
385 dnl ===========================================================================
386 dnl Linker features test
387 dnl ===========================================================================
388
389 dnl ---------------------------------------------------------------------------
390 dnl WX_VERSIONED_SYMBOLS checks whether the linker can create versioned
391 dnl symbols. If it can, sets LDFLAGS_VERSIONING to $CXX flags needed to use
392 dnl version script file named versionfile
393 dnl
394 dnl call WX_VERSIONED_SYMBOLS(versionfile)
395 dnl ---------------------------------------------------------------------------
396 AC_DEFUN([WX_VERSIONED_SYMBOLS],
397 [
398 found_versioning=no
399
400 dnl FIXME - doesn't work, Solaris linker doesn't accept wildcards
401 dnl in the script.
402 dnl dnl Check for known non-gcc cases:
403 dnl case "${host}" in
404 dnl *-*-solaris2* )
405 dnl if test "x$GCC" != "xyes" ; then
406 dnl LDFLAGS_VERSIONING="-M $1"
407 dnl found_versioning=yes
408 dnl fi
409 dnl ;;
410 dnl esac
411
412 dnl Generic check for GCC or GCC-like behaviour (Intel C++, GCC):
413 if test $found_versioning = no ; then
414 AC_CACHE_CHECK([if the linker accepts --version-script], wx_cv_version_script,
415 [
416 echo "VER_1 { *; };" >conftest.sym
417 echo "int main() { return 0; }" >conftest.cpp
418
419 if AC_TRY_COMMAND([
420 $CXX -o conftest.output $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.cpp
421 -Wl,--version-script,conftest.sym >/dev/null 2>conftest.stderr]) ; then
422 if test -s conftest.stderr ; then
423 wx_cv_version_script=no
424 else
425 wx_cv_version_script=yes
426 fi
427 else
428 wx_cv_version_script=no
429 fi
430 rm -f conftest.output conftest.stderr conftest.sym conftest.cpp
431 ])
432 if test $wx_cv_version_script = yes ; then
433 LDFLAGS_VERSIONING="-Wl,--version-script,$1"
434 fi
435 fi
436 ])
437
438
439 dnl ===========================================================================
440 dnl "3rd party" macros included here because they are not widely available
441 dnl ===========================================================================
442
443 dnl ---------------------------------------------------------------------------
444 dnl test for availability of iconv()
445 dnl ---------------------------------------------------------------------------
446
447 dnl From Bruno Haible.
448
449 AC_DEFUN([AM_ICONV],
450 [
451 dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
452 dnl those with the standalone portable GNU libiconv installed).
453
454 AC_ARG_WITH([libiconv-prefix],
455 [ --with-libiconv-prefix=DIR search for libiconv in DIR/include and DIR/lib], [
456 for dir in `echo "$withval" | tr : ' '`; do
457 if test -d $dir/include; then CPPFLAGS="$CPPFLAGS -I$dir/include"; fi
458 if test -d $dir/lib; then LDFLAGS="$LDFLAGS -L$dir/lib"; fi
459 done
460 ])
461
462 AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
463 am_cv_func_iconv="no, consider installing GNU libiconv"
464 am_cv_lib_iconv=no
465 AC_TRY_LINK([#include <stdlib.h>
466 #include <iconv.h>],
467 [iconv_t cd = iconv_open("","");
468 iconv(cd,NULL,NULL,NULL,NULL);
469 iconv_close(cd);],
470 am_cv_func_iconv=yes)
471 if test "$am_cv_func_iconv" != yes; then
472 am_save_LIBS="$LIBS"
473 LIBS="$LIBS -liconv"
474 AC_TRY_LINK([#include <stdlib.h>
475 #include <iconv.h>],
476 [iconv_t cd = iconv_open("","");
477 iconv(cd,NULL,NULL,NULL,NULL);
478 iconv_close(cd);],
479 am_cv_lib_iconv=yes
480 am_cv_func_iconv=yes)
481 LIBS="$am_save_LIBS"
482 fi
483 ])
484 if test "$am_cv_func_iconv" = yes; then
485 AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
486 AC_CACHE_CHECK([if iconv needs const], wx_cv_func_iconv_const,
487 AC_TRY_COMPILE([
488 #include <stdlib.h>
489 #include <iconv.h>
490 extern
491 #ifdef __cplusplus
492 "C"
493 #endif
494 #if defined(__STDC__) || defined(__cplusplus)
495 size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
496 #else
497 size_t iconv();
498 #endif
499 ],
500 [],
501 wx_cv_func_iconv_const="no",
502 wx_cv_func_iconv_const="yes"
503 )
504 )
505
506 iconv_const=
507 if test "x$wx_cv_func_iconv_const" = "xyes"; then
508 iconv_const="const"
509 fi
510
511 AC_DEFINE_UNQUOTED(ICONV_CONST, $iconv_const,
512 [Define as const if the declaration of iconv() needs const.])
513 fi
514 LIBICONV=
515 if test "$am_cv_lib_iconv" = yes; then
516 LIBICONV="-liconv"
517 fi
518 AC_SUBST(LIBICONV)
519 ])
520
521 dnl ---------------------------------------------------------------------------
522 dnl AC_SYS_LARGEFILE (partly based on the code from autoconf 2.5x)
523 dnl ---------------------------------------------------------------------------
524
525 dnl WX_SYS_LARGEFILE_TEST
526 dnl
527 dnl NB: original autoconf test was checking if compiler supported 6 bit off_t
528 dnl arithmetic properly but this failed miserably with gcc under Linux
529 dnl whereas the system still supports 64 bit files, so now simply check
530 dnl that off_t is big enough
531 define(WX_SYS_LARGEFILE_TEST,
532 [typedef struct {
533 unsigned int field: sizeof(off_t) == 8;
534 } wxlf;
535 ])
536
537
538 dnl WX_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE, CACHE-VAR)
539 define(WX_SYS_LARGEFILE_MACRO_VALUE,
540 [
541 AC_CACHE_CHECK([for $1 value needed for large files], [$3],
542 [
543 AC_TRY_COMPILE([#define $1 $2
544 #include <sys/types.h>],
545 WX_SYS_LARGEFILE_TEST,
546 [$3=$2],
547 [$3=no])
548 ]
549 )
550
551 if test "$$3" != no; then
552 wx_largefile=yes
553 AC_DEFINE_UNQUOTED([$1], [$$3])
554 fi
555 ])
556
557
558 dnl AC_SYS_LARGEFILE
559 dnl ----------------
560 dnl By default, many hosts won't let programs access large files;
561 dnl one must use special compiler options to get large-file access to work.
562 dnl For more details about this brain damage please see:
563 dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
564 AC_DEFUN([AC_SYS_LARGEFILE],
565 [AC_ARG_ENABLE(largefile,
566 [ --disable-largefile omit support for large files])
567 if test "$enable_largefile" != no; then
568 dnl _FILE_OFFSET_BITS==64 is needed for Linux, Solaris, ...
569 dnl _LARGE_FILES -- for AIX
570 wx_largefile=no
571 WX_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, 64, ac_cv_sys_file_offset_bits)
572 if test "x$wx_largefile" != "xyes"; then
573 WX_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1, ac_cv_sys_large_files)
574 fi
575
576 AC_MSG_CHECKING(if large file support is available)
577 if test "x$wx_largefile" = "xyes"; then
578 AC_DEFINE(HAVE_LARGEFILE_SUPPORT)
579 fi
580 AC_MSG_RESULT($wx_largefile)
581 fi
582 ])
583
584
585 dnl Available from the GNU Autoconf Macro Archive at:
586 dnl http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_const_cast.html
587 dnl
588 AC_DEFUN([AC_CXX_CONST_CAST],
589 [AC_CACHE_CHECK(whether the compiler supports const_cast<>,
590 ac_cv_cxx_const_cast,
591 [AC_LANG_SAVE
592 AC_LANG_CPLUSPLUS
593 AC_TRY_COMPILE(,[int x = 0;const int& y = x;int& z = const_cast<int&>(y);return z;],
594 ac_cv_cxx_const_cast=yes, ac_cv_cxx_const_cast=no)
595 AC_LANG_RESTORE
596 ])
597 if test "$ac_cv_cxx_const_cast" = yes; then
598 AC_DEFINE(HAVE_CONST_CAST,,[define if the compiler supports const_cast<>])
599 fi
600 ])
601
602 dnl and http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_static_cast.html
603 AC_DEFUN([AC_CXX_STATIC_CAST],
604 [AC_CACHE_CHECK(whether the compiler supports static_cast<>,
605 ac_cv_cxx_static_cast,
606 [AC_LANG_SAVE
607 AC_LANG_CPLUSPLUS
608 AC_TRY_COMPILE([#include <typeinfo>
609 class Base { public : Base () {} virtual void f () = 0; };
610 class Derived : public Base { public : Derived () {} virtual void f () {} };
611 int g (Derived&) { return 0; }],[
612 Derived d; Base& b = d; Derived& s = static_cast<Derived&> (b); return g (s);],
613 ac_cv_cxx_static_cast=yes, ac_cv_cxx_static_cast=no)
614 AC_LANG_RESTORE
615 ])
616 if test "$ac_cv_cxx_static_cast" = yes; then
617 AC_DEFINE(HAVE_STATIC_CAST,, [define if the compiler supports static_cast<>])
618 fi
619 ])