2003-03-31 Eric Christopher <echristo@redhat.com>
[official-gcc.git] / libstdc++-v3 / acinclude.m4
blob4f72efaf8cda452a924621f3536a0fa01402cac8
1 dnl
2 dnl Initialize basic configure bits, set toplevel_srcdir for Makefiles.
3 dnl
4 dnl GLIBCPP_TOPREL_CONFIGURE
5 AC_DEFUN(GLIBCPP_TOPREL_CONFIGURE, [
6   dnl Default to --enable-multilib (this is also passed by default
7   dnl from the ubercommon-top-level configure)
8   AC_ARG_ENABLE(multilib,
9   [  --enable-multilib       build hella library versions (default)],
10   [case "${enableval}" in
11     yes) multilib=yes ;;
12     no)  multilib=no ;;
13     *)   AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
14    esac], [multilib=yes])dnl
16   # When building with srcdir == objdir, links to the source files will
17   # be created in directories within the target_subdir.  We have to
18   # adjust toplevel_srcdir accordingly, so that configure finds
19   # install-sh and other auxiliary files that live in the top-level
20   # source directory.
21   if test "${srcdir}" = "."; then
22     if test -z "${with_target_subdir}"; then
23       toprel=".."
24     else
25       if test "${with_target_subdir}" != "."; then
26         toprel="${with_multisrctop}../.."
27       else
28         toprel="${with_multisrctop}.."
29       fi
30     fi
31   else
32     toprel=".."
33   fi
34   AC_CONFIG_AUX_DIR(${srcdir}/$toprel)
35   toplevel_srcdir=\${top_srcdir}/$toprel
36   AC_SUBST(toplevel_srcdir)
39 dnl
40 dnl Initialize the rest of the library configury.
41 dnl
42 dnl GLIBCPP_CONFIGURE
43 AC_DEFUN(GLIBCPP_CONFIGURE, [
44   # Export build and source directories.
45   # These need to be absolute paths, yet at the same time need to
46   # canonicalize only relative paths, because then amd will not unmount
47   # drives. Thus the use of PWDCMD: set it to 'pawd' or 'amq -w' if using amd.
48   glibcpp_builddir=`${PWDCMD-pwd}`
49   case $srcdir in
50   [\\/$]* | ?:[\\/]*) glibcpp_srcdir=${srcdir} ;;
51   *) glibcpp_srcdir=`cd "$srcdir" && ${PWDCMD-pwd} || echo "$srcdir"` ;;
52   esac
53   AC_SUBST(glibcpp_builddir)
54   AC_SUBST(glibcpp_srcdir)
56   dnl This is here just to satisfy automake.
57   ifelse(not,equal,[AC_CONFIG_AUX_DIR(..)])
59   AC_PROG_AWK
60   # Will set LN_S to either 'ln -s' or 'ln'.  With autoconf 2.5x, can also
61   # be 'cp -p' if linking isn't available.  Uncomment the next line to
62   # force a particular method.
63   #ac_cv_prog_LN_S='cp -p'
64   AC_PROG_LN_S
66   # We use these options to decide which functions to include.
67   AC_ARG_WITH(target-subdir,
68   [  --with-target-subdir=SUBDIR
69                           configuring in a subdirectory])
70   AC_ARG_WITH(cross-host,
71   [  --with-cross-host=HOST  configuring with a cross compiler])
73   glibcpp_basedir=$srcdir/$toprel/$1/libstdc++-v3
74   AC_SUBST(glibcpp_basedir)
76   # Never versions of autoconf add an underscore to these functions.
77   # Prevent future problems ...
78   ifdef([AC_PROG_CC_G],[],[define([AC_PROG_CC_G],defn([_AC_PROG_CC_G]))])
79   ifdef([AC_PROG_CC_GNU],[],[define([AC_PROG_CC_GNU],defn([_AC_PROG_CC_GNU]))])
80   ifdef([AC_PROG_CXX_G],[],[define([AC_PROG_CXX_G],defn([_AC_PROG_CXX_G]))])
81   ifdef([AC_PROG_CXX_GNU],[],[define([AC_PROG_CXX_GNU],defn([_AC_PROG_CXX_GNU]))])
83   # AC_PROG_CC
84   # FIXME: We temporarily define our own version of AC_PROG_CC.  This is
85   # copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS.  We
86   # are probably using a cross compiler, which will not be able to fully
87   # link an executable.  This is addressed in later versions of autoconf.
89   AC_DEFUN(LIB_AC_PROG_CC,
90   [AC_BEFORE([$0], [AC_PROG_CPP])dnl
91   dnl Fool anybody using AC_PROG_CC.
92   AC_PROVIDE([AC_PROG_CC])
93   AC_CHECK_PROG(CC, gcc, gcc)
94   if test -z "$CC"; then
95     AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
96     test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
97   fi
99   AC_PROG_CC_GNU
101   if test $ac_cv_prog_gcc = yes; then
102     GCC=yes
103   dnl Check whether -g works, even if CFLAGS is set, in case the package
104   dnl plays around with CFLAGS (such as to build both debugging and
105   dnl normal versions of a library), tasteless as that idea is.
106     ac_test_CFLAGS="${CFLAGS+set}"
107     ac_save_CFLAGS="$CFLAGS"
108     CFLAGS=
109     AC_PROG_CC_G
110     if test "$ac_test_CFLAGS" = set; then
111       CFLAGS="$ac_save_CFLAGS"
112     elif test $ac_cv_prog_cc_g = yes; then
113       CFLAGS="-g -O2"
114     else
115       CFLAGS="-O2"
116     fi
117   else
118     GCC=
119     test "${CFLAGS+set}" = set || CFLAGS="-g"
120   fi
121   ])
123   LIB_AC_PROG_CC
125   # Likewise for AC_PROG_CXX.  We can't just call it directly because g++
126   # will try to link in libstdc++.
127   AC_DEFUN(LIB_AC_PROG_CXX,
128   [AC_BEFORE([$0], [AC_PROG_CXXCPP])dnl
129   dnl Fool anybody using AC_PROG_CXX.
130   AC_PROVIDE([AC_PROG_CXX])
131   # Use glibcpp_CXX so that we do not cause CXX to be cached with the
132   # flags that come in CXX while configuring libstdc++.  They're different
133   # from those used for all other target libraries.  If CXX is set in
134   # the environment, respect that here.
135   glibcpp_CXX=$CXX
136   AC_CHECK_PROGS(glibcpp_CXX, $CCC c++ g++ gcc CC cxx cc++, gcc)
137   AC_SUBST(glibcpp_CXX)
138   CXX=$glibcpp_CXX
139   test -z "$glibcpp_CXX" && AC_MSG_ERROR([no acceptable c++ found in \$PATH])
141   AC_PROG_CXX_GNU
143   if test $ac_cv_prog_gxx = yes; then
144     GXX=yes
145     dnl Check whether -g works, even if CXXFLAGS is set, in case the package
146     dnl plays around with CXXFLAGS (such as to build both debugging and
147     dnl normal versions of a library), tasteless as that idea is.
148     ac_test_CXXFLAGS="${CXXFLAGS+set}"
149     ac_save_CXXFLAGS="$CXXFLAGS"
150     CXXFLAGS=
151     AC_PROG_CXX_G
152     if test "$ac_test_CXXFLAGS" = set; then
153       CXXFLAGS="$ac_save_CXXFLAGS"
154     elif test $ac_cv_prog_cxx_g = yes; then
155       CXXFLAGS="-g -O2"
156     else
157       CXXFLAGS="-O2"
158     fi
159   else
160     GXX=
161     test "${CXXFLAGS+set}" = set || CXXFLAGS="-g"
162   fi
163   ])
165   LIB_AC_PROG_CXX
167   # For directory versioning (e.g., headers) and other variables.
168   AC_MSG_CHECKING([for GCC version number])
169   gcc_version=`$glibcpp_CXX -dumpversion`
170   AC_MSG_RESULT($gcc_version)
172   # For some reason, gettext needs this.
173   AC_ISC_POSIX
175   AC_CHECK_TOOL(AS, as)
176   AC_CHECK_TOOL(AR, ar)
177   AC_CHECK_TOOL(RANLIB, ranlib, ranlib-not-found-in-path-error)
178   AC_PROG_INSTALL
180   AM_MAINTAINER_MODE
182   # We need AC_EXEEXT to keep automake happy in cygnus mode.  However,
183   # at least currently, we never actually build a program, so we never
184   # need to use $(EXEEXT).  Moreover, the test for EXEEXT normally
185   # fails, because we are probably configuring with a cross compiler
186   # which can't create executables.  So we include AC_EXEEXT to keep
187   # automake happy, but we don't execute it, since we don't care about
188   # the result.
189   if false; then
190     # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands
191     # to nothing, so nothing would remain between `then' and `fi' if it
192     # were not for the `:' below.
193     :
194     AC_EXEEXT
195   fi
197   case [$]{glibcpp_basedir} in
198     /* | [A-Za-z]:[\\/]*) libgcj_flagbasedir=[$]{glibcpp_basedir} ;;
199     *) glibcpp_flagbasedir='[$](top_builddir)/'[$]{glibcpp_basedir} ;;
200   esac
202   # Find platform-specific directories containing configuration info.  In
203   # addition to possibly modifying the same flags, it also sets up symlinks.
204   GLIBCPP_CHECK_TARGET
209 dnl Check to see if g++ can compile this library, and if so, if any version-
210 dnl specific precautions need to be taken.
212 dnl GLIBCPP_CHECK_COMPILER_VERSION
213 AC_DEFUN(GLIBCPP_CHECK_COMPILER_VERSION, [
214 if test ! -f stamp-sanity-compiler; then
215   AC_MSG_CHECKING([for g++ that will successfully compile libstdc++-v3])
216   AC_LANG_SAVE
217   AC_LANG_CPLUSPLUS
218   AC_TRY_COMPILE(, [
219   #if __GNUC__ < 3
220     not_ok
221   #endif
222   ], gpp_satisfactory=yes, AC_MSG_ERROR([please upgrade to GCC 3.0 or above]))
223   AC_LANG_RESTORE
224   AC_MSG_RESULT($gpp_satisfactory)
225   touch stamp-sanity-compiler
231 dnl Tests for newer compiler features, or features that are present in newer
232 dnl compiler versions but not older compiler versions still in use, should
233 dnl be placed here.
235 dnl Define WERROR='-Werror' if requested and possible; g++'s that lack the
236 dnl new inlining code or the new system_header pragma will die on -Werror.
237 dnl Leave it out by default and use maint-mode to use it.
239 dnl Define SECTION_FLAGS='-ffunction-sections -fdata-sections' if
240 dnl compiler supports it and the user has not requested debug mode.
242 dnl GLIBCPP_CHECK_COMPILER_FEATURES
243 AC_DEFUN(GLIBCPP_CHECK_COMPILER_FEATURES, [
244   # All these tests are for C++; save the language and the compiler flags.
245   # The CXXFLAGS thing is suspicious, but based on similar bits previously
246   # found in GLIBCPP_CONFIGURE.
247   AC_LANG_SAVE
248   AC_LANG_CPLUSPLUS
249   ac_test_CXXFLAGS="${CXXFLAGS+set}"
250   ac_save_CXXFLAGS="$CXXFLAGS"
252   # Check for maintainer-mode bits.
253   if test x"$USE_MAINTAINER_MODE" = xno; then
254     WERROR=''
255   else
256     WERROR='-Werror'
257   fi
259   # Check for -ffunction-sections -fdata-sections
260   AC_MSG_CHECKING([for g++ that supports -ffunction-sections -fdata-sections])
261   CXXFLAGS='-Werror -ffunction-sections -fdata-sections'
262   AC_TRY_COMPILE(, [int foo;
263   ], [ac_fdsections=yes], [ac_fdsections=no])
264   if test "$ac_test_CXXFLAGS" = set; then
265     CXXFLAGS="$ac_save_CXXFLAGS"
266   else
267     # this is the suspicious part
268     CXXFLAGS=''
269   fi
270   if test x"$ac_fdsections" = x"yes"; then
271     SECTION_FLAGS='-ffunction-sections -fdata-sections'
272   fi
273   AC_MSG_RESULT($ac_fdsections)
275   AC_LANG_RESTORE
276   AC_SUBST(WERROR)
277   AC_SUBST(SECTION_FLAGS)
282 dnl If GNU ld is in use, check to see if tricky linker opts can be used.  If
283 dnl the native linker is in use, all variables will be defined to something
284 dnl safe (like an empty string).
286 dnl Define SECTION_LDFLAGS='-Wl,--gc-sections' if possible.
287 dnl Define OPT_LDFLAGS='-Wl,-O1' if possible.
288 dnl Define LD, with_gnu_ld, and (possibly) glibcpp_gnu_ld_version as
289 dnl side-effects of testing.
291 dnl GLIBCPP_CHECK_LINKER_FEATURES
292 AC_DEFUN(GLIBCPP_CHECK_LINKER_FEATURES, [
293   # If we're not using GNU ld, then there's no point in even trying these
294   # tests.  Check for that first.  We should have already tested for gld
295   # by now (in libtool), but require it now just to be safe...
296   test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS=''
297   test -z "$OPT_LDFLAGS" && OPT_LDFLAGS=''
298   AC_REQUIRE([AC_PROG_LD])
300   # The name set by libtool depends on the version of libtool.  Shame on us
301   # for depending on an impl detail, but c'est la vie.  Older versions used
302   # ac_cv_prog_gnu_ld, but now it's lt_cv_prog_gnu_ld, and is copied back on
303   # top of with_gnu_ld (which is also set by --with-gnu-ld, so that actually
304   # makes sense).  We'll test with_gnu_ld everywhere else, so if that isn't
305   # set (hence we're using an older libtool), then set it.
306   if test x${with_gnu_ld+set} != xset; then
307     if test x${ac_cv_prog_gnu_ld+set} != xset; then
308       # We got through "ac_require(ac_prog_ld)" and still not set?  Huh?
309       with_gnu_ld=no
310     else
311       with_gnu_ld=$ac_cv_prog_gnu_ld
312     fi
313   fi
315   # Start by getting the version number.  I think the libtool test already
316   # does some of this, but throws away the result.
317   changequote(,)
318   ldver=`$LD --version 2>/dev/null | head -1 | \
319          sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'`
320   changequote([,])
321   glibcpp_gnu_ld_version=`echo $ldver | \
322          $AWK -F. '{ if (NF<3) [$]3=0; print ([$]1*100+[$]2)*100+[$]3 }'`
324   # Set --gc-sections.
325   if test "$with_gnu_ld" = "notbroken"; then
326     # GNU ld it is!  Joy and bunny rabbits!
328     # All these tests are for C++; save the language and the compiler flags.
329     # Need to do this so that g++ won't try to link in libstdc++
330     ac_test_CFLAGS="${CFLAGS+set}"
331     ac_save_CFLAGS="$CFLAGS"
332     CFLAGS='-x c++  -Wl,--gc-sections'
334     # Check for -Wl,--gc-sections
335     # XXX This test is broken at the moment, as symbols required for
336     # linking are now in libsupc++ (not built yet.....). In addition,
337     # this test has cored on solaris in the past. In addition,
338     # --gc-sections doesn't really work at the moment (keeps on discarding
339     # used sections, first .eh_frame and now some of the glibc sections for
340     # iconv). Bzzzzt. Thanks for playing, maybe next time.
341     AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
342     AC_TRY_RUN([
343      int main(void)
344      {
345        try { throw 1; }
346        catch (...) { };
347        return 0;
348      }
349     ], [ac_sectionLDflags=yes],[ac_sectionLDflags=no], [ac_sectionLDflags=yes])
350     if test "$ac_test_CFLAGS" = set; then
351       CFLAGS="$ac_save_CFLAGS"
352     else
353       # this is the suspicious part
354       CFLAGS=''
355     fi
356     if test "$ac_sectionLDflags" = "yes"; then
357       SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
358     fi
359     AC_MSG_RESULT($ac_sectionLDflags)
360   fi
362   # Set linker optimization flags.
363   if test x"$with_gnu_ld" = x"yes"; then
364     OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
365   fi
367   AC_SUBST(SECTION_LDFLAGS)
368   AC_SUBST(OPT_LDFLAGS)
373 dnl Check to see if the (math function) argument passed is
374 dnl declared when using the c++ compiler
375 dnl ASSUMES argument is a math function with ONE parameter
377 dnl GLIBCPP_CHECK_MATH_DECL_1
378 AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_1, [
379   AC_MSG_CHECKING([for $1 declaration])
380   if test x${glibcpp_cv_func_$1_use+set} != xset; then
381     AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
382       AC_LANG_SAVE
383       AC_LANG_CPLUSPLUS
384       AC_TRY_COMPILE([#include <math.h>
385                       #ifdef HAVE_IEEEFP_H
386                       #include <ieeefp.h>
387                       #endif
388                      ],
389                      [ $1(0);],
390                      [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
391       AC_LANG_RESTORE
392     ])
393   fi
394   AC_MSG_RESULT($glibcpp_cv_func_$1_use)
398 dnl Check to see if the (math function) argument passed is
399 dnl 1) declared when using the c++ compiler
400 dnl 2) has "C" linkage
401 dnl 3) if not, see if 1) and 2) for argument prepended with '_'
403 dnl Define HAVE_CARGF etc if "cargf" is declared and links
405 dnl argument 1 is name of function to check
407 dnl ASSUMES argument is a math function with ONE parameter
409 dnl GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1
410 AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1, [
411   GLIBCPP_CHECK_MATH_DECL_1($1)
412   if test x$glibcpp_cv_func_$1_use = x"yes"; then
413     AC_CHECK_FUNCS($1)
414   else
415     GLIBCPP_CHECK_MATH_DECL_1(_$1)
416     if test x$glibcpp_cv_func__$1_use = x"yes"; then
417       AC_CHECK_FUNCS(_$1)
418     fi
419   fi
424 dnl Like GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1, but does a bunch of
425 dnl of functions at once.  It's an all-or-nothing check -- either
426 dnl HAVE_XYZ is defined for each of the functions, or for none of them.
427 dnl Doing it this way saves significant configure time.
428 AC_DEFUN(GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1, [
429   AC_MSG_CHECKING([for $1 functions])
430   AC_CACHE_VAL(glibcpp_cv_func_$2_use, [
431     AC_LANG_SAVE
432     AC_LANG_CPLUSPLUS
433     AC_TRY_COMPILE([#include <math.h>],
434                    [ `for x in $3; do echo "$x (0);"; done` ],
435                    [glibcpp_cv_func_$2_use=yes],
436                    [glibcpp_cv_func_$2_use=no])
437     AC_LANG_RESTORE])
438   AC_MSG_RESULT($glibcpp_cv_func_$2_use)
439   if test x$glibcpp_cv_func_$2_use = x"yes"; then
440     AC_CHECK_FUNCS($3)
441   fi
445 dnl Check to see if the (math function) argument passed is
446 dnl declared when using the c++ compiler
447 dnl ASSUMES argument is a math function with TWO parameters
449 dnl GLIBCPP_CHECK_MATH_DECL_2
450 AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_2, [
451   AC_MSG_CHECKING([for $1 declaration])
452   if test x${glibcpp_cv_func_$1_use+set} != xset; then
453     AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
454       AC_LANG_SAVE
455       AC_LANG_CPLUSPLUS
456       AC_TRY_COMPILE([#include <math.h>],
457                      [ $1(0, 0);],
458                      [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
459       AC_LANG_RESTORE
460     ])
461   fi
462   AC_MSG_RESULT($glibcpp_cv_func_$1_use)
466 dnl Check to see if the (math function) argument passed is
467 dnl 1) declared when using the c++ compiler
468 dnl 2) has "C" linkage
470 dnl Define HAVE_CARGF etc if "cargf" is declared and links
472 dnl argument 1 is name of function to check
474 dnl ASSUMES argument is a math function with TWO parameters
476 dnl GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2
477 AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2, [
478   GLIBCPP_CHECK_MATH_DECL_2($1)
479   if test x$glibcpp_cv_func_$1_use = x"yes"; then
480     AC_CHECK_FUNCS($1)
481   else
482     GLIBCPP_CHECK_MATH_DECL_2(_$1)
483     if test x$glibcpp_cv_func__$1_use = x"yes"; then
484       AC_CHECK_FUNCS(_$1)
485     fi
486   fi
491 dnl Check to see if the (math function) argument passed is
492 dnl declared when using the c++ compiler
493 dnl ASSUMES argument is a math function with THREE parameters
495 dnl GLIBCPP_CHECK_MATH_DECL_3
496 AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_3, [
497   AC_MSG_CHECKING([for $1 declaration])
498   if test x${glibcpp_cv_func_$1_use+set} != xset; then
499     AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
500       AC_LANG_SAVE
501       AC_LANG_CPLUSPLUS
502       AC_TRY_COMPILE([#include <math.h>],
503                      [ $1(0, 0, 0);],
504                      [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
505       AC_LANG_RESTORE
506     ])
507   fi
508   AC_MSG_RESULT($glibcpp_cv_func_$1_use)
512 dnl Check to see if the (math function) argument passed is
513 dnl 1) declared when using the c++ compiler
514 dnl 2) has "C" linkage
516 dnl Define HAVE_CARGF etc if "cargf" is declared and links
518 dnl argument 1 is name of function to check
520 dnl ASSUMES argument is a math function with THREE parameters
522 dnl GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3
523 AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3, [
524   GLIBCPP_CHECK_MATH_DECL_3($1)
525   if test x$glibcpp_cv_func_$1_use = x"yes"; then
526     AC_CHECK_FUNCS($1)
527   else
528     GLIBCPP_CHECK_MATH_DECL_3(_$1)
529     if test x$glibcpp_cv_func__$1_use = x"yes"; then
530       AC_CHECK_FUNCS(_$1)
531     fi
532   fi
537 dnl Check to see if the (stdlib function) argument passed is
538 dnl 1) declared when using the c++ compiler
539 dnl 2) has "C" linkage
541 dnl argument 1 is name of function to check
543 dnl ASSUMES argument is a math function with TWO parameters
545 dnl GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_2
546 AC_DEFUN(GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_2, [
547   AC_MSG_CHECKING([for $1 declaration])
548   if test x${glibcpp_cv_func_$1_use+set} != xset; then
549     AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
550       AC_LANG_SAVE
551       AC_LANG_CPLUSPLUS
552       AC_TRY_COMPILE([#include <stdlib.h>],
553                      [ $1(0, 0);],
554                      [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
555       AC_LANG_RESTORE
556     ])
557   fi
558   AC_MSG_RESULT($glibcpp_cv_func_$1_use)
559   if test x$glibcpp_cv_func_$1_use = x"yes"; then
560     AC_CHECK_FUNCS($1)
561   fi
566 dnl Check to see if the (stdlib function) argument passed is
567 dnl 1) declared when using the c++ compiler
568 dnl 2) has "C" linkage
570 dnl argument 1 is name of function to check
572 dnl ASSUMES argument is a function with THREE parameters
574 dnl GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_3
575 AC_DEFUN(GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_3, [
576   AC_MSG_CHECKING([for $1 declaration])
577   if test x${glibcpp_cv_func_$1_use+set} != xset; then
578     AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
579       AC_LANG_SAVE
580       AC_LANG_CPLUSPLUS
581       AC_TRY_COMPILE([#include <stdlib.h>],
582                      [ $1(0, 0, 0);],
583                      [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
584       AC_LANG_RESTORE
585     ])
586   fi
587   AC_MSG_RESULT($glibcpp_cv_func_$1_use)
588   if test x$glibcpp_cv_func_$1_use = x"yes"; then
589     AC_CHECK_FUNCS($1)
590   fi
594 dnl Because the builtins are picky picky picky about the arguments they take,
595 dnl do an explict linkage tests here.
596 dnl Check to see if the (math function) argument passed is
597 dnl 1) declared when using the c++ compiler
598 dnl 2) has "C" linkage
600 dnl Define HAVE_CARGF etc if "cargf" is declared and links
602 dnl argument 1 is name of function to check
604 dnl ASSUMES argument is a math function with ONE parameter
606 dnl GLIBCPP_CHECK_BUILTIN_MATH_DECL_LINKAGE_1
607 AC_DEFUN(GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1, [
608   AC_MSG_CHECKING([for $1 declaration])
609   if test x${glibcpp_cv_func_$1_use+set} != xset; then
610     AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
611       AC_LANG_SAVE
612       AC_LANG_CPLUSPLUS
613       AC_TRY_COMPILE([#include <math.h>],
614                      [ $1(0);],
615                      [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
616       AC_LANG_RESTORE
617     ])
618   fi
619   AC_MSG_RESULT($glibcpp_cv_func_$1_use)
620   if test x$glibcpp_cv_func_$1_use = x"yes"; then
621     AC_MSG_CHECKING([for $1 linkage])
622     if test x${glibcpp_cv_func_$1_link+set} != xset; then
623       AC_CACHE_VAL(glibcpp_cv_func_$1_link, [
624         AC_TRY_LINK([#include <math.h>],
625                     [ $1(0);],
626                     [glibcpp_cv_func_$1_link=yes], [glibcpp_cv_func_$1_link=no])
627       ])
628     fi
629     AC_MSG_RESULT($glibcpp_cv_func_$1_link)
630     if test x$glibcpp_cv_func_$1_link = x"yes"; then
631       ac_tr_func=HAVE_`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
632       AC_DEFINE_UNQUOTED(${ac_tr_func})
633     fi
634   fi
639 dnl Check to see what builtin math functions are supported
641 dnl check for __builtin_abs
642 dnl check for __builtin_fabsf
643 dnl check for __builtin_fabs
644 dnl check for __builtin_fabl
645 dnl check for __builtin_labs
646 dnl check for __builtin_sqrtf
647 dnl check for __builtin_sqrtl
648 dnl check for __builtin_sqrt
649 dnl check for __builtin_sinf
650 dnl check for __builtin_sin
651 dnl check for __builtin_sinl
652 dnl check for __builtin_cosf
653 dnl check for __builtin_cos
654 dnl check for __builtin_cosl
656 dnl GLIBCPP_CHECK_BUILTIN_MATH_SUPPORT
657 AC_DEFUN(GLIBCPP_CHECK_BUILTIN_MATH_SUPPORT, [
658   dnl Test for builtin math functions.
659   dnl These are made in gcc/c-common.c
660   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_abs)
661   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabsf)
662   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabs)
663   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabsl)
664   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_labs)
666   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrtf)
667   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrt)
668   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrtl)
670   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sinf)
671   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sin)
672   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sinl)
674   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cosf)
675   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cos)
676   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cosl)
678   dnl There is, without a doubt, a more elegant way to have these
679   dnl names exported so that they won't be stripped out of acconfig.h by
680   dnl autoheader. I leave this as an exercise to somebody less frustrated
681   dnl than I.... please email the libstdc++ list if you can figure out a
682   dnl more elegant approach (see autoconf/acgen.m4 and specifically
683   dnl AC_CHECK_FUNC for things to steal.)
684   dummyvar=no
685   if test x$dummyvar = x"yes"; then
686     AC_DEFINE(HAVE___BUILTIN_ABS)
687     AC_DEFINE(HAVE___BUILTIN_LABS)
688     AC_DEFINE(HAVE___BUILTIN_COS)
689     AC_DEFINE(HAVE___BUILTIN_COSF)
690     AC_DEFINE(HAVE___BUILTIN_COSL)
691     AC_DEFINE(HAVE___BUILTIN_FABS)
692     AC_DEFINE(HAVE___BUILTIN_FABSF)
693     AC_DEFINE(HAVE___BUILTIN_FABSL)
694     AC_DEFINE(HAVE___BUILTIN_SIN)
695     AC_DEFINE(HAVE___BUILTIN_SINF)
696     AC_DEFINE(HAVE___BUILTIN_SINL)
697     AC_DEFINE(HAVE___BUILTIN_SQRT)
698     AC_DEFINE(HAVE___BUILTIN_SQRTF)
699     AC_DEFINE(HAVE___BUILTIN_SQRTL)
700   fi
704 dnl Check to see what the underlying c library is like
705 dnl These checks need to do two things:
706 dnl 1) make sure the name is declared when using the c++ compiler
707 dnl 2) make sure the name has "C" linkage
708 dnl This might seem like overkill but experience has shown that it's not...
710 dnl Define HAVE_STRTOLD if "strtold" is declared and links
711 dnl Define HAVE_STRTOF if "strtof" is declared and links
712 dnl Define HAVE_DRAND48 if "drand48" is declared and links
714 dnl GLIBCPP_CHECK_STDLIB_SUPPORT
715 AC_DEFUN(GLIBCPP_CHECK_STDLIB_SUPPORT, [
716   ac_test_CXXFLAGS="${CXXFLAGS+set}"
717   ac_save_CXXFLAGS="$CXXFLAGS"
718   CXXFLAGS='-fno-builtins -D_GNU_SOURCE'
720   GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtold)
721   GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtof)
722   AC_CHECK_FUNCS(drand48)
724   CXXFLAGS="$ac_save_CXXFLAGS"
728 dnl Check to see what the underlying c library or math library is like.
729 dnl These checks need to do two things:
730 dnl 1) make sure the name is declared when using the c++ compiler
731 dnl 2) make sure the name has "C" linkage
732 dnl This might seem like overkill but experience has shown that it's not...
734 dnl Define HAVE_CARGF etc if "cargf" is found.
736 dnl GLIBCPP_CHECK_MATH_SUPPORT
737 AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
738   ac_test_CXXFLAGS="${CXXFLAGS+set}"
739   ac_save_CXXFLAGS="$CXXFLAGS"
740   CXXFLAGS='-fno-builtins -D_GNU_SOURCE'
742   dnl Check libm
743   AC_CHECK_LIB(m, sin, libm="-lm")
744   ac_save_LIBS="$LIBS"
745   LIBS="$LIBS $libm"
747   dnl Check to see if certain C math functions exist.
748   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinf)
749   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnan)
750   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finite)
751   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(copysign)
752   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincos)
753   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fpclass)
754   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(qfpclass)
755   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(hypot)
757   dnl Check to see if basic C math functions have float versions.
758   GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(float trig,
759                                           float_trig,
760                                           acosf asinf atanf \
761                                           cosf sinf tanf \
762                                           coshf sinhf tanhf)
763   GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(float round,
764                                           float_round,
765                                           ceilf floorf)
766   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(expf)
767   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnanf)
768   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinff)
769   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(atan2f)
770   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fabsf)
771   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(fmodf)
772   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(frexpf)
773   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(hypotf)
774   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpf)
775   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(logf)
776   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(log10f)
777   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(modff)
778   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(powf)
779   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtf)
780   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincosf)
781   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finitef)
783   dnl Check to see if basic C math functions have long double versions.
784   GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(long double trig,
785                                           long_double_trig,
786                                           acosl asinl atanl \
787                                           cosl sinl tanl \
788                                           coshl sinhl tanhl)
789   GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(long double round,
790                                           long_double_round,
791                                           ceill floorl)
792   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnanl)
793   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinfl)
794   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(copysignl)
795   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(atan2l)
796   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(expl)
797   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fabsl)
798   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(fmodl)
799   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(frexpl)
800   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(hypotl)
801   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpl)
802   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(logl)
803   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(log10l)
804   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(modfl)
805   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(powl)
806   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtl)
807   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincosl)
808   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finitel)
810   dnl Some runtimes have these functions with a preceding underscore. Please
811   dnl keep this sync'd with the one above. And if you add any new symbol,
812   dnl please add the corresponding block in the @BOTTOM@ section of acconfig.h.
813   dnl Check to see if certain C math functions exist.
815   dnl Check to see if basic C math functions have float versions.
816   GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(_float trig,
817                                           _float_trig,
818                                           _acosf _asinf _atanf \
819                                           _cosf _sinf _tanf \
820                                           _coshf _sinhf _tanhf)
821   GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(_float round,
822                                           _float_round,
823                                           _ceilf _floorf)
825   dnl Check to see if basic C math functions have long double versions.
826   GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(_long double trig,
827                                           _long_double_trig,
828                                           _acosl _asinl _atanl \
829                                           _cosl _sinl _tanl \
830                                           _coshl _sinhl _tanhl)
831   GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(_long double round,
832                                           _long_double_round,
833                                           _ceill _floorl)
835   LIBS="$ac_save_LIBS"
836   CXXFLAGS="$ac_save_CXXFLAGS"
841 dnl Check to see if there is native support for complex
843 dnl Don't compile bits in math/* if native support exits.
845 dnl Define USE_COMPLEX_LONG_DOUBLE etc if "copysignl" is found.
847 dnl GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT
848 AC_DEFUN(GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT, [
849   dnl Check for complex versions of math functions of platform.
850   AC_CHECK_LIB(m, main)
851   AC_REPLACE_MATHFUNCS(nan copysignf)
853   dnl For __signbit to signbit conversions.
854   AC_CHECK_FUNCS([__signbit], , [LIBMATHOBJS="$LIBMATHOBJS signbit.lo"])
855   AC_CHECK_FUNCS([__signbitf], , [LIBMATHOBJS="$LIBMATHOBJS signbitf.lo"])
857   dnl Compile the long double complex functions only if the function
858   dnl provides the non-complex long double functions that are needed.
859   dnl Currently this includes copysignl, which should be
860   dnl cached from the GLIBCPP_CHECK_MATH_SUPPORT macro, above.
861   if test x$ac_cv_func_copysignl = x"yes"; then
862     AC_CHECK_FUNCS([__signbitl], , [LIBMATHOBJS="$LIBMATHOBJS signbitl.lo"])
863   fi
865   if test -n "$LIBMATHOBJS"; then
866     need_libmath=yes
867   fi
868   AC_SUBST(LIBMATHOBJS)
869   AM_CONDITIONAL(GLIBCPP_BUILD_LIBMATH,  test "$need_libmath" = yes)
873 dnl Check to see what architecture and operating system we are compiling
874 dnl for.  Also, if architecture- or OS-specific flags are required for
875 dnl compilation, pick them up here.
877 dnl GLIBCPP_CHECK_TARGET
878 AC_DEFUN(GLIBCPP_CHECK_TARGET, [
879   . [$]{glibcpp_basedir}/configure.target
880   AC_MSG_RESULT(CPU config directory is $cpu_include_dir)
881   AC_MSG_RESULT(OS config directory is $os_include_dir)
886 dnl Check to see if this target can enable the wchar_t parts of libstdc++.
887 dnl If --disable-c-mbchar was given, no wchar_t stuff is enabled.  (This
888 dnl must have been previously checked.)
890 dnl Define _GLIBCPP_USE_WCHAR_T if all the bits are found
891 dnl Define HAVE_MBSTATE_T if mbstate_t is not in wchar.h
893 dnl GLIBCPP_CHECK_WCHAR_T_SUPPORT
894 AC_DEFUN(GLIBCPP_CHECK_WCHAR_T_SUPPORT, [
895   dnl Wide characters disabled by default.
896   enable_wchar_t=no
898   dnl Test wchar.h for mbstate_t, which is needed for char_traits and
899   dnl others even if wchar_t support is not on.
900   AC_MSG_CHECKING([for mbstate_t])
901   AC_TRY_COMPILE([#include <wchar.h>],
902   [mbstate_t teststate;],
903   have_mbstate_t=yes, have_mbstate_t=no)
904   AC_MSG_RESULT($have_mbstate_t)
905   if test x"$have_mbstate_t" = xyes; then
906     AC_DEFINE(HAVE_MBSTATE_T)
907   fi
909   dnl Sanity check for existence of ISO C99 headers for extended encoding.
910   AC_CHECK_HEADERS(wchar.h, ac_has_wchar_h=yes, ac_has_wchar_h=no)
911   AC_CHECK_HEADERS(wctype.h, ac_has_wctype_h=yes, ac_has_wctype_h=no)
913   dnl Only continue checking if the ISO C99 headers exist and support is on.
914   if test x"$ac_has_wchar_h" = xyes &&
915      test x"$ac_has_wctype_h" = xyes &&
916      test x"$enable_c_mbchar" != xno; then
918     dnl Test wchar.h for WCHAR_MIN, WCHAR_MAX, which is needed before
919     dnl numeric_limits can instantiate type_traits<wchar_t>
920     AC_MSG_CHECKING([for WCHAR_MIN and WCHAR_MAX])
921     AC_TRY_COMPILE([#include <wchar.h>],
922     [int i = WCHAR_MIN; int j = WCHAR_MAX;],
923     has_wchar_minmax=yes, has_wchar_minmax=no)
924     AC_MSG_RESULT($has_wchar_minmax)
926     dnl Test wchar.h for WEOF, which is what we use to determine whether
927     dnl to specialize for char_traits<wchar_t> or not.
928     AC_MSG_CHECKING([for WEOF])
929     AC_TRY_COMPILE([
930       #include <wchar.h>
931       #include <stddef.h>],
932     [wint_t i = WEOF;],
933     has_weof=yes, has_weof=no)
934     AC_MSG_RESULT($has_weof)
936     dnl Tests for wide character functions used in char_traits<wchar_t>.
937     ac_wfuncs=yes
938     AC_CHECK_FUNCS(wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset,, \
939     ac_wfuncs=no)
941     dnl Checks for names injected into std:: by the c_std headers.
942     AC_CHECK_FUNCS(btowc wctob fgetwc fgetws fputwc fputws fwide \
943     fwprintf fwscanf swprintf swscanf vfwprintf vfwscanf vswprintf vswscanf \
944     vwprintf vwscanf wprintf wscanf getwc getwchar mbsinit mbrlen mbrtowc \
945     mbsrtowcs wcsrtombs putwc putwchar ungetwc wcrtomb wcstod wcstof wcstol \
946     wcstoul wcscpy wcsncpy wcscat wcsncat wcscmp wcscoll wcsncmp wcsxfrm \
947     wcscspn wcsspn wcstok wcsftime wcschr wcspbrk wcsrchr wcsstr,, \
948     ac_wfuncs=no)
950     AC_MSG_CHECKING([for ISO C99 wchar_t support])
951     if test x"$has_weof" = xyes &&
952        test x"$has_wchar_minmax" = xyes &&
953        test x"$ac_wfuncs" = xyes; then
954       ac_isoC99_wchar_t=yes
955     else
956       ac_isoC99_wchar_t=no
957     fi
958     AC_MSG_RESULT($ac_isoC99_wchar_t)
960     dnl Use iconv for wchar_t to char conversions. As such, check for
961     dnl X/Open Portability Guide, version 2 features (XPG2).
962     AC_CHECK_HEADER(iconv.h, ac_has_iconv_h=yes, ac_has_iconv_h=no)
963     AC_CHECK_HEADER(langinfo.h, ac_has_langinfo_h=yes, ac_has_langinfo_h=no)
965     dnl Check for existence of libiconv.a providing XPG2 wchar_t support.
966     AC_CHECK_LIB(iconv, iconv, libiconv="-liconv")
967     ac_save_LIBS="$LIBS"
968     LIBS="$LIBS $libiconv"
970     AC_CHECK_FUNCS(iconv_open iconv_close iconv nl_langinfo, \
971     ac_XPG2funcs=yes, ac_XPG2funcs=no)
973     LIBS="$ac_save_LIBS"
975     AC_MSG_CHECKING([for XPG2 wchar_t support])
976     if test x"$ac_has_iconv_h" = xyes &&
977        test x"$ac_has_langinfo_h" = xyes &&
978        test x"$ac_XPG2funcs" = xyes; then
979       ac_XPG2_wchar_t=yes
980     else
981       ac_XPG2_wchar_t=no
982     fi
983     AC_MSG_RESULT($ac_XPG2_wchar_t)
985     dnl At the moment, only enable wchar_t specializations if all the
986     dnl above support is present.
987     if test x"$ac_isoC99_wchar_t" = xyes && 
988         test x"$ac_XPG2_wchar_t" = xyes; then
989       AC_DEFINE(_GLIBCPP_USE_WCHAR_T)
990       enable_wchar_t=yes
991     fi
992   fi
993   AC_MSG_CHECKING([for enabled wchar_t specializations])
994   AC_MSG_RESULT($enable_wchar_t)        
995   AM_CONDITIONAL(GLIBCPP_TEST_WCHAR_T, test "$enable_wchar_t" = yes)    
1000 dnl Check to see if debugging libraries are to be built.
1002 dnl GLIBCPP_ENABLE_DEBUG
1004 dnl --enable-debug
1005 dnl builds a separate set of debugging libraries in addition to the
1006 dnl normal (shared, static) libstdc++ binaries.
1008 dnl --disable-debug
1009 dnl builds only one (non-debug) version of libstdc++.
1011 dnl --enable-debug-flags=FLAGS
1012 dnl iff --enable-debug == yes, then use FLAGS to build the debug library.
1014 dnl  +  Usage:  GLIBCPP_ENABLE_DEBUG[(DEFAULT)]
1015 dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
1016 dnl       defaults to `no'.
1017 AC_DEFUN(GLIBCPP_ENABLE_DEBUG, [dnl
1018 define([GLIBCPP_ENABLE_DEBUG_DEFAULT], ifelse($1, yes, yes, no))dnl
1019 AC_ARG_ENABLE(debug,
1020 changequote(<<, >>)dnl
1021 <<  --enable-debug          build extra debug library [default=>>GLIBCPP_ENABLE_DEBUG_DEFAULT],
1022 changequote([, ])dnl
1023 [case "${enableval}" in
1024  yes) enable_debug=yes ;;
1025  no)  enable_debug=no ;;
1026  *)   AC_MSG_ERROR([Unknown argument to enable/disable extra debugging]) ;;
1027  esac],
1028 enable_debug=GLIBCPP_ENABLE_DEBUG_DEFAULT)dnl
1029 AC_MSG_CHECKING([for additional debug build])
1030 AC_MSG_RESULT($enable_debug)
1031 AM_CONDITIONAL(GLIBCPP_BUILD_DEBUG, test "$enable_debug" = yes)
1035 dnl Check for explicit debug flags.
1037 dnl GLIBCPP_ENABLE_DEBUG_FLAGS
1039 dnl --enable-debug-flags='-O1'
1040 dnl is a general method for passing flags to be used when
1041 dnl building debug libraries with --enable-debug.
1043 dnl --disable-debug-flags does nothing.
1044 dnl  +  Usage:  GLIBCPP_ENABLE_DEBUG_FLAGS(default flags)
1045 dnl       If "default flags" is an empty string (or "none"), the effect is
1046 dnl       the same as --disable or --enable=no.
1047 AC_DEFUN(GLIBCPP_ENABLE_DEBUG_FLAGS, [dnl
1048 define([GLIBCPP_ENABLE_DEBUG_FLAGS_DEFAULT], ifelse($1,,, $1))dnl
1049 AC_ARG_ENABLE(debug_flags,
1050 changequote(<<, >>)dnl
1051 <<  --enable-debug-flags=FLAGS    pass compiler FLAGS when building debug
1052                         library;[default=>>GLIBCPP_ENABLE_DEBUG_FLAGS_DEFAULT],
1053 changequote([, ])dnl
1054 [case "${enableval}" in
1055  none)  ;;
1056  -*) enable_debug_flags="${enableval}" ;;
1057  *)   AC_MSG_ERROR([Unknown argument to extra debugging flags]) ;;
1058  esac],
1059 enable_debug_flags=GLIBCPP_ENABLE_DEBUG_FLAGS_DEFAULT)dnl
1061 dnl Option parsed, now set things appropriately
1062 case x"$enable_debug" in
1063     xyes)
1064         case "$enable_debug_flags" in
1065           none)
1066             DEBUG_FLAGS="-g3 -O0";;
1067           -*) #valid input
1068             DEBUG_FLAGS="${enableval}"
1069         esac
1070         ;;
1071     xno)
1072         DEBUG_FLAGS=""
1073         ;;
1074 esac
1075 AC_SUBST(DEBUG_FLAGS)
1077 AC_MSG_CHECKING([for debug build flags])
1078 AC_MSG_RESULT($DEBUG_FLAGS)
1083 dnl Check for "unusual" flags to pass to the compiler while building.
1085 dnl GLIBCPP_ENABLE_CXX_FLAGS
1086 dnl --enable-cxx-flags='-foo -bar -baz' is a general method for passing
1087 dnl     experimental flags such as -fhonor-std, -fsquangle, -Dfloat=char, etc.
1088 dnl     Somehow this same set of flags must be passed when [re]building
1089 dnl     libgcc.
1090 dnl --disable-cxx-flags passes nothing.
1091 dnl  +  See http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00131.html
1092 dnl         http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00284.html
1093 dnl         http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00035.html
1094 dnl  +  Usage:  GLIBCPP_ENABLE_CXX_FLAGS(default flags)
1095 dnl       If "default flags" is an empty string (or "none"), the effect is
1096 dnl       the same as --disable or --enable=no.
1097 AC_DEFUN(GLIBCPP_ENABLE_CXX_FLAGS, [dnl
1098 define([GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT], ifelse($1,,, $1))dnl
1099 AC_MSG_CHECKING([for extra compiler flags for building])
1100 AC_ARG_ENABLE(cxx_flags,
1101 changequote(<<, >>)dnl
1102 <<  --enable-cxx-flags=FLAGS      pass compiler FLAGS when building library;
1103                                   [default=>>GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT],
1104 changequote([, ])dnl
1105 [case "x$enable_cxx_flags" in
1106   xyes)
1107     AC_MSG_ERROR([--enable-cxx-flags needs compiler flags as arguments]) ;;
1108   xno | xnone | x)
1109     enable_cxx_flags='' ;;
1110   *)
1111     enable_cxx_flags="$enableval" ;;
1112 esac],
1113 enable_cxx_flags=GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT)
1115 dnl Run through flags (either default or command-line) and set anything
1116 dnl extra (e.g., #defines) that must accompany particular g++ options.
1117 if test -n "$enable_cxx_flags"; then
1118   for f in $enable_cxx_flags; do
1119     case "$f" in
1120       -fhonor-std)  ;;
1121       -*)  ;;
1122       *)   # and we're trying to pass /what/ exactly?
1123            AC_MSG_ERROR([compiler flags start with a -]) ;;
1124     esac
1125   done
1127 EXTRA_CXX_FLAGS="$enable_cxx_flags"
1128 AC_MSG_RESULT($EXTRA_CXX_FLAGS)
1129 AC_SUBST(EXTRA_CXX_FLAGS)
1134 dnl Check for which locale library to use:  gnu or generic.
1136 dnl GLIBCPP_ENABLE_CLOCALE
1137 dnl --enable-clocale=gnu sets config/locale/c_locale_gnu.cc and friends
1138 dnl --enable-clocale=generic sets config/locale/c_locale_generic.cc and friends
1140 dnl default is generic
1142 AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [
1143   AC_MSG_CHECKING([for clocale to use])
1144   AC_ARG_ENABLE(clocale,
1145   [  --enable-clocale        enable model for target locale package.
1146   --enable-clocale=MODEL  use MODEL target-speific locale package. [default=generic]
1147   ],
1148   if test x$enable_clocale = xno; then
1149      enable_clocale=no
1150   fi,
1151      enable_clocale=no)
1153   enable_clocale_flag=$enable_clocale
1155   dnl Probe for locale support if no specific model is specified.
1156   dnl Default to "generic"
1157   if test x$enable_clocale_flag = xno; then
1158     case x${target_os} in
1159       xlinux* | xgnu*)
1160         AC_EGREP_CPP([_GLIBCPP_ok], [
1161         #include <features.h>
1162         #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
1163           _GLIBCPP_ok
1164         #endif
1165         ], enable_clocale_flag=gnu, enable_clocale_flag=generic)
1167         # Test for bugs early in glibc-2.2.x series
1168         if test x$enable_clocale_flag = xgnu; then
1169           AC_TRY_RUN([
1170           #define _GNU_SOURCE 1
1171           #include <locale.h>
1172           #include <string.h>
1173           #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
1174           extern __typeof(newlocale) __newlocale;
1175           extern __typeof(duplocale) __duplocale;
1176           extern __typeof(strcoll_l) __strcoll_l;
1177           #endif
1178           int main()
1179           {
1180             const char __one[] = "Äuglein Augmen";
1181             const char __two[] = "Äuglein";
1182             int i;
1183             int j;
1184             __locale_t  loc;
1185             __locale_t  loc_dup;
1186             loc = __newlocale(1 << LC_ALL, "de_DE", 0);
1187             loc_dup = __duplocale(loc);
1188             i = __strcoll_l(__one, __two, loc);
1189             j = __strcoll_l(__one, __two, loc_dup);
1190             return 0;
1191           }
1192           ],
1193           [enable_clocale_flag=gnu],[enable_clocale_flag=generic],
1194           [enable_clocale_flag=generic])
1195         fi
1197         # ... at some point put __strxfrm_l tests in as well.
1198         ;;
1199       *)
1200         enable_clocale_flag=generic
1201         ;;
1202     esac
1203   fi
1205   dnl Deal with gettext issues.
1206   AC_ARG_ENABLE(nls,
1207   [  --enable-nls            use Native Language Support (default)],
1208   , enable_nls=yes)
1209   USE_NLS=no
1211   dnl Set configure bits for specified locale package
1212   case x${enable_clocale_flag} in
1213     xgeneric)
1214       AC_MSG_RESULT(generic)
1216       CLOCALE_H=config/locale/generic/c_locale.h
1217       CLOCALE_CC=config/locale/generic/c_locale.cc
1218       CCODECVT_H=config/locale/generic/codecvt_specializations.h
1219       CCODECVT_CC=config/locale/generic/codecvt_members.cc
1220       CCOLLATE_CC=config/locale/generic/collate_members.cc
1221       CCTYPE_CC=config/locale/generic/ctype_members.cc
1222       CMESSAGES_H=config/locale/generic/messages_members.h
1223       CMESSAGES_CC=config/locale/generic/messages_members.cc
1224       CMONEY_CC=config/locale/generic/monetary_members.cc
1225       CNUMERIC_CC=config/locale/generic/numeric_members.cc
1226       CTIME_H=config/locale/generic/time_members.h
1227       CTIME_CC=config/locale/generic/time_members.cc
1228       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
1229       ;;
1230     xgnu)
1231       AC_MSG_RESULT(gnu)
1233       # Declare intention to use gettext, and add support for specific
1234       # languages.
1235       # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
1236       ALL_LINGUAS="de fr"
1238       # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
1239       AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
1240       if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
1241         USE_NLS=yes
1242       fi
1243       # Export the build objects.
1244       for ling in $ALL_LINGUAS; do \
1245         glibcpp_MOFILES="$glibcpp_MOFILES $ling.mo"; \
1246         glibcpp_POFILES="$glibcpp_POFILES $ling.po"; \
1247       done
1248       AC_SUBST(glibcpp_MOFILES)
1249       AC_SUBST(glibcpp_POFILES)
1251       CLOCALE_H=config/locale/gnu/c_locale.h
1252       CLOCALE_CC=config/locale/gnu/c_locale.cc
1253       CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
1254       CCODECVT_CC=config/locale/gnu/codecvt_members.cc
1255       CCOLLATE_CC=config/locale/gnu/collate_members.cc
1256       CCTYPE_CC=config/locale/gnu/ctype_members.cc
1257       CMESSAGES_H=config/locale/gnu/messages_members.h
1258       CMESSAGES_CC=config/locale/gnu/messages_members.cc
1259       CMONEY_CC=config/locale/gnu/monetary_members.cc
1260       CNUMERIC_CC=config/locale/gnu/numeric_members.cc
1261       CTIME_H=config/locale/gnu/time_members.h
1262       CTIME_CC=config/locale/gnu/time_members.cc
1263       CLOCALE_INTERNAL_H=config/locale/gnu/c++locale_internal.h
1264       ;;
1265     xieee_1003.1-2001)
1266       AC_MSG_RESULT(generic)
1268       CLOCALE_H=config/locale/ieee_1003.1-2001/c_locale.h
1269       CLOCALE_CC=config/locale/ieee_1003.1-2001/c_locale.cc
1270       CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
1271       CCODECVT_CC=config/locale/generic/codecvt_members.cc
1272       CCOLLATE_CC=config/locale/generic/collate_members.cc
1273       CCTYPE_CC=config/locale/generic/ctype_members.cc
1274       CMESSAGES_H=config/locale/ieee_1003.1-2001/messages_members.h
1275       CMESSAGES_CC=config/locale/ieee_1003.1-2001/messages_members.cc
1276       CMONEY_CC=config/locale/generic/monetary_members.cc
1277       CNUMERIC_CC=config/locale/generic/numeric_members.cc
1278       CTIME_H=config/locale/generic/time_members.h
1279       CTIME_CC=config/locale/generic/time_members.cc
1280       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
1281       ;;
1282     *)
1283       echo "$enable_clocale is an unknown locale package" 1>&2
1284       exit 1
1285       ;;
1286   esac
1288   # This is where the testsuite looks for locale catalogs, using the
1289   # -DLOCALEDIR define during testsuite compilation.
1290   glibcpp_localedir=${glibcpp_builddir}/po/share/locale
1291   AC_SUBST(glibcpp_localedir)
1293   AC_SUBST(USE_NLS)
1294   AC_SUBST(CLOCALE_H)
1295   AC_SUBST(CCODECVT_H)
1296   AC_SUBST(CMESSAGES_H)
1297   AC_SUBST(CCODECVT_CC)
1298   AC_SUBST(CCOLLATE_CC)
1299   AC_SUBST(CCTYPE_CC)
1300   AC_SUBST(CMESSAGES_CC)
1301   AC_SUBST(CMONEY_CC)
1302   AC_SUBST(CNUMERIC_CC)
1303   AC_SUBST(CTIME_H)
1304   AC_SUBST(CTIME_CC)
1305   AC_SUBST(CLOCALE_CC)
1306   AC_SUBST(CLOCALE_INTERNAL_H)
1311 dnl Check for which I/O library to use:  libio, or something specific.
1313 dnl GLIBCPP_ENABLE_CSTDIO
1314 dnl --enable-cstdio=libio sets config/io/c_io_libio.h and friends
1316 dnl default is stdio
1318 AC_DEFUN(GLIBCPP_ENABLE_CSTDIO, [
1319   AC_MSG_CHECKING([for cstdio to use])
1320   AC_ARG_ENABLE(cstdio,
1321   [  --enable-cstdio         enable stdio for target io package.
1322   --enable-cstdio=LIB     use LIB target-speific io package. [default=stdio]
1323   ],
1324   if test x$enable_cstdio = xno; then
1325      enable_cstdio=stdio
1326   fi,
1327      enable_cstdio=stdio)
1329   enable_cstdio_flag=$enable_cstdio
1331   dnl Check if a valid I/O package
1332   case x${enable_cstdio_flag} in
1333     xlibio)
1334       CSTDIO_H=config/io/c_io_libio.h
1335       BASIC_FILE_H=config/io/basic_file_libio.h
1336       BASIC_FILE_CC=config/io/basic_file_libio.cc
1337       AC_MSG_RESULT(libio)
1339       # see if we are on a system with libio native (ie, linux)
1340       AC_CHECK_HEADER(libio.h,  has_libio=yes, has_libio=no)
1342       # Need to check and see what version of glibc is being used. If
1343       # it's not glibc-2.2 or higher, then we'll need to go ahead and
1344       # compile most of libio for linux systems.
1345       if test x$has_libio = x"yes"; then
1346         case "$target" in
1347           *-*-linux*)
1348               AC_MSG_CHECKING([for glibc version >= 2.2])
1349               AC_EGREP_CPP([ok], [
1350             #include <features.h>
1351               #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
1352                     ok
1353               #endif
1354               ], glibc_satisfactory=yes, glibc_satisfactory=no)
1355               AC_MSG_RESULT($glibc_satisfactory)
1356             ;;
1357         esac
1359         # XXX at the moment, admit defeat and force the recompilation
1360         # XXX of glibc even on glibc-2.2 systems, because libio is not synched.
1361         glibc_satisfactory=no
1363         if test x$glibc_satisfactory = x"yes"; then
1364            need_libio=no
1365            need_wlibio=no
1366         else
1367            need_libio=yes
1368            # bkoz XXX need to add checks to enable this
1369            # pme XXX here's a first pass at such a check
1370            if test x$enable_c_mbchar != xno; then
1371               need_wlibio=yes
1372            else
1373               need_wlibio=no
1374            fi
1375         fi
1377       else
1378          # Using libio, but <libio.h> doesn't exist on the target system. . .
1379          need_libio=yes
1380          # bkoz XXX need to add checks to enable this
1381          # pme XXX here's a first pass at such a check
1382          if test x$enable_c_mbchar != xno; then
1383              need_wlibio=yes
1384          else
1385              need_wlibio=no
1386          fi
1387       fi
1388       ;;
1389     xstdio | x | xno | xnone | xyes)
1390       # default
1391       CSTDIO_H=config/io/c_io_stdio.h
1392       BASIC_FILE_H=config/io/basic_file_stdio.h
1393       BASIC_FILE_CC=config/io/basic_file_stdio.cc
1394       AC_MSG_RESULT(stdio)
1396       # We're not using stdio.
1397       need_libio=no
1398       need_wlibio=no
1399       ;;
1400     *)
1401       echo "$enable_cstdio is an unknown io package" 1>&2
1402       exit 1
1403       ;;
1404   esac
1405   AC_SUBST(CSTDIO_H)
1406   AC_SUBST(BASIC_FILE_H)
1407   AC_SUBST(BASIC_FILE_CC)
1409   # 2000-08-04 bkoz hack
1410   CCODECVT_C=config/io/c_io_libio_codecvt.c
1411   AC_SUBST(CCODECVT_C)
1412   # 2000-08-04 bkoz hack
1414   AM_CONDITIONAL(GLIBCPP_BUILD_LIBIO,
1415                  test "$need_libio" = yes || test "$need_wlibio" = yes)
1416   AM_CONDITIONAL(GLIBCPP_NEED_LIBIO, test "$need_libio" = yes)
1417   AM_CONDITIONAL(GLIBCPP_NEED_WLIBIO, test "$need_wlibio" = yes)
1418   if test "$need_libio" = yes || test "$need_wlibio" = yes; then
1419     libio_la=../libio/libio.la
1420   else
1421     libio_la=
1422   fi
1423   AC_SUBST(libio_la)
1428 dnl Setup to use the gcc gthr.h thread-specific memory and mutex model.
1429 dnl We must stage the required headers so that they will be installed
1430 dnl with the library (unlike libgcc, the STL implementation is provided
1431 dnl solely within headers).  Since we must not inject random user-space
1432 dnl macro names into user-provided C++ code, we first stage into <file>-in
1433 dnl and process to <file> with an output command.  The reason for a two-
1434 dnl stage process here is to correctly handle $srcdir!=$objdir without
1435 dnl having to write complex code (the sed commands to clean the macro
1436 dnl namespace are complex and fragile enough as it is).  We must also
1437 dnl add a relative path so that -I- is supported properly.
1439 AC_DEFUN(GLIBCPP_ENABLE_THREADS, [
1440   AC_MSG_CHECKING([for thread model used by GCC])
1441   target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
1442   AC_MSG_RESULT([$target_thread_file])
1444   if test $target_thread_file != single; then
1445     AC_DEFINE(HAVE_GTHR_DEFAULT)
1446     AC_DEFINE(_GLIBCPP_SUPPORTS_WEAK, __GXX_WEAK__)
1447   fi
1449   glibcpp_thread_h=gthr-$target_thread_file.h
1450   AC_SUBST(glibcpp_thread_h)
1455 dnl Check for exception handling support.  If an explicit enable/disable
1456 dnl sjlj exceptions is given, we don't have to detect.  Otherwise the
1457 dnl target may or may not support call frame exceptions.
1459 dnl GLIBCPP_ENABLE_SJLJ_EXCEPTIONS
1460 dnl --enable-sjlj-exceptions forces the use of builtin setjmp.
1461 dnl --disable-sjlj-exceptions forces the use of call frame unwinding.
1463 dnl Define _GLIBCPP_SJLJ_EXCEPTIONS if the compiler is configured for it.
1465 AC_DEFUN(GLIBCPP_ENABLE_SJLJ_EXCEPTIONS, [
1466   AC_MSG_CHECKING([for exception model to use])
1467   AC_LANG_SAVE
1468   AC_LANG_CPLUSPLUS
1469   AC_ARG_ENABLE(sjlj-exceptions,
1470   [  --enable-sjlj-exceptions  force use of builtin_setjmp for exceptions],
1471   [:],
1472   [dnl Botheration.  Now we've got to detect the exception model.
1473    dnl Link tests against libgcc.a are problematic since -- at least
1474    dnl as of this writing -- we've not been given proper -L bits for
1475    dnl single-tree newlib and libgloss.
1476    dnl
1477    dnl This is what AC_TRY_COMPILE would do if it didn't delete the
1478    dnl conftest files before we got a change to grep them first.
1479    cat > conftest.$ac_ext << EOF
1480 [#]line __oline__ "configure"
1481 struct S { ~S(); };
1482 void bar();
1483 void foo()
1485   S s;
1486   bar();
1489    old_CXXFLAGS="$CXXFLAGS"
1490    CXXFLAGS=-S
1491    if AC_TRY_EVAL(ac_compile); then
1492      if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
1493        enable_sjlj_exceptions=yes
1494      elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then
1495        enable_sjlj_exceptions=no
1496      fi
1497    fi
1498    CXXFLAGS="$old_CXXFLAGS"
1499    rm -f conftest*])
1500    if test x$enable_sjlj_exceptions = xyes; then
1501      AC_DEFINE(_GLIBCPP_SJLJ_EXCEPTIONS, 1,
1502         [Define if the compiler is configured for setjmp/longjmp exceptions.])
1503      ac_exception_model_name=sjlj
1504    elif test x$enable_sjlj_exceptions = xno; then
1505      ac_exception_model_name="call frame"
1506    else
1507      AC_MSG_ERROR([unable to detect exception model])
1508    fi
1509    AC_LANG_RESTORE
1510    AC_MSG_RESULT($ac_exception_model_name)
1515 dnl Check for libunwind exception handling support. If enabled then
1516 dnl we assume that the _Unwind_* functions that make up the Unwind ABI
1517 dnl (_Unwind_RaiseException, _Unwind_Resume, etc.) are defined by
1518 dnl libunwind instead of libgcc and that libstdc++ has a dependency
1519 dnl on libunwind as well as libgcc.
1521 dnl GLIBCPP_ENABLE_LIBUNWIND_EXCEPTIONS
1522 dnl --enable-libunwind-exceptions forces the use of libunwind.
1523 dnl --disable-libunwind-exceptions assumes there is no libunwind.
1525 dnl Define _GLIBCPP_LIBUNWIND_EXCEPTIONS if requested.
1527 AC_DEFUN(GLIBCPP_ENABLE_LIBUNWIND_EXCEPTIONS, [
1528   AC_MSG_CHECKING([for use of libunwind])
1529   AC_ARG_ENABLE(libunwind-exceptions,
1530   [  --enable-libunwind-exceptions  force use of libunwind for exceptions],
1531   use_libunwind_exceptions=$enableval,
1532   use_libunwind_exceptions=no)
1533   AC_MSG_RESULT($use_libunwind_exceptions)
1534   dnl Option parsed, now set things appropriately
1535   if test x"$use_libunwind_exceptions" = xyes; then
1536     LIBUNWIND_FLAG="-lunwind"
1537   else
1538     LIBUNWIND_FLAG=""
1539   fi
1540   AC_SUBST(LIBUNWIND_FLAG)
1544 dnl Check for ISO/IEC 9899:1999 "C99" support.
1546 dnl GLIBCPP_ENABLE_C99
1547 dnl --enable-c99 defines _GLIBCPP_USE_C99
1548 dnl --disable-c99 leaves _GLIBCPP_USE_C99 undefined
1549 dnl  +  Usage:  GLIBCPP_ENABLE_C99[(DEFAULT)]
1550 dnl       Where DEFAULT is either `yes' or `no'.  If omitted, it
1551 dnl       defaults to `no'.
1552 dnl  +  If 'C99' stuff is not available, ignores DEFAULT and sets `no'.
1554 dnl GLIBCPP_ENABLE_C99
1555 AC_DEFUN(GLIBCPP_ENABLE_C99, [dnl
1556   define([GLIBCPP_ENABLE_C99_DEFAULT], ifelse($1, yes, yes, no))dnl
1558   AC_ARG_ENABLE(c99,
1559   changequote(<<, >>)dnl
1560   <<--enable-c99            turns on 'ISO/IEC 9899:1999 support' [default=>>GLIBCPP_ENABLE_C99_DEFAULT],
1561   changequote([, ])dnl
1562   [case "$enableval" in
1563    yes) enable_c99=yes ;;
1564    no)  enable_c99=no ;;
1565    *)   AC_MSG_ERROR([Unknown argument to enable/disable C99]) ;;
1566    esac],
1567   enable_c99=GLIBCPP_ENABLE_C99_DEFAULT)dnl
1569   AC_LANG_SAVE
1570   AC_LANG_CPLUSPLUS
1572   # Check for the existence of <math.h> functions used if C99 is enabled.
1573   ac_c99_math=yes;
1574   AC_MSG_CHECKING([for ISO C99 support in <math.h>])
1575   AC_TRY_COMPILE([#include <math.h>],[fpclassify(0.0);],, [ac_c99_math=no])
1576   AC_TRY_COMPILE([#include <math.h>],[isfinite(0.0);],, [ac_c99_math=no])
1577   AC_TRY_COMPILE([#include <math.h>],[isinf(0.0);],, [ac_c99_math=no])
1578   AC_TRY_COMPILE([#include <math.h>],[isnan(0.0);],, [ac_c99_math=no])
1579   AC_TRY_COMPILE([#include <math.h>],[isnormal(0.0);],, [ac_c99_math=no])
1580   AC_TRY_COMPILE([#include <math.h>],[signbit(0.0);],, [ac_c99_math=no])
1581   AC_TRY_COMPILE([#include <math.h>],[isgreater(0.0,0.0);],, [ac_c99_math=no])
1582   AC_TRY_COMPILE([#include <math.h>],
1583                  [isgreaterequal(0.0,0.0);],, [ac_c99_math=no])
1584   AC_TRY_COMPILE([#include <math.h>],[isless(0.0,0.0);],, [ac_c99_math=no])
1585   AC_TRY_COMPILE([#include <math.h>],[islessequal(0.0,0.0);],,[ac_c99_math=no])
1586   AC_TRY_COMPILE([#include <math.h>],
1587                  [islessgreater(0.0,0.0);],, [ac_c99_math=no])
1588   AC_TRY_COMPILE([#include <math.h>],
1589                  [isunordered(0.0,0.0);],, [ac_c99_math=no])
1590   AC_MSG_RESULT($ac_c99_math)
1592   # Check for the existence in <stdio.h> of vscanf, et. al.
1593   ac_c99_stdio=yes;
1594   AC_MSG_CHECKING([for ISO C99 support in <stdio.h>])
1595   AC_TRY_COMPILE([#include <stdio.h>],
1596                  [snprintf("12", 0, "%i");],, [ac_c99_stdio=no])
1597   AC_TRY_COMPILE([#include <stdio.h>
1598                   #include <stdarg.h>
1599                   void foo(char* fmt, ...)
1600                   {va_list args; va_start(args, fmt);
1601                   vfscanf(stderr, "%i", args);}],
1602                   [],, [ac_c99_stdio=no])
1603   AC_TRY_COMPILE([#include <stdio.h>
1604                   #include <stdarg.h>
1605                   void foo(char* fmt, ...)
1606                   {va_list args; va_start(args, fmt);
1607                   vscanf("%i", args);}],
1608                   [],, [ac_c99_stdio=no])
1609   AC_TRY_COMPILE([#include <stdio.h>
1610                   #include <stdarg.h>
1611                   void foo(char* fmt, ...)
1612                   {va_list args; va_start(args, fmt);
1613                   vsnprintf(fmt, 0, "%i", args);}],
1614                   [],, [ac_c99_stdio=no])
1615   AC_TRY_COMPILE([#include <stdio.h>
1616                   #include <stdarg.h>
1617                   void foo(char* fmt, ...)
1618                   {va_list args; va_start(args, fmt);
1619                   vsscanf(fmt, "%i", args);}],
1620                   [],, [ac_c99_stdio=no])
1621   AC_MSG_RESULT($ac_c99_stdio)
1623   # Check for the existence in <stdlib.h> of lldiv_t, et. al.
1624   ac_c99_stdlib=yes;
1625   AC_MSG_CHECKING([for lldiv_t declaration])
1626   AC_CACHE_VAL(ac_c99_lldiv_t, [
1627   AC_TRY_COMPILE([#include <stdlib.h>],
1628                    [ lldiv_t mydivt;],
1629                    [ac_c99_lldiv_t=yes], [ac_c99_lldiv_t=no])
1630   ])
1631   AC_MSG_RESULT($ac_c99_lldiv_t)
1633   AC_MSG_CHECKING([for ISO C99 support in <stdlib.h>])
1634   AC_TRY_COMPILE([#include <stdlib.h>],
1635                  [char* tmp; strtof("gnu", &tmp);],, [ac_c99_stdlib=no])
1636   AC_TRY_COMPILE([#include <stdlib.h>],
1637                  [char* tmp; strtold("gnu", &tmp);],, [ac_c99_stdlib=no])
1638   AC_TRY_COMPILE([#include <stdlib.h>], [llabs(10);],, [ac_c99_stdlib=no])
1639   AC_TRY_COMPILE([#include <stdlib.h>], [lldiv(10,1);],, [ac_c99_stdlib=no])
1640   AC_TRY_COMPILE([#include <stdlib.h>], [atoll("10");],, [ac_c99_stdlib=no])
1641   AC_TRY_COMPILE([#include <stdlib.h>], [_Exit(0);],, [ac_c99_stdlib=no])
1642   if test x"$ac_c99_lldiv_t" = x"no"; then
1643     ac_c99_stdlib=no;
1644   fi;
1645   AC_MSG_RESULT($ac_c99_stdlib)
1647   # Check for the existence of <wchar.h> functions used if C99 is enabled.
1648   # XXX the wchar.h checks should be rolled into the general C99 bits.
1649   ac_c99_wchar=yes;
1650   AC_MSG_CHECKING([for additional ISO C99 support in <wchar.h>])
1651   AC_TRY_COMPILE([#include <wchar.h>],
1652                  [wcstold(L"10.0", NULL);],, [ac_c99_wchar=no])
1653   AC_TRY_COMPILE([#include <wchar.h>],
1654                  [wcstoll(L"10", NULL, 10);],, [ac_c99_wchar=no])
1655   AC_TRY_COMPILE([#include <wchar.h>],
1656                  [wcstoull(L"10", NULL, 10);],, [ac_c99_wchar=no])
1657   AC_MSG_RESULT($ac_c99_wchar)
1659   AC_MSG_CHECKING([for enabled ISO C99 support])
1660   if test x"$ac_c99_math" = x"no" ||
1661      test x"$ac_c99_stdio" = x"no" ||
1662      test x"$ac_c99_stdlib" = x"no" ||
1663      test x"$ac_c99_wchar" = x"no"; then
1664     enable_c99=no;
1665   fi;
1666   AC_MSG_RESULT($enable_c99)
1668   # Option parsed, now set things appropriately
1669   if test x"$enable_c99" = x"yes"; then
1670     AC_DEFINE(_GLIBCPP_USE_C99)
1671   fi
1673   AC_LANG_RESTORE
1678 dnl Check for template specializations for the 'long long' type extension.
1679 dnl The result determines only whether 'long long' I/O is enabled; things
1680 dnl like numeric_limits<> specializations are always available.
1682 dnl GLIBCPP_ENABLE_LONG_LONG
1683 dnl --enable-long-long defines _GLIBCPP_USE_LONG_LONG
1684 dnl --disable-long-long leaves _GLIBCPP_USE_LONG_LONG undefined
1685 dnl  +  Usage:  GLIBCPP_ENABLE_LONG_LONG[(DEFAULT)]
1686 dnl       Where DEFAULT is either `yes' or `no'.  If omitted, it
1687 dnl       defaults to `no'.
1688 dnl  +  If 'long long' stuff is not available, ignores DEFAULT and sets `no'.
1690 dnl GLIBCPP_ENABLE_LONG_LONG
1691 AC_DEFUN(GLIBCPP_ENABLE_LONG_LONG, [dnl
1692   define([GLIBCPP_ENABLE_LONG_LONG_DEFAULT], ifelse($1, yes, yes, no))dnl
1694   AC_ARG_ENABLE(long-long,
1695   changequote(<<, >>)dnl
1696   <<--enable-long-long      turns on 'long long' [default=>>GLIBCPP_ENABLE_LONG_LONG_DEFAULT],
1697   changequote([, ])dnl
1698   [case "$enableval" in
1699    yes) enable_long_long=yes ;;
1700    no)  enable_long_long=no ;;
1701    *)   AC_MSG_ERROR([Unknown argument to enable/disable long long]) ;;
1702    esac],
1703   enable_long_long=GLIBCPP_ENABLE_LONG_LONG_DEFAULT)dnl
1705   AC_LANG_SAVE
1706   AC_LANG_CPLUSPLUS
1708   AC_MSG_CHECKING([for enabled long long I/O support])
1709   # iostreams require strtoll, strtoull to compile
1710   AC_TRY_COMPILE([#include <stdlib.h>],
1711                  [char* tmp; strtoll("gnu", &tmp, 10);],,[enable_long_long=no])
1712   AC_TRY_COMPILE([#include <stdlib.h>],
1713                  [char* tmp; strtoull("gnu", &tmp, 10);],,[enable_long_long=no])
1715   # Option parsed, now set things appropriately
1716   if test x"$enable_long_long" = xyes; then
1717     AC_DEFINE(_GLIBCPP_USE_LONG_LONG)
1718   fi
1719   AC_MSG_RESULT($enable_long_long)
1721   AC_LANG_RESTORE
1726 dnl Check for what type of C headers to use.
1728 dnl GLIBCPP_ENABLE_CHEADERS
1729 dnl --enable-cheaders= [does stuff].
1730 dnl --disable-cheaders [does not do anything, really].
1731 dnl  +  Usage:  GLIBCPP_ENABLE_CHEADERS[(DEFAULT)]
1732 dnl       Where DEFAULT is either `c' or `c_std'.
1733 dnl       If ommitted, it defaults to `c_std'.
1734 AC_DEFUN(GLIBCPP_ENABLE_CHEADERS, [dnl
1735 define([GLIBCPP_ENABLE_CHEADERS_DEFAULT], ifelse($1, c_std, c_std, c_std))dnl
1736 AC_MSG_CHECKING([for c header strategy to use])
1737 AC_ARG_ENABLE(cheaders,
1738 changequote(<<, >>)dnl
1739 <<  --enable-cheaders=MODEL       construct "C" header files for g++ [default=>>GLIBCPP_ENABLE_CHEADERS_DEFAULT],
1740 changequote([, ])
1741   [case "$enableval" in
1742    c)
1743         enable_cheaders=c
1744         ;;
1745    c_std)
1746         enable_cheaders=c_std
1747         ;;
1748    *)   AC_MSG_ERROR([Unknown argument to enable/disable "C" headers])
1749         ;;
1750   esac],
1751   enable_cheaders=GLIBCPP_ENABLE_CHEADERS_DEFAULT)
1752   AC_MSG_RESULT($enable_cheaders)
1754   dnl Option parsed, now set things appropriately
1755   case "$enable_cheaders" in
1756     c_std)
1757         C_INCLUDE_DIR='${glibcpp_srcdir}/include/c_std'
1758         ;;
1759     c)
1760         C_INCLUDE_DIR='${glibcpp_srcdir}/include/c'
1761         ;;
1762   esac
1764   AC_SUBST(C_INCLUDE_DIR)
1765   AM_CONDITIONAL(GLIBCPP_C_HEADERS_C, test "$enable_cheaders" = c)
1766   AM_CONDITIONAL(GLIBCPP_C_HEADERS_C_STD, test "$enable_cheaders" = c_std)
1767   AM_CONDITIONAL(GLIBCPP_C_HEADERS_COMPATIBILITY, test "$c_compatibility" = yes)
1772 dnl Check for wide character support.  Has the same effect as the option
1773 dnl in gcc's configure, but in a form that autoconf can mess with.
1775 dnl GLIBCPP_ENABLE_C_MBCHAR
1776 dnl --enable-c-mbchar requests all the wchar_t stuff.
1777 dnl --disable-c-mbchar doesn't.
1778 dnl  +  Usage:  GLIBCPP_ENABLE_C_MBCHAR[(DEFAULT)]
1779 dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
1780 dnl       defaults to `no'.
1781 AC_DEFUN(GLIBCPP_ENABLE_C_MBCHAR, [dnl
1782 define([GLIBCPP_ENABLE_C_MBCHAR_DEFAULT], ifelse($1, yes, yes, no))dnl
1783 AC_ARG_ENABLE(c-mbchar,
1784 changequote(<<, >>)dnl
1785 <<  --enable-c-mbchar       enable multibyte (wide) characters [default=>>GLIBCPP_ENABLE_C_MBCHAR_DEFAULT],
1786 changequote([, ])dnl
1787 [case "$enableval" in
1788  yes) enable_c_mbchar=yes ;;
1789  no)  enable_c_mbchar=no ;;
1790  *)   AC_MSG_ERROR([Unknown argument to enable/disable c-mbchar]) ;;
1791  esac],
1792 enable_c_mbchar=GLIBCPP_ENABLE_C_MBCHAR_DEFAULT)dnl
1793 dnl Option parsed, now other scripts can test enable_c_mbchar for yes/no.
1798 dnl Set up *_INCLUDES and *_INCLUDE_DIR variables for all sundry Makefile.am's.
1800 dnl TOPLEVEL_INCLUDES
1801 dnl LIBMATH_INCLUDES
1802 dnl LIBSUPCXX_INCLUDES
1803 dnl LIBIO_INCLUDES
1805 dnl GLIBCPP_EXPORT_INCLUDES
1806 AC_DEFUN(GLIBCPP_EXPORT_INCLUDES, [
1807   # Root level of the build directory include sources.
1808   GLIBCPP_INCLUDES="-I${glibcpp_builddir}/include/${target_alias} -I${glibcpp_builddir}/include"
1810   # Passed down for canadian crosses.
1811   if test x"$CANADIAN" = xyes; then
1812     TOPLEVEL_INCLUDES='-I$(includedir)'
1813   fi
1815   LIBMATH_INCLUDES='-I$(top_srcdir)/libmath'
1817   LIBSUPCXX_INCLUDES='-I$(top_srcdir)/libsupc++'
1819   if test x"$need_libio" = xyes; then
1820     LIBIO_INCLUDES='-I$(top_builddir)/libio -I$(top_srcdir)/libio'
1821     AC_SUBST(LIBIO_INCLUDES)
1822   fi
1824   # Now, export this to all the little Makefiles....
1825   AC_SUBST(GLIBCPP_INCLUDES)
1826   AC_SUBST(TOPLEVEL_INCLUDES)
1827   AC_SUBST(LIBMATH_INCLUDES)
1828   AC_SUBST(LIBSUPCXX_INCLUDES)
1833 dnl Set up *_FLAGS and *FLAGS variables for all sundry Makefile.am's.
1835 AC_DEFUN(GLIBCPP_EXPORT_FLAGS, [
1836   # Optimization flags that are probably a good idea for thrill-seekers. Just
1837   # uncomment the lines below and make, everything else is ready to go...
1838   # OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc
1839   OPTIMIZE_CXXFLAGS=
1840   AC_SUBST(OPTIMIZE_CXXFLAGS)
1842   WARN_FLAGS='-Wall -Wno-format -W -Wwrite-strings -Winline'
1843   AC_SUBST(WARN_FLAGS)
1847 dnl  GLIBCPP_EXPORT_INSTALL_INFO
1848 dnl  calculates gxx_install_dir
1849 dnl  exports glibcpp_toolexecdir
1850 dnl  exports glibcpp_toolexeclibdir
1851 dnl  exports glibcpp_prefixdir
1853 dnl Assumes cross_compiling bits already done, and with_cross_host in
1854 dnl particular
1856 dnl GLIBCPP_EXPORT_INSTALL_INFO
1857 AC_DEFUN(GLIBCPP_EXPORT_INSTALL_INFO, [
1858 # Assumes glibcpp_builddir, glibcpp_srcdir are alreay set up and
1859 # exported correctly in GLIBCPP_CONFIGURE.
1860 glibcpp_toolexecdir=no
1861 glibcpp_toolexeclibdir=no
1862 glibcpp_prefixdir=${prefix}
1864 # Process the option --with-gxx-include-dir=<path to include-files directory>
1865 AC_MSG_CHECKING([for --with-gxx-include-dir])
1866 AC_ARG_WITH(gxx-include-dir,
1867 [  --with-gxx-include-dir  the installation directory for include files],
1868 [case "${withval}" in
1869   yes)
1870     AC_MSG_ERROR(Missing directory for --with-gxx-include-dir)
1871     gxx_include_dir=no
1872     ;;
1873   no)
1874     gxx_include_dir=no
1875     ;;
1876   *)
1877     gxx_include_dir=${withval}
1878     ;;
1879 esac], [gxx_include_dir=no])
1880 AC_MSG_RESULT($gxx_include_dir)
1882 # Process the option "--enable-version-specific-runtime-libs"
1883 AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
1884 AC_ARG_ENABLE(version-specific-runtime-libs,
1885 [  --enable-version-specific-runtime-libs    Specify that runtime libraries should be installed in a compiler-specific directory ],
1886 [case "$enableval" in
1887  yes) version_specific_libs=yes ;;
1888  no)  version_specific_libs=no ;;
1889  *)   AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);;
1890  esac],
1891 version_specific_libs=no)dnl
1892 # Option set, now we can test it.
1893 AC_MSG_RESULT($version_specific_libs)
1895 # Default case for install directory for include files.
1896 if test $version_specific_libs = no && test $gxx_include_dir = no; then
1897   gxx_include_dir='$(prefix)'/include/c++/${gcc_version}
1900 # Version-specific runtime libs processing.
1901 if test $version_specific_libs = yes; then
1902   # Need the gcc compiler version to know where to install libraries
1903   # and header files if --enable-version-specific-runtime-libs option
1904   # is selected.
1905   if test x"$gxx_include_dir" = x"no"; then
1906     gxx_include_dir='$(libdir)/gcc-lib/$(target_alias)/'${gcc_version}/include/c++
1907   fi
1908   glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
1909   glibcpp_toolexeclibdir='$(toolexecdir)/'${gcc_version}'$(MULTISUBDIR)'
1912 # Calculate glibcpp_toolexecdir, glibcpp_toolexeclibdir
1913 # Install a library built with a cross compiler in tooldir, not libdir.
1914 if test x"$glibcpp_toolexecdir" = x"no"; then
1915   if test -n "$with_cross_host" &&
1916      test x"$with_cross_host" != x"no"; then
1917     glibcpp_toolexecdir='$(exec_prefix)/$(target_alias)'
1918     glibcpp_toolexeclibdir='$(toolexecdir)/lib'
1919   else
1920     glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
1921     glibcpp_toolexeclibdir='$(libdir)'
1922   fi
1923   multi_os_directory=`$CC -print-multi-os-directory`
1924   case $multi_os_directory in
1925   .) ;; # Avoid trailing /.
1926   *) glibcpp_toolexeclibdir=$glibcpp_toolexeclibdir/$multi_os_directory ;;
1927   esac
1930 AC_MSG_CHECKING([for install location])
1931 AC_MSG_RESULT($gxx_include_dir)
1933 AC_SUBST(glibcpp_prefixdir)
1934 AC_SUBST(gxx_include_dir)
1935 AC_SUBST(glibcpp_toolexecdir)
1936 AC_SUBST(glibcpp_toolexeclibdir)
1940 # Check for functions in math library.
1941 # Ulrich Drepper <drepper@cygnus.com>, 1998.
1943 # This file can be copied and used freely without restrictions.  It can
1944 # be used in projects which are not available under the GNU Public License
1945 # but which still want to provide support for the GNU gettext functionality.
1946 # Please note that the actual code is *not* freely available.
1948 # serial 1
1950 dnl AC_REPLACE_MATHFUNCS(FUNCTION...)
1951 AC_DEFUN(AC_REPLACE_MATHFUNCS,
1952 [AC_CHECK_FUNCS([$1], , [LIBMATHOBJS="$LIBMATHOBJS ${ac_func}.lo"])])
1955 dnl This macro searches for a GNU version of make.  If a match is found, the
1956 dnl makefile variable `ifGNUmake' is set to the empty string, otherwise it is
1957 dnl set to "#". This is useful for  including a special features in a Makefile,
1958 dnl which cannot be handled by other versions of make.  The variable
1959 dnl _cv_gnu_make_command is set to the command to invoke GNU make if it exists,
1960 dnl the empty string otherwise.
1962 dnl Here is an example of its use:
1964 dnl Makefile.in might contain:
1966 dnl     # A failsafe way of putting a dependency rule into a makefile
1967 dnl     $(DEPEND):
1968 dnl             $(CC) -MM $(srcdir)/*.c > $(DEPEND)
1970 dnl     @ifGNUmake@ ifeq ($(DEPEND),$(wildcard $(DEPEND)))
1971 dnl     @ifGNUmake@ include $(DEPEND)
1972 dnl     @ifGNUmake@ endif
1974 dnl Then configure.in would normally contain:
1976 dnl     CHECK_GNU_MAKE()
1977 dnl     AC_OUTPUT(Makefile)
1979 dnl Then perhaps to cause gnu make to override any other make, we could do
1980 dnl something like this (note that GNU make always looks for GNUmakefile first):
1982 dnl     if  ! test x$_cv_gnu_make_command = x ; then
1983 dnl             mv Makefile GNUmakefile
1984 dnl             echo .DEFAULT: > Makefile ;
1985 dnl             echo \  $_cv_gnu_make_command \$@ >> Makefile;
1986 dnl     fi
1988 dnl Then, if any (well almost any) other make is called, and GNU make also
1989 dnl exists, then the other make wraps the GNU make.
1991 dnl @author John Darrington <j.darrington@elvis.murdoch.edu.au>
1992 dnl @version 1.1 #### replaced Id string now that Id is for lib-v3; pme
1994 dnl #### Changes for libstdc++-v3:  reformatting and linewrapping; prepending
1995 dnl #### GLIBCPP_ to the macro name; adding the :-make fallback in the
1996 dnl #### conditional's subshell (" --version" is not a command), using a
1997 dnl #### different option to grep(1).
1998 dnl #### -pme
1999 dnl #### Fixed Bourne shell portability bug (use ${MAKE-make}, not
2000 dnl #### ${MAKE:-make}).
2001 dnl #### -msokolov
2002 AC_DEFUN(
2003   GLIBCPP_CHECK_GNU_MAKE, [AC_CACHE_CHECK( for GNU make,_cv_gnu_make_command,
2004           _cv_gnu_make_command='' ;
2005 dnl Search all the common names for GNU make
2006           for a in "${MAKE-make}" make gmake gnumake ; do
2007                   if ( $a --version 2> /dev/null | grep -c GNU > /dev/null )
2008                   then
2009                           _cv_gnu_make_command=$a ;
2010                           break;
2011                   fi
2012           done ;
2013   ) ;
2014 dnl If there was a GNU version, then set @ifGNUmake@ to the empty
2015 dnl string, '#' otherwise
2016   if test  "x$_cv_gnu_make_command" != "x"  ; then
2017           ifGNUmake='' ;
2018   else
2019           ifGNUmake='#' ;
2020   fi
2021   AC_SUBST(ifGNUmake)
2025 dnl Check for headers for, and arguments to, the setrlimit() function.
2026 dnl Used only in testsuite_hooks.h.
2027 AC_DEFUN(GLIBCPP_CHECK_SETRLIMIT_ancilliary, [
2028   AC_TRY_COMPILE([#include <unistd.h>
2029                   #include <sys/time.h>
2030                   #include <sys/resource.h>
2031                  ], [ int f = RLIMIT_$1 ; ],
2032                  [glibcpp_mresult=1], [glibcpp_mresult=0])
2033   AC_DEFINE_UNQUOTED(HAVE_MEMLIMIT_$1, $glibcpp_mresult,
2034                      [Only used in build directory testsuite_hooks.h.])
2036 AC_DEFUN(GLIBCPP_CHECK_SETRLIMIT, [
2037   setrlimit_have_headers=yes
2038   AC_CHECK_HEADERS(unistd.h sys/time.h sys/resource.h,
2039                    [],
2040                    setrlimit_have_headers=no)
2041   # If don't have the headers, then we can't run the tests now, and we
2042   # won't be seeing any of these during testsuite compilation.
2043   if test $setrlimit_have_headers = yes; then
2044     # Can't do these in a loop, else the resulting syntax is wrong.
2045     GLIBCPP_CHECK_SETRLIMIT_ancilliary(DATA)
2046     GLIBCPP_CHECK_SETRLIMIT_ancilliary(RSS)
2047     GLIBCPP_CHECK_SETRLIMIT_ancilliary(VMEM)
2048     GLIBCPP_CHECK_SETRLIMIT_ancilliary(AS)
2050     # Check for rlimit, setrlimit.
2051     AC_CACHE_VAL(ac_setrlimit, [
2052       AC_TRY_COMPILE([#include <unistd.h>
2053                   #include <sys/time.h>
2054                   #include <sys/resource.h>
2055                      ],
2056                      [ struct rlimit r; setrlimit(0, &r);],
2057                      [ac_setrlimit=yes], [ac_setrlimit=no])
2058     ])
2059   fi
2061   AC_MSG_CHECKING([for testsuite memory limit support])
2062   if test $setrlimit_have_headers = yes && test $ac_setrlimit = yes; then
2063     ac_mem_limits=yes
2064     AC_DEFINE(_GLIBCPP_MEM_LIMITS)
2065   else
2066     ac_mem_limits=no
2067   fi
2068   AC_MSG_RESULT($ac_mem_limits)
2073 dnl Does any necessary configuration of the testsuite directory.  Generates
2074 dnl the testsuite_hooks.h header.
2076 dnl GLIBCPP_CONFIGURE_TESTSUITE  [no args]
2077 AC_DEFUN(GLIBCPP_CONFIGURE_TESTSUITE, [
2078   GLIBCPP_CHECK_SETRLIMIT
2080   # Look for setenv, so that extended locale tests can be performed.
2081   GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_3(setenv)
2083   # Export file names for ABI checking.
2084   baseline_file="${glibcpp_srcdir}/config/abi/${abi_baseline_triplet}/baseline_symbols.txt"
2085   AC_SUBST(baseline_file)
2087   case "$target" in
2088     *-*-cygwin* ) enable_abi_check=no ;;
2089     * ) enable_abi_check=yes ;;
2090   esac
2092   # Don't do ABI checking unless native.
2093   AM_CONDITIONAL(GLIBCPP_BUILD_ABI_CHECK,
2094                  test x"$build" = x"$host" && test -z "$with_cross_host" \
2095                  && test "$enable_abi_check" = yes )
2099 sinclude(../libtool.m4)
2100 dnl The lines below arrange for aclocal not to bring an installed
2101 dnl libtool.m4 into aclocal.m4, while still arranging for automake to
2102 dnl add a definition of LIBTOOL to Makefile.in.
2103 ifelse(,,,[AC_SUBST(LIBTOOL)
2104 AC_DEFUN([AM_PROG_LIBTOOL])
2105 AC_DEFUN([AC_LIBTOOL_DLOPEN])
2106 AC_DEFUN([AC_PROG_LD])
2110 dnl Check whether S_ISREG (Posix) or S_IFREG is available in <sys/stat.h>.
2113 AC_DEFUN(GLIBCPP_CHECK_S_ISREG_OR_S_IFREG, [
2114   AC_CACHE_VAL(glibcpp_cv_S_ISREG, [
2115     AC_TRY_LINK([#include <sys/stat.h>],
2116                 [struct stat buffer; fstat(0, &buffer); S_ISREG(buffer.st_mode); ],
2117                 [glibcpp_cv_S_ISREG=yes],
2118                 [glibcpp_cv_S_ISREG=no])
2119   ])
2120   AC_CACHE_VAL(glibcpp_cv_S_IFREG, [
2121     AC_TRY_LINK([#include <sys/stat.h>],
2122                 [struct stat buffer; fstat(0, &buffer); S_IFREG & buffer.st_mode; ],
2123                 [glibcpp_cv_S_IFREG=yes],
2124                 [glibcpp_cv_S_IFREG=no])
2125   ])
2126   if test x$glibcpp_cv_S_ISREG = xyes; then
2127     AC_DEFINE(HAVE_S_ISREG)
2128   elif test x$glibcpp_cv_S_IFREG = xyes; then
2129     AC_DEFINE(HAVE_S_IFREG)
2130   fi
2134 dnl Check whether poll is available in <poll.h>.
2137 AC_DEFUN(GLIBCPP_CHECK_POLL, [
2138   AC_CACHE_VAL(glibcpp_cv_POLL, [
2139     AC_TRY_COMPILE([#include <poll.h>],
2140                 [struct pollfd pfd[1]; pfd[0].events = POLLIN; poll(pfd, 1, 0); ],
2141                 [glibcpp_cv_POLL=yes],
2142                 [glibcpp_cv_POLL=no])
2143   ])
2144   if test x$glibcpp_cv_POLL = xyes; then
2145     AC_DEFINE(HAVE_POLL)
2146   fi
2149 # Check whether LC_MESSAGES is available in <locale.h>.
2150 # Ulrich Drepper <drepper@cygnus.com>, 1995.
2152 # This file file be copied and used freely without restrictions.  It can
2153 # be used in projects which are not available under the GNU Public License
2154 # but which still want to provide support for the GNU gettext functionality.
2155 # Please note that the actual code is *not* freely available.
2157 # serial 1
2159 AC_DEFUN(AC_LC_MESSAGES, [
2160   AC_CHECK_HEADER(locale.h, [
2161     AC_CACHE_CHECK([for LC_MESSAGES], ac_cv_val_LC_MESSAGES,
2162       [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
2163        ac_cv_val_LC_MESSAGES=yes, ac_cv_val_LC_MESSAGES=no)])
2164     if test $ac_cv_val_LC_MESSAGES = yes; then
2165       AC_DEFINE(HAVE_LC_MESSAGES)
2166     fi
2167   ])
2172 dnl Check for whether the Boost-derived checks should be turned on.
2174 dnl GLIBCPP_ENABLE_CONCEPT_CHECKS
2175 dnl --enable-concept-checks turns them on.
2176 dnl --disable-concept-checks leaves them off.
2177 dnl  +  Usage:  GLIBCPP_ENABLE_CONCEPT_CHECKS[(DEFAULT)]
2178 dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
2179 dnl       defaults to `no'.
2180 AC_DEFUN(GLIBCPP_ENABLE_CONCEPT_CHECKS, [dnl
2181 define([GLIBCPP_ENABLE_CONCEPT_CHECKS_DEFAULT], ifelse($1, yes, yes, no))dnl
2182 AC_ARG_ENABLE(concept-checks,
2183 changequote(<<, >>)dnl
2184 <<  --enable-concept-checks use Boost-derived template checks [default=>>GLIBCPP_ENABLE_CONCEPT_CHECKS_DEFAULT],
2185 changequote([, ])dnl
2186 [case "$enableval" in
2187  yes) enable_concept_checks=yes ;;
2188  no)  enable_concept_checks=no ;;
2189  *)   AC_MSG_ERROR([Unknown argument to enable/disable concept checks]) ;;
2190  esac],
2191 enable_concept_checks=GLIBCPP_ENABLE_CONCEPT_CHECKS_DEFAULT)dnl
2192 dnl Option parsed, now set things appropriately
2193 if test x"$enable_concept_checks" = xyes; then
2194   AC_DEFINE(_GLIBCPP_CONCEPT_CHECKS)
2200 dnl Add version tags to symbols in shared library (or not), additionally
2201 dnl marking other symbols as private/local (or not).
2203 dnl GLIBCPP_ENABLE_SYMVERS
2204 dnl --enable-symvers=style adds a version script to the linker call when
2205 dnl       creating the shared library.  The choice of version script is
2206 dnl       controlled by 'style'.
2207 dnl --disable-symvers does not.
2208 dnl  +  Usage:  GLIBCPP_ENABLE_SYMVERS[(DEFAULT)]
2209 dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
2210 dnl       defaults to `no'.  Passing `yes' tries to choose a default style
2211 dnl       based on linker characteristics.  Passing 'no' disables versioning.
2212 AC_DEFUN(GLIBCPP_ENABLE_SYMVERS, [dnl
2213 define([GLIBCPP_ENABLE_SYMVERS_DEFAULT], ifelse($1, yes, yes, no))dnl
2214 AC_ARG_ENABLE(symvers,
2215 changequote(<<, >>)dnl
2216 <<  --enable-symvers=style  enables symbol versioning of the shared library [default=>>GLIBCPP_ENABLE_SYMVERS_DEFAULT],
2217 changequote([, ])dnl
2218 [case "$enableval" in
2219  yes) enable_symvers=yes ;;
2220  no)  enable_symvers=no ;;
2221  # other names here, just as sanity checks
2222  #gnu|sun|etcetera) enable_symvers=$enableval ;;
2223  gnu) enable_symvers=$enableval ;;
2224  *)   AC_MSG_ERROR([Unknown argument to enable/disable symvers]) ;;
2225  esac],
2226 enable_symvers=GLIBCPP_ENABLE_SYMVERS_DEFAULT)dnl
2228 # If we never went through the GLIBCPP_CHECK_LINKER_FEATURES macro, then we
2229 # don't know enough about $LD to do tricks...
2230 if test x$enable_shared = xno ||
2231         test "x$LD" = x ||
2232         test x$glibcpp_gnu_ld_version = x; then
2233   enable_symvers=no
2236 # Check to see if libgcc_s exists, indicating that shared libgcc is possible.
2237 if test $enable_symvers != no; then
2238   AC_MSG_CHECKING([for shared libgcc])
2239   ac_save_CFLAGS="$CFLAGS"
2240   CFLAGS=' -lgcc_s'
2241   AC_TRY_LINK(, [return 0], glibcpp_shared_libgcc=yes, glibcpp_shared_libgcc=no)
2242   CFLAGS="$ac_save_CFLAGS"
2243   AC_MSG_RESULT($glibcpp_shared_libgcc)
2246 # For GNU ld, we need at least this version.  It's 2.12 in the same format
2247 # as the tested-for version.  See GLIBCPP_CHECK_LINKER_FEATURES for more.
2248 glibcpp_min_gnu_ld_version=21200
2250 # Check to see if unspecified "yes" value can win, given results
2251 # above.
2252 if test $enable_symvers = yes ; then
2253   if test $with_gnu_ld = yes &&
2254     test $glibcpp_shared_libgcc = yes ;
2255   then
2256     if test $glibcpp_gnu_ld_version -ge $glibcpp_min_gnu_ld_version ; then
2257         enable_symvers=gnu
2258     else
2259       ac_test_CFLAGS="${CFLAGS+set}"
2260       ac_save_CFLAGS="$CFLAGS"
2261       CFLAGS='-shared -Wl,--version-script,conftest.map'
2262       enable_symvers=no
2263       changequote(,)
2264       echo 'FOO { global: f[a-z]o; local: *; };' > conftest.map
2265       changequote([,])
2266       AC_TRY_LINK([int foo;],, enable_symvers=gnu)
2267       if test "$ac_test_CFLAGS" = set; then
2268         CFLAGS="$ac_save_CFLAGS"
2269       else
2270         # this is the suspicious part
2271         CFLAGS=''
2272       fi
2273       rm -f conftest.map
2274     fi
2275   else
2276     # just fail for now
2277     enable_symvers=no
2278   fi
2281 dnl Everything parsed; figure out what file to use.
2282 case $enable_symvers in
2283   no)
2284       SYMVER_MAP=config/linker-map.dummy
2285       ;;
2286   gnu)
2287       SYMVER_MAP=config/linker-map.gnu
2288       AC_DEFINE(_GLIBCPP_SYMVER)
2289       ;;
2290 esac
2292 AC_SUBST(SYMVER_MAP)
2293 AM_CONDITIONAL(GLIBCPP_BUILD_VERSIONED_SHLIB, test $enable_symvers != no)
2294 AC_MSG_CHECKING([versioning on shared library symbols])
2295 AC_MSG_RESULT($enable_symvers)