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