Fix compilation errors with Clang
[official-gcc.git] / libstdc++-v3 / acinclude.m4
blobad2cb01d94f2073aaef8a48ea7cb3a760e3d51a3
1 dnl
2 dnl GLIBCXX_CONDITIONAL (NAME, SHELL-TEST)
3 dnl
4 dnl Exactly like AM_CONDITIONAL, but delays evaluation of the test until the
5 dnl end of configure.  This lets tested variables be reassigned, and the
6 dnl conditional will depend on the final state of the variable.  For a simple
7 dnl example of why this is needed, see GLIBCXX_ENABLE_HOSTED.
8 dnl
9 m4_define([_m4_divert(glibcxx_diversion)], 8000)dnl
10 AC_DEFUN([GLIBCXX_CONDITIONAL], [dnl
11   m4_divert_text([glibcxx_diversion],dnl
12    AM_CONDITIONAL([$1],[$2])
13   )dnl
14 ])dnl
15 AC_DEFUN([GLIBCXX_EVALUATE_CONDITIONALS], [m4_undivert([glibcxx_diversion])])dnl
18 dnl
19 dnl Check to see what architecture and operating system we are compiling
20 dnl for.  Also, if architecture- or OS-specific flags are required for
21 dnl compilation, pick them up here.
22 dnl
23 AC_DEFUN([GLIBCXX_CHECK_HOST], [
24   . $glibcxx_srcdir/configure.host
25   AC_MSG_NOTICE([CPU config directory is $cpu_include_dir])
26   AC_MSG_NOTICE([OS config directory is $os_include_dir])
29 dnl
30 dnl Initialize the rest of the library configury.  At this point we have
31 dnl variables like $host.
32 dnl
33 dnl Sets:
34 dnl  SUBDIRS
35 dnl Substs:
36 dnl  glibcxx_builddir     (absolute path)
37 dnl  glibcxx_srcdir       (absolute path)
38 dnl  toplevel_builddir    (absolute path)
39 dnl  toplevel_srcdir      (absolute path)
40 dnl  with_cross_host
41 dnl  with_newlib
42 dnl  with_target_subdir
43 dnl plus
44 dnl  - the variables in GLIBCXX_CHECK_HOST / configure.host
45 dnl  - default settings for all AM_CONFITIONAL test variables
46 dnl  - lots of tools, like CC and CXX
47 dnl
48 AC_DEFUN([GLIBCXX_CONFIGURE], [
49   # Keep these sync'd with the list in Makefile.am.  The first provides an
50   # expandable list at autoconf time; the second provides an expandable list
51   # (i.e., shell variable) at configure time.
52   m4_define([glibcxx_SUBDIRS],[include libsupc++ src src/c++98 src/c++11 src/c++17 src/filesystem doc po testsuite python])
53   SUBDIRS='glibcxx_SUBDIRS'
55   # These need to be absolute paths, yet at the same time need to
56   # canonicalize only relative paths, because then amd will not unmount
57   # drives. Thus the use of PWDCMD: set it to 'pawd' or 'amq -w' if using amd.
58   glibcxx_builddir=`${PWDCMD-pwd}`
59   case $srcdir in
60     [\\/$]* | ?:[\\/]*) glibcxx_srcdir=${srcdir} ;;
61     *) glibcxx_srcdir=`cd "$srcdir" && ${PWDCMD-pwd} || echo "$srcdir"` ;;
62   esac
63   toplevel_builddir=${glibcxx_builddir}/..
64   toplevel_srcdir=${glibcxx_srcdir}/..
65   AC_SUBST(glibcxx_builddir)
66   AC_SUBST(glibcxx_srcdir)
67   AC_SUBST(toplevel_builddir)
68   AC_SUBST(toplevel_srcdir)
70   # We use these options to decide which functions to include.  They are
71   # set from the top level.
72   AC_ARG_WITH([target-subdir],
73     AC_HELP_STRING([--with-target-subdir=SUBDIR],
74                    [configuring in a subdirectory]))
76   AC_ARG_WITH([cross-host],
77     AC_HELP_STRING([--with-cross-host=HOST],
78                    [configuring with a cross compiler]))
80   AC_ARG_WITH([newlib],
81     AC_HELP_STRING([--with-newlib],
82                    [assume newlib as a system C library]))
84   # Will set LN_S to either 'ln -s', 'ln', or 'cp -p' (if linking isn't
85   # available).  Uncomment the next line to force a particular method.
86   AC_PROG_LN_S
87   #LN_S='cp -p'
89   AC_CHECK_TOOL(AS, as)
90   AC_CHECK_TOOL(AR, ar)
91   AC_CHECK_TOOL(RANLIB, ranlib, ranlib-not-found-in-path-error)
93   AM_MAINTAINER_MODE
95   # Set up safe default values for all subsequent AM_CONDITIONAL tests
96   # which are themselves conditionally expanded.
97   ## (Right now, this only matters for enable_wchar_t, but nothing prevents
98   ## other macros from doing the same.  This should be automated.)  -pme
100   # Check for C library flavor since GNU/Linux platforms use different
101   # configuration directories depending on the C library in use.
102   AC_EGREP_CPP([_using_uclibc], [
103   #include <stdio.h>
104   #if __UCLIBC__
105     _using_uclibc
106   #endif
107   ], uclibc=yes, uclibc=no)
109   AC_EGREP_CPP([_using_bionic], [
110   #include <stdio.h>
111   #if __BIONIC__
112     _using_bionic
113   #endif
114   ], bionic=yes, bionic=no)
116   # Find platform-specific directories containing configuration info.
117   # Also possibly modify flags used elsewhere, as needed by the platform.
118   GLIBCXX_CHECK_HOST
123 dnl Tests for newer compiler features, or features that are present in newer
124 dnl compiler versions but not older compiler versions still in use, should
125 dnl be placed here.
127 dnl Defines:
128 dnl  WERROR='-Werror' if requested and possible; g++'s that lack the
129 dnl   new inlining code or the new system_header pragma will die on -Werror.
130 dnl   Leave it out by default and use maint-mode to use it.
131 dnl  SECTION_FLAGS='-ffunction-sections -fdata-sections' if
132 dnl   compiler supports it and the user has not requested debug mode.
134 AC_DEFUN([GLIBCXX_CHECK_COMPILER_FEATURES], [
135   # All these tests are for C++; save the language and the compiler flags.
136   # The CXXFLAGS thing is suspicious, but based on similar bits previously
137   # found in GLIBCXX_CONFIGURE.
138   AC_LANG_SAVE
139   AC_LANG_CPLUSPLUS
140   ac_test_CXXFLAGS="${CXXFLAGS+set}"
141   ac_save_CXXFLAGS="$CXXFLAGS"
143   # Check for -ffunction-sections -fdata-sections
144   AC_MSG_CHECKING([for g++ that supports -ffunction-sections -fdata-sections])
145   CXXFLAGS='-g -Werror -ffunction-sections -fdata-sections'
146   AC_TRY_COMPILE([int foo; void bar() { };],, [ac_fdsections=yes], [ac_fdsections=no])
147   if test "$ac_test_CXXFLAGS" = set; then
148     CXXFLAGS="$ac_save_CXXFLAGS"
149   else
150     # this is the suspicious part
151     CXXFLAGS=''
152   fi
153   if test x"$ac_fdsections" = x"yes"; then
154     SECTION_FLAGS='-ffunction-sections -fdata-sections'
155   fi
156   AC_MSG_RESULT($ac_fdsections)
158   AC_LANG_RESTORE
159   AC_SUBST(SECTION_FLAGS)
164 dnl If GNU ld is in use, check to see if tricky linker opts can be used.  If
165 dnl the native linker is in use, all variables will be defined to something
166 dnl safe (like an empty string).
168 dnl Defines:
169 dnl  SECTION_LDFLAGS='-Wl,--gc-sections' if possible
170 dnl  OPT_LDFLAGS='-Wl,-O1' and '-z,relro' if possible
171 dnl  LD (as a side effect of testing)
172 dnl Sets:
173 dnl  with_gnu_ld
174 dnl  glibcxx_ld_is_gold (set to "no" or "yes")
175 dnl  glibcxx_gnu_ld_version (possibly)
177 dnl The last will be a single integer, e.g., version 1.23.45.0.67.89 will
178 dnl set glibcxx_gnu_ld_version to 12345.  Zeros cause problems.
180 AC_DEFUN([GLIBCXX_CHECK_LINKER_FEATURES], [
181   # If we're not using GNU ld, then there's no point in even trying these
182   # tests.  Check for that first.  We should have already tested for gld
183   # by now (in libtool), but require it now just to be safe...
184   test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS=''
185   test -z "$OPT_LDFLAGS" && OPT_LDFLAGS=''
186   AC_REQUIRE([AC_PROG_LD])
187   AC_REQUIRE([AC_PROG_AWK])
189   # The name set by libtool depends on the version of libtool.  Shame on us
190   # for depending on an impl detail, but c'est la vie.  Older versions used
191   # ac_cv_prog_gnu_ld, but now it's lt_cv_prog_gnu_ld, and is copied back on
192   # top of with_gnu_ld (which is also set by --with-gnu-ld, so that actually
193   # makes sense).  We'll test with_gnu_ld everywhere else, so if that isn't
194   # set (hence we're using an older libtool), then set it.
195   if test x${with_gnu_ld+set} != xset; then
196     if test x${ac_cv_prog_gnu_ld+set} != xset; then
197       # We got through "ac_require(ac_prog_ld)" and still not set?  Huh?
198       with_gnu_ld=no
199     else
200       with_gnu_ld=$ac_cv_prog_gnu_ld
201     fi
202   fi
204   # Start by getting the version number.  I think the libtool test already
205   # does some of this, but throws away the result.
206   glibcxx_ld_is_gold=no
207   if test x"$with_gnu_ld" = x"yes"; then
208     AC_MSG_CHECKING([for ld version])
209     changequote(,)
210     if $LD --version 2>/dev/null | grep 'GNU gold' >/dev/null 2>&1; then
211       glibcxx_ld_is_gold=yes
212     fi
213     ldver=`$LD --version 2>/dev/null |
214            sed -e 's/[. ][0-9]\{8\}$//;s/.* \([^ ]\{1,\}\)$/\1/; q'`
215     changequote([,])
216     glibcxx_gnu_ld_version=`echo $ldver | \
217            $AWK -F. '{ if (NF<3) [$]3=0; print ([$]1*100+[$]2)*100+[$]3 }'`
218     AC_MSG_RESULT($glibcxx_gnu_ld_version)
219   fi
221   # Set --gc-sections.
222   glibcxx_have_gc_sections=no
223   if test "$glibcxx_ld_is_gold" = "yes"; then
224     if $LD --help 2>/dev/null | grep gc-sections >/dev/null 2>&1; then
225       glibcxx_have_gc_sections=yes
226     fi
227   else
228     glibcxx_gcsections_min_ld=21602
229     if test x"$with_gnu_ld" = x"yes" &&
230         test $glibcxx_gnu_ld_version -gt $glibcxx_gcsections_min_ld ; then
231       glibcxx_have_gc_sections=yes
232     fi
233   fi
234   if test "$glibcxx_have_gc_sections" = "yes"; then
235     # Sufficiently young GNU ld it is!  Joy and bunny rabbits!
236     # NB: This flag only works reliably after 2.16.1. Configure tests
237     # for this are difficult, so hard wire a value that should work.
239     ac_test_CFLAGS="${CFLAGS+set}"
240     ac_save_CFLAGS="$CFLAGS"
241     CFLAGS='-Wl,--gc-sections'
243     # Check for -Wl,--gc-sections
244     AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
245     AC_TRY_LINK([ int one(void) { return 1; }
246      int two(void) { return 2; }
247         ], [ two(); ] , [ac_gcsections=yes], [ac_gcsections=no])
248     if test "$ac_gcsections" = "yes"; then
249       rm -f conftest.c
250       touch conftest.c
251       if $CC -c conftest.c; then
252         if $LD --gc-sections -o conftest conftest.o 2>&1 | \
253            grep "Warning: gc-sections option ignored" > /dev/null; then
254           ac_gcsections=no
255         fi
256       fi
257       rm -f conftest.c conftest.o conftest
258     fi
259     if test "$ac_gcsections" = "yes"; then
260       SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
261     fi
262     AC_MSG_RESULT($ac_gcsections)
264     if test "$ac_test_CFLAGS" = set; then
265       CFLAGS="$ac_save_CFLAGS"
266     else
267       # this is the suspicious part
268       CFLAGS=''
269     fi
270   fi
272   # Set -z,relro.
273   # Note this is only for shared objects.
274   ac_ld_relro=no
275   if test x"$with_gnu_ld" = x"yes"; then
276     AC_MSG_CHECKING([for ld that supports -Wl,-z,relro])
277     cxx_z_relo=`$LD -v --help 2>/dev/null | grep "z relro"`
278     if test -n "$cxx_z_relo"; then
279       OPT_LDFLAGS="-Wl,-z,relro"
280       ac_ld_relro=yes
281     fi
282     AC_MSG_RESULT($ac_ld_relro)
283   fi
285   # Set linker optimization flags.
286   if test x"$with_gnu_ld" = x"yes"; then
287     OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
288   fi
290   AC_SUBST(SECTION_LDFLAGS)
291   AC_SUBST(OPT_LDFLAGS)
296 dnl Check for headers for, and arguments to, the setrlimit() function.
297 dnl Used only in testsuite_hooks.h.  Called from GLIBCXX_CONFIGURE_TESTSUITE.
299 dnl Defines:
300 dnl  _GLIBCXX_RES_LIMITS if we can set artificial resource limits
301 dnl  various HAVE_LIMIT_* for individual limit names
303 AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT_ancilliary], [
304   AC_MSG_CHECKING([for RLIMIT_$1])
305   AC_TRY_COMPILE(
306     [#include <unistd.h>
307      #include <sys/time.h>
308      #include <sys/resource.h>
309     ],
310     [ int f = RLIMIT_$1 ; ],
311     [glibcxx_mresult=1], [glibcxx_mresult=0])
312   AC_DEFINE_UNQUOTED(HAVE_LIMIT_$1, $glibcxx_mresult,
313                      [Only used in build directory testsuite_hooks.h.])
314   if test $glibcxx_mresult = 1 ; then res=yes ; else res=no ; fi
315   AC_MSG_RESULT($res)
318 AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT], [
319   setrlimit_have_headers=yes
320   AC_CHECK_HEADERS(unistd.h sys/time.h sys/resource.h,
321                    [],
322                    [setrlimit_have_headers=no])
323   # If don't have the headers, then we can't run the tests now, and we
324   # won't be seeing any of these during testsuite compilation.
325   if test $setrlimit_have_headers = yes; then
326     # Can't do these in a loop, else the resulting syntax is wrong.
327     GLIBCXX_CHECK_SETRLIMIT_ancilliary(DATA)
328     GLIBCXX_CHECK_SETRLIMIT_ancilliary(RSS)
329     GLIBCXX_CHECK_SETRLIMIT_ancilliary(VMEM)
330     GLIBCXX_CHECK_SETRLIMIT_ancilliary(AS)
331     GLIBCXX_CHECK_SETRLIMIT_ancilliary(FSIZE)
333     # Check for rlimit, setrlimit.
334     AC_CACHE_VAL(glibcxx_cv_setrlimit, [
335       AC_TRY_COMPILE(
336         [#include <unistd.h>
337          #include <sys/time.h>
338          #include <sys/resource.h>
339         ],
340         [struct rlimit r;
341          setrlimit(0, &r);],
342         [glibcxx_cv_setrlimit=yes], [glibcxx_cv_setrlimit=no])
343     ])
344   fi
346   AC_MSG_CHECKING([for testsuite resource limits support])
347   if test $setrlimit_have_headers = yes && test $glibcxx_cv_setrlimit = yes; then
348     ac_res_limits=yes
349     AC_DEFINE(_GLIBCXX_RES_LIMITS, 1,
350               [Define if using setrlimit to set resource limits during
351               "make check"])
352   else
353     ac_res_limits=no
354   fi
355   AC_MSG_RESULT($ac_res_limits)
360 dnl Check whether S_ISREG (Posix) or S_IFREG is available in <sys/stat.h>.
361 dnl Define HAVE_S_ISREG / HAVE_S_IFREG appropriately.
363 AC_DEFUN([GLIBCXX_CHECK_S_ISREG_OR_S_IFREG], [
365   AC_LANG_SAVE
366   AC_LANG_CPLUSPLUS
367   ac_save_CXXFLAGS="$CXXFLAGS"
368   CXXFLAGS="$CXXFLAGS -fno-exceptions"
370   AC_MSG_CHECKING([for S_ISREG or S_IFREG])
371   AC_CACHE_VAL(glibcxx_cv_S_ISREG, [
372     GCC_TRY_COMPILE_OR_LINK(
373       [#include <sys/stat.h>],
374       [struct stat buffer;
375        fstat(0, &buffer);
376        S_ISREG(buffer.st_mode);],
377       [glibcxx_cv_S_ISREG=yes],
378       [glibcxx_cv_S_ISREG=no])
379   ])
380   AC_CACHE_VAL(glibcxx_cv_S_IFREG, [
381     GCC_TRY_COMPILE_OR_LINK(
382       [#include <sys/stat.h>],
383       [struct stat buffer;
384        fstat(0, &buffer);
385        S_IFREG & buffer.st_mode;],
386       [glibcxx_cv_S_IFREG=yes],
387       [glibcxx_cv_S_IFREG=no])
388   ])
389   res=no
390   if test $glibcxx_cv_S_ISREG = yes; then
391     AC_DEFINE(HAVE_S_ISREG, 1,
392               [Define if S_ISREG is available in <sys/stat.h>.])
393     res=S_ISREG
394   elif test $glibcxx_cv_S_IFREG = yes; then
395     AC_DEFINE(HAVE_S_IFREG, 1,
396               [Define if S_IFREG is available in <sys/stat.h>.])
397     res=S_IFREG
398   fi
399   AC_MSG_RESULT($res)
401   CXXFLAGS="$ac_save_CXXFLAGS"
402   AC_LANG_RESTORE
407 dnl Check whether poll is available in <poll.h>, and define HAVE_POLL.
409 AC_DEFUN([GLIBCXX_CHECK_POLL], [
411   AC_LANG_SAVE
412   AC_LANG_CPLUSPLUS
413   ac_save_CXXFLAGS="$CXXFLAGS"
414   CXXFLAGS="$CXXFLAGS -fno-exceptions"
416   AC_MSG_CHECKING([for poll])
417   AC_CACHE_VAL(glibcxx_cv_POLL, [
418     GCC_TRY_COMPILE_OR_LINK(
419       [#include <poll.h>],
420       [struct pollfd pfd[1];
421        pfd[0].events = POLLIN;
422        poll(pfd, 1, 0);],
423       [glibcxx_cv_POLL=yes],
424       [glibcxx_cv_POLL=no])
425   ])
426   if test $glibcxx_cv_POLL = yes; then
427     AC_DEFINE(HAVE_POLL, 1, [Define if poll is available in <poll.h>.])
428   fi
429   AC_MSG_RESULT($glibcxx_cv_POLL)
431   CXXFLAGS="$ac_save_CXXFLAGS"
432   AC_LANG_RESTORE
437 dnl Check whether writev is available in <sys/uio.h>, and define HAVE_WRITEV.
439 AC_DEFUN([GLIBCXX_CHECK_WRITEV], [
441   AC_LANG_SAVE
442   AC_LANG_CPLUSPLUS
443   ac_save_CXXFLAGS="$CXXFLAGS"
444   CXXFLAGS="$CXXFLAGS -fno-exceptions"
446   AC_MSG_CHECKING([for writev])
447   AC_CACHE_VAL(glibcxx_cv_WRITEV, [
448     GCC_TRY_COMPILE_OR_LINK(
449       [#include <sys/uio.h>],
450       [struct iovec iov[2];
451        writev(0, iov, 0);],
452       [glibcxx_cv_WRITEV=yes],
453       [glibcxx_cv_WRITEV=no])
454   ])
455   if test $glibcxx_cv_WRITEV = yes; then
456     AC_DEFINE(HAVE_WRITEV, 1, [Define if writev is available in <sys/uio.h>.])
457   fi
458   AC_MSG_RESULT($glibcxx_cv_WRITEV)
460   CXXFLAGS="$ac_save_CXXFLAGS"
461   AC_LANG_RESTORE
466 dnl Check whether int64_t is available in <stdint.h>, and define HAVE_INT64_T.
467 dnl Also check whether int64_t is actually a typedef to long or long long.
469 AC_DEFUN([GLIBCXX_CHECK_INT64_T], [
471   AC_LANG_SAVE
472   AC_LANG_CPLUSPLUS
474   AC_MSG_CHECKING([for int64_t])
475   AC_CACHE_VAL(glibcxx_cv_INT64_T, [
476     AC_TRY_COMPILE(
477       [#include <stdint.h>],
478       [int64_t var;],
479       [glibcxx_cv_INT64_T=yes],
480       [glibcxx_cv_INT64_T=no])
481   ])
483   if test $glibcxx_cv_INT64_T = yes; then
484     AC_DEFINE(HAVE_INT64_T, 1, [Define if int64_t is available in <stdint.h>.])
485     AC_MSG_RESULT($glibcxx_cv_INT64_T)
487     AC_MSG_CHECKING([for int64_t as long])
488     AC_CACHE_VAL(glibcxx_cv_int64_t_long, [
489       AC_TRY_COMPILE(
490         [#include <stdint.h>
491         template<typename, typename> struct same { enum { value = -1 }; };
492         template<typename Tp> struct same<Tp, Tp> { enum { value = 1 }; };
493         int array[same<int64_t, long>::value];], [],
494         [glibcxx_cv_int64_t_long=yes], [glibcxx_cv_int64_t_long=no])
495     ])
497     if test $glibcxx_cv_int64_t_long = yes; then
498       AC_DEFINE(HAVE_INT64_T_LONG, 1, [Define if int64_t is a long.])
499       AC_MSG_RESULT($glibcxx_cv_int64_t_long)
500     fi
502     AC_MSG_CHECKING([for int64_t as long long])
503     AC_CACHE_VAL(glibcxx_cv_int64_t_long_long, [
504       AC_TRY_COMPILE(
505         [#include <stdint.h>
506         template<typename, typename> struct same { enum { value = -1 }; };
507         template<typename Tp> struct same<Tp, Tp> { enum { value = 1 }; };
508         int array[same<int64_t, long long>::value];], [],
509         [glibcxx_cv_int64_t_long_long=yes], [glibcxx_cv_int64_t_long_long=no])
510     ])
512     if test $glibcxx_cv_int64_t_long_long = yes; then
513       AC_DEFINE(HAVE_INT64_T_LONG_LONG, 1, [Define if int64_t is a long long.])
514       AC_MSG_RESULT($glibcxx_cv_int64_t_long_long)
515     fi
516   fi
518   AC_LANG_RESTORE
523 dnl Check whether LFS support is available.
525 AC_DEFUN([GLIBCXX_CHECK_LFS], [
526   AC_LANG_SAVE
527   AC_LANG_CPLUSPLUS
528   ac_save_CXXFLAGS="$CXXFLAGS"
529   CXXFLAGS="$CXXFLAGS -fno-exceptions"
530   AC_MSG_CHECKING([for LFS support])
531   AC_CACHE_VAL(glibcxx_cv_LFS, [
532     GCC_TRY_COMPILE_OR_LINK(
533       [#include <unistd.h>
534        #include <stdio.h>
535        #include <sys/stat.h>
536       ],
537       [FILE* fp;
538        fopen64("t", "w");
539        fseeko64(fp, 0, SEEK_CUR);
540        ftello64(fp);
541        lseek64(1, 0, SEEK_CUR);
542        struct stat64 buf;
543        fstat64(1, &buf);],
544       [glibcxx_cv_LFS=yes],
545       [glibcxx_cv_LFS=no])
546   ])
547   if test $glibcxx_cv_LFS = yes; then
548     AC_DEFINE(_GLIBCXX_USE_LFS, 1, [Define if LFS support is available.])
549   fi
550   AC_MSG_RESULT($glibcxx_cv_LFS)
551   CXXFLAGS="$ac_save_CXXFLAGS"
552   AC_LANG_RESTORE
557 dnl Check for whether a fully dynamic basic_string implementation should
558 dnl be turned on, that does not put empty objects in per-process static
559 dnl memory (mostly useful together with shared memory allocators, see PR
560 dnl libstdc++/16612 for details).
562 dnl --enable-fully-dynamic-string defines _GLIBCXX_FULLY_DYNAMIC_STRING to 1
563 dnl --disable-fully-dynamic-string defines _GLIBCXX_FULLY_DYNAMIC_STRING to 0
564 dnl otherwise undefined
565 dnl  +  Usage:  GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING[(DEFAULT)]
566 dnl       Where DEFAULT is either `yes' or `no'.
568 AC_DEFUN([GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING], [
569   GLIBCXX_ENABLE(fully-dynamic-string,$1,,[do not put empty strings in per-process static memory])
570   if test $enable_fully_dynamic_string = yes; then
571     enable_fully_dynamic_string_def=1
572   else
573     enable_fully_dynamic_string_def=0
574   fi
575   AC_DEFINE_UNQUOTED([_GLIBCXX_FULLY_DYNAMIC_STRING], [${enable_fully_dynamic_string_def}],
576               [Define to 1 if a fully dynamic basic_string is wanted, 0 to disable, undefined for platform defaults])
581 dnl Does any necessary configuration of the testsuite directory.  Generates
582 dnl the testsuite_hooks.h header.
584 dnl GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE must be done before this.
586 dnl Sets:
587 dnl  enable_abi_check
588 dnl  GLIBCXX_TEST_WCHAR_T
589 dnl  GLIBCXX_TEST_THREAD
590 dnl Substs:
591 dnl  baseline_dir
592 dnl  baseline_subdir_switch
594 AC_DEFUN([GLIBCXX_CONFIGURE_TESTSUITE], [
595   # Do checks for resource limit functions.
596   GLIBCXX_CHECK_SETRLIMIT
598   if $GLIBCXX_IS_NATIVE ; then
599     # Look for setenv, so that extended locale tests can be performed.
600     GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3(setenv)
601   fi
603   if $GLIBCXX_IS_NATIVE && test $is_hosted = yes &&
604      test $enable_symvers != no; then
605     case "$host" in
606       *-*-cygwin*)
607         enable_abi_check=no ;;
608       *)
609         enable_abi_check=yes ;;
610     esac
611   else
612     # Only build this as native, since automake does not understand
613     # CXX_FOR_BUILD.
614     enable_abi_check=no
615   fi
617   # Export file names for ABI checking.
618   baseline_dir="$glibcxx_srcdir/config/abi/post/${abi_baseline_pair}"
619   AC_SUBST(baseline_dir)
620   baseline_subdir_switch="$abi_baseline_subdir_switch"
621   AC_SUBST(baseline_subdir_switch)
626 dnl Does any necessary configuration for docbook in the docs directory.
628 dnl XSLTPROC must be set before this
630 dnl Sets:
631 dnl  glibcxx_stylesheets
632 dnl Substs:
633 dnl  XSL_STYLE_DIR
635 AC_DEFUN([GLIBCXX_CONFIGURE_DOCBOOK], [
637 glibcxx_docbook_url=http://docbook.sourceforge.net/release/xsl-ns/current/
639 AC_MSG_CHECKING([for local stylesheet directory])
640 glibcxx_local_stylesheets=no
641 if test x${XMLCATALOG} = xyes && xsl_style_dir=`xmlcatalog "" $glibcxx_docbook_url 2>/dev/null`
642 then
643   XSL_STYLE_DIR=`echo $xsl_style_dir | sed -n 's;^file://;;p'`
644   glibcxx_local_stylesheets=yes
645 else
646   for dir in \
647     /usr/share/sgml/docbook/xsl-ns-stylesheets \
648     /usr/share/xml/docbook/stylesheet/docbook-xsl-ns \
649     /usr/share/xml/docbook/stylesheet/nwalsh5/current \
650     /usr/share/xml/docbook/stylesheet/nwalsh/current
651   do
652     if test -d $dir; then
653       glibcxx_local_stylesheets=yes
654       XSL_STYLE_DIR=$dir
655       break
656     fi
657   done
659 AC_MSG_RESULT($glibcxx_local_stylesheets)
661 if test x"$glibcxx_local_stylesheets" = x"yes"; then
662   AC_SUBST(XSL_STYLE_DIR)
663   AC_MSG_NOTICE($XSL_STYLE_DIR)
665   AC_MSG_CHECKING([for docbook stylesheets for documentation creation])
666   glibcxx_stylesheets=no
667   if test x${XMLCATALOG} = xno || xmlcatalog "" $glibcxx_docbook_url/xhtml/docbook.xsl >/dev/null 2>&1; then
668     if test x${XSLTPROC} = xyes && echo '<title/>' | xsltproc --noout --nonet --xinclude $glibcxx_docbook_url/xhtml/docbook.xsl - 2>/dev/null; then
669       glibcxx_stylesheets=yes
670     fi
671   fi
672   AC_MSG_RESULT($glibcxx_stylesheets)
674 else
675   glibcxx_stylesheets=no
678 # Check for epub3 dependencies.
679 AC_MSG_CHECKING([for epub3 stylesheets for documentation creation])
680 glibcxx_epub_stylesheets=no
681 if test x"$glibcxx_local_stylesheets" = x"yes"; then
682    if test -f "$XSL_STYLE_DIR/epub3/chunk.xsl"; then
683       glibcxx_epub_stylesheets=yes
684    fi
686 AC_MSG_RESULT($glibcxx_epub_stylesheets)
687 AM_CONDITIONAL(BUILD_EPUB, test x"$glibcxx_epub_stylesheets" = x"yes")
693 dnl Set up *_INCLUDES variables for all sundry Makefile.am's.
695 dnl Substs:
696 dnl  GLIBCXX_INCLUDES
697 dnl  TOPLEVEL_INCLUDES
699 AC_DEFUN([GLIBCXX_EXPORT_INCLUDES], [
700   # Used for every C++ compile we perform.
701   GLIBCXX_INCLUDES="\
702 -I$glibcxx_builddir/include/$host_alias \
703 -I$glibcxx_builddir/include \
704 -I$glibcxx_srcdir/libsupc++"
706   # For Canadian crosses, pick this up too.
707   if test $CANADIAN = yes; then
708     GLIBCXX_INCLUDES="$GLIBCXX_INCLUDES -I\${includedir}"
709   fi
711   # Stuff in the actual top level.  Currently only used by libsupc++ to
712   # get unwind* headers from the libgcc dir.
713   #TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/libgcc -I$(toplevel_srcdir)/include'
714   TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/libgcc'
716   # Now, export this to all the little Makefiles....
717   AC_SUBST(GLIBCXX_INCLUDES)
718   AC_SUBST(TOPLEVEL_INCLUDES)
723 dnl Set up *_FLAGS and *FLAGS variables for all sundry Makefile.am's.
724 dnl (SECTION_FLAGS is done under CHECK_COMPILER_FEATURES.)
726 dnl Substs:
727 dnl  OPTIMIZE_CXXFLAGS
728 dnl  WARN_FLAGS
730 AC_DEFUN([GLIBCXX_EXPORT_FLAGS], [
731   # Optimization flags that are probably a good idea for thrill-seekers. Just
732   # uncomment the lines below and make, everything else is ready to go...
733   # Alternatively OPTIMIZE_CXXFLAGS can be set in configure.host.
734   # OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc
735   AC_SUBST(OPTIMIZE_CXXFLAGS)
737   WARN_FLAGS="-Wall -Wextra -Wwrite-strings -Wcast-qual -Wabi=2"
738   AC_SUBST(WARN_FLAGS)
743 dnl All installation directory information is determined here.
745 dnl Substs:
746 dnl  gxx_install_dir
747 dnl  glibcxx_prefixdir
748 dnl  glibcxx_toolexecdir
749 dnl  glibcxx_toolexeclibdir
751 dnl Assumes cross_compiling bits already done, and with_cross_host in
752 dnl particular.
754 dnl This logic must match gcc/configure.ac's setting of gcc_gxx_include_dir.
755 dnl config/gxx-include-dir.m4 must be kept consistant with this as well.
756 AC_DEFUN([GLIBCXX_EXPORT_INSTALL_INFO], [
757   glibcxx_toolexecdir=no
758   glibcxx_toolexeclibdir=no
759   glibcxx_prefixdir=$prefix
761   AC_MSG_CHECKING([for gxx-include-dir])
762   AC_ARG_WITH([gxx-include-dir],
763     AC_HELP_STRING([--with-gxx-include-dir=DIR],
764                    [installation directory for include files]),
765     [case "$withval" in
766       yes) AC_MSG_ERROR([Missing directory for --with-gxx-include-dir]) ;;
767       no)  gxx_include_dir=no ;;
768       *)   gxx_include_dir=$withval ;;
769      esac],
770     [gxx_include_dir=no])
771   AC_MSG_RESULT($gxx_include_dir)
773   AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
774   AC_ARG_ENABLE([version-specific-runtime-libs],
775     AC_HELP_STRING([--enable-version-specific-runtime-libs],
776                    [Specify that runtime libraries should be installed in a compiler-specific directory]),
777     [case "$enableval" in
778       yes) version_specific_libs=yes ;;
779       no)  version_specific_libs=no ;;
780       *)   AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);;
781      esac],
782     [version_specific_libs=no])
783   AC_MSG_RESULT($version_specific_libs)
785   # Default case for install directory for include files.
786   if test $version_specific_libs = no && test $gxx_include_dir = no; then
787     gxx_include_dir='include/c++/${gcc_version}'
788     if test -n "$with_cross_host" &&
789        test x"$with_cross_host" != x"no"; then
790       gxx_include_dir='${prefix}/${target_alias}/'"$gxx_include_dir"
791     else
792       gxx_include_dir='${prefix}/'"$gxx_include_dir"
793     fi
794   fi
796   # Version-specific runtime libs processing.
797   if test $version_specific_libs = yes; then
798     # Need the gcc compiler version to know where to install libraries
799     # and header files if --enable-version-specific-runtime-libs option
800     # is selected.  FIXME: these variables are misnamed, there are
801     # no executables installed in _toolexecdir or _toolexeclibdir.
802     if test x"$gxx_include_dir" = x"no"; then
803       gxx_include_dir='${libdir}/gcc/${host_alias}/${gcc_version}/include/c++'
804     fi
805     glibcxx_toolexecdir='${libdir}/gcc/${host_alias}'
806     glibcxx_toolexeclibdir='${toolexecdir}/${gcc_version}$(MULTISUBDIR)'
807   fi
809   # Calculate glibcxx_toolexecdir, glibcxx_toolexeclibdir
810   # Install a library built with a cross compiler in tooldir, not libdir.
811   if test x"$glibcxx_toolexecdir" = x"no"; then
812     if test -n "$with_cross_host" &&
813        test x"$with_cross_host" != x"no"; then
814       glibcxx_toolexecdir='${exec_prefix}/${host_alias}'
815       glibcxx_toolexeclibdir='${toolexecdir}/lib'
816     else
817       glibcxx_toolexecdir='${libdir}/gcc/${host_alias}'
818       glibcxx_toolexeclibdir='${libdir}'
819     fi
820     multi_os_directory=`$CXX -print-multi-os-directory`
821     case $multi_os_directory in
822       .) ;; # Avoid trailing /.
823       *) glibcxx_toolexeclibdir=$glibcxx_toolexeclibdir/$multi_os_directory ;;
824     esac
825   fi
827   AC_MSG_CHECKING([for install location])
828   AC_MSG_RESULT($gxx_include_dir)
830   AC_SUBST(glibcxx_prefixdir)
831   AC_SUBST(gxx_include_dir)
832   AC_SUBST(glibcxx_toolexecdir)
833   AC_SUBST(glibcxx_toolexeclibdir)
838 dnl GLIBCXX_ENABLE
839 dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING)
840 dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, permit a|b|c)
841 dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, SHELL-CODE-HANDLER)
843 dnl See manual/appendix_porting.html#appendix.porting.build_hacking for
844 dnl documentation.
846 m4_define([GLIBCXX_ENABLE],[dnl
847 m4_define([_g_switch],[--enable-$1])dnl
848 m4_define([_g_help],[AC_HELP_STRING([_g_switch$3],[$4 @<:@default=$2@:>@])])dnl
849  AC_ARG_ENABLE([$1],m4_dquote(_g_help),
850   m4_bmatch([$5],
851    [^permit ],
852      [[
853       case "$enableval" in
854        m4_bpatsubst([$5],[permit ])) ;;
855        *) AC_MSG_ERROR(Unknown argument to enable/disable $1) ;;
856           dnl Idea for future:  generate a URL pointing to
857           dnl "onlinedocs/configopts.html#whatever"
858       esac
859      ]],
860    [^$],
861      [[
862       case "$enableval" in
863        yes|no) ;;
864        *) AC_MSG_ERROR(Argument to enable/disable $1 must be yes or no) ;;
865       esac
866      ]],
867    [[$5]]),
868   [enable_]m4_bpatsubst([$1],-,_)[=][$2])
869 m4_undefine([_g_switch])dnl
870 m4_undefine([_g_help])dnl
875 dnl Check for ISO/IEC 9899:1999 "C99" support.
877 dnl --enable-c99 defines _GLIBCXX_USE_C99
878 dnl --disable-c99 leaves _GLIBCXX_USE_C99 undefined
879 dnl  +  Usage:  GLIBCXX_ENABLE_C99[(DEFAULT)]
880 dnl       Where DEFAULT is either `yes' or `no'.
881 dnl  +  If 'C99' stuff is not available, ignores DEFAULT and sets `no'.
883 AC_DEFUN([GLIBCXX_ENABLE_C99], [
884   GLIBCXX_ENABLE(c99,$1,,[turns on ISO/IEC 9899:1999 support])
886   if test x"$enable_c99" = x"yes"; then
887     AC_LANG_SAVE
888     AC_LANG_CPLUSPLUS
890     # Use -std=c++98 (instead of -std=gnu++98) because leaving __STRICT_ANSI__
891     # undefined may cause fake C99 facilities, like pre-standard snprintf,
892     # to be spuriously enabled.
893     ac_save_CXXFLAGS="$CXXFLAGS"
894     CXXFLAGS="$CXXFLAGS -std=c++98"
895     ac_save_LIBS="$LIBS"
896     ac_save_gcc_no_link="$gcc_no_link"
898     if test x$gcc_no_link != xyes; then
899       # Use -fno-exceptions to that the C driver can link these tests without
900       # hitting undefined references to personality routines.
901       CXXFLAGS="$CXXFLAGS -fno-exceptions"
902       AC_CHECK_LIB(m, sin, [LIBS="$LIBS -lm"], [
903         # Use the default compile-only tests in GCC_TRY_COMPILE_OR_LINK
904         gcc_no_link=yes
905       ])
906     fi
908     # Check for the existence of <math.h> functions used if C99 is enabled.
909     AC_MSG_CHECKING([for ISO C99 support in <math.h> for C++98])
910     AC_CACHE_VAL(glibcxx_cv_c99_math_cxx98, [
911       GCC_TRY_COMPILE_OR_LINK(
912         [#include <math.h>
913          volatile double d1, d2;
914          volatile int i;],
915         [i = fpclassify(d1);
916          i = isfinite(d1);
917          i = isinf(d1);
918          i = isnan(d1);
919          i = isnormal(d1);
920          i = signbit(d1);
921          i = isgreater(d1, d2);
922          i = isgreaterequal(d1, d2);
923          i = isless(d1, d2);
924          i = islessequal(d1, d2);
925          i = islessgreater(d1, d2);
926          i = islessgreater(d1, d2);
927          i = isunordered(d1, d2);
928         ], [glibcxx_cv_c99_math_cxx98=yes], [glibcxx_cv_c99_math_cxx98=no])
929     ])
930     AC_MSG_RESULT($glibcxx_cv_c99_math_cxx98)
931     if test x"$glibcxx_cv_c99_math_cxx98" = x"yes"; then
932       AC_DEFINE(_GLIBCXX98_USE_C99_MATH, 1,
933         [Define if C99 functions or macros in <math.h> should be imported
934         in <cmath> in namespace std for C++98.])
935     fi
937     # Check for the existence of <complex.h> complex math functions.
938     # This is necessary even though libstdc++ uses the builtin versions
939     # of these functions, because if the builtin cannot be used, a reference
940     # to the library function is emitted.
941     AC_CHECK_HEADERS(tgmath.h, ac_has_tgmath_h=yes, ac_has_tgmath_h=no)
942     AC_CHECK_HEADERS(complex.h, ac_has_complex_h=yes, ac_has_complex_h=no)
943     if test x"$ac_has_complex_h" = x"yes"; then
944       AC_MSG_CHECKING([for ISO C99 support in <complex.h> for C++98])
945       AC_CACHE_VAL(glibcxx_cv_c99_complex_cxx98, [
946         GCC_TRY_COMPILE_OR_LINK(
947           [#include <complex.h>
948            typedef __complex__ float float_type;
949            typedef __complex__ double double_type;
950            typedef __complex__ long double ld_type;
951            volatile float_type tmpf;
952            volatile double_type tmpd;
953            volatile ld_type tmpld;
954            volatile float f;
955            volatile double d;
956            volatile long double ld;],
957           [f = cabsf(tmpf);
958            f = cargf(tmpf);
959            tmpf = ccosf(tmpf);
960            tmpf = ccoshf(tmpf);
961            tmpf = cexpf(tmpf);
962            tmpf = clogf(tmpf);
963            tmpf = csinf(tmpf);
964            tmpf = csinhf(tmpf);
965            tmpf = csqrtf(tmpf);
966            tmpf = ctanf(tmpf);
967            tmpf = ctanhf(tmpf);
968            tmpf = cpowf(tmpf, tmpf);
969            tmpf = cprojf(tmpf);
970            d = cabs(tmpd);
971            d = carg(tmpd);
972            tmpd = ccos(tmpd);
973            tmpd = ccosh(tmpd);
974            tmpd = cexp(tmpd);
975            tmpd = clog(tmpd);
976            tmpd = csin(tmpd);
977            tmpd = csinh(tmpd);
978            tmpd = csqrt(tmpd);
979            tmpd = ctan(tmpd);
980            tmpd = ctanh(tmpd);
981            tmpd = cpow(tmpd, tmpd);
982            tmpd = cproj(tmpd);
983            ld = cabsl(tmpld);
984            ld = cargl(tmpld);
985            tmpld = ccosl(tmpld);
986            tmpld = ccoshl(tmpld);
987            tmpld = cexpl(tmpld);
988            tmpld = clogl(tmpld);
989            tmpld = csinl(tmpld);
990            tmpld = csinhl(tmpld);
991            tmpld = csqrtl(tmpld);
992            tmpld = ctanl(tmpld);
993            tmpld = ctanhl(tmpld);
994            tmpld = cpowl(tmpld, tmpld);
995            tmpld = cprojl(tmpld);
996           ], [glibcxx_cv_c99_complex_cxx98=yes], [glibcxx_cv_c99_complex_cxx98=no])
997       ])
998     fi
999     AC_MSG_RESULT($glibcxx_cv_c99_complex_cxx98)
1000     if test x"$glibcxx_cv_c99_complex_cxx98" = x"yes"; then
1001       AC_DEFINE(_GLIBCXX98_USE_C99_COMPLEX, 1,
1002         [Define if C99 functions in <complex.h> should be used in
1003         <complex> for C++98. Using compiler builtins for these functions
1004         requires corresponding C99 library functions to be present.])
1005     fi
1007     # Check for the existence in <stdio.h> of vscanf, et. al.
1008     AC_MSG_CHECKING([for ISO C99 support in <stdio.h> for C++98])
1009     AC_CACHE_VAL(glibcxx_cv_c99_stdio_cxx98, [
1010       GCC_TRY_COMPILE_OR_LINK(
1011         [#include <stdio.h>
1012          #include <stdarg.h>
1013          void foo(char* fmt, ...)
1014          {
1015            va_list args; va_start(args, fmt);
1016            vfscanf(stderr, "%i", args);
1017            vscanf("%i", args);
1018            vsnprintf(fmt, 0, "%i", args);
1019            vsscanf(fmt, "%i", args);
1020            snprintf(fmt, 0, "%i");
1021          }], [],
1022         [glibcxx_cv_c99_stdio_cxx98=yes], [glibcxx_cv_c99_stdio_cxx98=no])
1023     ])
1024     AC_MSG_RESULT($glibcxx_cv_c99_stdio_cxx98)
1025     if test x"$glibcxx_cv_c99_stdio_cxx98" = x"yes"; then
1026       AC_DEFINE(_GLIBCXX98_USE_C99_STDIO, 1,
1027         [Define if C99 functions or macros in <stdio.h> should be imported
1028         in <cstdio> in namespace std for C++98.])
1029     fi
1031     # Check for the existence in <stdlib.h> of lldiv_t, et. al.
1032     AC_MSG_CHECKING([for ISO C99 support in <stdlib.h> for C++98])
1033     AC_CACHE_VAL(glibcxx_cv_c99_stdlib_cxx98, [
1034       GCC_TRY_COMPILE_OR_LINK(
1035         [#include <stdlib.h>
1036          volatile float f;
1037          volatile long double ld;
1038          volatile unsigned long long ll;
1039          lldiv_t mydivt;],
1040         [char* tmp;
1041          f = strtof("gnu", &tmp);
1042          ld = strtold("gnu", &tmp);
1043          ll = strtoll("gnu", &tmp, 10);
1044          ll = strtoull("gnu", &tmp, 10);
1045          ll = llabs(10);
1046          mydivt = lldiv(10,1);
1047          ll = mydivt.quot;
1048          ll = mydivt.rem;
1049          ll = atoll("10");
1050          _Exit(0);
1051         ], [glibcxx_cv_c99_stdlib_cxx98=yes], [glibcxx_cv_c99_stdlib_cxx98=no])
1052     ])
1053     AC_MSG_RESULT($glibcxx_cv_c99_stdlib_cxx98)
1054     if test x"$glibcxx_cv_c99_stdlib_cxx98" = x"yes"; then
1055       AC_DEFINE(_GLIBCXX98_USE_C99_STDLIB, 1,
1056         [Define if C99 functions or macros in <stdlib.h> should be imported
1057         in <cstdlib> in namespace std for C++98.])
1058     fi
1060     # Check for the existence in <wchar.h> of wcstold, etc.
1061     if test x"$ac_has_wchar_h" = xyes &&
1062        test x"$ac_has_wctype_h" = xyes; then
1063       AC_MSG_CHECKING([for ISO C99 support in <wchar.h> for C++98])
1064       AC_CACHE_VAL(glibcxx_cv_c99_wchar_cxx98, [
1065         AC_TRY_COMPILE([#include <wchar.h>
1066           namespace test
1067           {
1068             using ::wcstold;
1069             using ::wcstoll;
1070             using ::wcstoull;
1071           }
1072         ], [], [glibcxx_cv_c99_wchar_cxx98=yes], [glibcxx_cv_c99_wchar_cxx98=no])
1073       ])
1075       # Checks for wide character functions that may not be present.
1076       # Injection of these is wrapped with guard macros.
1077       # NB: only put functions here, instead of immediately above, if
1078       # absolutely necessary.
1079       AC_TRY_COMPILE([#include <wchar.h>
1080         namespace test { using ::vfwscanf; }], [],
1081         [AC_DEFINE(HAVE_VFWSCANF, 1, [Defined if vfwscanf exists.])], [])
1083       AC_TRY_COMPILE([#include <wchar.h>
1084         namespace test { using ::vswscanf; }], [],
1085         [AC_DEFINE(HAVE_VSWSCANF, 1, [Defined if vswscanf exists.])], [])
1087       AC_TRY_COMPILE([#include <wchar.h>
1088         namespace test { using ::vwscanf; }], [],
1089         [AC_DEFINE(HAVE_VWSCANF, 1, [Defined if vwscanf exists.])], [])
1091       AC_TRY_COMPILE([#include <wchar.h>
1092         namespace test { using ::wcstof; }], [],
1093         [AC_DEFINE(HAVE_WCSTOF, 1, [Defined if wcstof exists.])], [])
1095       AC_TRY_COMPILE([#include <wctype.h>],
1096         [wint_t t; int i = iswblank(t);],
1097         [AC_DEFINE(HAVE_ISWBLANK, 1, [Defined if iswblank exists.])], [])
1099       AC_MSG_RESULT($glibcxx_cv_c99_wchar_cxx98)
1100       if test x"$glibcxx_cv_c99_wchar_cxx98" = x"yes"; then
1101         AC_DEFINE(_GLIBCXX98_USE_C99_WCHAR, 1,
1102           [Define if C99 functions or macros in <wchar.h> should be imported
1103           in <cwchar> in namespace std for C++98.])
1104       fi
1105     fi
1107     # Option parsed, now set things appropriately.
1108     if test x"$glibcxx_cv_c99_math_cxx98" = x"no" ||
1109        test x"$glibcxx_cv_c99_complex_cxx98" = x"no" ||
1110        test x"$glibcxx_cv_c99_stdio_cxx98" = x"no" ||
1111        test x"$glibcxx_cv_c99_stdlib_cxx98" = x"no" ||
1112        test x"$glibcxx_cv_c99_wchar_cxx98" = x"no"; then
1113       enable_c99=no;
1114     else
1115       AC_DEFINE(_GLIBCXX_USE_C99, 1,
1116         [Define if C99 functions or macros from <wchar.h>, <math.h>,
1117         <complex.h>, <stdio.h>, and <stdlib.h> can be used or exposed.])
1118     fi
1120     gcc_no_link="$ac_save_gcc_no_link"
1121     LIBS="$ac_save_LIBS"
1122     CXXFLAGS="$ac_save_CXXFLAGS"
1123     AC_LANG_RESTORE
1125     AC_LANG_SAVE
1126     AC_LANG_CPLUSPLUS
1128     # Use -std=c++11 and test again for C99 library feature in C++11 mode.
1129     # For the reasons given above we use -std=c++11 not -std=gnu++11.
1130     ac_save_CXXFLAGS="$CXXFLAGS"
1131     CXXFLAGS="$CXXFLAGS -std=c++11"
1132     ac_save_LIBS="$LIBS"
1133     ac_save_gcc_no_link="$gcc_no_link"
1135     if test x$gcc_no_link != xyes; then
1136       # Use -fno-exceptions to that the C driver can link these tests without
1137       # hitting undefined references to personality routines.
1138       CXXFLAGS="$CXXFLAGS -fno-exceptions"
1139       AC_CHECK_LIB(m, sin, [LIBS="$LIBS -lm"], [
1140         # Use the default compile-only tests in GCC_TRY_COMPILE_OR_LINK
1141         gcc_no_link=yes
1142       ])
1143     fi
1145     # Check for the existence of <math.h> functions used if C99 is enabled.
1146     AC_MSG_CHECKING([for ISO C99 support in <math.h> for C++11])
1147     AC_CACHE_VAL(glibcxx_cv_c99_math_cxx11, [
1148       GCC_TRY_COMPILE_OR_LINK(
1149         [#include <math.h>
1150          volatile double d1, d2;
1151          volatile int i;],
1152         [i = fpclassify(d1);
1153          i = isfinite(d1);
1154          i = isinf(d1);
1155          i = isnan(d1);
1156          i = isnormal(d1);
1157          i = signbit(d1);
1158          i = isgreater(d1, d2);
1159          i = isgreaterequal(d1, d2);
1160          i = isless(d1, d2);
1161          i = islessequal(d1, d2);
1162          i = islessgreater(d1, d2);
1163          i = islessgreater(d1, d2);
1164          i = isunordered(d1, d2);
1165         ], [glibcxx_cv_c99_math_cxx11=yes], [glibcxx_cv_c99_math_cxx11=no])
1166     ])
1167     AC_MSG_RESULT($glibcxx_cv_c99_math_cxx11)
1168     if test x"$glibcxx_cv_c99_math_cxx11" = x"yes"; then
1169       AC_DEFINE(_GLIBCXX11_USE_C99_MATH, 1,
1170         [Define if C99 functions or macros in <math.h> should be imported
1171         in <cmath> in namespace std for C++11.])
1172     fi
1174     # Check for the existence of <complex.h> complex math functions.
1175     # This is necessary even though libstdc++ uses the builtin versions
1176     # of these functions, because if the builtin cannot be used, a reference
1177     # to the library function is emitted.
1178     AC_CHECK_HEADERS(tgmath.h, ac_has_tgmath_h=yes, ac_has_tgmath_h=no)
1179     AC_CHECK_HEADERS(complex.h, ac_has_complex_h=yes, ac_has_complex_h=no)
1180     if test x"$ac_has_complex_h" = x"yes"; then
1181       AC_MSG_CHECKING([for ISO C99 support in <complex.h> for C++11])
1182       AC_CACHE_VAL(glibcxx_cv_c99_complex_cxx11, [
1183         GCC_TRY_COMPILE_OR_LINK(
1184           [#include <complex.h>
1185            typedef __complex__ float float_type;
1186            typedef __complex__ double double_type;
1187            typedef __complex__ long double ld_type;
1188            volatile float_type tmpf;
1189            volatile double_type tmpd;
1190            volatile ld_type tmpld;
1191            volatile float f;
1192            volatile double d;
1193            volatile long double ld;],
1194           [f = cabsf(tmpf);
1195            f = cargf(tmpf);
1196            tmpf = ccosf(tmpf);
1197            tmpf = ccoshf(tmpf);
1198            tmpf = cexpf(tmpf);
1199            tmpf = clogf(tmpf);
1200            tmpf = csinf(tmpf);
1201            tmpf = csinhf(tmpf);
1202            tmpf = csqrtf(tmpf);
1203            tmpf = ctanf(tmpf);
1204            tmpf = ctanhf(tmpf);
1205            tmpf = cpowf(tmpf, tmpf);
1206            tmpf = cprojf(tmpf);
1207            d = cabs(tmpd);
1208            d = carg(tmpd);
1209            tmpd = ccos(tmpd);
1210            tmpd = ccosh(tmpd);
1211            tmpd = cexp(tmpd);
1212            tmpd = clog(tmpd);
1213            tmpd = csin(tmpd);
1214            tmpd = csinh(tmpd);
1215            tmpd = csqrt(tmpd);
1216            tmpd = ctan(tmpd);
1217            tmpd = ctanh(tmpd);
1218            tmpd = cpow(tmpd, tmpd);
1219            tmpd = cproj(tmpd);
1220            ld = cabsl(tmpld);
1221            ld = cargl(tmpld);
1222            tmpld = ccosl(tmpld);
1223            tmpld = ccoshl(tmpld);
1224            tmpld = cexpl(tmpld);
1225            tmpld = clogl(tmpld);
1226            tmpld = csinl(tmpld);
1227            tmpld = csinhl(tmpld);
1228            tmpld = csqrtl(tmpld);
1229            tmpld = ctanl(tmpld);
1230            tmpld = ctanhl(tmpld);
1231            tmpld = cpowl(tmpld, tmpld);
1232            tmpld = cprojl(tmpld);
1233           ], [glibcxx_cv_c99_complex_cxx11=yes], [glibcxx_cv_c99_complex_cxx11=no])
1234       ])
1235     fi
1236     AC_MSG_RESULT($glibcxx_cv_c99_complex_cxx11)
1237     if test x"$glibcxx_cv_c99_complex_cxx11" = x"yes"; then
1238       AC_DEFINE(_GLIBCXX11_USE_C99_COMPLEX, 1,
1239         [Define if C99 functions in <complex.h> should be used in
1240         <complex> for C++11. Using compiler builtins for these functions
1241         requires corresponding C99 library functions to be present.])
1242     fi
1244     # Check for the existence in <stdio.h> of vscanf, et. al.
1245     AC_MSG_CHECKING([for ISO C99 support in <stdio.h> for C++11])
1246     AC_CACHE_VAL(glibcxx_cv_c99_stdio_cxx11, [
1247       GCC_TRY_COMPILE_OR_LINK(
1248         [#include <stdio.h>
1249          #include <stdarg.h>
1250          void foo(char* fmt, ...)
1251          {
1252            va_list args; va_start(args, fmt);
1253            vfscanf(stderr, "%i", args);
1254            vscanf("%i", args);
1255            vsnprintf(fmt, 0, "%i", args);
1256            vsscanf(fmt, "%i", args);
1257            snprintf(fmt, 0, "%i");
1258          }], [],
1259         [glibcxx_cv_c99_stdio_cxx11=yes], [glibcxx_cv_c99_stdio_cxx11=no])
1260     ])
1261     AC_MSG_RESULT($glibcxx_cv_c99_stdio_cxx11)
1262     if test x"$glibcxx_cv_c99_stdio_cxx11" = x"yes"; then
1263       AC_DEFINE(_GLIBCXX11_USE_C99_STDIO, 1,
1264         [Define if C99 functions or macros in <stdio.h> should be imported
1265         in <cstdio> in namespace std for C++11.])
1266     fi
1268     # Check for the existence in <stdlib.h> of lldiv_t, et. al.
1269     AC_MSG_CHECKING([for ISO C99 support in <stdlib.h> for C++11])
1270     AC_CACHE_VAL(glibcxx_cv_c99_stdlib_cxx11, [
1271       GCC_TRY_COMPILE_OR_LINK(
1272         [#include <stdlib.h>
1273          volatile float f;
1274          volatile long double ld;
1275          volatile unsigned long long ll;
1276          lldiv_t mydivt;],
1277         [char* tmp;
1278          f = strtof("gnu", &tmp);
1279          ld = strtold("gnu", &tmp);
1280          ll = strtoll("gnu", &tmp, 10);
1281          ll = strtoull("gnu", &tmp, 10);
1282          ll = llabs(10);
1283          mydivt = lldiv(10,1);
1284          ll = mydivt.quot;
1285          ll = mydivt.rem;
1286          ll = atoll("10");
1287          _Exit(0);
1288         ], [glibcxx_cv_c99_stdlib_cxx11=yes], [glibcxx_cv_c99_stdlib_cxx11=no])
1289     ])
1290     AC_MSG_RESULT($glibcxx_cv_c99_stdlib_cxx11)
1291     if test x"$glibcxx_cv_c99_stdlib_cxx11" = x"yes"; then
1292       AC_DEFINE(_GLIBCXX11_USE_C99_STDLIB, 1,
1293         [Define if C99 functions or macros in <stdlib.h> should be imported
1294         in <cstdlib> in namespace std for C++11.])
1295     fi
1297     # Check for the existence in <wchar.h> of wcstold, etc.
1298     if test x"$ac_has_wchar_h" = xyes &&
1299        test x"$ac_has_wctype_h" = xyes; then
1300       AC_MSG_CHECKING([for ISO C99 support in <wchar.h> for C++11])
1301       AC_CACHE_VAL(glibcxx_cv_c99_wchar_cxx11, [
1302         AC_TRY_COMPILE([#include <wchar.h>
1303           namespace test
1304           {
1305             using ::wcstold;
1306             using ::wcstoll;
1307             using ::wcstoull;
1308           }
1309         ], [], [glibcxx_cv_c99_wchar_cxx11=yes], [glibcxx_cv_c99_wchar_cxx11=no])
1310       ])
1312       # Checks for wide character functions that may not be present.
1313       # Injection of these is wrapped with guard macros.
1314       # NB: only put functions here, instead of immediately above, if
1315       # absolutely necessary.
1316       AC_TRY_COMPILE([#include <wchar.h>
1317         namespace test { using ::vfwscanf; }], [],
1318         [AC_DEFINE(HAVE_VFWSCANF, 1, [Defined if vfwscanf exists.])], [])
1320       AC_TRY_COMPILE([#include <wchar.h>
1321         namespace test { using ::vswscanf; }], [],
1322         [AC_DEFINE(HAVE_VSWSCANF, 1, [Defined if vswscanf exists.])], [])
1324       AC_TRY_COMPILE([#include <wchar.h>
1325         namespace test { using ::vwscanf; }], [],
1326         [AC_DEFINE(HAVE_VWSCANF, 1, [Defined if vwscanf exists.])], [])
1328       AC_TRY_COMPILE([#include <wchar.h>
1329         namespace test { using ::wcstof; }], [],
1330         [AC_DEFINE(HAVE_WCSTOF, 1, [Defined if wcstof exists.])], [])
1332       AC_TRY_COMPILE([#include <wctype.h>],
1333         [wint_t t; int i = iswblank(t);],
1334         [AC_DEFINE(HAVE_ISWBLANK, 1, [Defined if iswblank exists.])], [])
1336       AC_MSG_RESULT($glibcxx_cv_c99_wchar_cxx11)
1337       if test x"$glibcxx_cv_c99_wchar_cxx11" = x"yes"; then
1338         AC_DEFINE(_GLIBCXX11_USE_C99_WCHAR, 1,
1339           [Define if C99 functions or macros in <wchar.h> should be imported
1340           in <cwchar> in namespace std for C++11.])
1341       fi
1342     fi
1344     gcc_no_link="$ac_save_gcc_no_link"
1345     LIBS="$ac_save_LIBS"
1346     CXXFLAGS="$ac_save_CXXFLAGS"
1347     AC_LANG_RESTORE
1348   fi
1350   AC_MSG_CHECKING([for fully enabled ISO C99 support])
1351   AC_MSG_RESULT($enable_c99)
1356 dnl Check for clock_gettime, nanosleep and sched_yield, used in the
1357 dnl implementation of 20.11.7 [time.clock], and 30.3.2 [thread.thread.this]
1358 dnl in the C++11 standard.
1360 dnl --enable-libstdcxx-time
1361 dnl --enable-libstdcxx-time=yes
1362 dnl        checks for the availability of monotonic and realtime clocks,
1363 dnl        nanosleep and sched_yield in libc and libposix4 and, if needed,
1364 dnl        links in the latter.
1365 dnl --enable-libstdcxx-time=rt
1366 dnl        also searches (and, if needed, links) librt.  Note that this is
1367 dnl        not always desirable because, in glibc 2.16 and earlier, for
1368 dnl        example, in turn it triggers the linking of libpthread too,
1369 dnl        which activates locking,
1370 dnl        a large overhead for single-thread programs.
1371 dnl --enable-libstdcxx-time=no
1372 dnl --disable-libstdcxx-time
1373 dnl        disables the checks completely
1375 dnl N.B. Darwin provides nanosleep but doesn't support the whole POSIX
1376 dnl Timers option, so doesn't define _POSIX_TIMERS. Because the test
1377 dnl below fails Darwin unconditionally defines _GLIBCXX_USE_NANOSLEEP in
1378 dnl os_defines.h and also defines _GLIBCXX_USE_SCHED_YIELD.
1380 AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME], [
1382   GLIBCXX_ENABLE(libstdcxx-time,auto,[[[=KIND]]],
1383     [use KIND for check type],
1384     [permit yes|no|rt])
1386   AC_LANG_SAVE
1387   AC_LANG_CPLUSPLUS
1388   ac_save_CXXFLAGS="$CXXFLAGS"
1389   CXXFLAGS="$CXXFLAGS -fno-exceptions"
1390   ac_save_LIBS="$LIBS"
1392   ac_has_clock_monotonic=no
1393   ac_has_clock_realtime=no
1394   ac_has_nanosleep=no
1395   ac_has_sched_yield=no
1397   if test x"$enable_libstdcxx_time" = x"auto"; then
1399     case "${target_os}" in
1400       cygwin*)
1401         ac_has_nanosleep=yes
1402         ;;
1403       darwin*)
1404         ac_has_nanosleep=yes
1405         ac_has_sched_yield=yes
1406         ;;
1407       gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
1408         AC_MSG_CHECKING([for at least GNU libc 2.17])
1409         AC_TRY_COMPILE(
1410           [#include <features.h>],
1411           [
1412           #if ! __GLIBC_PREREQ(2, 17)
1413           #error 
1414           #endif
1415           ],
1416           [glibcxx_glibc217=yes], [glibcxx_glibc217=no])
1417         AC_MSG_RESULT($glibcxx_glibc217)
1419         if test x"$glibcxx_glibc217" = x"yes"; then
1420           ac_has_clock_monotonic=yes
1421           ac_has_clock_realtime=yes
1422         fi
1423         ac_has_nanosleep=yes
1424         ac_has_sched_yield=yes
1425         ;;
1426       freebsd*|netbsd*|dragonfly*|rtems*)
1427         ac_has_clock_monotonic=yes
1428         ac_has_clock_realtime=yes
1429         ac_has_nanosleep=yes
1430         ac_has_sched_yield=yes
1431         ;;
1432       openbsd*)
1433         ac_has_clock_monotonic=yes
1434         ac_has_clock_realtime=yes
1435         ac_has_nanosleep=yes
1436         ;;
1437       solaris*)
1438         GLIBCXX_LIBS="$GLIBCXX_LIBS -lrt"
1439         ac_has_clock_monotonic=yes
1440         ac_has_clock_realtime=yes
1441         ac_has_nanosleep=yes
1442         ac_has_sched_yield=yes
1443         ;;
1444       uclinux*)
1445         ac_has_nanosleep=yes
1446         ac_has_sched_yield=yes
1447     esac
1449   elif test x"$enable_libstdcxx_time" != x"no"; then
1451     if test x"$enable_libstdcxx_time" = x"rt"; then
1452       AC_SEARCH_LIBS(clock_gettime, [rt posix4])
1453       AC_SEARCH_LIBS(nanosleep, [rt posix4])
1454     else
1455       AC_SEARCH_LIBS(clock_gettime, [posix4])
1456       AC_SEARCH_LIBS(nanosleep, [posix4])
1457     fi
1459     case "$ac_cv_search_clock_gettime" in
1460       -l*) GLIBCXX_LIBS=$ac_cv_search_clock_gettime
1461       ;;
1462     esac
1463     case "$ac_cv_search_nanosleep" in
1464       -l*) GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_nanosleep"
1465       ;;
1466     esac
1468     AC_SEARCH_LIBS(sched_yield, [rt posix4])
1470     case "$ac_cv_search_sched_yield" in
1471       -lposix4*)
1472       GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_sched_yield"
1473       ac_has_sched_yield=yes
1474       ;;
1475       -lrt*)
1476       if test x"$enable_libstdcxx_time" = x"rt"; then
1477         GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_sched_yield"
1478         ac_has_sched_yield=yes
1479       fi
1480       ;;
1481       *)
1482       ac_has_sched_yield=yes
1483       ;;
1484     esac
1486     AC_CHECK_HEADERS(unistd.h, ac_has_unistd_h=yes, ac_has_unistd_h=no)
1488     if test x"$ac_has_unistd_h" = x"yes"; then
1489       AC_MSG_CHECKING([for monotonic clock])
1490       AC_TRY_LINK(
1491         [#include <unistd.h>
1492          #include <time.h>
1493         ],
1494         [#if _POSIX_TIMERS > 0 && defined(_POSIX_MONOTONIC_CLOCK)
1495           timespec tp;
1496          #endif
1497           clock_gettime(CLOCK_MONOTONIC, &tp);
1498         ], [ac_has_clock_monotonic=yes], [ac_has_clock_monotonic=no])
1500       AC_MSG_RESULT($ac_has_clock_monotonic)
1502       AC_MSG_CHECKING([for realtime clock])
1503       AC_TRY_LINK(
1504         [#include <unistd.h>
1505          #include <time.h>
1506         ],
1507         [#if _POSIX_TIMERS > 0
1508           timespec tp;
1509          #endif
1510           clock_gettime(CLOCK_REALTIME, &tp);
1511         ], [ac_has_clock_realtime=yes], [ac_has_clock_realtime=no])
1513       AC_MSG_RESULT($ac_has_clock_realtime)
1515       AC_MSG_CHECKING([for nanosleep])
1516       AC_TRY_LINK(
1517         [#include <unistd.h>
1518          #include <time.h>
1519         ],
1520         [#if _POSIX_TIMERS > 0
1521           timespec tp;
1522          #endif
1523           nanosleep(&tp, 0);
1524         ], [ac_has_nanosleep=yes], [ac_has_nanosleep=no])
1526       AC_MSG_RESULT($ac_has_nanosleep)
1527     fi
1528   fi
1530   if test x"$ac_has_clock_monotonic" != x"yes"; then
1531     case ${target_os} in
1532       linux* | uclinux*)
1533         AC_MSG_CHECKING([for clock_gettime syscall])
1534         AC_TRY_COMPILE(
1535           [#include <unistd.h>
1536            #include <time.h>
1537            #include <sys/syscall.h>
1538           ],
1539           [#if _POSIX_TIMERS > 0 && defined(_POSIX_MONOTONIC_CLOCK)
1540             timespec tp;
1541            #endif
1542            syscall(SYS_clock_gettime, CLOCK_MONOTONIC, &tp);
1543            syscall(SYS_clock_gettime, CLOCK_REALTIME, &tp);
1544           ], [ac_has_clock_monotonic_syscall=yes], [ac_has_clock_monotonic_syscall=no])
1545         AC_MSG_RESULT($ac_has_clock_monotonic_syscall)
1546         if test x"$ac_has_clock_monotonic_syscall" = x"yes"; then
1547           AC_DEFINE(_GLIBCXX_USE_CLOCK_GETTIME_SYSCALL, 1,
1548           [ Defined if clock_gettime syscall has monotonic and realtime clock support. ])
1549           ac_has_clock_monotonic=yes
1550           ac_has_clock_realtime=yes
1551         fi;;
1552     esac
1553   fi
1555   if test x"$ac_has_clock_monotonic" = x"yes"; then
1556     AC_DEFINE(_GLIBCXX_USE_CLOCK_MONOTONIC, 1,
1557       [ Defined if clock_gettime has monotonic clock support. ])
1558   fi
1560   if test x"$ac_has_clock_realtime" = x"yes"; then
1561     AC_DEFINE(_GLIBCXX_USE_CLOCK_REALTIME, 1,
1562       [ Defined if clock_gettime has realtime clock support. ])
1563   fi
1565   if test x"$ac_has_sched_yield" = x"yes"; then
1566     AC_DEFINE(_GLIBCXX_USE_SCHED_YIELD, 1,
1567               [ Defined if sched_yield is available. ])
1568   fi
1570   if test x"$ac_has_nanosleep" = x"yes"; then
1571     AC_DEFINE(_GLIBCXX_USE_NANOSLEEP, 1,
1572       [ Defined if nanosleep is available. ])
1573   else
1574       AC_MSG_CHECKING([for sleep])
1575       AC_TRY_COMPILE([#include <unistd.h>],
1576                      [sleep(1)],
1577                      [ac_has_sleep=yes],[ac_has_sleep=no])
1578       if test x"$ac_has_sleep" = x"yes"; then
1579         AC_DEFINE(HAVE_SLEEP,1, [Defined if sleep exists.])
1580       fi
1581       AC_MSG_RESULT($ac_has_sleep)
1582       AC_MSG_CHECKING([for usleep])
1583       AC_TRY_COMPILE([#include <unistd.h>],
1584                      [sleep(1);
1585                       usleep(100);],
1586                      [ac_has_usleep=yes],[ac_has_usleep=no])
1587       if test x"$ac_has_usleep" = x"yes"; then
1588         AC_DEFINE(HAVE_USLEEP,1, [Defined if usleep exists.])
1589       fi
1590       AC_MSG_RESULT($ac_has_usleep)
1591   fi
1593   if test x"$ac_has_nanosleep$ac_has_sleep" = x"nono"; then
1594       AC_MSG_CHECKING([for Sleep])
1595       AC_TRY_COMPILE([#include <windows.h>],
1596                      [Sleep(1)],
1597                      [ac_has_win32_sleep=yes],[ac_has_win32_sleep=no])
1598       if test x"$ac_has_win32_sleep" = x"yes"; then
1599         AC_DEFINE(HAVE_WIN32_SLEEP,1, [Defined if Sleep exists.])
1600       fi
1601       AC_MSG_RESULT($ac_has_win32_sleep)
1602   fi
1604   AC_SUBST(GLIBCXX_LIBS)
1606   CXXFLAGS="$ac_save_CXXFLAGS"
1607   LIBS="$ac_save_LIBS"
1608   AC_LANG_RESTORE
1612 dnl Check for gettimeofday, used in the implementation of 20.11.7
1613 dnl [time.clock] in the C++11 standard.
1615 AC_DEFUN([GLIBCXX_CHECK_GETTIMEOFDAY], [
1617   AC_MSG_CHECKING([for gettimeofday])
1619   AC_LANG_SAVE
1620   AC_LANG_CPLUSPLUS
1621   ac_save_CXXFLAGS="$CXXFLAGS"
1622   CXXFLAGS="$CXXFLAGS -fno-exceptions"
1624   ac_has_gettimeofday=no;
1625   AC_CHECK_HEADERS(sys/time.h, ac_has_sys_time_h=yes, ac_has_sys_time_h=no)
1626   if test x"$ac_has_sys_time_h" = x"yes"; then
1627     AC_MSG_CHECKING([for gettimeofday])
1628     GCC_TRY_COMPILE_OR_LINK([#include <sys/time.h>],
1629       [timeval tv; gettimeofday(&tv, 0);],
1630       [ac_has_gettimeofday=yes], [ac_has_gettimeofday=no])
1632     AC_MSG_RESULT($ac_has_gettimeofday)
1633   fi
1635   if test x"$ac_has_gettimeofday" = x"yes"; then
1636     AC_DEFINE(_GLIBCXX_USE_GETTIMEOFDAY, 1,
1637       [ Defined if gettimeofday is available. ])
1638   fi
1640   CXXFLAGS="$ac_save_CXXFLAGS"
1641   AC_LANG_RESTORE
1645 dnl Check for ISO/IEC 9899:1999 "C99" support to ISO/IEC DTR 19768 "TR1"
1646 dnl facilities in Chapter 8, "C compatibility".
1648 AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [
1650   AC_LANG_SAVE
1651   AC_LANG_CPLUSPLUS
1653   # Use -std=c++98 because the default (-std=gnu++98) leaves __STRICT_ANSI__
1654   # undefined and fake C99 facilities may be spuriously enabled.
1655   ac_save_CXXFLAGS="$CXXFLAGS"
1656   CXXFLAGS="$CXXFLAGS -std=c++98"
1658   # Check for the existence of <complex.h> complex math functions used
1659   # by tr1/complex.
1660   AC_CHECK_HEADERS(complex.h, ac_has_complex_h=yes, ac_has_complex_h=no)
1661   ac_c99_complex_tr1=no;
1662   if test x"$ac_has_complex_h" = x"yes"; then
1663     AC_MSG_CHECKING([for ISO C99 support to TR1 in <complex.h>])
1664     AC_TRY_COMPILE([#include <complex.h>],
1665                    [typedef __complex__ float float_type; float_type tmpf;
1666                     cacosf(tmpf);
1667                     casinf(tmpf);
1668                     catanf(tmpf);
1669                     cacoshf(tmpf);
1670                     casinhf(tmpf);
1671                     catanhf(tmpf);
1672                     typedef __complex__ double double_type; double_type tmpd;
1673                     cacos(tmpd);
1674                     casin(tmpd);
1675                     catan(tmpd);
1676                     cacosh(tmpd);
1677                     casinh(tmpd);
1678                     catanh(tmpd);
1679                     typedef __complex__ long double ld_type; ld_type tmpld;
1680                     cacosl(tmpld);
1681                     casinl(tmpld);
1682                     catanl(tmpld);
1683                     cacoshl(tmpld);
1684                     casinhl(tmpld);
1685                     catanhl(tmpld);
1686                    ],[ac_c99_complex_tr1=yes], [ac_c99_complex_tr1=no])
1687   fi
1688   AC_MSG_RESULT($ac_c99_complex_tr1)
1689   if test x"$ac_c99_complex_tr1" = x"yes"; then
1690     AC_DEFINE(_GLIBCXX_USE_C99_COMPLEX_TR1, 1,
1691               [Define if C99 functions in <complex.h> should be used in
1692               <tr1/complex>. Using compiler builtins for these functions
1693               requires corresponding C99 library functions to be present.])
1694   fi
1696   # Check for the existence of <ctype.h> functions.
1697   AC_MSG_CHECKING([for ISO C99 support to TR1 in <ctype.h>])
1698   AC_CACHE_VAL(glibcxx_cv_c99_ctype_tr1, [
1699   AC_TRY_COMPILE([#include <ctype.h>],
1700                  [int ch;
1701                   int ret;
1702                   ret = isblank(ch);
1703                  ],[glibcxx_cv_c99_ctype_tr1=yes],
1704                    [glibcxx_cv_c99_ctype_tr1=no])
1705   ])
1706   AC_MSG_RESULT($glibcxx_cv_c99_ctype_tr1)
1707   if test x"$glibcxx_cv_c99_ctype_tr1" = x"yes"; then
1708     AC_DEFINE(_GLIBCXX_USE_C99_CTYPE_TR1, 1,
1709               [Define if C99 functions in <ctype.h> should be imported in
1710               <tr1/cctype> in namespace std::tr1.])
1711   fi
1713   # Check for the existence of <fenv.h> functions.
1714   AC_CHECK_HEADERS(fenv.h, ac_has_fenv_h=yes, ac_has_fenv_h=no)
1715   ac_c99_fenv_tr1=no;
1716   if test x"$ac_has_fenv_h" = x"yes"; then
1717     AC_MSG_CHECKING([for ISO C99 support to TR1 in <fenv.h>])
1718     AC_TRY_COMPILE([#include <fenv.h>],
1719                    [int except, mode;
1720                     fexcept_t* pflag;
1721                     fenv_t* penv;
1722                     int ret;
1723                     ret = feclearexcept(except);
1724                     ret = fegetexceptflag(pflag, except);
1725                     ret = feraiseexcept(except);
1726                     ret = fesetexceptflag(pflag, except);
1727                     ret = fetestexcept(except);
1728                     ret = fegetround();
1729                     ret = fesetround(mode);
1730                     ret = fegetenv(penv);
1731                     ret = feholdexcept(penv);
1732                     ret = fesetenv(penv);
1733                     ret = feupdateenv(penv);
1734                    ],[ac_c99_fenv_tr1=yes], [ac_c99_fenv_tr1=no])
1735   fi
1736   AC_MSG_RESULT($ac_c99_fenv_tr1)
1737   if test x"$ac_c99_fenv_tr1" = x"yes"; then
1738     AC_DEFINE(_GLIBCXX_USE_C99_FENV_TR1, 1,
1739               [Define if C99 functions in <fenv.h> should be imported in
1740               <tr1/cfenv> in namespace std::tr1.])
1741   fi
1743   # Check for the existence of <stdint.h> types.
1744   AC_MSG_CHECKING([for ISO C99 support to TR1 in <stdint.h>])
1745   AC_CACHE_VAL(glibcxx_cv_c99_stdint_tr1, [
1746   AC_TRY_COMPILE([#define __STDC_LIMIT_MACROS
1747                   #define __STDC_CONSTANT_MACROS
1748                   #include <stdint.h>],
1749                  [typedef int8_t          my_int8_t;
1750                   my_int8_t               i8 = INT8_MIN;
1751                   i8 = INT8_MAX;
1752                   typedef int16_t         my_int16_t;
1753                   my_int16_t              i16 = INT16_MIN;
1754                   i16 = INT16_MAX;
1755                   typedef int32_t         my_int32_t;
1756                   my_int32_t              i32 = INT32_MIN;
1757                   i32 = INT32_MAX;
1758                   typedef int64_t         my_int64_t;
1759                   my_int64_t              i64 = INT64_MIN;
1760                   i64 = INT64_MAX;
1761                   typedef int_fast8_t     my_int_fast8_t;
1762                   my_int_fast8_t          if8 = INT_FAST8_MIN;
1763                   if8 = INT_FAST8_MAX;
1764                   typedef int_fast16_t    my_int_fast16_t;
1765                   my_int_fast16_t         if16 = INT_FAST16_MIN;
1766                   if16 = INT_FAST16_MAX;
1767                   typedef int_fast32_t    my_int_fast32_t;
1768                   my_int_fast32_t         if32 = INT_FAST32_MIN;
1769                   if32 = INT_FAST32_MAX;
1770                   typedef int_fast64_t    my_int_fast64_t;
1771                   my_int_fast64_t         if64 = INT_FAST64_MIN;
1772                   if64 = INT_FAST64_MAX;
1773                   typedef int_least8_t    my_int_least8_t;
1774                   my_int_least8_t         il8 = INT_LEAST8_MIN;
1775                   il8 = INT_LEAST8_MAX;
1776                   typedef int_least16_t   my_int_least16_t;
1777                   my_int_least16_t        il16 = INT_LEAST16_MIN;
1778                   il16 = INT_LEAST16_MAX;
1779                   typedef int_least32_t   my_int_least32_t;
1780                   my_int_least32_t        il32 = INT_LEAST32_MIN;
1781                   il32 = INT_LEAST32_MAX;
1782                   typedef int_least64_t   my_int_least64_t;
1783                   my_int_least64_t        il64 = INT_LEAST64_MIN;
1784                   il64 = INT_LEAST64_MAX;
1785                   typedef intmax_t        my_intmax_t;
1786                   my_intmax_t             im = INTMAX_MAX;
1787                   im = INTMAX_MIN;
1788                   typedef intptr_t        my_intptr_t;
1789                   my_intptr_t             ip = INTPTR_MAX;
1790                   ip = INTPTR_MIN;
1791                   typedef uint8_t         my_uint8_t;
1792                   my_uint8_t              ui8 = UINT8_MAX;
1793                   ui8 = UINT8_MAX;
1794                   typedef uint16_t        my_uint16_t;
1795                   my_uint16_t             ui16 = UINT16_MAX;
1796                   ui16 = UINT16_MAX;
1797                   typedef uint32_t        my_uint32_t;
1798                   my_uint32_t             ui32 = UINT32_MAX;
1799                   ui32 = UINT32_MAX;
1800                   typedef uint64_t        my_uint64_t;
1801                   my_uint64_t             ui64 = UINT64_MAX;
1802                   ui64 = UINT64_MAX;
1803                   typedef uint_fast8_t    my_uint_fast8_t;
1804                   my_uint_fast8_t         uif8 = UINT_FAST8_MAX;
1805                   uif8 = UINT_FAST8_MAX;
1806                   typedef uint_fast16_t   my_uint_fast16_t;
1807                   my_uint_fast16_t        uif16 = UINT_FAST16_MAX;
1808                   uif16 = UINT_FAST16_MAX;
1809                   typedef uint_fast32_t   my_uint_fast32_t;
1810                   my_uint_fast32_t        uif32 = UINT_FAST32_MAX;
1811                   uif32 = UINT_FAST32_MAX;
1812                   typedef uint_fast64_t   my_uint_fast64_t;
1813                   my_uint_fast64_t        uif64 = UINT_FAST64_MAX;
1814                   uif64 = UINT_FAST64_MAX;
1815                   typedef uint_least8_t   my_uint_least8_t;
1816                   my_uint_least8_t        uil8 = UINT_LEAST8_MAX;
1817                   uil8 = UINT_LEAST8_MAX;
1818                   typedef uint_least16_t  my_uint_least16_t;
1819                   my_uint_least16_t       uil16 = UINT_LEAST16_MAX;
1820                   uil16 = UINT_LEAST16_MAX;
1821                   typedef uint_least32_t  my_uint_least32_t;
1822                   my_uint_least32_t       uil32 = UINT_LEAST32_MAX;
1823                   uil32 = UINT_LEAST32_MAX;
1824                   typedef uint_least64_t  my_uint_least64_t;
1825                   my_uint_least64_t       uil64 = UINT_LEAST64_MAX;
1826                   uil64 = UINT_LEAST64_MAX;
1827                   typedef uintmax_t       my_uintmax_t;
1828                   my_uintmax_t            uim = UINTMAX_MAX;
1829                   uim = UINTMAX_MAX;
1830                   typedef uintptr_t       my_uintptr_t;
1831                   my_uintptr_t            uip = UINTPTR_MAX;
1832                   uip = UINTPTR_MAX;
1833                  ],[glibcxx_cv_c99_stdint_tr1=yes],
1834                    [glibcxx_cv_c99_stdint_tr1=no])
1835   ])
1836   AC_MSG_RESULT($glibcxx_cv_c99_stdint_tr1)
1837   if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
1838     AC_DEFINE(_GLIBCXX_USE_C99_STDINT_TR1, 1,
1839               [Define if C99 types in <stdint.h> should be imported in
1840               <tr1/cstdint> in namespace std::tr1.])
1841   fi
1843   # Check for the existence of <math.h> functions.
1844   AC_MSG_CHECKING([for ISO C99 support to TR1 in <math.h>])
1845   AC_CACHE_VAL(glibcxx_cv_c99_math_tr1, [
1846   AC_TRY_COMPILE([#include <math.h>],
1847                  [typedef double_t  my_double_t;
1848                   typedef float_t   my_float_t;
1849                   acosh(0.0);
1850                   acoshf(0.0f);
1851                   acoshl(0.0l);
1852                   asinh(0.0);
1853                   asinhf(0.0f);
1854                   asinhl(0.0l);
1855                   atanh(0.0);
1856                   atanhf(0.0f);
1857                   atanhl(0.0l);
1858                   cbrt(0.0);
1859                   cbrtf(0.0f);
1860                   cbrtl(0.0l);
1861                   copysign(0.0, 0.0);
1862                   copysignf(0.0f, 0.0f);
1863                   copysignl(0.0l, 0.0l);
1864                   erf(0.0);
1865                   erff(0.0f);
1866                   erfl(0.0l);
1867                   erfc(0.0);
1868                   erfcf(0.0f);
1869                   erfcl(0.0l);
1870                   exp2(0.0);
1871                   exp2f(0.0f);
1872                   exp2l(0.0l);
1873                   expm1(0.0);
1874                   expm1f(0.0f);
1875                   expm1l(0.0l);
1876                   fdim(0.0, 0.0);
1877                   fdimf(0.0f, 0.0f);
1878                   fdiml(0.0l, 0.0l);
1879                   fma(0.0, 0.0, 0.0);
1880                   fmaf(0.0f, 0.0f, 0.0f);
1881                   fmal(0.0l, 0.0l, 0.0l);
1882                   fmax(0.0, 0.0);
1883                   fmaxf(0.0f, 0.0f);
1884                   fmaxl(0.0l, 0.0l);
1885                   fmin(0.0, 0.0);
1886                   fminf(0.0f, 0.0f);
1887                   fminl(0.0l, 0.0l);
1888                   hypot(0.0, 0.0);
1889                   hypotf(0.0f, 0.0f);
1890                   hypotl(0.0l, 0.0l);
1891                   ilogb(0.0);
1892                   ilogbf(0.0f);
1893                   ilogbl(0.0l);
1894                   lgamma(0.0);
1895                   lgammaf(0.0f);
1896                   lgammal(0.0l);
1897                   #ifndef __APPLE__ /* see below */
1898                   llrint(0.0);
1899                   llrintf(0.0f);
1900                   llrintl(0.0l);
1901                   llround(0.0);
1902                   llroundf(0.0f);
1903                   llroundl(0.0l);
1904                   #endif
1905                   log1p(0.0);
1906                   log1pf(0.0f);
1907                   log1pl(0.0l);
1908                   log2(0.0);
1909                   log2f(0.0f);
1910                   log2l(0.0l);
1911                   logb(0.0);
1912                   logbf(0.0f);
1913                   logbl(0.0l);
1914                   lrint(0.0);
1915                   lrintf(0.0f);
1916                   lrintl(0.0l);
1917                   lround(0.0);
1918                   lroundf(0.0f);
1919                   lroundl(0.0l);
1920                   nan(0);
1921                   nanf(0);
1922                   nanl(0);
1923                   nearbyint(0.0);
1924                   nearbyintf(0.0f);
1925                   nearbyintl(0.0l);
1926                   nextafter(0.0, 0.0);
1927                   nextafterf(0.0f, 0.0f);
1928                   nextafterl(0.0l, 0.0l);
1929                   nexttoward(0.0, 0.0);
1930                   nexttowardf(0.0f, 0.0f);
1931                   nexttowardl(0.0l, 0.0l);
1932                   remainder(0.0, 0.0);
1933                   remainderf(0.0f, 0.0f);
1934                   remainderl(0.0l, 0.0l);
1935                   remquo(0.0, 0.0, 0);
1936                   remquof(0.0f, 0.0f, 0);
1937                   remquol(0.0l, 0.0l, 0);
1938                   rint(0.0);
1939                   rintf(0.0f);
1940                   rintl(0.0l);
1941                   round(0.0);
1942                   roundf(0.0f);
1943                   roundl(0.0l);
1944                   scalbln(0.0, 0l);
1945                   scalblnf(0.0f, 0l);
1946                   scalblnl(0.0l, 0l);
1947                   scalbn(0.0, 0);
1948                   scalbnf(0.0f, 0);
1949                   scalbnl(0.0l, 0);
1950                   tgamma(0.0);
1951                   tgammaf(0.0f);
1952                   tgammal(0.0l);
1953                   trunc(0.0);
1954                   truncf(0.0f);
1955                   truncl(0.0l);
1956                  ],[glibcxx_cv_c99_math_tr1=yes], [glibcxx_cv_c99_math_tr1=no])
1957   ])
1958   AC_MSG_RESULT($glibcxx_cv_c99_math_tr1)
1959   if test x"$glibcxx_cv_c99_math_tr1" = x"yes"; then
1960     AC_DEFINE(_GLIBCXX_USE_C99_MATH_TR1, 1,
1961               [Define if C99 functions or macros in <math.h> should be imported
1962               in <tr1/cmath> in namespace std::tr1.])
1964     case "${target_os}" in
1965       darwin*)
1966         AC_MSG_CHECKING([for ISO C99 rounding functions in <math.h>])
1967         AC_CACHE_VAL(glibcxx_cv_c99_math_llround, [
1968           AC_TRY_COMPILE([#include <math.h>],
1969                  [llrint(0.0);
1970                   llrintf(0.0f);
1971                   llrintl(0.0l);
1972                   llround(0.0);
1973                   llroundf(0.0f);
1974                   llroundl(0.0l);
1975                  ],
1976                  [glibcxx_cv_c99_math_llround=yes],
1977                  [glibcxx_cv_c99_math_llround=no])
1978           ])
1979         AC_MSG_RESULT($glibcxx_cv_c99_math_llround)
1980         ;;
1981     esac
1982     if test x"$glibcxx_cv_c99_math_llround" = x"no"; then
1983       AC_DEFINE(_GLIBCXX_NO_C99_ROUNDING_FUNCS, 1,
1984                 [Define if C99 llrint and llround functions are missing from <math.h>.])
1985     fi
1986   fi
1988   # Check for the existence of <inttypes.h> functions (NB: doesn't make
1989   # sense if the glibcxx_cv_c99_stdint_tr1 check fails, per C99, 7.8/1).
1990   ac_c99_inttypes_tr1=no;
1991   if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
1992     AC_MSG_CHECKING([for ISO C99 support to TR1 in <inttypes.h>])
1993     AC_TRY_COMPILE([#include <inttypes.h>],
1994                    [intmax_t i, numer, denom, base;
1995                     const char* s;
1996                     char** endptr;
1997                     intmax_t ret = imaxabs(i);
1998                     imaxdiv_t dret = imaxdiv(numer, denom);
1999                     ret = strtoimax(s, endptr, base);
2000                     uintmax_t uret = strtoumax(s, endptr, base);
2001                    ],[ac_c99_inttypes_tr1=yes], [ac_c99_inttypes_tr1=no])
2002   fi
2003   AC_MSG_RESULT($ac_c99_inttypes_tr1)
2004   if test x"$ac_c99_inttypes_tr1" = x"yes"; then
2005     AC_DEFINE(_GLIBCXX_USE_C99_INTTYPES_TR1, 1,
2006               [Define if C99 functions in <inttypes.h> should be imported in
2007               <tr1/cinttypes> in namespace std::tr1.])
2008   fi
2010   # Check for the existence of wchar_t <inttypes.h> functions (NB: doesn't
2011   # make sense if the glibcxx_cv_c99_stdint_tr1 check fails, per C99, 7.8/1).
2012   ac_c99_inttypes_wchar_t_tr1=no;
2013   if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
2014     AC_MSG_CHECKING([for wchar_t ISO C99 support to TR1 in <inttypes.h>])
2015     AC_TRY_COMPILE([#include <inttypes.h>],
2016                    [intmax_t base;
2017                     const wchar_t* s;
2018                     wchar_t** endptr;
2019                     intmax_t ret = wcstoimax(s, endptr, base);
2020                     uintmax_t uret = wcstoumax(s, endptr, base);
2021                    ],[ac_c99_inttypes_wchar_t_tr1=yes],
2022                      [ac_c99_inttypes_wchar_t_tr1=no])
2023   fi
2024   AC_MSG_RESULT($ac_c99_inttypes_wchar_t_tr1)
2025   if test x"$ac_c99_inttypes_wchar_t_tr1" = x"yes"; then
2026     AC_DEFINE(_GLIBCXX_USE_C99_INTTYPES_WCHAR_T_TR1, 1,
2027               [Define if wchar_t C99 functions in <inttypes.h> should be
2028               imported in <tr1/cinttypes> in namespace std::tr1.])
2029   fi
2031   # Check for the existence of the <stdbool.h> header.
2032   AC_CHECK_HEADERS(stdbool.h)
2034   # Check for the existence of the <stdalign.h> header.
2035   AC_CHECK_HEADERS(stdalign.h)
2037   CXXFLAGS="$ac_save_CXXFLAGS"
2038   AC_LANG_RESTORE
2042 dnl Check for uchar.h and usability.
2044 AC_DEFUN([GLIBCXX_CHECK_UCHAR_H], [
2046   # Test uchar.h.
2047   AC_CHECK_HEADERS(uchar.h, ac_has_uchar_h=yes, ac_has_uchar_h=no)
2049   AC_LANG_SAVE
2050   AC_LANG_CPLUSPLUS
2051   ac_save_CXXFLAGS="$CXXFLAGS"
2052   CXXFLAGS="$CXXFLAGS -std=c++11"
2054   if test x"$ac_has_uchar_h" = x"yes"; then
2055     AC_MSG_CHECKING([for ISO C11 support for <uchar.h>])
2056     AC_TRY_COMPILE([#include <uchar.h>
2057                     #ifdef __STDC_UTF_16__
2058                     long i = __STDC_UTF_16__;
2059                     #endif
2060                     #ifdef __STDC_UTF_32__
2061                     long j = __STDC_UTF_32__;
2062                     #endif
2063                     namespace test
2064                     {
2065                       using ::c16rtomb;
2066                       using ::c32rtomb;
2067                       using ::mbrtoc16;
2068                       using ::mbrtoc32;
2069                     }
2070                    ],
2071                    [], [ac_c11_uchar_cxx11=yes], [ac_c11_uchar_cxx11=no])
2072   else
2073     ac_c11_uchar_cxx11=no
2074   fi
2075   AC_MSG_RESULT($ac_c11_uchar_cxx11)
2076   if test x"$ac_c11_uchar_cxx11" = x"yes"; then
2077     AC_DEFINE(_GLIBCXX_USE_C11_UCHAR_CXX11, 1,
2078               [Define if C11 functions in <uchar.h> should be imported into
2079               namespace std in <cuchar>.])
2080   fi
2082   CXXFLAGS="$ac_save_CXXFLAGS"
2083   AC_LANG_RESTORE
2088 dnl Check whether "/dev/random" and "/dev/urandom" are available for
2089 dnl class std::random_device from C++ 2011 [rand.device], and
2090 dnl random_device of "TR1" (Chapter 5.1, "Random number generation").
2092 AC_DEFUN([GLIBCXX_CHECK_DEV_RANDOM], [
2094   AC_MSG_CHECKING([for "/dev/random" and "/dev/urandom" for std::random_device])
2095   AC_CACHE_VAL(glibcxx_cv_dev_random, [
2096     if test -r /dev/random && test -r /dev/urandom; then
2097   ## For MSys environment the test above is detected as false-positive
2098   ## on mingw-targets.  So disable it explicitly for them.
2099       case ${target_os} in
2100         *mingw*) glibcxx_cv_dev_random=no ;;
2101         *) glibcxx_cv_dev_random=yes ;;
2102       esac
2103     else
2104       glibcxx_cv_dev_random=no;
2105     fi
2106   ])
2107   AC_MSG_RESULT($glibcxx_cv_dev_random)
2109   if test x"$glibcxx_cv_dev_random" = x"yes"; then
2110     AC_DEFINE(_GLIBCXX_USE_DEV_RANDOM, 1,
2111               [Define if /dev/random and /dev/urandom are available for
2112                std::random_device.])
2113     AC_DEFINE(_GLIBCXX_USE_RANDOM_TR1, 1,
2114               [Define if /dev/random and /dev/urandom are available for
2115                the random_device of TR1 (Chapter 5.1).])
2116   fi
2121 dnl Compute the EOF, SEEK_CUR, and SEEK_END integer constants.
2123 AC_DEFUN([GLIBCXX_COMPUTE_STDIO_INTEGER_CONSTANTS], [
2125   AC_CACHE_CHECK([for the value of EOF], glibcxx_cv_stdio_eof, [
2126   AC_COMPUTE_INT([glibcxx_cv_stdio_eof], [[EOF]],
2127                  [#include <stdio.h>],
2128                  [AC_MSG_ERROR([computing EOF failed])])
2129   ])
2130   AC_DEFINE_UNQUOTED(_GLIBCXX_STDIO_EOF, $glibcxx_cv_stdio_eof,
2131                      [Define to the value of the EOF integer constant.])
2133   AC_CACHE_CHECK([for the value of SEEK_CUR], glibcxx_cv_stdio_seek_cur, [
2134   AC_COMPUTE_INT([glibcxx_cv_stdio_seek_cur], [[SEEK_CUR]],
2135                  [#include <stdio.h>],
2136                  [AC_MSG_ERROR([computing SEEK_CUR failed])])
2137   ])
2138   AC_DEFINE_UNQUOTED(_GLIBCXX_STDIO_SEEK_CUR, $glibcxx_cv_stdio_seek_cur,
2139                      [Define to the value of the SEEK_CUR integer constant.])
2141   AC_CACHE_CHECK([for the value of SEEK_END], glibcxx_cv_stdio_seek_end, [
2142   AC_COMPUTE_INT([glibcxx_cv_stdio_seek_end], [[SEEK_END]],
2143                  [#include <stdio.h>],
2144                  [AC_MSG_ERROR([computing SEEK_END failed])])
2145   ])
2146   AC_DEFINE_UNQUOTED(_GLIBCXX_STDIO_SEEK_END, $glibcxx_cv_stdio_seek_end,
2147                      [Define to the value of the SEEK_END integer constant.])
2151 dnl Check whether required C++ overloads are present in <stdio.h>.
2153 AC_DEFUN([GLIBCXX_CHECK_STDIO_PROTO], [
2155   AC_LANG_SAVE
2156   AC_LANG_CPLUSPLUS
2157   # Use C++11 because a conforming <stdio.h> won't define gets for C++14,
2158   # and we don't need a declaration for C++14 anyway.
2159   ac_save_CXXFLAGS="$CXXFLAGS"
2160   CXXFLAGS="$CXXFLAGS -std=gnu++11"
2162   AC_MSG_CHECKING([for gets declaration])
2163   AC_CACHE_VAL(glibcxx_cv_gets, [
2164   AC_COMPILE_IFELSE([AC_LANG_SOURCE(
2165           [#include <stdio.h>
2166            namespace test 
2167            {
2168               using ::gets;
2169            }
2170         ])],
2171         [glibcxx_cv_gets=yes],
2172         [glibcxx_cv_gets=no]
2173       )])
2175   if test $glibcxx_cv_gets = yes; then
2176     AC_DEFINE(HAVE_GETS, 1, [Define if gets is available in <stdio.h> before C++14.])
2177   fi
2178   AC_MSG_RESULT($glibcxx_cv_gets)
2180   CXXFLAGS="$ac_save_CXXFLAGS"
2181   AC_LANG_RESTORE
2185 dnl Check whether required C++11 overloads for floating point and integral
2186 dnl types are present in <math.h>.
2188 AC_DEFUN([GLIBCXX_CHECK_MATH11_PROTO], [
2190   AC_LANG_SAVE
2191   AC_LANG_CPLUSPLUS
2192   ac_save_CXXFLAGS="$CXXFLAGS"
2193   CXXFLAGS="$CXXFLAGS -std=c++11"
2195   case "$host" in
2196     *-*-solaris2.*)
2197       # Solaris 12 Build 86, Solaris 11.3 SRU 3.6, and Solaris 10 Patch
2198       # 11996[67]-02 introduced the C++11 <math.h> floating point overloads.
2199       AC_MSG_CHECKING([for C++11 <math.h> floating point overloads])
2200       AC_CACHE_VAL(glibcxx_cv_math11_fp_overload, [
2201         AC_COMPILE_IFELSE([AC_LANG_SOURCE(
2202           [#include <math.h>
2203            #undef isfinite
2204            namespace std {
2205              inline bool isfinite(float __x)
2206              { return __builtin_isfinite(__x); }
2207            }
2208         ])],
2209         [glibcxx_cv_math11_fp_overload=no],
2210         [glibcxx_cv_math11_fp_overload=yes]
2211       )])
2213       # autoheader cannot handle indented templates.
2214       AH_VERBATIM([__CORRECT_ISO_CPP11_MATH_H_PROTO_FP],
2215         [/* Define if all C++11 floating point overloads are available in <math.h>.  */
2216 #if __cplusplus >= 201103L
2217 #undef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
2218 #endif])
2220       if test $glibcxx_cv_math11_fp_overload = yes; then
2221         AC_DEFINE(__CORRECT_ISO_CPP11_MATH_H_PROTO_FP)
2222       fi
2223       AC_MSG_RESULT([$glibcxx_cv_math11_fp_overload])
2225       # Solaris 12 Build 90, Solaris 11.3 SRU 5.6, and Solaris 10 Patch
2226       # 11996[67]-02 introduced the C++11 <math.h> integral type overloads.
2227       AC_MSG_CHECKING([for C++11 <math.h> integral type overloads])
2228       AC_CACHE_VAL(glibcxx_cv_math11_int_overload, [
2229         AC_COMPILE_IFELSE([AC_LANG_SOURCE(
2230           [#include <math.h>
2231            namespace std {
2232              template<typename _Tp>
2233                struct __is_integer;
2234              template<>
2235                struct __is_integer<int>
2236                {
2237                  enum { __value = 1 };
2238                };
2239            }
2240            namespace __gnu_cxx {
2241              template<bool, typename>
2242                struct __enable_if;
2243              template<typename _Tp>
2244                struct __enable_if<true, _Tp>
2245                { typedef _Tp __type; };
2246            }
2247            namespace std {
2248              template<typename _Tp>
2249                constexpr typename __gnu_cxx::__enable_if
2250                          <__is_integer<_Tp>::__value, double>::__type
2251                log2(_Tp __x)
2252                { return __builtin_log2(__x); }
2253            }
2254            int
2255            main (void)
2256            {
2257              int i = 1000;
2258              return std::log2(i);
2259            }
2260         ])],
2261         [glibcxx_cv_math11_int_overload=no],
2262         [glibcxx_cv_math11_int_overload=yes]
2263       )])
2265       # autoheader cannot handle indented templates.
2266       AH_VERBATIM([__CORRECT_ISO_CPP11_MATH_H_PROTO_INT],
2267         [/* Define if all C++11 integral type overloads are available in <math.h>.  */
2268 #if __cplusplus >= 201103L
2269 #undef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
2270 #endif])
2272       if test $glibcxx_cv_math11_int_overload = yes; then
2273         AC_DEFINE(__CORRECT_ISO_CPP11_MATH_H_PROTO_INT)
2274       fi
2275       AC_MSG_RESULT([$glibcxx_cv_math11_int_overload])
2276       ;;
2277     *)
2278       # If <math.h> defines the obsolete isinf(double) and isnan(double)
2279       # functions (instead of or as well as the C99 generic macros) then we
2280       # can't define std::isinf(double) and std::isnan(double) in <cmath>
2281       # and must use the ones from <math.h> instead.
2282       AC_MSG_CHECKING([for obsolete isinf function in <math.h>])
2283         AC_CACHE_VAL(glibcxx_cv_obsolete_isinf, [
2284           AC_COMPILE_IFELSE([AC_LANG_SOURCE(
2285             [#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS
2286              #include <math.h>
2287              #undef isinf
2288              namespace std {
2289                using ::isinf;
2290                bool isinf(float);
2291                bool isinf(long double);
2292              }
2293              using std::isinf;
2294              bool b = isinf(0.0);
2295           ])],
2296           [glibcxx_cv_obsolete_isinf=yes],
2297           [glibcxx_cv_obsolete_isinf=no]
2298         )])
2299       AC_MSG_RESULT([$glibcxx_cv_obsolete_isinf])
2300       if test $glibcxx_cv_obsolete_isinf = yes; then
2301         AC_DEFINE(HAVE_OBSOLETE_ISINF, 1,
2302                   [Define if <math.h> defines obsolete isinf function.])
2303       fi
2305       AC_MSG_CHECKING([for obsolete isnan function in <math.h>])
2306         AC_CACHE_VAL(glibcxx_cv_obsolete_isnan, [
2307           AC_COMPILE_IFELSE([AC_LANG_SOURCE(
2308             [#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS
2309              #include <math.h>
2310              #undef isnan
2311              namespace std {
2312                using ::isnan;
2313                bool isnan(float);
2314                bool isnan(long double);
2315              }
2316              using std::isnan;
2317              bool b = isnan(0.0);
2318           ])],
2319           [glibcxx_cv_obsolete_isnan=yes],
2320           [glibcxx_cv_obsolete_isnan=no]
2321         )])
2322       AC_MSG_RESULT([$glibcxx_cv_obsolete_isnan])
2323       if test $glibcxx_cv_obsolete_isnan = yes; then
2324         AC_DEFINE(HAVE_OBSOLETE_ISNAN, 1,
2325                   [Define if <math.h> defines obsolete isnan function.])
2326       fi
2327       ;;
2328   esac
2330   CXXFLAGS="$ac_save_CXXFLAGS"
2331   AC_LANG_RESTORE
2335 dnl Check whether macros, etc are present for <system_error>
2337 AC_DEFUN([GLIBCXX_CHECK_SYSTEM_ERROR], [
2339 m4_pushdef([n_syserr], [1])dnl
2340 m4_foreach([syserr], [EOWNERDEAD, ENOTRECOVERABLE, ENOLINK, EPROTO, ENODATA,
2341                       ENOSR, ENOSTR, ETIME, EBADMSG, ECANCELED,
2342                       EOVERFLOW, ENOTSUP, EIDRM, ETXTBSY,
2343                       ECHILD, ENOSPC, EPERM,
2344                       ETIMEDOUT, EWOULDBLOCK],
2345 [m4_pushdef([SYSERR], m4_toupper(syserr))dnl
2346 AC_MSG_CHECKING([for syserr])
2347 AC_CACHE_VAL([glibcxx_cv_system_error[]n_syserr], [
2348 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <errno.h>]],
2349                                    [int i = syserr;])],
2350                   [glibcxx_cv_system_error[]n_syserr=yes],
2351                   [glibcxx_cv_system_error[]n_syserr=no])
2353 AC_MSG_RESULT([$glibcxx_cv_system_error[]n_syserr])
2354 if test x"$glibcxx_cv_system_error[]n_syserr" = x"yes"; then
2355   AC_DEFINE([HAVE_]SYSERR, 1, [Define if ]syserr[ exists.])
2357 m4_define([n_syserr], m4_incr(n_syserr))dnl
2358 m4_popdef([SYSERR])dnl
2360 m4_popdef([n_syserr])dnl
2364 dnl Check for what type of C headers to use.
2366 dnl --enable-cheaders= [does stuff].
2367 dnl --disable-cheaders [does not do anything, really].
2368 dnl  +  Usage:  GLIBCXX_ENABLE_CHEADERS[(DEFAULT)]
2369 dnl       Where DEFAULT is either 'c' or 'c_std' or 'c_global'.
2371 AC_DEFUN([GLIBCXX_ENABLE_CHEADERS], [
2372   GLIBCXX_ENABLE(cheaders,$1,[[[=KIND]]],
2373     [construct "C" headers for g++], [permit c|c_std|c_global])
2374   AC_MSG_NOTICE("C" header strategy set to $enable_cheaders)
2376   C_INCLUDE_DIR='${glibcxx_srcdir}/include/'$enable_cheaders
2378   # Allow overrides to configure.host here.
2379   if test $enable_cheaders = c_global; then
2380      c_compatibility=yes
2381   fi
2383   AC_SUBST(C_INCLUDE_DIR)
2384   GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C, test $enable_cheaders = c)
2385   GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C_STD, test $enable_cheaders = c_std)
2386   GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C_GLOBAL, test $enable_cheaders = c_global)
2387   GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_COMPATIBILITY, test $c_compatibility = yes)
2392 dnl Check for which locale library to use.  The choice is mapped to
2393 dnl a subdirectory of config/locale.
2395 dnl Default is generic.
2397 AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
2398   GLIBCXX_ENABLE(clocale,auto,[[[=MODEL]]],
2399     [use MODEL for target locale package],
2400     [permit generic|gnu|ieee_1003.1-2001|newlib|yes|no|auto])
2402   # Deal with gettext issues.  Default to not using it (=no) until we detect
2403   # support for it later.  Let the user turn it off via --e/d, but let that
2404   # default to on for easier handling.
2405   USE_NLS=no
2406   AC_ARG_ENABLE(nls,
2407     AC_HELP_STRING([--enable-nls],[use Native Language Support (default)]),
2408     [],
2409     [enable_nls=yes])
2411   # Either a known package, or "auto"
2412   if test $enable_clocale = no || test $enable_clocale = yes; then
2413      enable_clocale=auto
2414   fi
2415   enable_clocale_flag=$enable_clocale
2417   # Probe for locale model to use if none specified.
2418   # Default to "generic".
2419   if test $enable_clocale_flag = auto; then
2420     case ${target_os} in
2421       linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
2422         enable_clocale_flag=gnu
2423         ;;
2424       darwin*)
2425         enable_clocale_flag=darwin
2426         ;;
2427       dragonfly* | freebsd*)
2428         enable_clocale_flag=dragonfly
2429         ;;
2430       openbsd*)
2431         enable_clocale_flag=newlib
2432         ;;
2433       *)
2434         if test x"$with_newlib" = x"yes"; then
2435           enable_clocale_flag=newlib
2436         else
2437           enable_clocale_flag=generic
2438         fi
2439         ;;
2440     esac
2441   fi
2443   # Sanity check model, and test for special functionality.
2444   if test $enable_clocale_flag = gnu; then
2445     AC_EGREP_CPP([_GLIBCXX_ok], [
2446     #include <features.h>
2447     #if (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined(__UCLIBC__)
2448       _GLIBCXX_ok
2449     #endif
2450     ], enable_clocale_flag=gnu, enable_clocale_flag=generic)
2452     # Set it to scream when it hurts.
2453     ac_save_CFLAGS="$CFLAGS"
2454     CFLAGS="-Wimplicit-function-declaration -Werror"
2456     # Use strxfrm_l if available.
2457     AC_TRY_COMPILE([#define _GNU_SOURCE 1
2458                     #include <string.h>
2459                     #include <locale.h>],
2460                     [char s[128]; __locale_t loc; strxfrm_l(s, "C", 5, loc);],
2461                     AC_DEFINE(HAVE_STRXFRM_L, 1,
2462                     [Define if strxfrm_l is available in <string.h>.]),)
2464     # Use strerror_l if available.
2465     AC_TRY_COMPILE([#define _GNU_SOURCE 1
2466                     #include <string.h>
2467                     #include <locale.h>],
2468                     [__locale_t loc; strerror_l(5, loc);],
2469                     AC_DEFINE(HAVE_STRERROR_L, 1,
2470                     [Define if strerror_l is available in <string.h>.]),)
2472     CFLAGS="$ac_save_CFLAGS"
2473   fi
2475   # Perhaps use strerror_r if available, and strerror_l isn't.
2476   ac_save_CFLAGS="$CFLAGS"
2477   CFLAGS="-Wimplicit-function-declaration -Werror"
2478   AC_TRY_COMPILE([#define _GNU_SOURCE 1
2479                   #include <string.h>
2480                   #include <locale.h>],
2481                   [char s[128]; strerror_r(5, s, 128);],
2482                   AC_DEFINE(HAVE_STRERROR_R, 1,
2483                   [Define if strerror_r is available in <string.h>.]),)
2484   CFLAGS="$ac_save_CFLAGS"
2486   # Set configure bits for specified locale package
2487   AC_MSG_CHECKING([for C locale to use])
2488   case ${enable_clocale_flag} in
2489     generic)
2490       AC_MSG_RESULT(generic)
2492       CLOCALE_H=config/locale/generic/c_locale.h
2493       CLOCALE_CC=config/locale/generic/c_locale.cc
2494       CCODECVT_CC=config/locale/generic/codecvt_members.cc
2495       CCOLLATE_CC=config/locale/generic/collate_members.cc
2496       CCTYPE_CC=config/locale/generic/ctype_members.cc
2497       CMESSAGES_H=config/locale/generic/messages_members.h
2498       CMESSAGES_CC=config/locale/generic/messages_members.cc
2499       CMONEY_CC=config/locale/generic/monetary_members.cc
2500       CNUMERIC_CC=config/locale/generic/numeric_members.cc
2501       CTIME_H=config/locale/generic/time_members.h
2502       CTIME_CC=config/locale/generic/time_members.cc
2503       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
2504       ;;
2505     darwin)
2506       AC_MSG_RESULT(darwin)
2508       CLOCALE_H=config/locale/generic/c_locale.h
2509       CLOCALE_CC=config/locale/generic/c_locale.cc
2510       CCODECVT_CC=config/locale/generic/codecvt_members.cc
2511       CCOLLATE_CC=config/locale/generic/collate_members.cc
2512       CCTYPE_CC=config/locale/darwin/ctype_members.cc
2513       CMESSAGES_H=config/locale/generic/messages_members.h
2514       CMESSAGES_CC=config/locale/generic/messages_members.cc
2515       CMONEY_CC=config/locale/generic/monetary_members.cc
2516       CNUMERIC_CC=config/locale/generic/numeric_members.cc
2517       CTIME_H=config/locale/generic/time_members.h
2518       CTIME_CC=config/locale/generic/time_members.cc
2519       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
2520       ;;
2522     dragonfly)
2523       AC_MSG_RESULT(dragonfly or freebsd)
2525       CLOCALE_H=config/locale/dragonfly/c_locale.h
2526       CLOCALE_CC=config/locale/dragonfly/c_locale.cc
2527       CCODECVT_CC=config/locale/dragonfly/codecvt_members.cc
2528       CCOLLATE_CC=config/locale/dragonfly/collate_members.cc
2529       CCTYPE_CC=config/locale/dragonfly/ctype_members.cc
2530       CMESSAGES_H=config/locale/generic/messages_members.h
2531       CMESSAGES_CC=config/locale/generic/messages_members.cc
2532       CMONEY_CC=config/locale/dragonfly/monetary_members.cc
2533       CNUMERIC_CC=config/locale/dragonfly/numeric_members.cc
2534       CTIME_H=config/locale/dragonfly/time_members.h
2535       CTIME_CC=config/locale/dragonfly/time_members.cc
2536       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
2537       ;;
2539     gnu)
2540       AC_MSG_RESULT(gnu)
2542       # Declare intention to use gettext, and add support for specific
2543       # languages.
2544       # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
2545       ALL_LINGUAS="de fr"
2547       # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
2548       AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
2549       if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
2550         USE_NLS=yes
2551       fi
2552       # Export the build objects.
2553       for ling in $ALL_LINGUAS; do \
2554         glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
2555         glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
2556       done
2557       AC_SUBST(glibcxx_MOFILES)
2558       AC_SUBST(glibcxx_POFILES)
2560       CLOCALE_H=config/locale/gnu/c_locale.h
2561       CLOCALE_CC=config/locale/gnu/c_locale.cc
2562       CCODECVT_CC=config/locale/gnu/codecvt_members.cc
2563       CCOLLATE_CC=config/locale/gnu/collate_members.cc
2564       CCTYPE_CC=config/locale/gnu/ctype_members.cc
2565       CMESSAGES_H=config/locale/gnu/messages_members.h
2566       CMESSAGES_CC=config/locale/gnu/messages_members.cc
2567       CMONEY_CC=config/locale/gnu/monetary_members.cc
2568       CNUMERIC_CC=config/locale/gnu/numeric_members.cc
2569       CTIME_H=config/locale/gnu/time_members.h
2570       CTIME_CC=config/locale/gnu/time_members.cc
2571       CLOCALE_INTERNAL_H=config/locale/gnu/c++locale_internal.h
2572       ;;
2573     ieee_1003.1-2001)
2574       AC_MSG_RESULT(IEEE 1003.1)
2576       CLOCALE_H=config/locale/ieee_1003.1-2001/c_locale.h
2577       CLOCALE_CC=config/locale/ieee_1003.1-2001/c_locale.cc
2578       CCODECVT_CC=config/locale/generic/codecvt_members.cc
2579       CCOLLATE_CC=config/locale/generic/collate_members.cc
2580       CCTYPE_CC=config/locale/generic/ctype_members.cc
2581       CMESSAGES_H=config/locale/ieee_1003.1-2001/messages_members.h
2582       CMESSAGES_CC=config/locale/ieee_1003.1-2001/messages_members.cc
2583       CMONEY_CC=config/locale/generic/monetary_members.cc
2584       CNUMERIC_CC=config/locale/generic/numeric_members.cc
2585       CTIME_H=config/locale/generic/time_members.h
2586       CTIME_CC=config/locale/generic/time_members.cc
2587       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
2588       ;;
2589     newlib)
2590       AC_MSG_RESULT(newlib)
2592       CLOCALE_H=config/locale/generic/c_locale.h
2593       CLOCALE_CC=config/locale/generic/c_locale.cc
2594       CCODECVT_CC=config/locale/generic/codecvt_members.cc
2595       CCOLLATE_CC=config/locale/generic/collate_members.cc
2596       CCTYPE_CC=config/locale/newlib/ctype_members.cc
2597       CMESSAGES_H=config/locale/generic/messages_members.h
2598       CMESSAGES_CC=config/locale/generic/messages_members.cc
2599       CMONEY_CC=config/locale/generic/monetary_members.cc
2600       CNUMERIC_CC=config/locale/generic/numeric_members.cc
2601       CTIME_H=config/locale/generic/time_members.h
2602       CTIME_CC=config/locale/generic/time_members.cc
2603       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
2604       ;;
2605   esac
2607   # This is where the testsuite looks for locale catalogs, using the
2608   # -DLOCALEDIR define during testsuite compilation.
2609   glibcxx_localedir=${glibcxx_builddir}/po/share/locale
2610   AC_SUBST(glibcxx_localedir)
2612   # A standalone libintl (e.g., GNU libintl) may be in use.
2613   if test $USE_NLS = yes; then
2614     AC_CHECK_HEADERS([libintl.h], [], USE_NLS=no)
2615     AC_SEARCH_LIBS(gettext, intl, [], USE_NLS=no)
2616   fi
2617   if test $USE_NLS = yes; then
2618     AC_DEFINE(_GLIBCXX_USE_NLS, 1,
2619               [Define if NLS translations are to be used.])
2620   fi
2622   AC_SUBST(USE_NLS)
2623   AC_SUBST(CLOCALE_H)
2624   AC_SUBST(CMESSAGES_H)
2625   AC_SUBST(CCODECVT_CC)
2626   AC_SUBST(CCOLLATE_CC)
2627   AC_SUBST(CCTYPE_CC)
2628   AC_SUBST(CMESSAGES_CC)
2629   AC_SUBST(CMONEY_CC)
2630   AC_SUBST(CNUMERIC_CC)
2631   AC_SUBST(CTIME_H)
2632   AC_SUBST(CTIME_CC)
2633   AC_SUBST(CLOCALE_CC)
2634   AC_SUBST(CLOCALE_INTERNAL_H)
2639 dnl Check for which std::allocator base class to use.  The choice is
2640 dnl mapped from a subdirectory of include/ext.
2642 dnl Default is new.
2644 AC_DEFUN([GLIBCXX_ENABLE_ALLOCATOR], [
2645   AC_MSG_CHECKING([for std::allocator base class])
2646   GLIBCXX_ENABLE(libstdcxx-allocator,auto,[[[=KIND]]],
2647     [use KIND for target std::allocator base],
2648     [permit new|malloc|mt|bitmap|pool|yes|no|auto])
2650   # If they didn't use this option switch, or if they specified --enable
2651   # with no specific model, we'll have to look for one.  If they
2652   # specified --disable (???), do likewise.
2653   if test $enable_libstdcxx_allocator = no ||
2654      test $enable_libstdcxx_allocator = yes;
2655   then
2656      enable_libstdcxx_allocator=auto
2657   fi
2659   # Either a known package, or "auto". Auto implies the default choice
2660   # for a particular platform.
2661   enable_libstdcxx_allocator_flag=$enable_libstdcxx_allocator
2663   # Probe for host-specific support if no specific model is specified.
2664   # Default to "new".
2665   if test $enable_libstdcxx_allocator_flag = auto; then
2666     case ${target_os} in
2667       linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
2668         enable_libstdcxx_allocator_flag=new
2669         ;;
2670       *)
2671         enable_libstdcxx_allocator_flag=new
2672         ;;
2673     esac
2674   fi
2675   AC_MSG_RESULT($enable_libstdcxx_allocator_flag)
2678   # Set configure bits for specified locale package
2679   case ${enable_libstdcxx_allocator_flag} in
2680     bitmap)
2681       ALLOCATOR_H=config/allocator/bitmap_allocator_base.h
2682       ALLOCATOR_NAME=__gnu_cxx::bitmap_allocator
2683       ;;
2684     malloc)
2685       ALLOCATOR_H=config/allocator/malloc_allocator_base.h
2686       ALLOCATOR_NAME=__gnu_cxx::malloc_allocator
2687       ;;
2688     mt)
2689       ALLOCATOR_H=config/allocator/mt_allocator_base.h
2690       ALLOCATOR_NAME=__gnu_cxx::__mt_alloc
2691       ;;
2692     new)
2693       ALLOCATOR_H=config/allocator/new_allocator_base.h
2694       ALLOCATOR_NAME=__gnu_cxx::new_allocator
2695       ;;
2696     pool)
2697       ALLOCATOR_H=config/allocator/pool_allocator_base.h
2698       ALLOCATOR_NAME=__gnu_cxx::__pool_alloc
2699       ;;
2700   esac
2702   GLIBCXX_CONDITIONAL(ENABLE_ALLOCATOR_NEW,
2703                       test $enable_libstdcxx_allocator_flag = new)
2704   AC_SUBST(ALLOCATOR_H)
2705   AC_SUBST(ALLOCATOR_NAME)
2710 dnl Check for whether the Boost-derived checks should be turned on.
2712 dnl --enable-concept-checks turns them on.
2713 dnl --disable-concept-checks leaves them off.
2714 dnl  +  Usage:  GLIBCXX_ENABLE_CONCEPT_CHECKS[(DEFAULT)]
2715 dnl       Where DEFAULT is either `yes' or `no'.
2717 AC_DEFUN([GLIBCXX_ENABLE_CONCEPT_CHECKS], [
2718   GLIBCXX_ENABLE(concept-checks,$1,,[use Boost-derived template checks])
2719   if test $enable_concept_checks = yes; then
2720     AC_DEFINE(_GLIBCXX_CONCEPT_CHECKS, 1,
2721               [Define to use concept checking code from the boost libraries.])
2722   fi
2726 dnl Use extern templates.
2728 dnl --enable-extern-template defines _GLIBCXX_EXTERN_TEMPLATE to 1
2729 dnl --disable-extern-template defines _GLIBCXX_EXTERN_TEMPLATE to 0
2731 dnl  +  Usage:  GLIBCXX_ENABLE_TEMPLATE[(DEFAULT)]
2732 dnl       Where DEFAULT is `yes' or `no'.
2734 AC_DEFUN([GLIBCXX_ENABLE_EXTERN_TEMPLATE], [
2736   GLIBCXX_ENABLE(extern-template,$1,,[enable extern template])
2738   AC_MSG_CHECKING([for extern template support])
2739   AC_MSG_RESULT([$enable_extern_template])
2741   GLIBCXX_CONDITIONAL(ENABLE_EXTERN_TEMPLATE, test $enable_extern_template = yes)
2745 dnl Use vtable verification.
2747 dnl --enable-vtable-verify defines _GLIBCXX_VTABLE_VERIFY to 1
2748 dnl --disable-vtable-verify defines _GLIBCXX_VTABLE_VERIFY to 0
2750 dnl  +  Usage:  GLIBCXX_ENABLE_VTABLE_VERIFY[(DEFAULT)]
2751 dnl       Where DEFAULT is `yes' or `no'.
2753 AC_DEFUN([GLIBCXX_ENABLE_VTABLE_VERIFY], [
2755   GLIBCXX_ENABLE(vtable-verify,$1,,[enable vtable verify])
2757   AC_MSG_CHECKING([for vtable verify support])
2758   AC_MSG_RESULT([$enable_vtable_verify])
2760   vtv_cygmin=no
2761   if test $enable_vtable_verify = yes; then
2762     case ${target_os} in
2763       cygwin*|mingw32*)
2764         VTV_CXXFLAGS="-fvtable-verify=std -Wl,-lvtv,-u_vtable_map_vars_start,-u_vtable_map_vars_end"
2765         VTV_CXXLINKFLAGS="-L${toplevel_builddir}/libvtv/.libs -Wl,--rpath -Wl,${toplevel_builddir}/libvtv/.libs"
2766         vtv_cygmin=yes
2767         ;;
2768       darwin*)
2769         VTV_CXXFLAGS="-fvtable-verify=std -Wl,-u,_vtable_map_vars_start -Wl,-u,_vtable_map_vars_end"
2770         VTV_CXXLINKFLAGS="-L${toplevel_builddir}/libvtv/.libs -Wl,-rpath,${toplevel_builddir}/libvtv/.libs"
2771         ;;
2772       solaris2*)
2773         VTV_CXXFLAGS="-fvtable-verify=std -Wl,-u_vtable_map_vars_start,-u_vtable_map_vars_end"
2774         VTV_CXXLINKFLAGS="-L${toplevel_builddir}/libvtv/.libs -Wl,-R -Wl,${toplevel_builddir}/libvtv/.libs"
2775         ;;
2776       *)
2777         VTV_CXXFLAGS="-fvtable-verify=std -Wl,-u_vtable_map_vars_start,-u_vtable_map_vars_end"
2778         VTV_CXXLINKFLAGS="-L${toplevel_builddir}/libvtv/.libs -Wl,--rpath -Wl,${toplevel_builddir}/libvtv/.libs"
2779         ;;
2780     esac
2781     VTV_PCH_CXXFLAGS="-fvtable-verify=std"
2782   else
2783     VTV_CXXFLAGS= 
2784     VTV_PCH_CXXFLAGS=
2785     VTV_CXXLINKFLAGS= 
2786   fi
2788   AC_SUBST(VTV_CXXFLAGS)
2789   AC_SUBST(VTV_PCH_CXXFLAGS)
2790   AC_SUBST(VTV_CXXLINKFLAGS)
2791   AM_CONDITIONAL(VTV_CYGMIN, test x$vtv_cygmin = xyes)
2792   GLIBCXX_CONDITIONAL(ENABLE_VTABLE_VERIFY, test $enable_vtable_verify = yes)
2796 dnl Check for parallel mode pre-requisites, including OpenMP support.
2798 dnl  +  Usage:  GLIBCXX_ENABLE_PARALLEL
2800 AC_DEFUN([GLIBCXX_ENABLE_PARALLEL], [
2802   enable_parallel=no;
2804   # See if configured libgomp/omp.h exists. (libgomp may be in
2805   # noconfigdirs but not explicitly disabled.)
2806   if echo " ${TARGET_CONFIGDIRS} " | grep " libgomp " > /dev/null 2>&1 ; then
2807     enable_parallel=yes;
2808   else
2809     AC_MSG_NOTICE([target-libgomp not built])
2810   fi
2812   AC_MSG_CHECKING([for parallel mode support])
2813   AC_MSG_RESULT([$enable_parallel])
2818 dnl Check for which I/O library to use:  stdio, or something specific.
2820 dnl Default is stdio.
2822 AC_DEFUN([GLIBCXX_ENABLE_CSTDIO], [
2823   AC_MSG_CHECKING([for underlying I/O to use])
2824   GLIBCXX_ENABLE(cstdio,stdio,[[[=PACKAGE]]],
2825     [use target-specific I/O package], [permit stdio])
2827   # Now that libio has been removed, you can have any color you want as long
2828   # as it's black.  This is one big no-op until other packages are added, but
2829   # showing the framework never hurts.
2830   case ${enable_cstdio} in
2831     stdio)
2832       CSTDIO_H=config/io/c_io_stdio.h
2833       BASIC_FILE_H=config/io/basic_file_stdio.h
2834       BASIC_FILE_CC=config/io/basic_file_stdio.cc
2835       AC_MSG_RESULT(stdio)
2836       ;;
2837   esac
2839   AC_SUBST(CSTDIO_H)
2840   AC_SUBST(BASIC_FILE_H)
2841   AC_SUBST(BASIC_FILE_CC)
2846 dnl Check for "unusual" flags to pass to the compiler while building.
2848 dnl --enable-cxx-flags='-foo -bar -baz' is a general method for passing
2849 dnl     experimental flags such as -fpch, -fIMI, -Dfloat=char, etc.
2850 dnl --disable-cxx-flags passes nothing.
2851 dnl  +  See http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00131.html
2852 dnl         http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00284.html
2853 dnl         http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00035.html
2854 dnl  +  Usage:  GLIBCXX_ENABLE_CXX_FLAGS(default flags)
2855 dnl       If "default flags" is an empty string, the effect is the same
2856 dnl       as --disable or --enable=no.
2858 AC_DEFUN([GLIBCXX_ENABLE_CXX_FLAGS], [dnl
2859   AC_MSG_CHECKING([for extra compiler flags for building])
2860   GLIBCXX_ENABLE(cxx-flags,$1,[=FLAGS],
2861     [pass compiler FLAGS when building library],
2862     [case "x$enable_cxx_flags" in
2863       xno | x)   enable_cxx_flags= ;;
2864       x-*)       ;;
2865       *)         AC_MSG_ERROR(_g_switch needs compiler flags as arguments) ;;
2866      esac])
2868   # Run through flags (either default or command-line) and set anything
2869   # extra (e.g., #defines) that must accompany particular g++ options.
2870   if test -n "$enable_cxx_flags"; then
2871     for f in $enable_cxx_flags; do
2872       case "$f" in
2873         -fhonor-std)  ;;
2874         -*)  ;;
2875         *)   # and we're trying to pass /what/ exactly?
2876              AC_MSG_ERROR([compiler flags start with a -]) ;;
2877       esac
2878     done
2879   fi
2881   EXTRA_CXX_FLAGS="$enable_cxx_flags"
2882   AC_MSG_RESULT($EXTRA_CXX_FLAGS)
2883   AC_SUBST(EXTRA_CXX_FLAGS)
2888 dnl Check to see if debugging libraries are to be built.
2890 dnl --enable-libstdcxx-debug
2891 dnl builds a separate set of debugging libraries in addition to the
2892 dnl normal (shared, static) libstdc++ binaries.
2894 dnl --disable-libstdcxx-debug
2895 dnl builds only one (non-debug) version of libstdc++.
2897 dnl --enable-libstdcxx-debug-flags=FLAGS
2898 dnl iff --enable-debug == yes, then use FLAGS to build the debug library.
2900 dnl  +  Usage:  GLIBCXX_ENABLE_DEBUG[(DEFAULT)]
2901 dnl       Where DEFAULT is either `yes' or `no'.
2903 AC_DEFUN([GLIBCXX_ENABLE_DEBUG], [
2904   AC_MSG_CHECKING([for additional debug build])
2905   skip_debug_build=
2906   GLIBCXX_ENABLE(libstdcxx-debug,$1,,[build extra debug library])
2907   if test x$enable_libstdcxx_debug = xyes; then
2908     if test -f $toplevel_builddir/../stage_final \
2909       && test -f $toplevel_builddir/../stage_current; then
2910       stage_final=`cat $toplevel_builddir/../stage_final`
2911       stage_current=`cat $toplevel_builddir/../stage_current`
2912       if test x$stage_current != x$stage_final ; then
2913         skip_debug_build=" (skipped for bootstrap stage $stage_current)"
2914         enable_libstdcxx_debug=no
2915       fi
2916     fi
2917   fi
2918   AC_MSG_RESULT($enable_libstdcxx_debug$skip_debug_build)
2919   GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_DEBUG, test $enable_libstdcxx_debug = yes)
2924 dnl Check for explicit debug flags.
2926 dnl --enable-libstdcxx-debug-flags='-O1'
2927 dnl is a general method for passing flags to be used when
2928 dnl building debug libraries with --enable-libstdcxx-debug.
2930 dnl --disable-libstdcxx-debug-flags does nothing.
2931 dnl  +  Usage:  GLIBCXX_ENABLE_DEBUG_FLAGS(default flags)
2932 dnl       If "default flags" is an empty string, the effect is the same
2933 dnl       as --disable or --enable=no.
2935 AC_DEFUN([GLIBCXX_ENABLE_DEBUG_FLAGS], [
2936   GLIBCXX_ENABLE(libstdcxx-debug-flags,[$1],[=FLAGS],
2937     [pass compiler FLAGS when building debug library],
2938     [case "x$enable_libstdcxx_debug_flags" in
2939       xno | x)    enable_libstdcxx_debug_flags= ;;
2940       x-*)        ;;
2941       *)          AC_MSG_ERROR(_g_switch needs compiler flags as arguments) ;;
2942      esac])
2944   # Option parsed, now set things appropriately
2945   DEBUG_FLAGS="$enable_libstdcxx_debug_flags"
2946   AC_SUBST(DEBUG_FLAGS)
2948   AC_MSG_NOTICE([Debug build flags set to $DEBUG_FLAGS])
2953 dnl Check if the user only wants a freestanding library implementation.
2955 dnl --disable-hosted-libstdcxx will turn off most of the library build,
2956 dnl installing only the headers required by [17.4.1.3] and the language
2957 dnl support library.  More than that will be built (to keep the Makefiles
2958 dnl conveniently clean), but not installed.
2960 dnl Sets:
2961 dnl  is_hosted  (yes/no)
2963 dnl Defines:
2964 dnl  _GLIBCXX_HOSTED   (always defined, either to 1 or 0)
2966 AC_DEFUN([GLIBCXX_ENABLE_HOSTED], [
2967   AC_ARG_ENABLE([hosted-libstdcxx],
2968     AC_HELP_STRING([--disable-hosted-libstdcxx],
2969                    [only build freestanding C++ runtime support]),,
2970     [case "$host" in
2971         arm*-*-symbianelf*)
2972             enable_hosted_libstdcxx=no
2973             ;;
2974         *)
2975             enable_hosted_libstdcxx=yes
2976             ;;
2977      esac])
2978   if test "$enable_hosted_libstdcxx" = no; then
2979     AC_MSG_NOTICE([Only freestanding libraries will be built])
2980     is_hosted=no
2981     hosted_define=0
2982     enable_abi_check=no
2983     enable_libstdcxx_pch=no
2984   else
2985     is_hosted=yes
2986     hosted_define=1
2987   fi
2988   GLIBCXX_CONDITIONAL(GLIBCXX_HOSTED, test $is_hosted = yes)
2989   AC_DEFINE_UNQUOTED(_GLIBCXX_HOSTED, $hosted_define,
2990     [Define to 1 if a full hosted library is built, or 0 if freestanding.])
2995 dnl Check if the user wants a non-verbose library implementation.
2997 dnl --disable-libstdcxx-verbose will turn off descriptive messages to
2998 dnl standard error on termination.
3000 dnl Defines:
3001 dnl  _GLIBCXX_VERBOSE (always defined, either to 1 or 0)
3003 AC_DEFUN([GLIBCXX_ENABLE_VERBOSE], [
3004   AC_ARG_ENABLE([libstdcxx-verbose],
3005     AC_HELP_STRING([--disable-libstdcxx-verbose],
3006                    [disable termination messages to standard error]),,
3007                    [enable_libstdcxx_verbose=yes])
3008   if test x"$enable_libstdcxx_verbose" = xyes; then
3009     verbose_define=1
3010   else
3011     AC_MSG_NOTICE([verbose termination messages are disabled])
3012     verbose_define=0
3013   fi
3014   AC_DEFINE_UNQUOTED(_GLIBCXX_VERBOSE, $verbose_define,
3015     [Define to 1 if a verbose library is built, or 0 otherwise.])
3020 dnl Check for template specializations for the 'long long' type.
3021 dnl The result determines only whether 'long long' I/O is enabled; things
3022 dnl like numeric_limits<> specializations are always available.
3024 dnl --enable-long-long defines _GLIBCXX_USE_LONG_LONG
3025 dnl --disable-long-long leaves _GLIBCXX_USE_LONG_LONG undefined
3026 dnl  +  Usage:  GLIBCXX_ENABLE_LONG_LONG[(DEFAULT)]
3027 dnl       Where DEFAULT is either `yes' or `no'.
3029 AC_DEFUN([GLIBCXX_ENABLE_LONG_LONG], [
3030   GLIBCXX_ENABLE(long-long,$1,,[enable template specializations for 'long long'])
3031   if test $enable_long_long = yes; then
3032     AC_DEFINE(_GLIBCXX_USE_LONG_LONG, 1,
3033               [Define if code specialized for long long should be used.])
3034   fi
3035   AC_MSG_CHECKING([for enabled long long specializations])
3036   AC_MSG_RESULT([$enable_long_long])
3041 dnl Check for decimal floating point.
3042 dnl See:
3043 dnl http://gcc.gnu.org/onlinedocs/gcc/Decimal-Float.html#Decimal-Float
3045 dnl This checks to see if the host supports decimal floating point types.
3047 dnl Defines:
3048 dnl  _GLIBCXX_USE_DECIMAL_FLOAT
3050 AC_DEFUN([GLIBCXX_ENABLE_DECIMAL_FLOAT], [
3052   # Fake what AC_TRY_COMPILE does, without linking as this is
3053   # unnecessary for this test.
3055     cat > conftest.$ac_ext << EOF
3056 [#]line __oline__ "configure"
3057 int main()
3059   _Decimal32 d1;
3060   _Decimal64 d2;
3061   _Decimal128 d3;
3062   return 0;
3066     AC_MSG_CHECKING([for ISO/IEC TR 24733 ])
3067     if AC_TRY_EVAL(ac_compile); then
3068       AC_DEFINE(_GLIBCXX_USE_DECIMAL_FLOAT, 1,
3069       [Define if ISO/IEC TR 24733 decimal floating point types are supported on this host.])
3070       enable_dfp=yes
3071     else
3072       enable_dfp=no
3073     fi
3074     AC_MSG_RESULT($enable_dfp)
3075     rm -f conftest*
3079 dnl Check for GNU 128-bit integer and floating point types.
3081 dnl Note: also checks that the types aren't standard types.
3083 dnl Defines:
3084 dnl  _GLIBCXX_USE_INT128
3085 dnl  ENABLE_FLOAT128
3087 AC_DEFUN([GLIBCXX_ENABLE_INT128_FLOAT128], [
3089   AC_LANG_SAVE
3090   AC_LANG_CPLUSPLUS
3092   # Fake what AC_TRY_COMPILE does, without linking as this is
3093   # unnecessary for this test.
3095     cat > conftest.$ac_ext << EOF
3096 [#]line __oline__ "configure"
3097 template<typename T1, typename T2>
3098   struct same
3099   { typedef T2 type; };
3101 template<typename T>
3102   struct same<T, T>;
3104 int main()
3106   typename same<long, __int128>::type                i1;
3107   typename same<long long, __int128>::type           i2;
3111     AC_MSG_CHECKING([for __int128])
3112     if AC_TRY_EVAL(ac_compile); then
3113       AC_DEFINE(_GLIBCXX_USE_INT128, 1,
3114       [Define if __int128 is supported on this host.])
3115       enable_int128=yes
3116     else
3117       enable_int128=no
3118     fi
3119     AC_MSG_RESULT($enable_int128)
3120     rm -f conftest*
3122     cat > conftest.$ac_ext << EOF
3123 [#]line __oline__ "configure"
3124 template<typename T1, typename T2>
3125   struct same
3126   { typedef T2 type; };
3128 template<typename T>
3129   struct same<T, T>;
3131 int main()
3133   typename same<double, __float128>::type      f1;
3134   typename same<long double, __float128>::type f2;
3138     AC_MSG_CHECKING([for __float128])
3139     if AC_TRY_EVAL(ac_compile); then
3140       enable_float128=yes
3141     else
3142       enable_float128=no
3143     fi
3144     AC_MSG_RESULT($enable_float128)
3145     GLIBCXX_CONDITIONAL(ENABLE_FLOAT128, test $enable_float128 = yes)
3146     rm -f conftest*
3148   AC_LANG_RESTORE
3152 dnl Check for template specializations for the 'wchar_t' type.
3154 dnl --enable-wchar_t defines _GLIBCXX_USE_WCHAR_T
3155 dnl --disable-wchar_t leaves _GLIBCXX_USE_WCHAR_T undefined
3156 dnl  +  Usage:  GLIBCXX_ENABLE_WCHAR_T[(DEFAULT)]
3157 dnl       Where DEFAULT is either `yes' or `no'.
3159 dnl Necessary support must also be present.
3161 AC_DEFUN([GLIBCXX_ENABLE_WCHAR_T], [
3162   GLIBCXX_ENABLE(wchar_t,$1,,[enable template specializations for 'wchar_t'])
3164   # Test wchar.h for mbstate_t, which is needed for char_traits and fpos.
3165   AC_CHECK_HEADERS(wchar.h, ac_has_wchar_h=yes, ac_has_wchar_h=no)
3166   AC_MSG_CHECKING([for mbstate_t])
3167   AC_TRY_COMPILE([#include <wchar.h>],
3168   [mbstate_t teststate;],
3169   have_mbstate_t=yes, have_mbstate_t=no)
3170   AC_MSG_RESULT($have_mbstate_t)
3171   if test x"$have_mbstate_t" = xyes; then
3172     AC_DEFINE(HAVE_MBSTATE_T,1,[Define if mbstate_t exists in wchar.h.])
3173   fi
3175   # Test it always, for use in GLIBCXX_ENABLE_C99, together with
3176   # ac_has_wchar_h.
3177   AC_CHECK_HEADERS(wctype.h, ac_has_wctype_h=yes, ac_has_wctype_h=no)
3179   if test x"$enable_wchar_t" = x"yes"; then
3181     AC_LANG_SAVE
3182     AC_LANG_CPLUSPLUS
3184     if test x"$ac_has_wchar_h" = xyes &&
3185        test x"$ac_has_wctype_h" = xyes; then
3186       AC_TRY_COMPILE([#include <wchar.h>
3187                       #include <stddef.h>
3188                       wint_t i;
3189                       long l = WEOF;
3190                       long j = WCHAR_MIN;
3191                       long k = WCHAR_MAX;
3192                       namespace test
3193                       {
3194                         using ::btowc;
3195                         using ::fgetwc;
3196                         using ::fgetws;
3197                         using ::fputwc;
3198                         using ::fputws;
3199                         using ::fwide;
3200                         using ::fwprintf;
3201                         using ::fwscanf;
3202                         using ::getwc;
3203                         using ::getwchar;
3204                         using ::mbrlen;
3205                         using ::mbrtowc;
3206                         using ::mbsinit;
3207                         using ::mbsrtowcs;
3208                         using ::putwc;
3209                         using ::putwchar;
3210                         using ::swprintf;
3211                         using ::swscanf;
3212                         using ::ungetwc;
3213                         using ::vfwprintf;
3214                         using ::vswprintf;
3215                         using ::vwprintf;
3216                         using ::wcrtomb;
3217                         using ::wcscat;
3218                         using ::wcschr;
3219                         using ::wcscmp;
3220                         using ::wcscoll;
3221                         using ::wcscpy;
3222                         using ::wcscspn;
3223                         using ::wcsftime;
3224                         using ::wcslen;
3225                         using ::wcsncat;
3226                         using ::wcsncmp;
3227                         using ::wcsncpy;
3228                         using ::wcspbrk;
3229                         using ::wcsrchr;
3230                         using ::wcsrtombs;
3231                         using ::wcsspn;
3232                         using ::wcsstr;
3233                         using ::wcstod;
3234                         using ::wcstok;
3235                         using ::wcstol;
3236                         using ::wcstoul;
3237                         using ::wcsxfrm;
3238                         using ::wctob;
3239                         using ::wmemchr;
3240                         using ::wmemcmp;
3241                         using ::wmemcpy;
3242                         using ::wmemmove;
3243                         using ::wmemset;
3244                         using ::wprintf;
3245                         using ::wscanf;
3246                       }
3247                      ],[],[], [enable_wchar_t=no])
3248     else
3249       enable_wchar_t=no
3250     fi
3252     AC_LANG_RESTORE
3253   fi
3255   if test x"$enable_wchar_t" = x"yes"; then
3256     AC_DEFINE(_GLIBCXX_USE_WCHAR_T, 1,
3257               [Define if code specialized for wchar_t should be used.])
3258   fi
3260   AC_MSG_CHECKING([for enabled wchar_t specializations])
3261   AC_MSG_RESULT([$enable_wchar_t])
3266 dnl Check to see if building and using a C++ precompiled header can be done.
3268 dnl --enable-libstdcxx-pch=yes
3269 dnl default, this shows intent to use stdc++.h.gch If it looks like it
3270 dnl may work, after some light-hearted attempts to puzzle out compiler
3271 dnl support, flip bits on in include/Makefile.am
3273 dnl --disable-libstdcxx-pch
3274 dnl turns off attempts to use or build stdc++.h.gch.
3276 dnl Substs:
3277 dnl  glibcxx_PCHFLAGS
3279 AC_DEFUN([GLIBCXX_ENABLE_PCH], [
3280   GLIBCXX_ENABLE(libstdcxx-pch,$1,,[build pre-compiled libstdc++ headers])
3281   if test $enable_libstdcxx_pch = yes; then
3282     AC_CACHE_CHECK([for compiler with PCH support],
3283       [glibcxx_cv_prog_CXX_pch],
3284       [ac_save_CXXFLAGS="$CXXFLAGS"
3285        CXXFLAGS="$CXXFLAGS -Werror -Winvalid-pch -Wno-deprecated"
3286        AC_LANG_SAVE
3287        AC_LANG_CPLUSPLUS
3288        echo '#include <math.h>' > conftest.h
3289        if $CXX $CXXFLAGS $CPPFLAGS -x c++-header conftest.h \
3290                           -o conftest.h.gch 1>&5 2>&1 &&
3291                 echo '#error "pch failed"' > conftest.h &&
3292           echo '#include "conftest.h"' > conftest.cc &&
3293                $CXX -c $CXXFLAGS $CPPFLAGS conftest.cc 1>&5 2>&1 ;
3294        then
3295          glibcxx_cv_prog_CXX_pch=yes
3296        else
3297          glibcxx_cv_prog_CXX_pch=no
3298        fi
3299        rm -f conftest*
3300        CXXFLAGS=$ac_save_CXXFLAGS
3301        AC_LANG_RESTORE
3302       ])
3303     enable_libstdcxx_pch=$glibcxx_cv_prog_CXX_pch
3304   fi
3306   AC_MSG_CHECKING([for enabled PCH])
3307   AC_MSG_RESULT([$enable_libstdcxx_pch])
3309   GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_PCH, test $enable_libstdcxx_pch = yes)
3310   if test $enable_libstdcxx_pch = yes; then
3311     glibcxx_PCHFLAGS="-include bits/stdc++.h"
3312   else
3313     glibcxx_PCHFLAGS=""
3314   fi
3315   AC_SUBST(glibcxx_PCHFLAGS)
3320 dnl Check for atomic builtins.
3321 dnl See:
3322 dnl http://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html
3324 dnl This checks to see if the host supports the compiler-generated
3325 dnl builtins for atomic operations for various integral sizes. Note, this
3326 dnl is intended to be an all-or-nothing switch, so all the atomic operations
3327 dnl that are used should be checked.
3329 dnl Note:
3330 dnl libgomp and libgfortran use a link test, see CHECK_SYNC_FETCH_AND_ADD.
3332 AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS], [
3333   AC_LANG_SAVE
3334   AC_LANG_CPLUSPLUS
3335   old_CXXFLAGS="$CXXFLAGS"
3337   # Do link tests if possible, instead asm tests, limited to some platforms
3338   # see discussion in PR target/40134, PR libstdc++/40133 and the thread
3339   # starting at http://gcc.gnu.org/ml/gcc-patches/2009-07/msg00322.html
3340   atomic_builtins_link_tests=no
3341   if test x$gcc_no_link != xyes; then
3342     # Can do link tests. Limit to some tested platforms
3343     case "$host" in
3344       *-*-linux* | *-*-uclinux* | *-*-kfreebsd*-gnu | *-*-gnu*)
3345         atomic_builtins_link_tests=yes
3346         ;;
3347     esac
3348   fi
3350   if test x$atomic_builtins_link_tests = xyes; then
3352   # Do link tests.
3354   CXXFLAGS="$CXXFLAGS -fno-exceptions"
3356   AC_MSG_CHECKING([for atomic builtins for bool])
3357   AC_CACHE_VAL(glibcxx_cv_atomic_bool, [
3358     AC_TRY_LINK(
3359       [ ],
3360       [typedef bool atomic_type;
3361        atomic_type c1;
3362        atomic_type c2;
3363        atomic_type c3(0);
3364        // N.B. __atomic_fetch_add is not supported for bool.
3365        __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
3366                                    __ATOMIC_RELAXED);
3367        __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
3368        __atomic_load_n(&c1, __ATOMIC_RELAXED);
3369       ],
3370       [glibcxx_cv_atomic_bool=yes],
3371       [glibcxx_cv_atomic_bool=no])
3372   ])
3373   AC_MSG_RESULT($glibcxx_cv_atomic_bool)
3375   AC_MSG_CHECKING([for atomic builtins for short])
3376   AC_CACHE_VAL(glibcxx_cv_atomic_short, [
3377     AC_TRY_LINK(
3378       [ ],
3379       [typedef short atomic_type;
3380        atomic_type c1;
3381        atomic_type c2;
3382        atomic_type c3(0);
3383        __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
3384        __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
3385                                    __ATOMIC_RELAXED);
3386        __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
3387        __atomic_load_n(&c1, __ATOMIC_RELAXED);
3388       ],
3389       [glibcxx_cv_atomic_short=yes],
3390       [glibcxx_cv_atomic_short=no])
3391   ])
3392   AC_MSG_RESULT($glibcxx_cv_atomic_short)
3394   AC_MSG_CHECKING([for atomic builtins for int])
3395   AC_CACHE_VAL(glibcxx_cv_atomic_int, [
3396     AC_TRY_LINK(
3397       [ ],
3398       [typedef int atomic_type;
3399        atomic_type c1;
3400        atomic_type c2;
3401        atomic_type c3(0);
3402        __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
3403        __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
3404                                    __ATOMIC_RELAXED);
3405        __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
3406        __atomic_load_n(&c1, __ATOMIC_RELAXED);
3407       ],
3408       [glibcxx_cv_atomic_int=yes],
3409       [glibcxx_cv_atomic_int=no])
3410   ])
3411   AC_MSG_RESULT($glibcxx_cv_atomic_int)
3413   AC_MSG_CHECKING([for atomic builtins for long long])
3414   AC_CACHE_VAL(glibcxx_cv_atomic_long_long, [
3415     AC_TRY_LINK(
3416       [ ],
3417       [typedef long long atomic_type;
3418        atomic_type c1;
3419        atomic_type c2;
3420        atomic_type c3(0);
3421        __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
3422        __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
3423                                    __ATOMIC_RELAXED);
3424        __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
3425        __atomic_load_n(&c1, __ATOMIC_RELAXED);
3426       ],
3427       [glibcxx_cv_atomic_long_long=yes],
3428       [glibcxx_cv_atomic_long_long=no])
3429   ])
3430   AC_MSG_RESULT($glibcxx_cv_atomic_long_long)
3432   else
3434   # Do asm tests.
3436   # Compile unoptimized.
3437   CXXFLAGS='-O0 -S'
3439   # Fake what AC_TRY_COMPILE does.
3441     cat > conftest.$ac_ext << EOF
3442 [#]line __oline__ "configure"
3443 int main()
3445   typedef bool atomic_type;
3446   atomic_type c1;
3447   atomic_type c2;
3448   atomic_type c3(0);
3449   // N.B. __atomic_fetch_add is not supported for bool.
3450   __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
3451                               __ATOMIC_RELAXED);
3452   __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
3453   __atomic_load_n(&c1, __ATOMIC_RELAXED);
3455   return 0;
3459     AC_MSG_CHECKING([for atomic builtins for bool])
3460     if AC_TRY_EVAL(ac_compile); then
3461       if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
3462         glibcxx_cv_atomic_bool=no
3463       else
3464         glibcxx_cv_atomic_bool=yes
3465       fi
3466     fi
3467     AC_MSG_RESULT($glibcxx_cv_atomic_bool)
3468     rm -f conftest*
3470     cat > conftest.$ac_ext << EOF
3471 [#]line __oline__ "configure"
3472 int main()
3474   typedef short atomic_type;
3475   atomic_type c1;
3476   atomic_type c2;
3477   atomic_type c3(0);
3478   __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
3479   __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
3480                               __ATOMIC_RELAXED);
3481   __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
3482   __atomic_load_n(&c1, __ATOMIC_RELAXED);
3484   return 0;
3488     AC_MSG_CHECKING([for atomic builtins for short])
3489     if AC_TRY_EVAL(ac_compile); then
3490       if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
3491         glibcxx_cv_atomic_short=no
3492       else
3493         glibcxx_cv_atomic_short=yes
3494       fi
3495     fi
3496     AC_MSG_RESULT($glibcxx_cv_atomic_short)
3497     rm -f conftest*
3499     cat > conftest.$ac_ext << EOF
3500 [#]line __oline__ "configure"
3501 int main()
3503   // NB: _Atomic_word not necessarily int.
3504   typedef int atomic_type;
3505   atomic_type c1;
3506   atomic_type c2;
3507   atomic_type c3(0);
3508   __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
3509   __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
3510                               __ATOMIC_RELAXED);
3511   __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
3512   __atomic_load_n(&c1, __ATOMIC_RELAXED);
3514   return 0;
3518     AC_MSG_CHECKING([for atomic builtins for int])
3519     if AC_TRY_EVAL(ac_compile); then
3520       if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
3521         glibcxx_cv_atomic_int=no
3522       else
3523         glibcxx_cv_atomic_int=yes
3524       fi
3525     fi
3526     AC_MSG_RESULT($glibcxx_cv_atomic_int)
3527     rm -f conftest*
3529     cat > conftest.$ac_ext << EOF
3530 [#]line __oline__ "configure"
3531 int main()
3533   typedef long long atomic_type;
3534   atomic_type c1;
3535   atomic_type c2;
3536   atomic_type c3(0);
3537   __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
3538   __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
3539                               __ATOMIC_RELAXED);
3540   __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
3541   __atomic_load_n(&c1, __ATOMIC_RELAXED);
3543   return 0;
3547     AC_MSG_CHECKING([for atomic builtins for long long])
3548     if AC_TRY_EVAL(ac_compile); then
3549       if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
3550         glibcxx_cv_atomic_long_long=no
3551       else
3552         glibcxx_cv_atomic_long_long=yes
3553       fi
3554     fi
3555     AC_MSG_RESULT($glibcxx_cv_atomic_long_long)
3556     rm -f conftest*
3558   fi
3560   CXXFLAGS="$old_CXXFLAGS"
3561   AC_LANG_RESTORE
3563   # Set atomicity_dir to builtins if all but the long long test above passes,
3564   # or if the builtins were already chosen (e.g. by configure.host).
3565   if { test "$glibcxx_cv_atomic_bool" = yes \
3566      && test "$glibcxx_cv_atomic_short" = yes \
3567      && test "$glibcxx_cv_atomic_int" = yes; } \
3568      || test "$atomicity_dir" = "cpu/generic/atomicity_builtins"; then
3569     AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS, 1,
3570     [Define if the compiler supports C++11 atomics.])
3571     atomicity_dir=cpu/generic/atomicity_builtins
3572   fi
3574   # If still generic, set to mutex.
3575   if test $atomicity_dir = "cpu/generic" ; then
3576     atomicity_dir=cpu/generic/atomicity_mutex
3577     AC_MSG_WARN([No native atomic operations are provided for this platform.])
3578       if test "x$target_thread_file" = xsingle; then
3579         AC_MSG_WARN([They cannot be faked when thread support is disabled.])
3580         AC_MSG_WARN([Thread-safety of certain classes is not guaranteed.])
3581       else
3582         AC_MSG_WARN([They will be faked using a mutex.])
3583         AC_MSG_WARN([Performance of certain classes will degrade as a result.])
3584       fi
3585   fi
3590 dnl Set default lock policy for synchronizing shared_ptr reference counting.
3592 dnl --with-libstdcxx-lock-policy=auto
3593 dnl     Use atomic operations for shared_ptr reference counting only if
3594 dnl     the default target supports atomic compare-and-swap.
3595 dnl --with-libstdcxx-lock-policy=atomic
3596 dnl     Use atomic operations for shared_ptr reference counting.
3597 dnl --with-libstdcxx-lock-policy=mutex
3598 dnl     Use a mutex to synchronize shared_ptr reference counting.
3600 dnl This controls the value of __gnu_cxx::__default_lock_policy, which
3601 dnl determines how shared_ptr reference counts are synchronized.
3602 dnl The option "atomic" means that atomic operations should be used,
3603 dnl "mutex" means that a mutex will be used. The default option, "auto",
3604 dnl will check if the target supports the compiler-generated builtins
3605 dnl for atomic compare-and-swap operations for 2-byte and 4-byte integers,
3606 dnl and will use "atomic" if supported, "mutex" otherwise.
3607 dnl This option is ignored if the thread model used by GCC is "single",
3608 dnl as no synchronization is used at all in that case.
3609 dnl This option affects the library ABI (except in the "single" thread model).
3611 dnl Defines _GLIBCXX_HAVE_ATOMIC_LOCK_POLICY to 1 if atomics should be used.
3613 AC_DEFUN([GLIBCXX_ENABLE_LOCK_POLICY], [
3615   AC_ARG_WITH([libstdcxx-lock-policy],
3616     AC_HELP_STRING([--with-libstdcxx-lock-policy={atomic,mutex,auto}],
3617       [synchronization policy for shared_ptr reference counting [default=auto]]),
3618               [libstdcxx_atomic_lock_policy=$withval],
3619               [libstdcxx_atomic_lock_policy=auto])
3621   case "$libstdcxx_atomic_lock_policy" in
3622     atomic|mutex|auto) ;;
3623     *) AC_MSG_ERROR([Invalid argument for --with-libstdcxx-lock-policy]) ;;
3624   esac
3625   AC_MSG_CHECKING([for lock policy for shared_ptr reference counts])
3627   if test x"$libstdcxx_atomic_lock_policy" = x"auto"; then
3628     AC_LANG_SAVE
3629     AC_LANG_CPLUSPLUS
3630     ac_save_CXXFLAGS="$CXXFLAGS"
3632     dnl Why do we care about 2-byte CAS on targets with 4-byte _Atomic_word?!
3633     AC_TRY_COMPILE([
3634     #if ! defined __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2
3635     # error "No 2-byte compare-and-swap"
3636     #elif ! defined __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4
3637     # error "No 4-byte compare-and-swap"
3638     #endif
3639     ],,
3640     [libstdcxx_atomic_lock_policy=atomic],
3641     [libstdcxx_atomic_lock_policy=mutex])
3642     AC_LANG_RESTORE
3643     CXXFLAGS="$ac_save_CXXFLAGS"
3644   fi
3646   if test x"$libstdcxx_atomic_lock_policy" = x"atomic"; then
3647     AC_MSG_RESULT(atomic)
3648     AC_DEFINE(HAVE_ATOMIC_LOCK_POLICY,1,
3649       [Defined if shared_ptr reference counting should use atomic operations.])
3650   else
3651     AC_MSG_RESULT(mutex)
3652   fi
3657 dnl Allow visibility attributes to be used on namespaces, objects, etc.
3659 dnl --enable-libstdcxx-visibility enables attempt to use visibility attributes.
3660 dnl --disable-libstdcxx-visibility turns off all use of visibility attributes.
3661 dnl  +  Usage:  GLIBCXX_ENABLE_LIBSTDCXX_VISIBILITY[(DEFAULT)]
3662 dnl       Where DEFAULT is 'yes'.
3664 AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_VISIBILITY], [
3665 GLIBCXX_ENABLE(libstdcxx-visibility,$1,,[enables visibility safe usage])
3667 if test x$enable_libstdcxx_visibility = xyes ; then
3668   dnl all hail libgfortran
3669   dnl Check whether the target supports hidden visibility.
3670   AC_CACHE_CHECK([whether the target supports hidden visibility],
3671                  glibcxx_cv_have_attribute_visibility, [
3672   save_CFLAGS="$CFLAGS"
3673   CFLAGS="$CFLAGS -Werror"
3674   AC_TRY_COMPILE([void __attribute__((visibility("hidden"))) foo(void) { }],
3675                  [], glibcxx_cv_have_attribute_visibility=yes,
3676                  glibcxx_cv_have_attribute_visibility=no)
3677   CFLAGS="$save_CFLAGS"])
3678   if test $glibcxx_cv_have_attribute_visibility = no; then
3679     enable_libstdcxx_visibility=no
3680   fi
3683 GLIBCXX_CONDITIONAL(ENABLE_VISIBILITY, test $enable_libstdcxx_visibility = yes)
3684 AC_MSG_NOTICE([visibility supported: $enable_libstdcxx_visibility])
3689 dnl Add version tags to symbols in shared library (or not), additionally
3690 dnl marking other symbols as private/local (or not).
3692 dnl Sets libtool_VERSION, and determines shared library SONAME.
3694 dnl  This depends on GLIBCXX CHECK_LINKER_FEATURES, but without it assumes no.
3696 dnl --enable-symvers=style adds a version script to the linker call when
3697 dnl       creating the shared library.  The choice of version script is
3698 dnl       controlled by 'style'.
3699 dnl --disable-symvers does not.
3701 dnl  +  Usage:  GLIBCXX_ENABLE_SYMVERS[(DEFAULT)]
3702 dnl       Where DEFAULT is either 'yes' or 'no'.  Passing `yes' tries to
3703 dnl       choose a default style based on linker characteristics.  Passing
3704 dnl       'no' disables versioning.
3706 AC_DEFUN([GLIBCXX_ENABLE_SYMVERS], [
3708 GLIBCXX_ENABLE(symvers,$1,[[[=STYLE]]],
3709   [enables symbol versioning of the shared library],
3710   [permit yes|no|gnu|gnu-versioned-namespace|darwin|darwin-export|sun])
3712 # If we never went through the GLIBCXX_CHECK_LINKER_FEATURES macro, then we
3713 # don't know enough about $LD to do tricks...
3714 AC_REQUIRE([GLIBCXX_CHECK_LINKER_FEATURES])
3715 # Sun style symbol versions needs GNU c++filt for make_sunver.pl to work
3716 # with extern "C++" in version scripts.
3717 AC_REQUIRE([GCC_PROG_GNU_CXXFILT])
3719 # Turn a 'yes' into a suitable default.
3720 if test x$enable_symvers = xyes ; then
3721   if test $enable_shared = no || test "x$LD" = x || test x$gcc_no_link = xyes; then
3722     enable_symvers=no
3723   else
3724     if test $with_gnu_ld = yes ; then
3725       case ${target_os} in
3726         hpux*)
3727           enable_symvers=no ;;
3728         *)
3729           enable_symvers=gnu ;;
3730       esac
3731     else
3732       case ${target_os} in
3733         darwin*)
3734           enable_symvers=darwin ;;
3735         # Sun symbol versioning exists since Solaris 2.5.
3736         solaris2.[[5-9]]* | solaris2.1[[0-9]]*)
3737           # make_sunver.pl needs GNU c++filt to support extern "C++" in
3738           # version scripts, so disable symbol versioning if none can be
3739           # found.
3740           if test -z "$ac_cv_path_CXXFILT"; then
3741             AC_MSG_WARN([=== You have requested Sun symbol versioning, but])
3742             AC_MSG_WARN([=== no GNU c++filt could  be found.])
3743             AC_MSG_WARN([=== Symbol versioning will be disabled.])
3744             enable_symvers=no
3745           else
3746             enable_symvers=sun
3747           fi
3748           ;;
3749         *)
3750           enable_symvers=no ;;
3751       esac
3752     fi
3753   fi
3756 # Check to see if 'darwin' or 'darwin-export' can win.
3757 if test x$enable_symvers = xdarwin-export ; then
3758     enable_symvers=darwin
3761 # Check if 'sun' was requested on non-Solaris 2 platforms.
3762 if test x$enable_symvers = xsun ; then
3763   case ${target_os} in
3764     solaris2*)
3765       # All fine.
3766       ;;
3767     *)
3768       # Unlikely to work.
3769       AC_MSG_WARN([=== You have requested Sun symbol versioning, but])
3770       AC_MSG_WARN([=== you are not targetting Solaris 2.])
3771       AC_MSG_WARN([=== Symbol versioning will be disabled.])
3772       enable_symvers=no
3773       ;;
3774   esac
3777 # Check to see if 'gnu' can win.
3778 if test $enable_symvers = gnu ||
3779   test $enable_symvers = gnu-versioned-namespace ||
3780   test $enable_symvers = sun; then
3781   # Check to see if libgcc_s exists, indicating that shared libgcc is possible.
3782   AC_MSG_CHECKING([for shared libgcc])
3783   ac_save_CFLAGS="$CFLAGS"
3784   CFLAGS=' -lgcc_s'
3785   AC_TRY_LINK(, [return 0;], glibcxx_shared_libgcc=yes, glibcxx_shared_libgcc=no)
3786   CFLAGS="$ac_save_CFLAGS"
3787   if test $glibcxx_shared_libgcc = no; then
3788     cat > conftest.c <<EOF
3789 int main (void) { return 0; }
3791 changequote(,)dnl
3792     glibcxx_libgcc_s_suffix=`${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
3793                              -shared -shared-libgcc -o conftest.so \
3794                              conftest.c -v 2>&1 >/dev/null \
3795                              | sed -n 's/^.* -lgcc_s\([^ ]*\) .*$/\1/p'`
3796 changequote([,])dnl
3797     rm -f conftest.c conftest.so
3798     if test x${glibcxx_libgcc_s_suffix+set} = xset; then
3799       CFLAGS=" -lgcc_s$glibcxx_libgcc_s_suffix"
3800       AC_TRY_LINK(, [return 0;], glibcxx_shared_libgcc=yes)
3801       CFLAGS="$ac_save_CFLAGS"
3802     fi
3803   fi
3804   AC_MSG_RESULT($glibcxx_shared_libgcc)
3806   # For GNU ld, we need at least this version.  The format is described in
3807   # GLIBCXX_CHECK_LINKER_FEATURES above.
3808   glibcxx_min_gnu_ld_version=21400
3810   # If no shared libgcc, can't win.
3811   if test $glibcxx_shared_libgcc != yes; then
3812       AC_MSG_WARN([=== You have requested GNU symbol versioning, but])
3813       AC_MSG_WARN([=== you are not building a shared libgcc_s.])
3814       AC_MSG_WARN([=== Symbol versioning will be disabled.])
3815       enable_symvers=no
3816   elif test $with_gnu_ld != yes && test $enable_symvers = sun; then
3817     : All interesting versions of Sun ld support sun style symbol versioning.
3818   elif test $with_gnu_ld != yes ; then
3819     # just fail for now
3820     AC_MSG_WARN([=== You have requested GNU symbol versioning, but])
3821     AC_MSG_WARN([=== you are not using the GNU linker.])
3822     AC_MSG_WARN([=== Symbol versioning will be disabled.])
3823     enable_symvers=no
3824   elif test $glibcxx_ld_is_gold = yes ; then
3825     : All versions of gold support symbol versioning.
3826   elif test $glibcxx_gnu_ld_version -lt $glibcxx_min_gnu_ld_version ; then
3827     # The right tools, the right setup, but too old.  Fallbacks?
3828     AC_MSG_WARN(=== Linker version $glibcxx_gnu_ld_version is too old for)
3829     AC_MSG_WARN(=== full symbol versioning support in this release of GCC.)
3830     AC_MSG_WARN(=== You would need to upgrade your binutils to version)
3831     AC_MSG_WARN(=== $glibcxx_min_gnu_ld_version or later and rebuild GCC.)
3832     AC_MSG_WARN([=== Symbol versioning will be disabled.])
3833     enable_symvers=no
3834   fi
3837 # For libtool versioning info, format is CURRENT:REVISION:AGE
3838 libtool_VERSION=6:28:0
3840 # Everything parsed; figure out what files and settings to use.
3841 case $enable_symvers in
3842   no)
3843     SYMVER_FILE=config/abi/pre/none.ver
3844     ;;
3845   gnu)
3846     SYMVER_FILE=config/abi/pre/gnu.ver
3847     AC_DEFINE(_GLIBCXX_SYMVER_GNU, 1,
3848               [Define to use GNU versioning in the shared library.])
3849     ;;
3850   gnu-versioned-namespace)
3851     libtool_VERSION=8:0:0
3852     SYMVER_FILE=config/abi/pre/gnu-versioned-namespace.ver
3853     AC_DEFINE(_GLIBCXX_SYMVER_GNU_NAMESPACE, 1,
3854               [Define to use GNU namespace versioning in the shared library.])
3855     ;;
3856   darwin)
3857     SYMVER_FILE=config/abi/pre/gnu.ver
3858     AC_DEFINE(_GLIBCXX_SYMVER_DARWIN, 1,
3859               [Define to use darwin versioning in the shared library.])
3860     ;;
3861   sun)
3862     SYMVER_FILE=config/abi/pre/gnu.ver
3863     AC_DEFINE(_GLIBCXX_SYMVER_SUN, 1,
3864               [Define to use Sun versioning in the shared library.])
3865     ;;
3866 esac
3868 if test x$enable_symvers != xno ; then
3869   AC_DEFINE(_GLIBCXX_SYMVER, 1,
3870          [Define to use symbol versioning in the shared library.])
3873 AC_CACHE_CHECK([whether the target supports .symver directive],
3874                glibcxx_cv_have_as_symver_directive, [
3875   AC_TRY_COMPILE([void foo (void); __asm (".symver foo, bar@SYMVER");],
3876                  [], glibcxx_cv_have_as_symver_directive=yes,
3877                  glibcxx_cv_have_as_symver_directive=no)])
3878 if test $glibcxx_cv_have_as_symver_directive = yes; then
3879   AC_DEFINE(HAVE_AS_SYMVER_DIRECTIVE, 1,
3880     [Define to 1 if the target assembler supports .symver directive.])
3883 AC_SUBST(SYMVER_FILE)
3884 AC_SUBST(port_specific_symbol_files)
3885 GLIBCXX_CONDITIONAL(ENABLE_SYMVERS, test $enable_symvers != no)
3886 GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_GNU, test $enable_symvers = gnu)
3887 GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_GNU_NAMESPACE, test $enable_symvers = gnu-versioned-namespace)
3888 GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_DARWIN, test $enable_symvers = darwin)
3889 GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_SUN, test $enable_symvers = sun)
3890 AC_MSG_NOTICE(versioning on shared library symbols is $enable_symvers)
3892 if test $enable_symvers != no ; then
3893    case ${target_os} in
3894      # The Solaris 2 runtime linker doesn't support the GNU extension of
3895      # binding the same symbol to different versions
3896      solaris2*)
3897        ;;
3898      # Other platforms with GNU symbol versioning (GNU/Linux, more?) do.
3899      *)
3900        AC_DEFINE(HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT, 1,
3901          [Define to 1 if the target runtime linker supports binding the same symbol to different versions.])
3902        ;;
3903     esac
3906 # Now, set up compatibility support, if any.
3907 # In addition, need this to deal with std::size_t mangling in
3908 # src/compatibility.cc.  In a perfect world, could use
3909 # typeid(std::size_t).name()[0] to do direct substitution.
3910 AC_MSG_CHECKING([for size_t as unsigned int])
3911 ac_save_CFLAGS="$CFLAGS"
3912 CFLAGS="-Werror"
3913 AC_TRY_COMPILE(, [__SIZE_TYPE__* stp; unsigned int* uip; stp = uip;],
3914                  [glibcxx_size_t_is_i=yes], [glibcxx_size_t_is_i=no])
3915 CFLAGS=$ac_save_CFLAGS
3916 if test "$glibcxx_size_t_is_i" = yes; then
3917   AC_DEFINE(_GLIBCXX_SIZE_T_IS_UINT, 1, [Define if size_t is unsigned int.])
3919 AC_MSG_RESULT([$glibcxx_size_t_is_i])
3921 AC_MSG_CHECKING([for ptrdiff_t as int])
3922 ac_save_CFLAGS="$CFLAGS"
3923 CFLAGS="-Werror"
3924 AC_TRY_COMPILE(, [__PTRDIFF_TYPE__* ptp; int* ip; ptp = ip;],
3925                  [glibcxx_ptrdiff_t_is_i=yes], [glibcxx_ptrdiff_t_is_i=no])
3926 CFLAGS=$ac_save_CFLAGS
3927 if test "$glibcxx_ptrdiff_t_is_i" = yes; then
3928   AC_DEFINE(_GLIBCXX_PTRDIFF_T_IS_INT, 1, [Define if ptrdiff_t is int.])
3930 AC_MSG_RESULT([$glibcxx_ptrdiff_t_is_i])
3935 dnl Setup to use the gcc gthr.h thread-specific memory and mutex model.
3936 dnl We must stage the required headers so that they will be installed
3937 dnl with the library (unlike libgcc, the STL implementation is provided
3938 dnl solely within headers).  Since we must not inject random user-space
3939 dnl macro names into user-provided C++ code, we first stage into <file>-in
3940 dnl and process to <file> with an output command.  The reason for a two-
3941 dnl stage process here is to correctly handle $srcdir!=$objdir without
3942 dnl having to write complex code (the sed commands to clean the macro
3943 dnl namespace are complex and fragile enough as it is).  We must also
3944 dnl add a relative path so that -I- is supported properly.
3946 dnl Substs:
3947 dnl  thread_header
3949 AC_DEFUN([GLIBCXX_ENABLE_THREADS], [
3950   AC_MSG_CHECKING([for thread model used by GCC])
3951   target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
3952   AC_MSG_RESULT([$target_thread_file])
3953   GCC_AC_THREAD_HEADER([$target_thread_file])
3958 dnl Check if gthread implementation defines the types and functions
3959 dnl required by the c++0x thread library.  Conforming gthread
3960 dnl implementations can define __GTHREADS_CXX0X to enable use with c++0x.
3962 dnl GLIBCXX_ENABLE_SYMVERS must be done before this.
3964 AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [
3965   GLIBCXX_ENABLE(libstdcxx-threads,auto,,[enable C++11 threads support])
3967   if test x$enable_libstdcxx_threads = xauto || 
3968      test x$enable_libstdcxx_threads = xyes; then
3970   AC_LANG_SAVE
3971   AC_LANG_CPLUSPLUS
3973   ac_save_CXXFLAGS="$CXXFLAGS"
3974   CXXFLAGS="$CXXFLAGS -fno-exceptions \
3975         -I${toplevel_srcdir}/libgcc -I${toplevel_builddir}/libgcc"
3977   target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
3978   case $target_thread_file in
3979     posix)
3980       CXXFLAGS="$CXXFLAGS -DSUPPORTS_WEAK -DGTHREAD_USE_WEAK -D_PTHREADS"
3981   esac
3983   AC_MSG_CHECKING([whether it can be safely assumed that mutex_timedlock is available])
3985   AC_TRY_COMPILE([#include <unistd.h>],
3986     [
3987       // In case of POSIX threads check _POSIX_TIMEOUTS.
3988       #if (defined(_PTHREADS) \
3989           && (!defined(_POSIX_TIMEOUTS) || _POSIX_TIMEOUTS <= 0))
3990       #error
3991       #endif
3992     ], [ac_gthread_use_mutex_timedlock=1], [ac_gthread_use_mutex_timedlock=0])
3994   AC_DEFINE_UNQUOTED(_GTHREAD_USE_MUTEX_TIMEDLOCK, $ac_gthread_use_mutex_timedlock,
3995                      [Define to 1 if mutex_timedlock is available.])
3997   if test $ac_gthread_use_mutex_timedlock = 1 ; then res_mutex_timedlock=yes ;
3998   else res_mutex_timedlock=no ; fi
3999   AC_MSG_RESULT([$res_mutex_timedlock])
4001   AC_MSG_CHECKING([for gthreads library])
4003   AC_TRY_COMPILE([#include "gthr.h"],
4004     [
4005       #ifndef __GTHREADS_CXX0X
4006       #error
4007       #endif
4008     ], [ac_has_gthreads=yes], [ac_has_gthreads=no])
4009   else
4010     ac_has_gthreads=no
4011   fi
4013   AC_MSG_RESULT([$ac_has_gthreads])
4015   if test x"$ac_has_gthreads" = x"yes"; then
4016     AC_DEFINE(_GLIBCXX_HAS_GTHREADS, 1,
4017               [Define if gthreads library is available.])
4019     # Also check for pthread_rwlock_t for std::shared_timed_mutex in C++14
4020     AC_CHECK_TYPE([pthread_rwlock_t],
4021             [AC_DEFINE([_GLIBCXX_USE_PTHREAD_RWLOCK_T], 1,
4022             [Define if POSIX read/write locks are available in <gthr.h>.])],
4023             [],
4024             [#include "gthr.h"])
4025   fi
4027   CXXFLAGS="$ac_save_CXXFLAGS"
4028   AC_LANG_RESTORE
4032 # Check whether LC_MESSAGES is available in <locale.h>.
4033 # Ulrich Drepper <drepper@cygnus.com>, 1995.
4035 # This file file be copied and used freely without restrictions.  It can
4036 # be used in projects which are not available under the GNU Public License
4037 # but which still want to provide support for the GNU gettext functionality.
4038 # Please note that the actual code is *not* freely available.
4039 AC_DEFUN([AC_LC_MESSAGES], [
4040   AC_CHECK_HEADER(locale.h, [
4041     AC_CACHE_CHECK([for LC_MESSAGES], ac_cv_val_LC_MESSAGES,
4042       [AC_TRY_COMPILE([#include <locale.h>], [return LC_MESSAGES],
4043        ac_cv_val_LC_MESSAGES=yes, ac_cv_val_LC_MESSAGES=no)])
4044     if test $ac_cv_val_LC_MESSAGES = yes; then
4045       AC_DEFINE(HAVE_LC_MESSAGES, 1,
4046                 [Define if LC_MESSAGES is available in <locale.h>.])
4047     fi
4048   ])
4052 dnl Check whether rdrand is supported in the assembler.
4053 AC_DEFUN([GLIBCXX_CHECK_X86_RDRAND], [
4054   AC_MSG_CHECKING([for rdrand support in assembler])
4055   AC_CACHE_VAL(ac_cv_x86_rdrand, [
4056   ac_cv_x86_rdrand=no
4057   case "$target" in
4058     i?86-*-* | \
4059     x86_64-*-*)
4060     AC_TRY_COMPILE(, [asm("rdrand %eax");],
4061                 [ac_cv_x86_rdrand=yes], [ac_cv_x86_rdrand=no])
4062   esac
4063   ])
4064   if test $ac_cv_x86_rdrand = yes; then
4065     AC_DEFINE(_GLIBCXX_X86_RDRAND, 1,
4066                 [ Defined if as can handle rdrand. ])
4067   fi
4068   AC_MSG_RESULT($ac_cv_x86_rdrand)
4072 dnl Check whether rdseed is supported in the assembler.
4073 AC_DEFUN([GLIBCXX_CHECK_X86_RDSEED], [
4074   AC_MSG_CHECKING([for rdseed support in assembler])
4075   AC_CACHE_VAL(ac_cv_x86_rdseed, [
4076   ac_cv_x86_rdseed=no
4077   case "$target" in
4078     i?86-*-* | \
4079     x86_64-*-*)
4080     AC_TRY_COMPILE(, [asm("rdseed %eax");],
4081                 [ac_cv_x86_rdseed=yes], [ac_cv_x86_rdseed=no])
4082   esac
4083   ])
4084   if test $ac_cv_x86_rdseed = yes; then
4085     AC_DEFINE(_GLIBCXX_X86_RDSEED, 1,
4086                 [ Defined if as can handle rdseed. ])
4087   fi
4088   AC_MSG_RESULT($ac_cv_x86_rdseed)
4092 dnl Check whether get_nprocs is available in <sys/sysinfo.h>, and define _GLIBCXX_USE_GET_NPROCS.
4094 AC_DEFUN([GLIBCXX_CHECK_GET_NPROCS], [
4096   AC_LANG_SAVE
4097   AC_LANG_CPLUSPLUS
4098   ac_save_CXXFLAGS="$CXXFLAGS"
4099   CXXFLAGS="$CXXFLAGS -fno-exceptions"
4101   AC_MSG_CHECKING([for get_nprocs])
4102   AC_CACHE_VAL(glibcxx_cv_GET_NPROCS, [
4103     GCC_TRY_COMPILE_OR_LINK(
4104       [#include <sys/sysinfo.h>],
4105       [int n = get_nprocs();],
4106       [glibcxx_cv_GET_NPROCS=yes],
4107       [glibcxx_cv_GET_NPROCS=no])
4108   ])
4109   if test $glibcxx_cv_GET_NPROCS = yes; then
4110     AC_DEFINE(_GLIBCXX_USE_GET_NPROCS, 1, [Define if get_nprocs is available in <sys/sysinfo.h>.])
4111   fi
4112   AC_MSG_RESULT($glibcxx_cv_GET_NPROCS)
4114   CXXFLAGS="$ac_save_CXXFLAGS"
4115   AC_LANG_RESTORE
4119 dnl Check whether sysconf(_SC_NPROCESSORS_ONLN) is available in <unistd.h>, and define _GLIBCXX_USE_SC_NPROCESSORS_ONLN.
4121 AC_DEFUN([GLIBCXX_CHECK_SC_NPROCESSORS_ONLN], [
4123   AC_LANG_SAVE
4124   AC_LANG_CPLUSPLUS
4125   ac_save_CXXFLAGS="$CXXFLAGS"
4126   CXXFLAGS="$CXXFLAGS -fno-exceptions"
4128   AC_MSG_CHECKING([for _SC_NPROCESSORS_ONLN])
4129   AC_CACHE_VAL(glibcxx_cv_SC_NPROCESSORS_ONLN, [
4130     GCC_TRY_COMPILE_OR_LINK(
4131       [#include <unistd.h>],
4132       [int n = sysconf(_SC_NPROCESSORS_ONLN);],
4133       [glibcxx_cv_SC_NPROCESSORS_ONLN=yes],
4134       [glibcxx_cv_SC_NPROCESSORS_ONLN=no])
4135   ])
4136   if test $glibcxx_cv_SC_NPROCESSORS_ONLN = yes; then
4137     AC_DEFINE(_GLIBCXX_USE_SC_NPROCESSORS_ONLN, 1, [Define if _SC_NPROCESSORS_ONLN  is available in <unistd.h>.])
4138   fi
4139   AC_MSG_RESULT($glibcxx_cv_SC_NPROCESSORS_ONLN)
4141   CXXFLAGS="$ac_save_CXXFLAGS"
4142   AC_LANG_RESTORE
4146 dnl Check whether sysconf(_SC_NPROC_ONLN) is available in <unistd.h>, and define _GLIBCXX_USE_SC_NPROC_ONLN.
4148 AC_DEFUN([GLIBCXX_CHECK_SC_NPROC_ONLN], [
4150   AC_LANG_SAVE
4151   AC_LANG_CPLUSPLUS
4152   ac_save_CXXFLAGS="$CXXFLAGS"
4153   CXXFLAGS="$CXXFLAGS -fno-exceptions"
4155   AC_MSG_CHECKING([for _SC_NPROC_ONLN])
4156   AC_CACHE_VAL(glibcxx_cv_SC_NPROC_ONLN, [
4157     GCC_TRY_COMPILE_OR_LINK(
4158       [#include <unistd.h>],
4159       [int n = sysconf(_SC_NPROC_ONLN);],
4160       [glibcxx_cv_SC_NPROC_ONLN=yes],
4161       [glibcxx_cv_SC_NPROC_ONLN=no])
4162   ])
4163   if test $glibcxx_cv_SC_NPROC_ONLN = yes; then
4164     AC_DEFINE(_GLIBCXX_USE_SC_NPROC_ONLN, 1, [Define if _SC_NPROC_ONLN  is available in <unistd.h>.])
4165   fi
4166   AC_MSG_RESULT($glibcxx_cv_SC_NPROC_ONLN)
4168   CXXFLAGS="$ac_save_CXXFLAGS"
4169   AC_LANG_RESTORE
4173 dnl Check whether pthread_num_processors_np is available in <pthread.h>, and define _GLIBCXX_USE_PTHREADS_NUM_PROCESSORS_NP.
4175 AC_DEFUN([GLIBCXX_CHECK_PTHREADS_NUM_PROCESSORS_NP], [
4177   AC_LANG_SAVE
4178   AC_LANG_CPLUSPLUS
4179   ac_save_CXXFLAGS="$CXXFLAGS"
4180   CXXFLAGS="$CXXFLAGS -fno-exceptions"
4182   AC_MSG_CHECKING([for pthreads_num_processors_np])
4183   AC_CACHE_VAL(glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP, [
4184     GCC_TRY_COMPILE_OR_LINK(
4185       [#include <pthread.h>],
4186       [int n = pthread_num_processors_np();],
4187       [glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP=yes],
4188       [glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP=no])
4189   ])
4190   if test $glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP = yes; then
4191     AC_DEFINE(_GLIBCXX_USE_PTHREADS_NUM_PROCESSORS_NP, 1, [Define if pthreads_num_processors_np is available in <pthread.h>.])
4192   fi
4193   AC_MSG_RESULT($glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP)
4195   CXXFLAGS="$ac_save_CXXFLAGS"
4196   AC_LANG_RESTORE
4200 dnl Check whether pthread_cond_clockwait is available in <pthread.h> for std::condition_variable to use,
4201 dnl and define _GLIBCXX_USE_PTHREAD_COND_CLOCKWAIT.
4203 AC_DEFUN([GLIBCXX_CHECK_PTHREAD_COND_CLOCKWAIT], [
4205   AC_LANG_SAVE
4206   AC_LANG_CPLUSPLUS
4207   ac_save_CXXFLAGS="$CXXFLAGS"
4208   CXXFLAGS="$CXXFLAGS -fno-exceptions"
4209   ac_save_LIBS="$LIBS"
4210   LIBS="$LIBS -lpthread"
4212   AC_MSG_CHECKING([for pthread_cond_clockwait])
4213   AC_CACHE_VAL(glibcxx_cv_PTHREAD_COND_CLOCKWAIT, [
4214     GCC_TRY_COMPILE_OR_LINK(
4215       [#include <pthread.h>],
4216       [pthread_mutex_t mutex; pthread_cond_t cond; struct timespec ts; int n = pthread_cond_clockwait(&cond, &mutex, 0, &ts);],
4217       [glibcxx_cv_PTHREAD_COND_CLOCKWAIT=yes],
4218       [glibcxx_cv_PTHREAD_COND_CLOCKWAIT=no])
4219   ])
4220   if test $glibcxx_cv_PTHREAD_COND_CLOCKWAIT = yes; then
4221     AC_DEFINE(_GLIBCXX_USE_PTHREAD_COND_CLOCKWAIT, 1, [Define if pthread_cond_clockwait is available in <pthread.h>.])
4222   fi
4223   AC_MSG_RESULT($glibcxx_cv_PTHREAD_COND_CLOCKWAIT)
4225   CXXFLAGS="$ac_save_CXXFLAGS"
4226   LIBS="$ac_save_LIBS"
4227   AC_LANG_RESTORE
4231 dnl Check whether sysctl is available in <pthread.h>, and define _GLIBCXX_USE_SYSCTL_HW_NCPU.
4233 AC_DEFUN([GLIBCXX_CHECK_SYSCTL_HW_NCPU], [
4235   AC_LANG_SAVE
4236   AC_LANG_CPLUSPLUS
4237   ac_save_CXXFLAGS="$CXXFLAGS"
4238   CXXFLAGS="$CXXFLAGS -fno-exceptions"
4240   AC_MSG_CHECKING([for hw.ncpu sysctl])
4241   AC_CACHE_VAL(glibcxx_cv_SYSCTL_HW_NCPU, [
4242     GCC_TRY_COMPILE_OR_LINK(
4243       [
4244        #include <stddef.h>
4245        #include <sys/sysctl.h>
4246        ],
4247       [
4248        int count;
4249        size_t size = sizeof(count);
4250        int mib[] = { CTL_HW, HW_NCPU };
4251        sysctl(mib, 2, &count, &size, NULL, 0);
4252       ],
4253       [glibcxx_cv_SYSCTL_HW_NCPU=yes],
4254       [glibcxx_cv_SYSCTL_HW_NCPU=no])
4255   ])
4256   if test $glibcxx_cv_SYSCTL_HW_NCPU = yes; then
4257     AC_DEFINE(_GLIBCXX_USE_SYSCTL_HW_NCPU, 1, [Define if sysctl(), CTL_HW and HW_NCPU are available in <sys/sysctl.h>.])
4258   fi
4259   AC_MSG_RESULT($glibcxx_cv_SYSCTL_HW_NCPU)
4261   CXXFLAGS="$ac_save_CXXFLAGS"
4262   AC_LANG_RESTORE
4266 dnl Check to see if python pretty printing can be activated.
4268 dnl --with-python-dir=dir
4269 dnl installs directory into $prefix/dir
4270 AC_DEFUN([GLIBCXX_ENABLE_PYTHON], [
4272 AC_MSG_CHECKING([for custom python install directory])
4273 AC_ARG_WITH([python-dir],
4274             AS_HELP_STRING([--with-python-dir],
4275                            [the location to install Python modules. This path is relative starting from the prefix.]),
4276             [with_python_dir=$withval], [with_python_dir="no"])
4277 AC_MSG_RESULT(${with_python_dir})
4279 # Needed for installing Python modules during make install.
4280 python_mod_dir="${with_python_dir}"
4281 AC_SUBST(python_mod_dir)
4282 GLIBCXX_CONDITIONAL(ENABLE_PYTHONDIR, test $python_mod_dir != no)
4286 dnl Check to see if -Werror is disabled.
4288 dnl --enable-werror/--disable-werror
4289 AC_DEFUN([GLIBCXX_ENABLE_WERROR], [
4290   AC_MSG_CHECKING([for -Werror])
4291   GLIBCXX_ENABLE(werror,$1,,[turns on -Werror])
4292   AC_MSG_RESULT($enable_werror)
4293   GLIBCXX_CONDITIONAL(ENABLE_WERROR, test $enable_werror = yes)
4297 dnl Check whether obsolescent tmpnam is available in <stdio.h>,
4298 dnl and define _GLIBCXX_USE_TMPNAM.
4300 AC_DEFUN([GLIBCXX_CHECK_TMPNAM], [dnl
4302   AC_LANG_SAVE
4303   AC_LANG_CPLUSPLUS
4304   ac_save_CXXFLAGS="$CXXFLAGS"
4305   CXXFLAGS="$CXXFLAGS -fno-exceptions"
4307   AC_MSG_CHECKING([for tmpnam])
4308   AC_CACHE_VAL(glibcxx_cv_TMPNAM, [dnl
4309     GCC_TRY_COMPILE_OR_LINK(
4310       [#include <stdio.h>],
4311       [char *tmp = tmpnam(NULL);],
4312       [glibcxx_cv_TMPNAM=yes],
4313       [glibcxx_cv_TMPNAM=no])
4314   ])
4315   if test $glibcxx_cv_TMPNAM = yes; then
4316     AC_DEFINE(_GLIBCXX_USE_TMPNAM, 1, [Define if obsolescent tmpnam is available in <stdio.h>.])
4317   fi
4318   AC_MSG_RESULT($glibcxx_cv_TMPNAM)
4320   CXXFLAGS="$ac_save_CXXFLAGS"
4321   AC_LANG_RESTORE
4325 dnl Check to see if sys/sdt.h exists and that it is suitable for use.
4326 dnl Some versions of sdt.h were not compatible with C++11.
4328 AC_DEFUN([GLIBCXX_CHECK_SDT_H], [
4329   AC_MSG_CHECKING([for suitable sys/sdt.h])
4330   # Note that this test has to be run with the C language.
4331   # Otherwise, sdt.h will try to include some headers from
4332   # libstdc++ itself.
4333   AC_LANG_SAVE
4334   AC_LANG_C
4335   AC_CACHE_VAL(glibcxx_cv_sys_sdt_h, [
4336     # Because we have to run the test in C, we use grep rather
4337     # than the compiler to check for the bug.  The bug is that
4338     # were strings without trailing whitespace, causing g++
4339     # to look for operator"".  The pattern searches for the fixed
4340     # output.
4341     AC_EGREP_CPP([ \",\" ], [
4342       #include <sys/sdt.h>
4343       int f() { STAP_PROBE(hi, bob); }
4344     ], [glibcxx_cv_sys_sdt_h=yes], [glibcxx_cv_sys_sdt_h=no])
4345   ])
4346   AC_LANG_RESTORE
4347   if test $glibcxx_cv_sys_sdt_h = yes; then
4348     AC_DEFINE(HAVE_SYS_SDT_H, 1,
4349               [Define to 1 if you have a suitable <sys/sdt.h> header file])
4350   fi
4351   AC_MSG_RESULT($glibcxx_cv_sys_sdt_h)
4355 dnl Control whether the library should define symbols for old and new ABIs.
4356 dnl This affects definitions of strings, stringstreams and locale facets.
4358 dnl --disable-libstdcxx-dual-abi will use old ABI for all types.
4360 dnl Defines:
4361 dnl  _GLIBCXX_USE_DUAL_ABI (always defined, either to 1 or 0)
4363 AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_DUAL_ABI], [
4364   GLIBCXX_ENABLE(libstdcxx-dual-abi,$1,,[support two versions of std::string])
4365   if test x$enable_symvers = xgnu-versioned-namespace; then
4366     # gnu-versioned-namespace is incompatible with the dual ABI.
4367     enable_libstdcxx_dual_abi="no"
4368   fi
4369   if test x"$enable_libstdcxx_dual_abi" != xyes; then
4370     AC_MSG_NOTICE([dual ABI is disabled])
4371     default_libstdcxx_abi="gcc4-compatible"
4372   fi
4373   GLIBCXX_CONDITIONAL(ENABLE_DUAL_ABI, test $enable_libstdcxx_dual_abi = yes)
4377 dnl Check to see which ABI should be enabled by default.
4379 dnl --with-default-libstdcxx-abi={gcc4-compatible,new}
4381 dnl Defines:
4382 dnl  _GLIBCXX_USE_CXX11_ABI (always defined, either to 1 or 0)
4384 AC_DEFUN([GLIBCXX_DEFAULT_ABI], [
4385   if test x$enable_libstdcxx_dual_abi = xyes; then
4386   AC_MSG_CHECKING([for default std::string ABI to use])
4387   AC_ARG_WITH([default-libstdcxx-abi],
4388     AS_HELP_STRING([--with-default-libstdcxx-abi],
4389                    [set the std::string ABI to use by default]),
4390     [case "$withval" in
4391       gcc4-compatible)  default_libstdcxx_abi="gcc4-compatible" ;;
4392       new|cxx11)  default_libstdcxx_abi="new" ;;
4393       c++*|gnu++*) AC_MSG_ERROR([Supported arguments for --with-default-libstdcxx-abi have changed, use "new" or "gcc4-compatible"]) ;;
4394       *) AC_MSG_ERROR([Invalid argument for --with-default-libstdcxx-abi]) ;;
4395      esac
4396      ],
4397     [default_libstdcxx_abi="new"])
4398   AC_MSG_RESULT(${default_libstdcxx_abi})
4399   fi
4400   if test $default_libstdcxx_abi = "new"; then
4401     glibcxx_cxx11_abi=1
4402     glibcxx_cxx98_abi=0
4403   else
4404     glibcxx_cxx11_abi=0
4405     glibcxx_cxx98_abi=1
4406   fi
4407   AC_SUBST(glibcxx_cxx98_abi)
4408   GLIBCXX_CONDITIONAL(ENABLE_CXX11_ABI, test $glibcxx_cxx11_abi = 1)
4412 dnl Check to see whether to build libstdc++fs.a
4414 dnl --enable-libstdcxx-filesystem-ts
4416 AC_DEFUN([GLIBCXX_ENABLE_FILESYSTEM_TS], [
4417   GLIBCXX_ENABLE(libstdcxx-filesystem-ts,auto,,
4418     [turns on ISO/IEC TS 18822 support],
4419     [permit yes|no|auto])
4421   AC_MSG_CHECKING([whether to build Filesystem TS support])
4422   if test x"$ac_cv_header_dirent_h" != x"yes"; then
4423     enable_libstdcxx_filesystem_ts=no
4424   fi
4425   if test x"$enable_libstdcxx_filesystem_ts" = x"auto"; then
4426     case "${target_os}" in
4427       freebsd*|netbsd*|openbsd*|dragonfly*|darwin*)
4428         enable_libstdcxx_filesystem_ts=yes
4429         ;;
4430       gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu | uclinux*)
4431         enable_libstdcxx_filesystem_ts=yes
4432         ;;
4433       rtems*)
4434         enable_libstdcxx_filesystem_ts=yes
4435         ;;
4436       solaris*)
4437         enable_libstdcxx_filesystem_ts=yes
4438         ;;
4439       *)
4440         enable_libstdcxx_filesystem_ts=no
4441         ;;
4442     esac
4443   fi
4444   AC_MSG_RESULT($enable_libstdcxx_filesystem_ts)
4445   GLIBCXX_CONDITIONAL(ENABLE_FILESYSTEM_TS, test $enable_libstdcxx_filesystem_ts = yes)
4449 dnl Check whether the library calls required by the Filesystem TS are present.
4450 dnl Defines:
4451 dnl  HAVE_STRUCT_DIRENT_D_TYPE
4452 dnl  _GLIBCXX_USE_REALPATH
4453 dnl  _GLIBCXX_USE_UTIMENSAT
4454 dnl  _GLIBCXX_USE_ST_MTIM
4455 dnl  _GLIBCXX_USE_FCHMOD
4456 dnl  _GLIBCXX_USE_FCHMODAT
4457 dnl  _GLIBCXX_USE_SENDFILE
4458 dnl  HAVE_LINK
4459 dnl  HAVE_READLINK
4460 dnl  HAVE_SYMLINK
4462 AC_DEFUN([GLIBCXX_CHECK_FILESYSTEM_DEPS], [dnl
4464   if test $enable_libstdcxx_filesystem_ts = yes; then
4465     AC_LANG_SAVE
4466     AC_LANG_CPLUSPLUS
4467     ac_save_CXXFLAGS="$CXXFLAGS"
4468     CXXFLAGS="$CXXFLAGS -fno-exceptions"
4470     AC_MSG_CHECKING([for struct dirent.d_type])
4471     AC_CACHE_VAL(glibcxx_cv_dirent_d_type, [dnl
4472       GCC_TRY_COMPILE_OR_LINK(
4473         [#include <dirent.h>],
4474         [
4475          struct dirent d;
4476          if (sizeof d.d_type) return 0;
4477         ],
4478         [glibcxx_cv_dirent_d_type=yes],
4479         [glibcxx_cv_dirent_d_type=no])
4480     ])
4481     if test $glibcxx_cv_dirent_d_type = yes; then
4482       AC_DEFINE(HAVE_STRUCT_DIRENT_D_TYPE, 1, [Define to 1 if `d_type' is a member of `struct dirent'.])
4483     fi
4484     AC_MSG_RESULT($glibcxx_cv_dirent_d_type)
4486     AC_MSG_CHECKING([for realpath])
4487     AC_CACHE_VAL(glibcxx_cv_realpath, [dnl
4488       GCC_TRY_COMPILE_OR_LINK(
4489         [
4490          #include <limits.h>
4491          #include <stdlib.h>
4492          #include <unistd.h>
4493         ],
4494         [
4495          #if _XOPEN_VERSION < 500
4496          #error
4497          #elif _XOPEN_VERSION >= 700 || defined(PATH_MAX)
4498          char *tmp = realpath((const char*)NULL, (char*)NULL);
4499          #else
4500          #error
4501          #endif
4502         ],
4503         [glibcxx_cv_realpath=yes],
4504         [glibcxx_cv_realpath=no])
4505     ])
4506     if test $glibcxx_cv_realpath = yes; then
4507       AC_DEFINE(_GLIBCXX_USE_REALPATH, 1, [Define if usable realpath is available in <stdlib.h>.])
4508     fi
4509     AC_MSG_RESULT($glibcxx_cv_realpath)
4511     AC_MSG_CHECKING([for utimensat])
4512     AC_CACHE_VAL(glibcxx_cv_utimensat, [dnl
4513       GCC_TRY_COMPILE_OR_LINK(
4514         [
4515           #include <fcntl.h>
4516           #include <sys/stat.h>
4517         ],
4518         [
4519           struct timespec ts[2] = { { 0, UTIME_OMIT }, { 1, 1 } };
4520           int i = utimensat(AT_FDCWD, "path", ts, 0);
4521         ],
4522         [glibcxx_cv_utimensat=yes],
4523         [glibcxx_cv_utimensat=no])
4524     ])
4525     if test $glibcxx_cv_utimensat = yes; then
4526       AC_DEFINE(_GLIBCXX_USE_UTIMENSAT, 1, [Define if utimensat and UTIME_OMIT are available in <sys/stat.h> and AT_FDCWD in <fcntl.h>.])
4527     fi
4528     AC_MSG_RESULT($glibcxx_cv_utimensat)
4530     AC_MSG_CHECKING([for utime])
4531     AC_CACHE_VAL(glibcxx_cv_utime, [dnl
4532       GCC_TRY_COMPILE_OR_LINK(
4533         [
4534           #include <utime.h>
4535         ],
4536         [
4537           struct utimbuf t = { 1, 1 };
4538           int i = utime("path", &t);
4539         ],
4540         [glibcxx_cv_utime=yes],
4541         [glibcxx_cv_utime=no])
4542     ])
4543     if test $glibcxx_cv_utime = yes; then
4544       AC_DEFINE(_GLIBCXX_USE_UTIME, 1, [Define if utime is available in <utime.h>.])
4545     fi
4546     AC_MSG_RESULT($glibcxx_cv_utime)
4548     AC_MSG_CHECKING([for lstat])
4549     AC_CACHE_VAL(glibcxx_cv_lstat, [dnl
4550       GCC_TRY_COMPILE_OR_LINK(
4551         [ #include <sys/stat.h> ],
4552         [
4553           struct stat st;
4554           int i = lstat("path", &st);
4555         ],
4556         [glibcxx_cv_lstat=yes],
4557         [glibcxx_cv_lstat=no])
4558     ])
4559     if test $glibcxx_cv_lstat = yes; then
4560       AC_DEFINE(_GLIBCXX_USE_LSTAT, 1, [Define if lstat is available in <sys/stat.h>.])
4561     fi
4562     AC_MSG_RESULT($glibcxx_cv_lstat)
4564     AC_MSG_CHECKING([for struct stat.st_mtim.tv_nsec])
4565     AC_CACHE_VAL(glibcxx_cv_st_mtim, [dnl
4566       GCC_TRY_COMPILE_OR_LINK(
4567         [ #include <sys/stat.h> ],
4568         [
4569           struct stat st;
4570           return st.st_mtim.tv_nsec;
4571         ],
4572         [glibcxx_cv_st_mtim=yes],
4573         [glibcxx_cv_st_mtim=no])
4574     ])
4575     if test $glibcxx_cv_st_mtim = yes; then
4576       AC_DEFINE(_GLIBCXX_USE_ST_MTIM, 1, [Define if struct stat has timespec members.])
4577     fi
4578     AC_MSG_RESULT($glibcxx_cv_st_mtim)
4580     AC_MSG_CHECKING([for fchmod])
4581     AC_CACHE_VAL(glibcxx_cv_fchmod, [dnl
4582       GCC_TRY_COMPILE_OR_LINK(
4583         [#include <sys/stat.h>],
4584         [fchmod(1, S_IWUSR);],
4585         [glibcxx_cv_fchmod=yes],
4586         [glibcxx_cv_fchmod=no])
4587     ])
4588     if test $glibcxx_cv_fchmod = yes; then
4589       AC_DEFINE(_GLIBCXX_USE_FCHMOD, 1, [Define if fchmod is available in <sys/stat.h>.])
4590     fi
4591     AC_MSG_RESULT($glibcxx_cv_fchmod)
4593     AC_MSG_CHECKING([for fchmodat])
4594     AC_CACHE_VAL(glibcxx_cv_fchmodat, [dnl
4595       GCC_TRY_COMPILE_OR_LINK(
4596         [
4597           #include <fcntl.h>
4598           #include <sys/stat.h>
4599         ],
4600         [fchmodat(AT_FDCWD, "", 0, AT_SYMLINK_NOFOLLOW);],
4601         [glibcxx_cv_fchmodat=yes],
4602         [glibcxx_cv_fchmodat=no])
4603     ])
4604     if test $glibcxx_cv_fchmodat = yes; then
4605       AC_DEFINE(_GLIBCXX_USE_FCHMODAT, 1, [Define if fchmodat is available in <sys/stat.h>.])
4606     fi
4607     AC_MSG_RESULT($glibcxx_cv_fchmodat)
4609     AC_MSG_CHECKING([for sendfile that can copy files])
4610     AC_CACHE_VAL(glibcxx_cv_sendfile, [dnl
4611       case "${target_os}" in
4612         gnu* | linux* | solaris* | uclinux*)
4613           GCC_TRY_COMPILE_OR_LINK(
4614             [#include <sys/sendfile.h>],
4615             [sendfile(1, 2, (off_t*)0, sizeof 1);],
4616             [glibcxx_cv_sendfile=yes],
4617             [glibcxx_cv_sendfile=no])
4618           ;;
4619         *)
4620           glibcxx_cv_sendfile=no
4621           ;;
4622       esac
4623     ])
4624     if test $glibcxx_cv_sendfile = yes; then
4625       AC_DEFINE(_GLIBCXX_USE_SENDFILE, 1, [Define if sendfile is available in <sys/sendfile.h>.])
4626     fi
4627     AC_MSG_RESULT($glibcxx_cv_sendfile)
4629     AC_MSG_CHECKING([for link])
4630     AC_CACHE_VAL(glibcxx_cv_link, [dnl
4631       GCC_TRY_COMPILE_OR_LINK(
4632         [#include <unistd.h>],
4633         [link("", "");],
4634         [glibcxx_cv_link=yes],
4635         [glibcxx_cv_link=no])
4636     ])
4637     if test $glibcxx_cv_link = yes; then
4638       AC_DEFINE(HAVE_LINK, 1, [Define if link is available in <unistd.h>.])
4639     fi
4640     AC_MSG_RESULT($glibcxx_cv_link)
4642     AC_MSG_CHECKING([for readlink])
4643     AC_CACHE_VAL(glibcxx_cv_readlink, [dnl
4644       GCC_TRY_COMPILE_OR_LINK(
4645         [#include <unistd.h>],
4646         [char buf[32]; readlink("", buf, sizeof(buf));],
4647         [glibcxx_cv_readlink=yes],
4648         [glibcxx_cv_readlink=no])
4649     ])
4650     if test $glibcxx_cv_readlink = yes; then
4651       AC_DEFINE(HAVE_READLINK, 1, [Define if readlink is available in <unistd.h>.])
4652     fi
4653     AC_MSG_RESULT($glibcxx_cv_readlink)
4655     AC_MSG_CHECKING([for symlink])
4656     AC_CACHE_VAL(glibcxx_cv_symlink, [dnl
4657       GCC_TRY_COMPILE_OR_LINK(
4658         [#include <unistd.h>],
4659         [symlink("", "");],
4660         [glibcxx_cv_symlink=yes],
4661         [glibcxx_cv_symlink=no])
4662     ])
4663     if test $glibcxx_cv_symlink = yes; then
4664       AC_DEFINE(HAVE_SYMLINK, 1, [Define if symlink is available in <unistd.h>.])
4665     fi
4666     AC_MSG_RESULT($glibcxx_cv_symlink)
4668     AC_MSG_CHECKING([for truncate])
4669     AC_CACHE_VAL(glibcxx_cv_truncate, [dnl
4670       GCC_TRY_COMPILE_OR_LINK(
4671         [#include <unistd.h>],
4672         [truncate("", 99);],
4673         [glibcxx_cv_truncate=yes],
4674         [glibcxx_cv_truncate=no])
4675     ])
4676     if test $glibcxx_cv_truncate = yes; then
4677       AC_DEFINE(HAVE_TRUNCATE, 1, [Define if truncate is available in <unistd.h>.])
4678     fi
4679     AC_MSG_RESULT($glibcxx_cv_truncate)
4681     CXXFLAGS="$ac_save_CXXFLAGS"
4682     AC_LANG_RESTORE
4683   fi
4687 dnl Check how size_t is mangled.  Copied from libitm.
4689 AC_DEFUN([GLIBCXX_CHECK_SIZE_T_MANGLING], [
4690   AC_CACHE_CHECK([how size_t is mangled],
4691                  glibcxx_cv_size_t_mangling, [
4692     AC_TRY_COMPILE([], [extern __SIZE_TYPE__ x; extern unsigned long x;],
4693                    [glibcxx_cv_size_t_mangling=m], [
4694       AC_TRY_COMPILE([], [extern __SIZE_TYPE__ x; extern unsigned int x;],
4695                      [glibcxx_cv_size_t_mangling=j], [
4696         AC_TRY_COMPILE([],
4697                        [extern __SIZE_TYPE__ x; extern unsigned long long x;],
4698                        [glibcxx_cv_size_t_mangling=y], [
4699           AC_TRY_COMPILE([],
4700                          [extern __SIZE_TYPE__ x; extern unsigned short x;],
4701                          [glibcxx_cv_size_t_mangling=t], [
4702             AC_TRY_COMPILE([],
4703                            [extern __SIZE_TYPE__ x; extern __int20 unsigned x;],
4704                            [glibcxx_cv_size_t_mangling=u6uint20],
4705                            [glibcxx_cv_size_t_mangling=x])
4706           ])
4707         ])
4708       ])
4709     ])
4710   ])
4711   if test $glibcxx_cv_size_t_mangling = x; then
4712     AC_MSG_ERROR([Unknown underlying type for size_t])
4713   fi
4714   AC_DEFINE_UNQUOTED(_GLIBCXX_MANGLE_SIZE_T, [$glibcxx_cv_size_t_mangling],
4715     [Define to the letter to which size_t is mangled.])
4719 dnl Determine whether std::exception_ptr symbols should be exported with
4720 dnl the symbol versions from GCC 4.6.0 or GCC 7.1.0, depending on which
4721 dnl release first added support for std::exception_ptr. Originally it was
4722 dnl only supported for targets with always-lock-free atomics for int, but
4723 dnl since GCC 7.1 it is supported for all targets.
4725 AC_DEFUN([GLIBCXX_CHECK_EXCEPTION_PTR_SYMVER], [
4726   if test $enable_symvers != no; then
4727     AC_MSG_CHECKING([for first version to support std::exception_ptr])
4728     case ${target} in
4729       aarch64-*-* | alpha-*-* | hppa*-*-* | i?86-*-* | x86_64-*-* | \
4730       m68k-*-* | powerpc*-*-* | s390*-*-* | *-*-solaris* )
4731         ac_exception_ptr_since_gcc46=yes
4732         ;;
4733       *)
4734         # If the value of this macro changes then we will need to hardcode
4735         # yes/no here for additional targets based on the original value.
4736         AC_TRY_COMPILE([], [
4737           #if __GCC_ATOMIC_INT_LOCK_FREE <= 1
4738           # error atomic int not always lock free
4739           #endif
4740           ],
4741           [ac_exception_ptr_since_gcc46=yes],
4742           [ac_exception_ptr_since_gcc46=no])
4743         ;;
4744     esac
4745     if test x"$ac_exception_ptr_since_gcc46" = x"yes" ; then
4746       AC_DEFINE(HAVE_EXCEPTION_PTR_SINCE_GCC46, 1,
4747         [Define to 1 if GCC 4.6 supported std::exception_ptr for the target])
4748       AC_MSG_RESULT([4.6.0])
4749     else
4750       AC_MSG_RESULT([7.1.0])
4751     fi
4752   fi
4755 # Macros from the top-level gcc directory.
4756 m4_include([../config/gc++filt.m4])
4757 m4_include([../config/tls.m4])
4758 m4_include([../config/gthr.m4])
4759 m4_include([../config/cet.m4])