Restore AC_CHECK_HEADERS in preference to AC_CHECK_HEADER so that the HAVE_*
[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
12 dnl ===========================================================================
13 dnl Objective-C(++) related macros
14 dnl ===========================================================================
15 m4_define([AC_WX_LANG_OBJECTIVEC],
16 [AC_LANG(C)
17 ac_ext=m
18 ])
19
20 m4_define([AC_WX_LANG_OBJECTIVECPLUSPLUS],
21 [AC_LANG(C++)
22 ac_ext=mm
23 ])
24
25 dnl ===========================================================================
26 dnl macros to find the a file in the list of include/lib paths
27 dnl ===========================================================================
28
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],
34 [
35 ac_find_includes=
36 for ac_dir in $1 /usr/include;
37   do
38     if test -f "$ac_dir/$2"; then
39       ac_find_includes=$ac_dir
40       break
41     fi
42   done
43 ])
44
45 dnl ---------------------------------------------------------------------------
46 dnl call WX_PATH_FIND_LIBRARIES(search path, lib name), sets ac_find_libraries
47 dnl to the full name of the file that was found or leaves it empty if not found
48 dnl ---------------------------------------------------------------------------
49 AC_DEFUN([WX_PATH_FIND_LIBRARIES],
50 [
51   ac_find_libraries=
52   for ac_dir in $1;
53   do
54     for ac_extension in a so sl dylib dll.a; do
55       if test -f "$ac_dir/lib$2.$ac_extension"; then
56         ac_find_libraries=$ac_dir
57         break 2
58       fi
59     done
60   done
61 ])
62
63 dnl ---------------------------------------------------------------------------
64 dnl return list of standard library paths
65 dnl ---------------------------------------------------------------------------
66 dnl return all default locations:
67 dnl   - /usr/lib: standard
68 dnl   - /usr/lib32: n32 ABI on IRIX
69 dnl   - /usr/lib64: n64 ABI on IRIX
70 dnl   - /usr/lib/64: 64 bit ABI on Solaris and Linux x86-64
71 dnl
72 dnl NB: if any of directories in the list is not a subdir of /usr, code setting
73 dnl     wx_cv_std_libpath needs to be updated
74 AC_DEFUN([WX_STD_LIBPATH], [/usr/lib /usr/lib32 /usr/lib/64 /usr/lib64])
75
76 dnl ---------------------------------------------------------------------------
77 dnl Path to include, already defined
78 dnl ---------------------------------------------------------------------------
79 AC_DEFUN([WX_INCLUDE_PATH_EXIST],
80 [
81   dnl never add -I/usr/include to the CPPFLAGS
82   if test "x$1" = "x/usr/include"; then
83     ac_path_to_include=""
84   else
85     echo "$2" | grep "\-I$1" > /dev/null
86     result=$?
87     if test $result = 0; then
88       ac_path_to_include=""
89     else
90       ac_path_to_include=" -I$1"
91     fi
92   fi
93 ])
94
95 dnl ---------------------------------------------------------------------------
96 dnl Usage: WX_LINK_PATH_EXIST(path, libpath)
97 dnl
98 dnl Set ac_path_to_link to nothing if path is already in libpath of to -Lpath
99 dnl if it is not, so that libpath can be set to "$libpath$ac_path_to_link"
100 dnl after calling this function
101 dnl ---------------------------------------------------------------------------
102 AC_DEFUN([WX_LINK_PATH_EXIST],
103 [
104   dnl never add -L/usr/libXXX explicitely to libpath
105   if test "$1" = "default location"; then
106     ac_path_to_link=""
107   else
108     echo "$2" | grep "\-L$1" > /dev/null
109     result=$?
110     if test $result = 0; then
111       ac_path_to_link=""
112     else
113       ac_path_to_link=" -L$1"
114     fi
115   fi
116 ])
117
118 dnl ===========================================================================
119 dnl C++ features test
120 dnl ===========================================================================
121
122 dnl ---------------------------------------------------------------------------
123 dnl WX_CPP_NEW_HEADERS checks whether the compiler has "new" <iostream> header
124 dnl or only the old <iostream.h> one - it may be generally assumed that if
125 dnl <iostream> exists, the other "new" headers (without .h) exist too.
126 dnl
127 dnl call WX_CPP_NEW_HEADERS(actiof-if-true, action-if-false)
128 dnl ---------------------------------------------------------------------------
129
130 AC_DEFUN([WX_CPP_NEW_HEADERS],
131 [
132     AC_LANG_SAVE
133     AC_LANG_CPLUSPLUS
134
135     AC_CHECK_HEADERS([iostream],,, [ ])
136
137     if test "$ac_cv_header_iostream" = "yes" ; then
138       ifelse([$1], , :, [$1])
139     else
140       ifelse([$2], , :, [$2])
141     fi
142
143     AC_LANG_RESTORE
144 ])
145
146 dnl ---------------------------------------------------------------------------
147 dnl WX_CPP_BOOL checks whether the C++ compiler has a built in bool type
148 dnl
149 dnl call WX_CPP_BOOL - will define HAVE_BOOL if the compiler supports bool
150 dnl ---------------------------------------------------------------------------
151
152 AC_DEFUN([WX_CPP_BOOL],
153 [
154   AC_CACHE_CHECK([if C++ compiler supports bool], wx_cv_cpp_bool,
155   [
156     AC_LANG_SAVE
157     AC_LANG_CPLUSPLUS
158
159     AC_TRY_COMPILE(
160       [
161       ],
162       [
163         bool b = true;
164
165         return 0;
166       ],
167       [
168         wx_cv_cpp_bool=yes
169       ],
170       [
171         wx_cv_cpp_bool=no
172       ]
173     )
174
175     AC_LANG_RESTORE
176   ])
177
178   if test "$wx_cv_cpp_bool" = "yes"; then
179     AC_DEFINE(HAVE_BOOL)
180   fi
181 ])
182
183 dnl ---------------------------------------------------------------------------
184 dnl WX_CPP_EXPLICIT checks whether the C++ compiler support the explicit
185 dnl keyword and defines HAVE_EXPLICIT if this is the case
186 dnl ---------------------------------------------------------------------------
187
188 AC_DEFUN([WX_CPP_EXPLICIT],
189 [
190   AC_CACHE_CHECK([if C++ compiler supports the explicit keyword],
191                  wx_cv_explicit,
192   [
193     AC_LANG_SAVE
194     AC_LANG_CPLUSPLUS
195
196     dnl do the test in 2 steps: first check that the compiler knows about the
197     dnl explicit keyword at all and then verify that it really honours it
198     AC_TRY_COMPILE(
199       [
200         class Foo { public: explicit Foo(int) {} };
201       ],
202       [
203         return 0;
204       ],
205       [
206         AC_TRY_COMPILE(
207             [
208                 class Foo { public: explicit Foo(int) {} };
209                 static void TakeFoo(const Foo& foo) { }
210             ],
211             [
212                 TakeFoo(17);
213                 return 0;
214             ],
215             wx_cv_explicit=no,
216             wx_cv_explicit=yes
217         )
218       ],
219       wx_cv_explicit=no
220     )
221
222     AC_LANG_RESTORE
223   ])
224
225   if test "$wx_cv_explicit" = "yes"; then
226     AC_DEFINE(HAVE_EXPLICIT)
227   fi
228 ])
229
230 dnl ---------------------------------------------------------------------------
231 dnl WX_CHECK_FUNCS(FUNCTIONS...,
232 dnl                [ACTION-IF-FOUND],
233 dnl                [ACTION-IF-NOT-FOUND],
234 dnl                [EXTRA-DEFINES-AND-INCLUDES],
235 dnl                [EXTRA-TEST-CODE])
236 dnl
237 dnl Checks that the functions listed in FUNCTIONS exist in the headers and the
238 dnl libs. For each function, if it is found then defines 'HAVE_FUNCTION' and
239 dnl executes ACTION-IF-FOUND, otherwise executes ACTION-IF-NOT-FOUND.
240 dnl
241 dnl The code from EXTRA-DEFINES-AND-INCLUDES is inserted into the test before
242 dnl the default headers are included, and EXTRA-TEST-CODE is inserted into
243 dnl the main() function after the default test for existence.
244 dnl
245 dnl Examples:
246 dnl   # the simple case
247 dnl   WX_CHECK_FUNCS(stat)
248 dnl   # use break to finish the loop early
249 dnl   WX_CHECK_FUNCS(mkstemp mktemp, break)
250 dnl   # extra defines
251 dnl   WX_CHECK_FUNCS(strtok_r, [], [], [#define _RREENTRANT])
252 dnl   # extra includes
253 dnl   WX_CHECK_FUNCS(swprintf, [], [], [#include <wchar.h>])
254 dnl   # checking the signature with extra test code
255 dnl   WX_CHECK_FUNCS(gettimeofday, [], [], [#include <sys/time.h>]
256 dnl     [struct timeval tv; struct timezone tz; gettimeofday(&tv, &tz)])
257 dnl ---------------------------------------------------------------------------
258
259 AC_DEFUN([WX_CHECK_FUNCS],
260 [
261   for wx_func in $1
262   do
263     AC_CACHE_CHECK(
264       [for $wx_func],
265       [wx_cv_func_$wx_func],
266       [
267         AC_LINK_IFELSE(
268           [
269             AC_LANG_PROGRAM(
270               [
271                 $4
272                 AC_INCLUDES_DEFAULT
273               ],
274               [
275                 #ifndef $wx_func
276                   &$wx_func;
277                 #endif
278                 $5
279               ])
280           ],
281           [eval wx_cv_func_$wx_func=yes],
282           [eval wx_cv_func_$wx_func=no])
283       ])
284
285     if eval test \$wx_cv_func_$wx_func = yes
286     then
287       AC_DEFINE_UNQUOTED([HAVE_`echo $wx_func | tr 'a-z' 'A-Z'`])
288       $2
289     else
290       :
291       $3
292     fi
293   done
294 ])
295
296 dnl ---------------------------------------------------------------------------
297 dnl a slightly better AC_C_BIGENDIAN macro which allows cross-compiling
298 dnl ---------------------------------------------------------------------------
299
300 AC_DEFUN([WX_C_BIGENDIAN],
301 [AC_CACHE_CHECK([whether byte ordering is bigendian], ac_cv_c_bigendian,
302 [ac_cv_c_bigendian=unknown
303 # See if sys/param.h defines the BYTE_ORDER macro.
304 AC_TRY_COMPILE([#include <sys/types.h>
305 #include <sys/param.h>], [
306 #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
307  bogus endian macros
308 #endif], [# It does; now see whether it defined to BIG_ENDIAN or not.
309 AC_TRY_COMPILE([#include <sys/types.h>
310 #include <sys/param.h>], [
311 #if BYTE_ORDER != BIG_ENDIAN
312  not big endian
313 #endif], ac_cv_c_bigendian=yes, ac_cv_c_bigendian=no)])
314 if test $ac_cv_c_bigendian = unknown; then
315 AC_TRY_RUN([main () {
316   /* Are we little or big endian?  From Harbison&Steele.  */
317   union
318   {
319     long l;
320     char c[sizeof (long)];
321   } u;
322   u.l = 1;
323   exit (u.c[sizeof (long) - 1] == 1);
324 }], [ac_cv_c_bigendian=no], [ac_cv_c_bigendian=yes], [ac_cv_c_bigendian=unknown])
325 fi])
326 if test $ac_cv_c_bigendian = unknown; then
327   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])
328 fi
329 if test $ac_cv_c_bigendian = yes; then
330   AC_DEFINE(WORDS_BIGENDIAN)
331 fi
332 ])
333
334 dnl ---------------------------------------------------------------------------
335 dnl override AC_ARG_ENABLE/WITH to cache the results in .cache file
336 dnl ---------------------------------------------------------------------------
337
338 AC_DEFUN([WX_ARG_CACHE_INIT],
339         [
340           wx_arg_cache_file="configarg.cache"
341           echo "loading argument cache $wx_arg_cache_file"
342           rm -f ${wx_arg_cache_file}.tmp
343           touch ${wx_arg_cache_file}.tmp
344           touch ${wx_arg_cache_file}
345         ])
346
347 AC_DEFUN([WX_ARG_CACHE_FLUSH],
348         [
349           echo "saving argument cache $wx_arg_cache_file"
350           mv ${wx_arg_cache_file}.tmp ${wx_arg_cache_file}
351         ])
352
353 dnl return the name of the variable to store the value of the given
354 dnl WX_ARG_WITH/ENABLE option
355 AC_DEFUN([WX_ARG_CACHE_NAME],)
356
357 dnl this macro checks for a three-valued command line --with argument:
358 dnl   possible arguments are 'yes', 'no', 'sys', or 'builtin'
359 dnl usage: WX_ARG_SYS_WITH(option, helpmessage, variable-name)
360 dnl
361 dnl the default value (used if the option is not specified at all) is the value
362 dnl of wxUSE_ALL_FEATURES (which is "yes" by default but can be changed by
363 dnl giving configure --disable-all-features option)
364 AC_DEFUN([WX_ARG_SYS_WITH],
365         [
366           AC_MSG_CHECKING([for --with-$1])
367           no_cache=0
368           AC_ARG_WITH($1, [$2],
369                       [
370                         if test "$withval" = yes; then
371                           AS_TR_SH(wx_cv_use_$1)='$3=yes'
372                         elif test "$withval" = no; then
373                           AS_TR_SH(wx_cv_use_$1)='$3=no'
374                         elif test "$withval" = sys; then
375                           AS_TR_SH(wx_cv_use_$1)='$3=sys'
376                         elif test "$withval" = builtin; then
377                           AS_TR_SH(wx_cv_use_$1)='$3=builtin'
378                         else
379                           AC_MSG_ERROR([Invalid value for --with-$1: should be yes, no, sys, or builtin])
380                         fi
381                       ],
382                       [
383                         LINE=`grep "^$3=" ${wx_arg_cache_file}`
384                         if test "x$LINE" != x ; then
385                           eval "DEFAULT_$LINE"
386                         else
387                           no_cache=1
388                         fi
389
390                         AS_TR_SH(wx_cv_use_$1)='$3=${'DEFAULT_$3":-$wxUSE_ALL_FEATURES}"
391                       ])
392
393           eval "$AS_TR_SH(wx_cv_use_$1)"
394           if test "$no_cache" != 1; then
395             echo $AS_TR_SH(wx_cv_use_$1) >> ${wx_arg_cache_file}.tmp
396           fi
397
398           if test "$$3" = yes; then
399             AC_MSG_RESULT(yes)
400           elif test "$$3" = no; then
401             AC_MSG_RESULT(no)
402           elif test "$$3" = sys; then
403             AC_MSG_RESULT([system version])
404           elif test "$$3" = builtin; then
405             AC_MSG_RESULT([builtin version])
406           else
407             AC_MSG_ERROR([Invalid value for --with-$1: should be yes, no, sys, or builtin])
408           fi
409         ])
410
411 dnl this macro checks for a command line argument and caches the result
412 dnl usage: WX_ARG_WITH(option, helpmessage, variable-name, [withstring])
413 AC_DEFUN([WX_ARG_WITH],
414         [
415           withstring=$4
416           defaultval=$wxUSE_ALL_FEATURES
417           if test -z "$defaultval"; then
418               if test x"$withstring" = xwithout; then
419                   defaultval=yes
420               else
421                   defaultval=no
422               fi
423           fi
424           AC_MSG_CHECKING([for --${withstring:-with}-$1])
425           no_cache=0
426           AC_ARG_WITH($1, [$2],
427                       [
428                         if test "$withval" = yes; then
429                           AS_TR_SH(wx_cv_use_$1)='$3=yes'
430                         else
431                           AS_TR_SH(wx_cv_use_$1)='$3=no'
432                         fi
433                       ],
434                       [
435                         LINE=`grep "^$3=" ${wx_arg_cache_file}`
436                         if test "x$LINE" != x ; then
437                           eval "DEFAULT_$LINE"
438                         else
439                           no_cache=1
440                         fi
441
442                         AS_TR_SH(wx_cv_use_$1)='$3=${'DEFAULT_$3":-$defaultval}"
443                       ])
444
445           eval "$AS_TR_SH(wx_cv_use_$1)"
446           if test "$no_cache" != 1; then
447             echo $AS_TR_SH(wx_cv_use_$1) >> ${wx_arg_cache_file}.tmp
448           fi
449
450           if test x"$withstring" = xwithout; then
451             if test $$3 = yes; then
452               result=no
453             else
454               result=yes
455             fi
456           else
457             result=$$3
458           fi
459
460           AC_MSG_RESULT($result)
461         ])
462
463 dnl same as WX_ARG_WITH but makes it clear that the option is enabled by default
464 AC_DEFUN([WX_ARG_WITHOUT], [WX_ARG_WITH($1, [$2], $3, without)])
465
466 dnl like WX_ARG_WITH but uses AC_ARG_ENABLE instead of AC_ARG_WITH
467 dnl usage: WX_ARG_ENABLE(option, helpmessage, var, [enablestring], [default])
468 dnl
469 dnl enablestring can be omitted or a literal string "disable" and allows to
470 dnl show "checking for --disable-foo" message when running configure instead of
471 dnl the default "checking for --enable-foo" one whih is useful for the options
472 dnl enabled by default
473 dnl
474 dnl the "default" argument can be omitted or contain the default value to use
475 dnl for the option if it's unspecified
476 AC_DEFUN([WX_ARG_ENABLE],
477         [
478           enablestring=$4
479           defaultval=$5
480           if test -z "$defaultval"; then
481               if test x"$enablestring" = xdisable; then
482                   defaultval=yes
483               else
484                   defaultval=no
485               fi
486           fi
487
488           AC_MSG_CHECKING([for --${enablestring:-enable}-$1])
489           no_cache=0
490           AC_ARG_ENABLE($1, [$2],
491                         [
492                           if test "$enableval" = yes; then
493                             AS_TR_SH(wx_cv_use_$1)='$3=yes'
494                           else
495                             AS_TR_SH(wx_cv_use_$1)='$3=no'
496                           fi
497                         ],
498                         [
499                           LINE=`grep "^$3=" ${wx_arg_cache_file}`
500                           if test "x$LINE" != x ; then
501                             eval "DEFAULT_$LINE"
502                           else
503                             no_cache=1
504                           fi
505
506                           AS_TR_SH(wx_cv_use_$1)='$3=${'DEFAULT_$3":-$defaultval}"
507                         ])
508
509           eval "$AS_TR_SH(wx_cv_use_$1)"
510           if test "$no_cache" != 1; then
511             echo $AS_TR_SH(wx_cv_use_$1) >> ${wx_arg_cache_file}.tmp
512           fi
513
514           if test x"$enablestring" = xdisable; then
515             if test $$3 = yes; then
516               result=no
517             else
518               result=yes
519             fi
520           else
521             result=$$3
522           fi
523
524           AC_MSG_RESULT($result)
525         ])
526
527 dnl the same as WX_ARG_ENABLE but makes it more clear that the option is
528 dnl enabled by default
529 AC_DEFUN([WX_ARG_DISABLE], [WX_ARG_ENABLE($1, [$2], $3, disable)])
530
531 dnl same as WX_ARG_ENABLE but defaults to wxUSE_ALL_FEATURES instead of "yes"
532 AC_DEFUN([WX_ARG_FEATURE], [WX_ARG_ENABLE($1, [$2], $3,, $wxUSE_ALL_FEATURES)])
533
534 dnl Like WX_ARG_ENABLE but accepts a parameter.
535 dnl
536 dnl Usage:
537 dnl   WX_ARG_ENABLE_PARAM(option, helpmessage, variable-name, enablestring)
538 dnl
539 dnl Example:
540 dnl   WX_ARG_ENABLE_PARAM(foo, [[  --enable-foo[=bar] use foo]], wxUSE_FOO)
541 dnl
542 dnl  --enable-foo       wxUSE_FOO=yes
543 dnl  --disable-foo      wxUSE_FOO=no
544 dnl  --enable-foo=bar   wxUSE_FOO=bar
545 dnl  <not given>        value from configarg.cache or
546 dnl                     wxUSE_FOO=$DEFAULT_wxUSE_FOO
547 dnl
548 AC_DEFUN([WX_ARG_ENABLE_PARAM],
549         [
550           enablestring=$4
551           AC_MSG_CHECKING([for --${enablestring:-enable}-$1])
552           no_cache=0
553           AC_ARG_ENABLE($1, [$2],
554                         [
555                           wx_cv_use_$1="$3='$enableval'"
556                         ],
557                         [
558                           LINE=`grep "^$3=" ${wx_arg_cache_file}`
559                           if test "x$LINE" != x ; then
560                             eval "DEFAULT_$LINE"
561                           else
562                             no_cache=1
563                           fi
564
565                           wx_cv_use_$1='$3='$DEFAULT_$3
566                         ])
567
568           eval "$wx_cv_use_$1"
569           if test "$no_cache" != 1; then
570             echo $wx_cv_use_$1 >> ${wx_arg_cache_file}.tmp
571           fi
572
573           AC_MSG_RESULT([$$3])
574         ])
575
576 dnl ===========================================================================
577 dnl Linker features test
578 dnl ===========================================================================
579
580 dnl ---------------------------------------------------------------------------
581 dnl WX_VERSIONED_SYMBOLS checks whether the linker can create versioned
582 dnl symbols. If it can, sets LDFLAGS_VERSIONING to $CXX flags needed to use
583 dnl version script file named versionfile
584 dnl
585 dnl call WX_VERSIONED_SYMBOLS(versionfile)
586 dnl ---------------------------------------------------------------------------
587 AC_DEFUN([WX_VERSIONED_SYMBOLS],
588 [
589     case "${host}" in
590         *-*-cygwin* | *-*-mingw* )
591             dnl although ld does support version script option on these
592             dnl platforms, it doesn't make much sense to use it under Win32
593             dnl and, moreover, this breaks linking because of a bug in handling
594             dnl paths in -Wl,--version-script,path option (if we ever do need
595             dnl to use it for cygwin/mingw32, keep in mind that replacing last
596             dnl comma with the equal sign works) so
597             dnl simply disable it
598             wx_cv_version_script=no
599             ;;
600
601         *)
602             AC_CACHE_CHECK([if the linker accepts --version-script], wx_cv_version_script,
603             [
604                 echo "VER_1 { *; };" >conftest.sym
605                 echo "int main() { return 0; }" >conftest.cpp
606
607                 if AC_TRY_COMMAND([
608                         $CXX -o conftest.output $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.cpp
609                         -Wl,--version-script,conftest.sym >/dev/null 2>conftest.stderr]) ; then
610                   if test -s conftest.stderr ; then
611                       wx_cv_version_script=no
612                   else
613                       wx_cv_version_script=yes
614                   fi
615                 else
616                   wx_cv_version_script=no
617                 fi
618
619                 dnl There's a problem in some old linkers with --version-script that
620                 dnl can cause linking to fail when you have objects with vtables in
621                 dnl libs 3 deep.  This is known to happen in netbsd and openbsd with
622                 dnl ld 2.11.2.
623                 dnl
624                 dnl To test for this we need to make some shared libs and
625                 dnl unfortunately we can't be sure of the right way to do that. If the
626                 dnl first two compiles don't succeed then it looks like the test isn't
627                 dnl working and the result is ignored, but if OTOH the first two
628                 dnl succeed but the third does not then the bug has been detected and
629                 dnl the --version-script flag is dropped.
630                 if test $wx_cv_version_script = yes
631                 then
632                   echo "struct B { virtual ~B() { } }; \
633                         struct D : public B { }; \
634                         void F() { D d; }" > conftest.cpp
635
636                   if AC_TRY_COMMAND([
637                         $CXX -shared -fPIC -o conftest1.output $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.cpp
638                         -Wl,--version-script,conftest.sym >/dev/null 2>/dev/null]) &&
639                      AC_TRY_COMMAND([
640                         $CXX -shared -fPIC -o conftest2.output $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.cpp
641                         -Wl,--version-script,conftest.sym conftest1.output >/dev/null 2>/dev/null])
642                   then
643                     if AC_TRY_COMMAND([
644                           $CXX -shared -fPIC -o conftest3.output $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.cpp
645                           -Wl,--version-script,conftest.sym conftest2.output conftest1.output >/dev/null 2>/dev/null])
646                     then
647                       wx_cv_version_script=yes
648                     else
649                       wx_cv_version_script=no
650                     fi
651                   fi
652                 fi
653
654                 rm -f conftest.output conftest.stderr conftest.sym conftest.cpp
655                 rm -f conftest1.output conftest2.output conftest3.output
656             ])
657
658             if test $wx_cv_version_script = yes ; then
659                 LDFLAGS_VERSIONING="-Wl,--version-script,$1"
660             fi
661             ;;
662     esac
663 ])
664
665
666 dnl ===========================================================================
667 dnl "3rd party" macros included here because they are not widely available
668 dnl ===========================================================================
669
670 dnl ---------------------------------------------------------------------------
671 dnl test for availability of iconv()
672 dnl ---------------------------------------------------------------------------
673
674 dnl From Bruno Haible.
675
676 AC_DEFUN([AM_ICONV],
677 [
678   dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
679   dnl those with the standalone portable GNU libiconv installed).
680
681   AC_ARG_WITH([libiconv-prefix],
682 [  --with-libiconv-prefix=DIR  search for libiconv in DIR/include and DIR/lib], [
683     for dir in `echo "$withval" | tr : ' '`; do
684       if test -d $dir/include; then CPPFLAGS="$CPPFLAGS -I$dir/include"; fi
685       if test -d $dir/lib; then LDFLAGS="$LDFLAGS -L$dir/lib"; fi
686     done
687    ])
688
689   AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
690     am_cv_func_iconv="no, consider installing GNU libiconv"
691     am_cv_lib_iconv=no
692     AC_TRY_LINK([#include <stdlib.h>
693 #include <iconv.h>],
694       [iconv_t cd = iconv_open("","");
695        iconv(cd,NULL,NULL,NULL,NULL);
696        iconv_close(cd);],
697       am_cv_func_iconv=yes)
698     if test "$am_cv_func_iconv" != yes; then
699       am_save_LIBS="$LIBS"
700       LIBS="$LIBS -liconv"
701       AC_TRY_LINK([#include <stdlib.h>
702 #include <iconv.h>],
703         [iconv_t cd = iconv_open("","");
704          iconv(cd,NULL,NULL,NULL,NULL);
705          iconv_close(cd);],
706         am_cv_lib_iconv=yes
707         am_cv_func_iconv=yes)
708       LIBS="$am_save_LIBS"
709     fi
710   ])
711   if test "$am_cv_func_iconv" = yes; then
712     AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
713     AC_CACHE_CHECK([if iconv needs const], wx_cv_func_iconv_const,
714       AC_TRY_COMPILE([
715 #include <stdlib.h>
716 #include <iconv.h>
717 extern
718 #ifdef __cplusplus
719 "C"
720 #endif
721 #if defined(__STDC__) || defined(__cplusplus)
722 size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
723 #else
724 size_t iconv();
725 #endif
726         ],
727         [],
728         wx_cv_func_iconv_const="no",
729         wx_cv_func_iconv_const="yes"
730       )
731     )
732
733     iconv_const=
734     if test "x$wx_cv_func_iconv_const" = "xyes"; then
735         iconv_const="const"
736     fi
737
738     AC_DEFINE_UNQUOTED(ICONV_CONST, $iconv_const,
739       [Define as const if the declaration of iconv() needs const.])
740   fi
741   LIBICONV=
742   if test "$am_cv_lib_iconv" = yes; then
743     LIBICONV="-liconv"
744   fi
745   AC_SUBST(LIBICONV)
746 ])
747
748 dnl ---------------------------------------------------------------------------
749 dnl AC_SYS_LARGEFILE (partly based on the code from autoconf 2.5x)
750 dnl ---------------------------------------------------------------------------
751
752 dnl WX_SYS_LARGEFILE_TEST
753 dnl
754 dnl NB: original autoconf test was checking if compiler supported 6 bit off_t
755 dnl     arithmetic properly but this failed miserably with gcc under Linux
756 dnl     whereas the system still supports 64 bit files, so now simply check
757 dnl     that off_t is big enough
758 define(WX_SYS_LARGEFILE_TEST,
759 [typedef struct {
760     unsigned int field: sizeof(off_t) == 8;
761 } wxlf;
762 ])
763
764
765 dnl WX_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE, CACHE-VAR)
766 define(WX_SYS_LARGEFILE_MACRO_VALUE,
767 [
768     AC_CACHE_CHECK([for $1 value needed for large files], [$3],
769         [
770           AC_TRY_COMPILE([#define $1 $2
771                           #include <sys/types.h>],
772                          WX_SYS_LARGEFILE_TEST,
773                          [$3=$2],
774                          [$3=no])
775         ]
776     )
777
778     if test "$$3" != no; then
779         wx_largefile=yes
780         AC_DEFINE_UNQUOTED([$1], [$$3])
781     fi
782 ])
783
784
785 dnl AC_SYS_LARGEFILE
786 dnl ----------------
787 dnl By default, many hosts won't let programs access large files;
788 dnl one must use special compiler options to get large-file access to work.
789 dnl For more details about this brain damage please see:
790 dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
791 AC_DEFUN([AC_SYS_LARGEFILE],
792 [AC_ARG_ENABLE(largefile,
793                [  --disable-largefile     omit support for large files])
794 if test "$enable_largefile" != no; then
795     dnl _FILE_OFFSET_BITS==64 is needed for Linux, Solaris, ...
796     dnl _LARGE_FILES -- for AIX
797     wx_largefile=no
798     WX_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, 64, ac_cv_sys_file_offset_bits)
799     if test "x$wx_largefile" != "xyes"; then
800         WX_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1, ac_cv_sys_large_files)
801     fi
802
803     AC_MSG_CHECKING(if large file support is available)
804     if test "x$wx_largefile" = "xyes"; then
805         AC_DEFINE(HAVE_LARGEFILE_SUPPORT)
806     fi
807     AC_MSG_RESULT($wx_largefile)
808 fi
809 ])
810
811
812 dnl Available from the GNU Autoconf Macro Archive at:
813 dnl http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_const_cast.html
814 dnl
815 AC_DEFUN([AC_CXX_CONST_CAST],
816 [AC_CACHE_CHECK(whether the compiler supports const_cast<>,
817 ac_cv_cxx_const_cast,
818 [AC_LANG_SAVE
819  AC_LANG_CPLUSPLUS
820  AC_TRY_COMPILE(,[int x = 0;const int& y = x;int& z = const_cast<int&>(y);return z;],
821  ac_cv_cxx_const_cast=yes, ac_cv_cxx_const_cast=no)
822  AC_LANG_RESTORE
823 ])
824 if test "$ac_cv_cxx_const_cast" = yes; then
825   AC_DEFINE(HAVE_CONST_CAST,,[define if the compiler supports const_cast<>])
826 fi
827 ])
828
829 dnl http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_reinterpret_cast.html
830 AC_DEFUN([AC_CXX_REINTERPRET_CAST],
831 [AC_CACHE_CHECK(whether the compiler supports reinterpret_cast<>,
832 ac_cv_cxx_reinterpret_cast,
833 [AC_LANG_SAVE
834  AC_LANG_CPLUSPLUS
835  AC_TRY_COMPILE([#include <typeinfo>
836 class Base { public : Base () {} virtual void f () = 0;};
837 class Derived : public Base { public : Derived () {} virtual void f () {} };
838 class Unrelated { public : Unrelated () {} };
839 int g (Unrelated&) { return 0; }],[
840 Derived d;Base& b=d;Unrelated& e=reinterpret_cast<Unrelated&>(b);return g(e);],
841  ac_cv_cxx_reinterpret_cast=yes, ac_cv_cxx_reinterpret_cast=no)
842  AC_LANG_RESTORE
843 ])
844 if test "$ac_cv_cxx_reinterpret_cast" = yes; then
845   AC_DEFINE(HAVE_REINTERPRET_CAST,,
846             [define if the compiler supports reinterpret_cast<>])
847 fi
848 ])
849
850 dnl and http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_static_cast.html
851 AC_DEFUN([AC_CXX_STATIC_CAST],
852 [AC_CACHE_CHECK(whether the compiler supports static_cast<>,
853 ac_cv_cxx_static_cast,
854 [AC_LANG_SAVE
855  AC_LANG_CPLUSPLUS
856  AC_TRY_COMPILE([#include <typeinfo>
857 class Base { public : Base () {} virtual void f () = 0; };
858 class Derived : public Base { public : Derived () {} virtual void f () {} };
859 int g (Derived&) { return 0; }],[
860 Derived d; Base& b = d; Derived& s = static_cast<Derived&> (b); return g (s);],
861  ac_cv_cxx_static_cast=yes, ac_cv_cxx_static_cast=no)
862  AC_LANG_RESTORE
863 ])
864 if test "$ac_cv_cxx_static_cast" = yes; then
865   AC_DEFINE(HAVE_STATIC_CAST,, [define if the compiler supports static_cast<>])
866 fi
867 ])
868
869 dnl http://autoconf-archive.cryp.to/ac_cxx_dynamic_cast.html
870 AC_DEFUN([AC_CXX_DYNAMIC_CAST],
871 [AC_CACHE_CHECK(whether the compiler supports dynamic_cast<>,
872 ac_cv_cxx_dynamic_cast,
873 [AC_LANG_SAVE
874  AC_LANG_CPLUSPLUS
875  AC_TRY_COMPILE([#include <typeinfo>
876 class Base { public : Base () {} virtual void f () = 0;};
877 class Derived : public Base { public : Derived () {} virtual void f () {} };],[
878 Derived d; Base& b=d; return dynamic_cast<Derived*>(&b) ? 0 : 1;],
879  ac_cv_cxx_dynamic_cast=yes, ac_cv_cxx_dynamic_cast=no)
880  AC_LANG_RESTORE
881 ])
882 if test "$ac_cv_cxx_dynamic_cast" = yes; then
883   AC_DEFINE(HAVE_DYNAMIC_CAST,,[define if the compiler supports dynamic_cast<>])
884 fi
885 ])
886