1dnl
2dnl GLIBCXX_CONDITIONAL (NAME, SHELL-TEST)
3dnl
4dnl Exactly like AM_CONDITIONAL, but delays evaluation of the test until the
5dnl end of configure.  This lets tested variables be reassigned, and the
6dnl conditional will depend on the final state of the variable.  For a simple
7dnl example of why this is needed, see GLIBCXX_ENABLE_HOSTED.
8dnl
9m4_define([_m4_divert(glibcxx_diversion)], 8000)dnl
10AC_DEFUN([GLIBCXX_CONDITIONAL], [dnl
11  m4_divert_text([glibcxx_diversion],dnl
12   AM_CONDITIONAL([$1],[$2])
13  )dnl
14])dnl
15AC_DEFUN([GLIBCXX_EVALUATE_CONDITIONALS], [m4_undivert([glibcxx_diversion])])dnl
16
17
18dnl
19dnl Check to see what architecture and operating system we are compiling
20dnl for.  Also, if architecture- or OS-specific flags are required for
21dnl compilation, pick them up here.
22dnl
23AC_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])
27])
28
29dnl
30dnl Initialize the rest of the library configury.  At this point we have
31dnl variables like $host.
32dnl
33dnl Sets:
34dnl  SUBDIRS
35dnl Substs:
36dnl  glibcxx_builddir     (absolute path)
37dnl  glibcxx_srcdir       (absolute path)
38dnl  toplevel_builddir    (absolute path)
39dnl  toplevel_srcdir      (absolute path)
40dnl  with_cross_host
41dnl  with_newlib
42dnl  with_target_subdir
43dnl plus
44dnl  - the variables in GLIBCXX_CHECK_HOST / configure.host
45dnl  - default settings for all AM_CONFITIONAL test variables
46dnl  - lots of tools, like CC and CXX
47dnl
48AC_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'
54
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)
69
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]))
75
76  AC_ARG_WITH([cross-host],
77    AC_HELP_STRING([--with-cross-host=HOST],
78		   [configuring with a cross compiler]))
79
80  AC_ARG_WITH([newlib],
81    AC_HELP_STRING([--with-newlib],
82		   [assume newlib as a system C library]))
83
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'
88
89  AC_CHECK_TOOL(AS, as)
90  AC_CHECK_TOOL(AR, ar)
91  AC_CHECK_TOOL(RANLIB, ranlib, ranlib-not-found-in-path-error)
92
93  AM_MAINTAINER_MODE
94
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
99
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)
108
109  AC_EGREP_CPP([_using_bionic], [
110  #include <stdio.h>
111  #if __BIONIC__
112    _using_bionic
113  #endif
114  ], bionic=yes, bionic=no)
115
116  # Find platform-specific directories containing configuration info.
117  # Also possibly modify flags used elsewhere, as needed by the platform.
118  GLIBCXX_CHECK_HOST
119])
120
121
122dnl
123dnl Tests for newer compiler features, or features that are present in newer
124dnl compiler versions but not older compiler versions still in use, should
125dnl be placed here.
126dnl
127dnl Defines:
128dnl  WERROR='-Werror' if requested and possible; g++'s that lack the
129dnl   new inlining code or the new system_header pragma will die on -Werror.
130dnl   Leave it out by default and use maint-mode to use it.
131dnl  SECTION_FLAGS='-ffunction-sections -fdata-sections' if
132dnl   compiler supports it and the user has not requested debug mode.
133dnl
134AC_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"
142
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)
157
158  AC_LANG_RESTORE
159  AC_SUBST(SECTION_FLAGS)
160])
161
162
163dnl
164dnl If GNU ld is in use, check to see if tricky linker opts can be used.  If
165dnl the native linker is in use, all variables will be defined to something
166dnl safe (like an empty string).
167dnl
168dnl Defines:
169dnl  SECTION_LDFLAGS='-Wl,--gc-sections' if possible
170dnl  OPT_LDFLAGS='-Wl,-O1' and '-z,relro' if possible
171dnl  LD (as a side effect of testing)
172dnl Sets:
173dnl  with_gnu_ld
174dnl  glibcxx_ld_is_gold (set to "no" or "yes")
175dnl  glibcxx_gnu_ld_version (possibly)
176dnl
177dnl The last will be a single integer, e.g., version 1.23.45.0.67.89 will
178dnl set glibcxx_gnu_ld_version to 12345.  Zeros cause problems.
179dnl
180AC_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])
188
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
203
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/GNU gold /GNU ld /;s/GNU ld version /GNU ld /;s/GNU ld ([^)]*) /GNU ld /;s/GNU ld \([0-9.][0-9.]*\).*/\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
220
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.
238
239    ac_test_CFLAGS="${CFLAGS+set}"
240    ac_save_CFLAGS="$CFLAGS"
241    CFLAGS='-Wl,--gc-sections'
242
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)
263
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
271
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
284
285  # Set linker optimization flags.
286  if test x"$with_gnu_ld" = x"yes"; then
287    OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
288  fi
289
290  AC_SUBST(SECTION_LDFLAGS)
291  AC_SUBST(OPT_LDFLAGS)
292])
293
294
295dnl
296dnl Check for headers for, and arguments to, the setrlimit() function.
297dnl Used only in testsuite_hooks.h.  Called from GLIBCXX_CONFIGURE_TESTSUITE.
298dnl
299dnl Defines:
300dnl  _GLIBCXX_RES_LIMITS if we can set artificial resource limits
301dnl  various HAVE_LIMIT_* for individual limit names
302dnl
303AC_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)
316])
317
318AC_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)
332
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
345
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)
356])
357
358
359dnl
360dnl Check whether S_ISREG (Posix) or S_IFREG is available in <sys/stat.h>.
361dnl Define HAVE_S_ISREG / HAVE_S_IFREG appropriately.
362dnl
363AC_DEFUN([GLIBCXX_CHECK_S_ISREG_OR_S_IFREG], [
364
365  AC_LANG_SAVE
366  AC_LANG_CPLUSPLUS
367  ac_save_CXXFLAGS="$CXXFLAGS"
368  CXXFLAGS="$CXXFLAGS -fno-exceptions"
369
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)
400
401  CXXFLAGS="$ac_save_CXXFLAGS"
402  AC_LANG_RESTORE
403])
404
405
406dnl
407dnl Check whether poll is available in <poll.h>, and define HAVE_POLL.
408dnl
409AC_DEFUN([GLIBCXX_CHECK_POLL], [
410
411  AC_LANG_SAVE
412  AC_LANG_CPLUSPLUS
413  ac_save_CXXFLAGS="$CXXFLAGS"
414  CXXFLAGS="$CXXFLAGS -fno-exceptions"
415
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)
430
431  CXXFLAGS="$ac_save_CXXFLAGS"
432  AC_LANG_RESTORE
433])
434
435
436dnl
437dnl Check whether writev is available in <sys/uio.h>, and define HAVE_WRITEV.
438dnl
439AC_DEFUN([GLIBCXX_CHECK_WRITEV], [
440
441  AC_LANG_SAVE
442  AC_LANG_CPLUSPLUS
443  ac_save_CXXFLAGS="$CXXFLAGS"
444  CXXFLAGS="$CXXFLAGS -fno-exceptions"
445
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)
459
460  CXXFLAGS="$ac_save_CXXFLAGS"
461  AC_LANG_RESTORE
462])
463
464
465dnl
466dnl Check whether int64_t is available in <stdint.h>, and define HAVE_INT64_T.
467dnl Also check whether int64_t is actually a typedef to long or long long.
468dnl
469AC_DEFUN([GLIBCXX_CHECK_INT64_T], [
470
471  AC_LANG_SAVE
472  AC_LANG_CPLUSPLUS
473
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  ])
482
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)
486
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    ])
496
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
501
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    ])
511
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
517
518  AC_LANG_RESTORE
519])
520
521
522dnl
523dnl Check whether LFS support is available.
524dnl
525AC_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
553])
554
555
556dnl
557dnl Check for whether a fully dynamic basic_string implementation should
558dnl be turned on, that does not put empty objects in per-process static
559dnl memory (mostly useful together with shared memory allocators, see PR
560dnl libstdc++/16612 for details).
561dnl
562dnl --enable-fully-dynamic-string defines _GLIBCXX_FULLY_DYNAMIC_STRING to 1
563dnl --disable-fully-dynamic-string defines _GLIBCXX_FULLY_DYNAMIC_STRING to 0
564dnl otherwise undefined
565dnl  +  Usage:  GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING[(DEFAULT)]
566dnl       Where DEFAULT is either `yes' or `no'.
567dnl
568AC_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])
577])
578
579
580dnl
581dnl Does any necessary configuration of the testsuite directory.  Generates
582dnl the testsuite_hooks.h header.
583dnl
584dnl GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE must be done before this.
585dnl
586dnl Sets:
587dnl  enable_abi_check
588dnl  GLIBCXX_TEST_WCHAR_T
589dnl  GLIBCXX_TEST_THREAD
590dnl Substs:
591dnl  baseline_dir
592dnl  baseline_subdir_switch
593dnl
594AC_DEFUN([GLIBCXX_CONFIGURE_TESTSUITE], [
595  # Do checks for resource limit functions.
596  GLIBCXX_CHECK_SETRLIMIT
597
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
602
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
616
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)
622])
623
624
625dnl
626dnl Does any necessary configuration for docbook in the docs directory.
627dnl
628dnl XSLTPROC must be set before this
629dnl
630dnl Sets:
631dnl  glibcxx_stylesheets
632dnl Substs:
633dnl  XSL_STYLE_DIR
634dnl
635AC_DEFUN([GLIBCXX_CONFIGURE_DOCBOOK], [
636
637glibcxx_docbook_url=http://docbook.sourceforge.net/release/xsl-ns/current/
638
639AC_MSG_CHECKING([for local stylesheet directory])
640glibcxx_local_stylesheets=no
641if test x${XMLCATALOG} = xyes && xsl_style_dir=`xmlcatalog "" $glibcxx_docbook_url 2>/dev/null`
642then
643  XSL_STYLE_DIR=`echo $xsl_style_dir | sed -n 's;^file://;;p'`
644  glibcxx_local_stylesheets=yes
645else
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
658fi
659AC_MSG_RESULT($glibcxx_local_stylesheets)
660
661if test x"$glibcxx_local_stylesheets" = x"yes"; then
662  AC_SUBST(XSL_STYLE_DIR)
663  AC_MSG_NOTICE($XSL_STYLE_DIR)
664
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)
673
674else
675  glibcxx_stylesheets=no
676fi
677
678# Check for epub3 dependencies.
679AC_MSG_CHECKING([for epub3 stylesheets for documentation creation])
680glibcxx_epub_stylesheets=no
681if 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
685fi
686AC_MSG_RESULT($glibcxx_epub_stylesheets)
687AM_CONDITIONAL(BUILD_EPUB, test x"$glibcxx_epub_stylesheets" = x"yes")
688
689])
690
691
692dnl
693dnl Set up *_INCLUDES variables for all sundry Makefile.am's.
694dnl
695dnl Substs:
696dnl  GLIBCXX_INCLUDES
697dnl  TOPLEVEL_INCLUDES
698dnl
699AC_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++"
705
706  # For Canadian crosses, pick this up too.
707  if test $CANADIAN = yes; then
708    GLIBCXX_INCLUDES="$GLIBCXX_INCLUDES -I\${includedir}"
709  fi
710
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'
715
716  # Now, export this to all the little Makefiles....
717  AC_SUBST(GLIBCXX_INCLUDES)
718  AC_SUBST(TOPLEVEL_INCLUDES)
719])
720
721
722dnl
723dnl Set up *_FLAGS and *FLAGS variables for all sundry Makefile.am's.
724dnl (SECTION_FLAGS is done under CHECK_COMPILER_FEATURES.)
725dnl
726dnl Substs:
727dnl  OPTIMIZE_CXXFLAGS
728dnl  WARN_FLAGS
729dnl
730AC_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)
736
737  WARN_FLAGS="-Wall -Wextra -Wwrite-strings -Wcast-qual -Wabi=2"
738  AC_SUBST(WARN_FLAGS)
739])
740
741
742dnl
743dnl All installation directory information is determined here.
744dnl
745dnl Substs:
746dnl  gxx_install_dir
747dnl  glibcxx_prefixdir
748dnl  glibcxx_toolexecdir
749dnl  glibcxx_toolexeclibdir
750dnl
751dnl Assumes cross_compiling bits already done, and with_cross_host in
752dnl particular.
753dnl
754dnl This logic must match gcc/configure.ac's setting of gcc_gxx_include_dir.
755dnl config/gxx-include-dir.m4 must be kept consistant with this as well.
756AC_DEFUN([GLIBCXX_EXPORT_INSTALL_INFO], [
757  glibcxx_toolexecdir=no
758  glibcxx_toolexeclibdir=no
759  glibcxx_prefixdir=$prefix
760
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)
772
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)
784
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
795
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
808
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
826
827  AC_MSG_CHECKING([for install location])
828  AC_MSG_RESULT($gxx_include_dir)
829
830  AC_SUBST(glibcxx_prefixdir)
831  AC_SUBST(gxx_include_dir)
832  AC_SUBST(glibcxx_toolexecdir)
833  AC_SUBST(glibcxx_toolexeclibdir)
834])
835
836
837dnl
838dnl GLIBCXX_ENABLE
839dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING)
840dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, permit a|b|c)
841dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, SHELL-CODE-HANDLER)
842dnl
843dnl See manual/appendix_porting.html#appendix.porting.build_hacking for
844dnl documentation.
845dnl
846m4_define([GLIBCXX_ENABLE],[dnl
847m4_define([_g_switch],[--enable-$1])dnl
848m4_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])
869m4_undefine([_g_switch])dnl
870m4_undefine([_g_help])dnl
871])
872
873
874dnl
875dnl Check for ISO/IEC 9899:1999 "C99" support.
876dnl
877dnl --enable-c99 defines _GLIBCXX_USE_C99
878dnl --disable-c99 leaves _GLIBCXX_USE_C99 undefined
879dnl  +  Usage:  GLIBCXX_ENABLE_C99[(DEFAULT)]
880dnl       Where DEFAULT is either `yes' or `no'.
881dnl  +  If 'C99' stuff is not available, ignores DEFAULT and sets `no'.
882dnl
883AC_DEFUN([GLIBCXX_ENABLE_C99], [
884  GLIBCXX_ENABLE(c99,$1,,[turns on ISO/IEC 9899:1999 support])
885
886  if test x"$enable_c99" = x"yes"; then
887    AC_LANG_SAVE
888    AC_LANG_CPLUSPLUS
889
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"
897
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
907
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
936
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
1006
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
1030
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
1059
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      ])
1074
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.])], [])
1082
1083      AC_TRY_COMPILE([#include <wchar.h>
1084        namespace test { using ::vswscanf; }], [],
1085        [AC_DEFINE(HAVE_VSWSCANF, 1, [Defined if vswscanf exists.])], [])
1086
1087      AC_TRY_COMPILE([#include <wchar.h>
1088        namespace test { using ::vwscanf; }], [],
1089        [AC_DEFINE(HAVE_VWSCANF, 1, [Defined if vwscanf exists.])], [])
1090
1091      AC_TRY_COMPILE([#include <wchar.h>
1092        namespace test { using ::wcstof; }], [],
1093        [AC_DEFINE(HAVE_WCSTOF, 1, [Defined if wcstof exists.])], [])
1094
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.])], [])
1098
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
1106
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
1119
1120    gcc_no_link="$ac_save_gcc_no_link"
1121    LIBS="$ac_save_LIBS"
1122    CXXFLAGS="$ac_save_CXXFLAGS"
1123    AC_LANG_RESTORE
1124
1125    AC_LANG_SAVE
1126    AC_LANG_CPLUSPLUS
1127
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"
1134
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
1144
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
1173
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
1243
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
1267
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
1296
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      ])
1311
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.])], [])
1319
1320      AC_TRY_COMPILE([#include <wchar.h>
1321        namespace test { using ::vswscanf; }], [],
1322        [AC_DEFINE(HAVE_VSWSCANF, 1, [Defined if vswscanf exists.])], [])
1323
1324      AC_TRY_COMPILE([#include <wchar.h>
1325        namespace test { using ::vwscanf; }], [],
1326        [AC_DEFINE(HAVE_VWSCANF, 1, [Defined if vwscanf exists.])], [])
1327
1328      AC_TRY_COMPILE([#include <wchar.h>
1329        namespace test { using ::wcstof; }], [],
1330        [AC_DEFINE(HAVE_WCSTOF, 1, [Defined if wcstof exists.])], [])
1331
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.])], [])
1335
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
1343
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
1349
1350  AC_MSG_CHECKING([for fully enabled ISO C99 support])
1351  AC_MSG_RESULT($enable_c99)
1352])
1353
1354
1355dnl
1356dnl Check for clock_gettime, nanosleep and sched_yield, used in the
1357dnl implementation of 20.11.7 [time.clock], and 30.3.2 [thread.thread.this]
1358dnl in the C++11 standard.
1359dnl
1360dnl --enable-libstdcxx-time
1361dnl --enable-libstdcxx-time=yes
1362dnl        checks for the availability of monotonic and realtime clocks,
1363dnl        nanosleep and sched_yield in libc and libposix4 and, if needed,
1364dnl        links in the latter.
1365dnl --enable-libstdcxx-time=rt
1366dnl        also searches (and, if needed, links) librt.  Note that this is
1367dnl        not always desirable because, in glibc 2.16 and earlier, for
1368dnl        example, in turn it triggers the linking of libpthread too,
1369dnl        which activates locking,
1370dnl        a large overhead for single-thread programs.
1371dnl --enable-libstdcxx-time=no
1372dnl --disable-libstdcxx-time
1373dnl        disables the checks completely
1374dnl
1375dnl N.B. Darwin provides nanosleep but doesn't support the whole POSIX
1376dnl Timers option, so doesn't define _POSIX_TIMERS. Because the test
1377dnl below fails Darwin unconditionally defines _GLIBCXX_USE_NANOSLEEP in
1378dnl os_defines.h and also defines _GLIBCXX_USE_SCHED_YIELD.
1379dnl
1380AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME], [
1381
1382  GLIBCXX_ENABLE(libstdcxx-time,auto,[[[=KIND]]],
1383    [use KIND for check type],
1384    [permit yes|no|rt])
1385
1386  AC_LANG_SAVE
1387  AC_LANG_CPLUSPLUS
1388  ac_save_CXXFLAGS="$CXXFLAGS"
1389  CXXFLAGS="$CXXFLAGS -fno-exceptions"
1390  ac_save_LIBS="$LIBS"
1391
1392  ac_has_clock_monotonic=no
1393  ac_has_clock_realtime=no
1394  ac_has_nanosleep=no
1395  ac_has_sched_yield=no
1396
1397  if test x"$enable_libstdcxx_time" = x"auto"; then
1398
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)
1418
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    esac
1445
1446  elif test x"$enable_libstdcxx_time" != x"no"; then
1447
1448    if test x"$enable_libstdcxx_time" = x"rt"; then
1449      AC_SEARCH_LIBS(clock_gettime, [rt posix4])
1450      AC_SEARCH_LIBS(nanosleep, [rt posix4])
1451    else
1452      AC_SEARCH_LIBS(clock_gettime, [posix4])
1453      AC_SEARCH_LIBS(nanosleep, [posix4])
1454    fi
1455
1456    case "$ac_cv_search_clock_gettime" in
1457      -l*) GLIBCXX_LIBS=$ac_cv_search_clock_gettime
1458      ;;
1459    esac
1460    case "$ac_cv_search_nanosleep" in
1461      -l*) GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_nanosleep"
1462      ;;
1463    esac
1464
1465    AC_SEARCH_LIBS(sched_yield, [rt posix4])
1466
1467    case "$ac_cv_search_sched_yield" in
1468      -lposix4*)
1469      GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_sched_yield"
1470      ac_has_sched_yield=yes
1471      ;;
1472      -lrt*)
1473      if test x"$enable_libstdcxx_time" = x"rt"; then
1474	GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_sched_yield"
1475        ac_has_sched_yield=yes
1476      fi
1477      ;;
1478      *)
1479      ac_has_sched_yield=yes
1480      ;;
1481    esac
1482
1483    AC_CHECK_HEADERS(unistd.h, ac_has_unistd_h=yes, ac_has_unistd_h=no)
1484
1485    if test x"$ac_has_unistd_h" = x"yes"; then
1486      AC_MSG_CHECKING([for monotonic clock])
1487      AC_TRY_LINK(
1488	[#include <unistd.h>
1489	 #include <time.h>
1490	],
1491	[#if _POSIX_TIMERS > 0 && defined(_POSIX_MONOTONIC_CLOCK)
1492	  timespec tp;
1493	 #endif
1494	  clock_gettime(CLOCK_MONOTONIC, &tp);
1495	], [ac_has_clock_monotonic=yes], [ac_has_clock_monotonic=no])
1496
1497      AC_MSG_RESULT($ac_has_clock_monotonic)
1498
1499      AC_MSG_CHECKING([for realtime clock])
1500      AC_TRY_LINK(
1501	[#include <unistd.h>
1502	 #include <time.h>
1503	],
1504	[#if _POSIX_TIMERS > 0
1505	  timespec tp;
1506	 #endif
1507	  clock_gettime(CLOCK_REALTIME, &tp);
1508	], [ac_has_clock_realtime=yes], [ac_has_clock_realtime=no])
1509
1510      AC_MSG_RESULT($ac_has_clock_realtime)
1511
1512      AC_MSG_CHECKING([for nanosleep])
1513      AC_TRY_LINK(
1514	[#include <unistd.h>
1515	 #include <time.h>
1516	],
1517	[#if _POSIX_TIMERS > 0
1518	  timespec tp;
1519	 #endif
1520	  nanosleep(&tp, 0);
1521	], [ac_has_nanosleep=yes], [ac_has_nanosleep=no])
1522
1523      AC_MSG_RESULT($ac_has_nanosleep)
1524    fi
1525  fi
1526
1527  if test x"$ac_has_clock_monotonic" != x"yes"; then
1528    case ${target_os} in
1529      linux*)
1530	AC_MSG_CHECKING([for clock_gettime syscall])
1531	AC_TRY_COMPILE(
1532	  [#include <unistd.h>
1533	   #include <time.h>
1534	   #include <sys/syscall.h>
1535	  ],
1536	  [#if _POSIX_TIMERS > 0 && defined(_POSIX_MONOTONIC_CLOCK)
1537	    timespec tp;
1538	   #endif
1539	   syscall(SYS_clock_gettime, CLOCK_MONOTONIC, &tp);
1540	   syscall(SYS_clock_gettime, CLOCK_REALTIME, &tp);
1541	  ], [ac_has_clock_monotonic_syscall=yes], [ac_has_clock_monotonic_syscall=no])
1542	AC_MSG_RESULT($ac_has_clock_monotonic_syscall)
1543	if test x"$ac_has_clock_monotonic_syscall" = x"yes"; then
1544	  AC_DEFINE(_GLIBCXX_USE_CLOCK_GETTIME_SYSCALL, 1,
1545	  [ Defined if clock_gettime syscall has monotonic and realtime clock support. ])
1546	  ac_has_clock_monotonic=yes
1547	  ac_has_clock_realtime=yes
1548	fi;;
1549    esac
1550  fi
1551
1552  if test x"$ac_has_clock_monotonic" = x"yes"; then
1553    AC_DEFINE(_GLIBCXX_USE_CLOCK_MONOTONIC, 1,
1554      [ Defined if clock_gettime has monotonic clock support. ])
1555  fi
1556
1557  if test x"$ac_has_clock_realtime" = x"yes"; then
1558    AC_DEFINE(_GLIBCXX_USE_CLOCK_REALTIME, 1,
1559      [ Defined if clock_gettime has realtime clock support. ])
1560  fi
1561
1562  if test x"$ac_has_sched_yield" = x"yes"; then
1563    AC_DEFINE(_GLIBCXX_USE_SCHED_YIELD, 1,
1564              [ Defined if sched_yield is available. ])
1565  fi
1566
1567  if test x"$ac_has_nanosleep" = x"yes"; then
1568    AC_DEFINE(_GLIBCXX_USE_NANOSLEEP, 1,
1569      [ Defined if nanosleep is available. ])
1570  else
1571      AC_MSG_CHECKING([for sleep])
1572      AC_TRY_COMPILE([#include <unistd.h>],
1573                     [sleep(1)],
1574                     [ac_has_sleep=yes],[ac_has_sleep=no])
1575      if test x"$ac_has_sleep" = x"yes"; then
1576        AC_DEFINE(HAVE_SLEEP,1, [Defined if sleep exists.])
1577      fi
1578      AC_MSG_RESULT($ac_has_sleep)
1579      AC_MSG_CHECKING([for usleep])
1580      AC_TRY_COMPILE([#include <unistd.h>],
1581                     [sleep(1);
1582                      usleep(100);],
1583                     [ac_has_usleep=yes],[ac_has_usleep=no])
1584      if test x"$ac_has_usleep" = x"yes"; then
1585        AC_DEFINE(HAVE_USLEEP,1, [Defined if usleep exists.])
1586      fi
1587      AC_MSG_RESULT($ac_has_usleep)
1588  fi
1589
1590  if test x"$ac_has_nanosleep$ac_has_sleep" = x"nono"; then
1591      AC_MSG_CHECKING([for Sleep])
1592      AC_TRY_COMPILE([#include <windows.h>],
1593                     [Sleep(1)],
1594                     [ac_has_win32_sleep=yes],[ac_has_win32_sleep=no])
1595      if test x"$ac_has_win32_sleep" = x"yes"; then
1596        AC_DEFINE(HAVE_WIN32_SLEEP,1, [Defined if Sleep exists.])
1597      fi
1598      AC_MSG_RESULT($ac_has_win32_sleep)
1599  fi
1600
1601  AC_SUBST(GLIBCXX_LIBS)
1602
1603  CXXFLAGS="$ac_save_CXXFLAGS"
1604  LIBS="$ac_save_LIBS"
1605  AC_LANG_RESTORE
1606])
1607
1608dnl
1609dnl Check for gettimeofday, used in the implementation of 20.11.7
1610dnl [time.clock] in the C++11 standard.
1611dnl
1612AC_DEFUN([GLIBCXX_CHECK_GETTIMEOFDAY], [
1613
1614  AC_MSG_CHECKING([for gettimeofday])
1615
1616  AC_LANG_SAVE
1617  AC_LANG_CPLUSPLUS
1618  ac_save_CXXFLAGS="$CXXFLAGS"
1619  CXXFLAGS="$CXXFLAGS -fno-exceptions"
1620
1621  ac_has_gettimeofday=no;
1622  AC_CHECK_HEADERS(sys/time.h, ac_has_sys_time_h=yes, ac_has_sys_time_h=no)
1623  if test x"$ac_has_sys_time_h" = x"yes"; then
1624    AC_MSG_CHECKING([for gettimeofday])
1625    GCC_TRY_COMPILE_OR_LINK([#include <sys/time.h>],
1626      [timeval tv; gettimeofday(&tv, 0);],
1627      [ac_has_gettimeofday=yes], [ac_has_gettimeofday=no])
1628
1629    AC_MSG_RESULT($ac_has_gettimeofday)
1630  fi
1631
1632  if test x"$ac_has_gettimeofday" = x"yes"; then
1633    AC_DEFINE(_GLIBCXX_USE_GETTIMEOFDAY, 1,
1634      [ Defined if gettimeofday is available. ])
1635  fi
1636
1637  CXXFLAGS="$ac_save_CXXFLAGS"
1638  AC_LANG_RESTORE
1639])
1640
1641dnl
1642dnl Check for ISO/IEC 9899:1999 "C99" support to ISO/IEC DTR 19768 "TR1"
1643dnl facilities in Chapter 8, "C compatibility".
1644dnl
1645AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [
1646
1647  AC_LANG_SAVE
1648  AC_LANG_CPLUSPLUS
1649
1650  # Use -std=c++98 because the default (-std=gnu++98) leaves __STRICT_ANSI__
1651  # undefined and fake C99 facilities may be spuriously enabled.
1652  ac_save_CXXFLAGS="$CXXFLAGS"
1653  CXXFLAGS="$CXXFLAGS -std=c++98"
1654
1655  # Check for the existence of <complex.h> complex math functions used
1656  # by tr1/complex.
1657  AC_CHECK_HEADERS(complex.h, ac_has_complex_h=yes, ac_has_complex_h=no)
1658  ac_c99_complex_tr1=no;
1659  if test x"$ac_has_complex_h" = x"yes"; then
1660    AC_MSG_CHECKING([for ISO C99 support to TR1 in <complex.h>])
1661    AC_TRY_COMPILE([#include <complex.h>],
1662		   [typedef __complex__ float float_type; float_type tmpf;
1663		    cacosf(tmpf);
1664		    casinf(tmpf);
1665		    catanf(tmpf);
1666		    cacoshf(tmpf);
1667		    casinhf(tmpf);
1668		    catanhf(tmpf);
1669		    typedef __complex__ double double_type; double_type tmpd;
1670		    cacos(tmpd);
1671		    casin(tmpd);
1672		    catan(tmpd);
1673		    cacosh(tmpd);
1674		    casinh(tmpd);
1675		    catanh(tmpd);
1676		    typedef __complex__ long double ld_type; ld_type tmpld;
1677		    cacosl(tmpld);
1678		    casinl(tmpld);
1679		    catanl(tmpld);
1680		    cacoshl(tmpld);
1681		    casinhl(tmpld);
1682		    catanhl(tmpld);
1683		   ],[ac_c99_complex_tr1=yes], [ac_c99_complex_tr1=no])
1684  fi
1685  AC_MSG_RESULT($ac_c99_complex_tr1)
1686  if test x"$ac_c99_complex_tr1" = x"yes"; then
1687    AC_DEFINE(_GLIBCXX_USE_C99_COMPLEX_TR1, 1,
1688	      [Define if C99 functions in <complex.h> should be used in
1689	      <tr1/complex>. Using compiler builtins for these functions
1690	      requires corresponding C99 library functions to be present.])
1691  fi
1692
1693  # Check for the existence of <ctype.h> functions.
1694  AC_MSG_CHECKING([for ISO C99 support to TR1 in <ctype.h>])
1695  AC_CACHE_VAL(glibcxx_cv_c99_ctype_tr1, [
1696  AC_TRY_COMPILE([#include <ctype.h>],
1697		 [int ch;
1698		  int ret;
1699		  ret = isblank(ch);
1700		 ],[glibcxx_cv_c99_ctype_tr1=yes],
1701		   [glibcxx_cv_c99_ctype_tr1=no])
1702  ])
1703  AC_MSG_RESULT($glibcxx_cv_c99_ctype_tr1)
1704  if test x"$glibcxx_cv_c99_ctype_tr1" = x"yes"; then
1705    AC_DEFINE(_GLIBCXX_USE_C99_CTYPE_TR1, 1,
1706	      [Define if C99 functions in <ctype.h> should be imported in
1707	      <tr1/cctype> in namespace std::tr1.])
1708  fi
1709
1710  # Check for the existence of <fenv.h> functions.
1711  AC_CHECK_HEADERS(fenv.h, ac_has_fenv_h=yes, ac_has_fenv_h=no)
1712  ac_c99_fenv_tr1=no;
1713  if test x"$ac_has_fenv_h" = x"yes"; then
1714    AC_MSG_CHECKING([for ISO C99 support to TR1 in <fenv.h>])
1715    AC_TRY_COMPILE([#include <fenv.h>],
1716		   [int except, mode;
1717		    fexcept_t* pflag;
1718		    fenv_t* penv;
1719		    int ret;
1720		    ret = feclearexcept(except);
1721		    ret = fegetexceptflag(pflag, except);
1722		    ret = feraiseexcept(except);
1723		    ret = fesetexceptflag(pflag, except);
1724		    ret = fetestexcept(except);
1725		    ret = fegetround();
1726		    ret = fesetround(mode);
1727		    ret = fegetenv(penv);
1728		    ret = feholdexcept(penv);
1729		    ret = fesetenv(penv);
1730		    ret = feupdateenv(penv);
1731		   ],[ac_c99_fenv_tr1=yes], [ac_c99_fenv_tr1=no])
1732  fi
1733  AC_MSG_RESULT($ac_c99_fenv_tr1)
1734  if test x"$ac_c99_fenv_tr1" = x"yes"; then
1735    AC_DEFINE(_GLIBCXX_USE_C99_FENV_TR1, 1,
1736	      [Define if C99 functions in <fenv.h> should be imported in
1737	      <tr1/cfenv> in namespace std::tr1.])
1738  fi
1739
1740  # Check for the existence of <stdint.h> types.
1741  AC_MSG_CHECKING([for ISO C99 support to TR1 in <stdint.h>])
1742  AC_CACHE_VAL(glibcxx_cv_c99_stdint_tr1, [
1743  AC_TRY_COMPILE([#define __STDC_LIMIT_MACROS
1744		  #define __STDC_CONSTANT_MACROS
1745		  #include <stdint.h>],
1746		 [typedef int8_t          my_int8_t;
1747		  my_int8_t               i8 = INT8_MIN;
1748		  i8 = INT8_MAX;
1749		  typedef int16_t         my_int16_t;
1750		  my_int16_t              i16 = INT16_MIN;
1751		  i16 = INT16_MAX;
1752		  typedef int32_t         my_int32_t;
1753		  my_int32_t              i32 = INT32_MIN;
1754		  i32 = INT32_MAX;
1755		  typedef int64_t         my_int64_t;
1756		  my_int64_t              i64 = INT64_MIN;
1757		  i64 = INT64_MAX;
1758		  typedef int_fast8_t     my_int_fast8_t;
1759		  my_int_fast8_t          if8 = INT_FAST8_MIN;
1760		  if8 = INT_FAST8_MAX;
1761		  typedef int_fast16_t    my_int_fast16_t;
1762		  my_int_fast16_t         if16 = INT_FAST16_MIN;
1763		  if16 = INT_FAST16_MAX;
1764		  typedef int_fast32_t    my_int_fast32_t;
1765		  my_int_fast32_t         if32 = INT_FAST32_MIN;
1766		  if32 = INT_FAST32_MAX;
1767		  typedef int_fast64_t    my_int_fast64_t;
1768		  my_int_fast64_t         if64 = INT_FAST64_MIN;
1769		  if64 = INT_FAST64_MAX;
1770		  typedef int_least8_t    my_int_least8_t;
1771		  my_int_least8_t         il8 = INT_LEAST8_MIN;
1772		  il8 = INT_LEAST8_MAX;
1773		  typedef int_least16_t   my_int_least16_t;
1774		  my_int_least16_t        il16 = INT_LEAST16_MIN;
1775		  il16 = INT_LEAST16_MAX;
1776		  typedef int_least32_t   my_int_least32_t;
1777		  my_int_least32_t        il32 = INT_LEAST32_MIN;
1778		  il32 = INT_LEAST32_MAX;
1779		  typedef int_least64_t   my_int_least64_t;
1780		  my_int_least64_t        il64 = INT_LEAST64_MIN;
1781		  il64 = INT_LEAST64_MAX;
1782		  typedef intmax_t        my_intmax_t;
1783		  my_intmax_t             im = INTMAX_MAX;
1784		  im = INTMAX_MIN;
1785		  typedef intptr_t        my_intptr_t;
1786		  my_intptr_t             ip = INTPTR_MAX;
1787		  ip = INTPTR_MIN;
1788		  typedef uint8_t         my_uint8_t;
1789		  my_uint8_t              ui8 = UINT8_MAX;
1790		  ui8 = UINT8_MAX;
1791		  typedef uint16_t        my_uint16_t;
1792		  my_uint16_t             ui16 = UINT16_MAX;
1793		  ui16 = UINT16_MAX;
1794		  typedef uint32_t        my_uint32_t;
1795		  my_uint32_t             ui32 = UINT32_MAX;
1796		  ui32 = UINT32_MAX;
1797		  typedef uint64_t        my_uint64_t;
1798		  my_uint64_t             ui64 = UINT64_MAX;
1799		  ui64 = UINT64_MAX;
1800		  typedef uint_fast8_t    my_uint_fast8_t;
1801		  my_uint_fast8_t         uif8 = UINT_FAST8_MAX;
1802		  uif8 = UINT_FAST8_MAX;
1803		  typedef uint_fast16_t   my_uint_fast16_t;
1804		  my_uint_fast16_t        uif16 = UINT_FAST16_MAX;
1805		  uif16 = UINT_FAST16_MAX;
1806		  typedef uint_fast32_t   my_uint_fast32_t;
1807		  my_uint_fast32_t        uif32 = UINT_FAST32_MAX;
1808		  uif32 = UINT_FAST32_MAX;
1809		  typedef uint_fast64_t   my_uint_fast64_t;
1810		  my_uint_fast64_t        uif64 = UINT_FAST64_MAX;
1811		  uif64 = UINT_FAST64_MAX;
1812		  typedef uint_least8_t   my_uint_least8_t;
1813		  my_uint_least8_t        uil8 = UINT_LEAST8_MAX;
1814		  uil8 = UINT_LEAST8_MAX;
1815		  typedef uint_least16_t  my_uint_least16_t;
1816		  my_uint_least16_t       uil16 = UINT_LEAST16_MAX;
1817		  uil16 = UINT_LEAST16_MAX;
1818		  typedef uint_least32_t  my_uint_least32_t;
1819		  my_uint_least32_t       uil32 = UINT_LEAST32_MAX;
1820		  uil32 = UINT_LEAST32_MAX;
1821		  typedef uint_least64_t  my_uint_least64_t;
1822		  my_uint_least64_t       uil64 = UINT_LEAST64_MAX;
1823		  uil64 = UINT_LEAST64_MAX;
1824		  typedef uintmax_t       my_uintmax_t;
1825		  my_uintmax_t            uim = UINTMAX_MAX;
1826		  uim = UINTMAX_MAX;
1827		  typedef uintptr_t       my_uintptr_t;
1828		  my_uintptr_t            uip = UINTPTR_MAX;
1829		  uip = UINTPTR_MAX;
1830		 ],[glibcxx_cv_c99_stdint_tr1=yes],
1831		   [glibcxx_cv_c99_stdint_tr1=no])
1832  ])
1833  AC_MSG_RESULT($glibcxx_cv_c99_stdint_tr1)
1834  if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
1835    AC_DEFINE(_GLIBCXX_USE_C99_STDINT_TR1, 1,
1836	      [Define if C99 types in <stdint.h> should be imported in
1837	      <tr1/cstdint> in namespace std::tr1.])
1838  fi
1839
1840  # Check for the existence of <math.h> functions.
1841  AC_MSG_CHECKING([for ISO C99 support to TR1 in <math.h>])
1842  AC_CACHE_VAL(glibcxx_cv_c99_math_tr1, [
1843  AC_TRY_COMPILE([#include <math.h>],
1844		 [typedef double_t  my_double_t;
1845		  typedef float_t   my_float_t;
1846		  acosh(0.0);
1847		  acoshf(0.0f);
1848		  acoshl(0.0l);
1849		  asinh(0.0);
1850		  asinhf(0.0f);
1851		  asinhl(0.0l);
1852		  atanh(0.0);
1853		  atanhf(0.0f);
1854		  atanhl(0.0l);
1855		  cbrt(0.0);
1856		  cbrtf(0.0f);
1857		  cbrtl(0.0l);
1858		  copysign(0.0, 0.0);
1859		  copysignf(0.0f, 0.0f);
1860		  copysignl(0.0l, 0.0l);
1861		  erf(0.0);
1862		  erff(0.0f);
1863		  erfl(0.0l);
1864		  erfc(0.0);
1865		  erfcf(0.0f);
1866		  erfcl(0.0l);
1867		  exp2(0.0);
1868		  exp2f(0.0f);
1869		  exp2l(0.0l);
1870		  expm1(0.0);
1871		  expm1f(0.0f);
1872		  expm1l(0.0l);
1873		  fdim(0.0, 0.0);
1874		  fdimf(0.0f, 0.0f);
1875		  fdiml(0.0l, 0.0l);
1876		  fma(0.0, 0.0, 0.0);
1877		  fmaf(0.0f, 0.0f, 0.0f);
1878		  fmal(0.0l, 0.0l, 0.0l);
1879		  fmax(0.0, 0.0);
1880		  fmaxf(0.0f, 0.0f);
1881		  fmaxl(0.0l, 0.0l);
1882		  fmin(0.0, 0.0);
1883		  fminf(0.0f, 0.0f);
1884		  fminl(0.0l, 0.0l);
1885		  hypot(0.0, 0.0);
1886		  hypotf(0.0f, 0.0f);
1887		  hypotl(0.0l, 0.0l);
1888		  ilogb(0.0);
1889		  ilogbf(0.0f);
1890		  ilogbl(0.0l);
1891		  lgamma(0.0);
1892		  lgammaf(0.0f);
1893		  lgammal(0.0l);
1894		  #ifndef __APPLE__ /* see below */
1895		  llrint(0.0);
1896		  llrintf(0.0f);
1897		  llrintl(0.0l);
1898		  llround(0.0);
1899		  llroundf(0.0f);
1900		  llroundl(0.0l);
1901		  #endif
1902		  log1p(0.0);
1903		  log1pf(0.0f);
1904		  log1pl(0.0l);
1905		  log2(0.0);
1906		  log2f(0.0f);
1907		  log2l(0.0l);
1908		  logb(0.0);
1909		  logbf(0.0f);
1910		  logbl(0.0l);
1911		  lrint(0.0);
1912		  lrintf(0.0f);
1913		  lrintl(0.0l);
1914		  lround(0.0);
1915		  lroundf(0.0f);
1916		  lroundl(0.0l);
1917		  nan(0);
1918		  nanf(0);
1919		  nanl(0);
1920		  nearbyint(0.0);
1921		  nearbyintf(0.0f);
1922		  nearbyintl(0.0l);
1923		  nextafter(0.0, 0.0);
1924		  nextafterf(0.0f, 0.0f);
1925		  nextafterl(0.0l, 0.0l);
1926		  nexttoward(0.0, 0.0);
1927		  nexttowardf(0.0f, 0.0f);
1928		  nexttowardl(0.0l, 0.0l);
1929		  remainder(0.0, 0.0);
1930		  remainderf(0.0f, 0.0f);
1931		  remainderl(0.0l, 0.0l);
1932		  remquo(0.0, 0.0, 0);
1933		  remquof(0.0f, 0.0f, 0);
1934		  remquol(0.0l, 0.0l, 0);
1935		  rint(0.0);
1936		  rintf(0.0f);
1937		  rintl(0.0l);
1938		  round(0.0);
1939		  roundf(0.0f);
1940		  roundl(0.0l);
1941		  scalbln(0.0, 0l);
1942		  scalblnf(0.0f, 0l);
1943		  scalblnl(0.0l, 0l);
1944		  scalbn(0.0, 0);
1945		  scalbnf(0.0f, 0);
1946		  scalbnl(0.0l, 0);
1947		  tgamma(0.0);
1948		  tgammaf(0.0f);
1949		  tgammal(0.0l);
1950		  trunc(0.0);
1951		  truncf(0.0f);
1952		  truncl(0.0l);
1953		 ],[glibcxx_cv_c99_math_tr1=yes], [glibcxx_cv_c99_math_tr1=no])
1954  ])
1955  AC_MSG_RESULT($glibcxx_cv_c99_math_tr1)
1956  if test x"$glibcxx_cv_c99_math_tr1" = x"yes"; then
1957    AC_DEFINE(_GLIBCXX_USE_C99_MATH_TR1, 1,
1958	      [Define if C99 functions or macros in <math.h> should be imported
1959	      in <tr1/cmath> in namespace std::tr1.])
1960
1961    case "${target_os}" in
1962      darwin*)
1963        AC_MSG_CHECKING([for ISO C99 rounding functions in <math.h>])
1964        AC_CACHE_VAL(glibcxx_cv_c99_math_llround, [
1965          AC_TRY_COMPILE([#include <math.h>],
1966		 [llrint(0.0);
1967		  llrintf(0.0f);
1968		  llrintl(0.0l);
1969		  llround(0.0);
1970		  llroundf(0.0f);
1971		  llroundl(0.0l);
1972		 ],
1973		 [glibcxx_cv_c99_math_llround=yes],
1974		 [glibcxx_cv_c99_math_llround=no])
1975          ])
1976	AC_MSG_RESULT($glibcxx_cv_c99_math_llround)
1977        ;;
1978    esac
1979    if test x"$glibcxx_cv_c99_math_llround" = x"no"; then
1980      AC_DEFINE(_GLIBCXX_NO_C99_ROUNDING_FUNCS, 1,
1981		[Define if C99 llrint and llround functions are missing from <math.h>.])
1982    fi
1983  fi
1984
1985  # Check for the existence of <inttypes.h> functions (NB: doesn't make
1986  # sense if the glibcxx_cv_c99_stdint_tr1 check fails, per C99, 7.8/1).
1987  ac_c99_inttypes_tr1=no;
1988  if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
1989    AC_MSG_CHECKING([for ISO C99 support to TR1 in <inttypes.h>])
1990    AC_TRY_COMPILE([#include <inttypes.h>],
1991		   [intmax_t i, numer, denom, base;
1992		    const char* s;
1993		    char** endptr;
1994		    intmax_t ret = imaxabs(i);
1995		    imaxdiv_t dret = imaxdiv(numer, denom);
1996		    ret = strtoimax(s, endptr, base);
1997		    uintmax_t uret = strtoumax(s, endptr, base);
1998		   ],[ac_c99_inttypes_tr1=yes], [ac_c99_inttypes_tr1=no])
1999  fi
2000  AC_MSG_RESULT($ac_c99_inttypes_tr1)
2001  if test x"$ac_c99_inttypes_tr1" = x"yes"; then
2002    AC_DEFINE(_GLIBCXX_USE_C99_INTTYPES_TR1, 1,
2003	      [Define if C99 functions in <inttypes.h> should be imported in
2004	      <tr1/cinttypes> in namespace std::tr1.])
2005  fi
2006
2007  # Check for the existence of wchar_t <inttypes.h> functions (NB: doesn't
2008  # make sense if the glibcxx_cv_c99_stdint_tr1 check fails, per C99, 7.8/1).
2009  ac_c99_inttypes_wchar_t_tr1=no;
2010  if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
2011    AC_MSG_CHECKING([for wchar_t ISO C99 support to TR1 in <inttypes.h>])
2012    AC_TRY_COMPILE([#include <inttypes.h>],
2013		   [intmax_t base;
2014		    const wchar_t* s;
2015		    wchar_t** endptr;
2016		    intmax_t ret = wcstoimax(s, endptr, base);
2017		    uintmax_t uret = wcstoumax(s, endptr, base);
2018		   ],[ac_c99_inttypes_wchar_t_tr1=yes],
2019		     [ac_c99_inttypes_wchar_t_tr1=no])
2020  fi
2021  AC_MSG_RESULT($ac_c99_inttypes_wchar_t_tr1)
2022  if test x"$ac_c99_inttypes_wchar_t_tr1" = x"yes"; then
2023    AC_DEFINE(_GLIBCXX_USE_C99_INTTYPES_WCHAR_T_TR1, 1,
2024	      [Define if wchar_t C99 functions in <inttypes.h> should be
2025	      imported in <tr1/cinttypes> in namespace std::tr1.])
2026  fi
2027
2028  # Check for the existence of the <stdbool.h> header.
2029  AC_CHECK_HEADERS(stdbool.h)
2030
2031  # Check for the existence of the <stdalign.h> header.
2032  AC_CHECK_HEADERS(stdalign.h)
2033
2034  CXXFLAGS="$ac_save_CXXFLAGS"
2035  AC_LANG_RESTORE
2036])
2037
2038dnl
2039dnl Check for uchar.h and usability.
2040dnl
2041AC_DEFUN([GLIBCXX_CHECK_UCHAR_H], [
2042
2043  # Test uchar.h.
2044  AC_CHECK_HEADERS(uchar.h, ac_has_uchar_h=yes, ac_has_uchar_h=no)
2045
2046  AC_LANG_SAVE
2047  AC_LANG_CPLUSPLUS
2048  ac_save_CXXFLAGS="$CXXFLAGS"
2049  CXXFLAGS="$CXXFLAGS -std=c++11"
2050
2051  if test x"$ac_has_uchar_h" = x"yes"; then
2052    AC_MSG_CHECKING([for ISO C11 support for <uchar.h>])
2053    AC_TRY_COMPILE([#include <uchar.h>
2054		    #ifdef __STDC_UTF_16__
2055		    long i = __STDC_UTF_16__;
2056		    #endif
2057		    #ifdef __STDC_UTF_32__
2058		    long j = __STDC_UTF_32__;
2059		    #endif
2060		    namespace test
2061		    {
2062		      using ::c16rtomb;
2063		      using ::c32rtomb;
2064		      using ::mbrtoc16;
2065		      using ::mbrtoc32;
2066		    }
2067		   ],
2068		   [], [ac_c11_uchar_cxx11=yes], [ac_c11_uchar_cxx11=no])
2069  else
2070    ac_c11_uchar_cxx11=no
2071  fi
2072  AC_MSG_RESULT($ac_c11_uchar_cxx11)
2073  if test x"$ac_c11_uchar_cxx11" = x"yes"; then
2074    AC_DEFINE(_GLIBCXX_USE_C11_UCHAR_CXX11, 1,
2075	      [Define if C11 functions in <uchar.h> should be imported into
2076	      namespace std in <cuchar>.])
2077  fi
2078
2079  CXXFLAGS="$ac_save_CXXFLAGS"
2080  AC_LANG_RESTORE
2081])
2082
2083
2084dnl
2085dnl Check whether "/dev/random" and "/dev/urandom" are available for
2086dnl class std::random_device from C++ 2011 [rand.device], and
2087dnl random_device of "TR1" (Chapter 5.1, "Random number generation").
2088dnl
2089AC_DEFUN([GLIBCXX_CHECK_DEV_RANDOM], [
2090
2091  AC_MSG_CHECKING([for "/dev/random" and "/dev/urandom" for std::random_device])
2092  AC_CACHE_VAL(glibcxx_cv_dev_random, [
2093    if test -r /dev/random && test -r /dev/urandom; then
2094  ## For MSys environment the test above is detected as false-positive
2095  ## on mingw-targets.  So disable it explicitly for them.
2096      case ${target_os} in
2097	*mingw*) glibcxx_cv_dev_random=no ;;
2098	*) glibcxx_cv_dev_random=yes ;;
2099      esac
2100    else
2101      glibcxx_cv_dev_random=no;
2102    fi
2103  ])
2104  AC_MSG_RESULT($glibcxx_cv_dev_random)
2105
2106  if test x"$glibcxx_cv_dev_random" = x"yes"; then
2107    AC_DEFINE(_GLIBCXX_USE_DEV_RANDOM, 1,
2108	      [Define if /dev/random and /dev/urandom are available for
2109	       std::random_device.])
2110    AC_DEFINE(_GLIBCXX_USE_RANDOM_TR1, 1,
2111	      [Define if /dev/random and /dev/urandom are available for
2112	       the random_device of TR1 (Chapter 5.1).])
2113  fi
2114
2115])
2116
2117dnl
2118dnl Compute the EOF, SEEK_CUR, and SEEK_END integer constants.
2119dnl
2120AC_DEFUN([GLIBCXX_COMPUTE_STDIO_INTEGER_CONSTANTS], [
2121
2122  AC_CACHE_CHECK([for the value of EOF], glibcxx_cv_stdio_eof, [
2123  AC_COMPUTE_INT([glibcxx_cv_stdio_eof], [[EOF]],
2124		 [#include <stdio.h>],
2125		 [AC_MSG_ERROR([computing EOF failed])])
2126  ])
2127  AC_DEFINE_UNQUOTED(_GLIBCXX_STDIO_EOF, $glibcxx_cv_stdio_eof,
2128		     [Define to the value of the EOF integer constant.])
2129
2130  AC_CACHE_CHECK([for the value of SEEK_CUR], glibcxx_cv_stdio_seek_cur, [
2131  AC_COMPUTE_INT([glibcxx_cv_stdio_seek_cur], [[SEEK_CUR]],
2132		 [#include <stdio.h>],
2133		 [AC_MSG_ERROR([computing SEEK_CUR failed])])
2134  ])
2135  AC_DEFINE_UNQUOTED(_GLIBCXX_STDIO_SEEK_CUR, $glibcxx_cv_stdio_seek_cur,
2136		     [Define to the value of the SEEK_CUR integer constant.])
2137
2138  AC_CACHE_CHECK([for the value of SEEK_END], glibcxx_cv_stdio_seek_end, [
2139  AC_COMPUTE_INT([glibcxx_cv_stdio_seek_end], [[SEEK_END]],
2140		 [#include <stdio.h>],
2141		 [AC_MSG_ERROR([computing SEEK_END failed])])
2142  ])
2143  AC_DEFINE_UNQUOTED(_GLIBCXX_STDIO_SEEK_END, $glibcxx_cv_stdio_seek_end,
2144		     [Define to the value of the SEEK_END integer constant.])
2145])
2146
2147dnl
2148dnl Check whether required C++ overloads are present in <stdio.h>.
2149dnl
2150AC_DEFUN([GLIBCXX_CHECK_STDIO_PROTO], [
2151
2152  AC_LANG_SAVE
2153  AC_LANG_CPLUSPLUS
2154  # Use C++11 because a conforming <stdio.h> won't define gets for C++14,
2155  # and we don't need a declaration for C++14 anyway.
2156  ac_save_CXXFLAGS="$CXXFLAGS"
2157  CXXFLAGS="$CXXFLAGS -std=gnu++11"
2158
2159  AC_MSG_CHECKING([for gets declaration])
2160  AC_CACHE_VAL(glibcxx_cv_gets, [
2161  AC_COMPILE_IFELSE([AC_LANG_SOURCE(
2162	  [#include <stdio.h>
2163	   namespace test
2164	   {
2165              using ::gets;
2166	   }
2167	])],
2168	[glibcxx_cv_gets=yes],
2169	[glibcxx_cv_gets=no]
2170      )])
2171
2172  if test $glibcxx_cv_gets = yes; then
2173    AC_DEFINE(HAVE_GETS, 1, [Define if gets is available in <stdio.h> before C++14.])
2174  fi
2175  AC_MSG_RESULT($glibcxx_cv_gets)
2176
2177  CXXFLAGS="$ac_save_CXXFLAGS"
2178  AC_LANG_RESTORE
2179])
2180
2181dnl
2182dnl Check whether required C++11 overloads for floating point and integral
2183dnl types are present in <math.h>.
2184dnl
2185AC_DEFUN([GLIBCXX_CHECK_MATH11_PROTO], [
2186
2187  AC_LANG_SAVE
2188  AC_LANG_CPLUSPLUS
2189  ac_save_CXXFLAGS="$CXXFLAGS"
2190  CXXFLAGS="$CXXFLAGS -std=c++11"
2191
2192  case "$host" in
2193    *-*-solaris2.*)
2194      # Solaris 12 Build 86, Solaris 11.3 SRU 3.6, and Solaris 10 Patch
2195      # 11996[67]-02 introduced the C++11 <math.h> floating point overloads.
2196      AC_MSG_CHECKING([for C++11 <math.h> floating point overloads])
2197      AC_CACHE_VAL(glibcxx_cv_math11_fp_overload, [
2198	AC_COMPILE_IFELSE([AC_LANG_SOURCE(
2199	  [#include <math.h>
2200	   #undef isfinite
2201	   namespace std {
2202	     inline bool isfinite(float __x)
2203	     { return __builtin_isfinite(__x); }
2204	   }
2205	])],
2206	[glibcxx_cv_math11_fp_overload=no],
2207	[glibcxx_cv_math11_fp_overload=yes]
2208      )])
2209
2210      # autoheader cannot handle indented templates.
2211      AH_VERBATIM([__CORRECT_ISO_CPP11_MATH_H_PROTO_FP],
2212        [/* Define if all C++11 floating point overloads are available in <math.h>.  */
2213#if __cplusplus >= 201103L
2214#undef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
2215#endif])
2216
2217      if test $glibcxx_cv_math11_fp_overload = yes; then
2218        AC_DEFINE(__CORRECT_ISO_CPP11_MATH_H_PROTO_FP)
2219      fi
2220      AC_MSG_RESULT([$glibcxx_cv_math11_fp_overload])
2221
2222      # Solaris 12 Build 90, Solaris 11.3 SRU 5.6, and Solaris 10 Patch
2223      # 11996[67]-02 introduced the C++11 <math.h> integral type overloads.
2224      AC_MSG_CHECKING([for C++11 <math.h> integral type overloads])
2225      AC_CACHE_VAL(glibcxx_cv_math11_int_overload, [
2226	AC_COMPILE_IFELSE([AC_LANG_SOURCE(
2227	  [#include <math.h>
2228	   namespace std {
2229	     template<typename _Tp>
2230	       struct __is_integer;
2231	     template<>
2232	       struct __is_integer<int>
2233	       {
2234	         enum { __value = 1 };
2235	       };
2236	   }
2237	   namespace __gnu_cxx {
2238	     template<bool, typename>
2239	       struct __enable_if;
2240	     template<typename _Tp>
2241	       struct __enable_if<true, _Tp>
2242	       { typedef _Tp __type; };
2243	   }
2244	   namespace std {
2245	     template<typename _Tp>
2246	       constexpr typename __gnu_cxx::__enable_if
2247	       		 <__is_integer<_Tp>::__value, double>::__type
2248	       log2(_Tp __x)
2249	       { return __builtin_log2(__x); }
2250	   }
2251	   int
2252	   main (void)
2253	   {
2254	     int i = 1000;
2255	     return std::log2(i);
2256	   }
2257	])],
2258	[glibcxx_cv_math11_int_overload=no],
2259	[glibcxx_cv_math11_int_overload=yes]
2260      )])
2261
2262      # autoheader cannot handle indented templates.
2263      AH_VERBATIM([__CORRECT_ISO_CPP11_MATH_H_PROTO_INT],
2264        [/* Define if all C++11 integral type overloads are available in <math.h>.  */
2265#if __cplusplus >= 201103L
2266#undef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
2267#endif])
2268
2269      if test $glibcxx_cv_math11_int_overload = yes; then
2270        AC_DEFINE(__CORRECT_ISO_CPP11_MATH_H_PROTO_INT)
2271      fi
2272      AC_MSG_RESULT([$glibcxx_cv_math11_int_overload])
2273      ;;
2274    *)
2275      # If <math.h> defines the obsolete isinf(double) and isnan(double)
2276      # functions (instead of or as well as the C99 generic macros) then we
2277      # can't define std::isinf(double) and std::isnan(double) in <cmath>
2278      # and must use the ones from <math.h> instead.
2279      AC_MSG_CHECKING([for obsolete isinf function in <math.h>])
2280        AC_CACHE_VAL(glibcxx_cv_obsolete_isinf, [
2281          AC_COMPILE_IFELSE([AC_LANG_SOURCE(
2282            [#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS
2283             #include <math.h>
2284             #undef isinf
2285             namespace std {
2286               using ::isinf;
2287               bool isinf(float);
2288               bool isinf(long double);
2289             }
2290             using std::isinf;
2291             bool b = isinf(0.0);
2292          ])],
2293          [glibcxx_cv_obsolete_isinf=yes],
2294          [glibcxx_cv_obsolete_isinf=no]
2295        )])
2296      AC_MSG_RESULT([$glibcxx_cv_obsolete_isinf])
2297      if test $glibcxx_cv_obsolete_isinf = yes; then
2298        AC_DEFINE(HAVE_OBSOLETE_ISINF, 1,
2299                  [Define if <math.h> defines obsolete isinf function.])
2300      fi
2301
2302      AC_MSG_CHECKING([for obsolete isnan function in <math.h>])
2303        AC_CACHE_VAL(glibcxx_cv_obsolete_isnan, [
2304          AC_COMPILE_IFELSE([AC_LANG_SOURCE(
2305            [#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS
2306             #include <math.h>
2307             #undef isnan
2308             namespace std {
2309               using ::isnan;
2310               bool isnan(float);
2311               bool isnan(long double);
2312             }
2313             using std::isnan;
2314             bool b = isnan(0.0);
2315          ])],
2316          [glibcxx_cv_obsolete_isnan=yes],
2317          [glibcxx_cv_obsolete_isnan=no]
2318        )])
2319      AC_MSG_RESULT([$glibcxx_cv_obsolete_isnan])
2320      if test $glibcxx_cv_obsolete_isnan = yes; then
2321        AC_DEFINE(HAVE_OBSOLETE_ISNAN, 1,
2322                  [Define if <math.h> defines obsolete isnan function.])
2323      fi
2324      ;;
2325  esac
2326
2327  CXXFLAGS="$ac_save_CXXFLAGS"
2328  AC_LANG_RESTORE
2329])
2330
2331dnl
2332dnl Check whether macros, etc are present for <system_error>
2333dnl
2334AC_DEFUN([GLIBCXX_CHECK_SYSTEM_ERROR], [
2335
2336m4_pushdef([n_syserr], [1])dnl
2337m4_foreach([syserr], [EOWNERDEAD, ENOTRECOVERABLE, ENOLINK, EPROTO, ENODATA,
2338		      ENOSR, ENOSTR, ETIME, EBADMSG, ECANCELED,
2339		      EOVERFLOW, ENOTSUP, EIDRM, ETXTBSY,
2340		      ECHILD, ENOSPC, EPERM,
2341		      ETIMEDOUT, EWOULDBLOCK],
2342[m4_pushdef([SYSERR], m4_toupper(syserr))dnl
2343AC_MSG_CHECKING([for syserr])
2344AC_CACHE_VAL([glibcxx_cv_system_error[]n_syserr], [
2345AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <errno.h>]],
2346				   [int i = syserr;])],
2347		  [glibcxx_cv_system_error[]n_syserr=yes],
2348		  [glibcxx_cv_system_error[]n_syserr=no])
2349])
2350AC_MSG_RESULT([$glibcxx_cv_system_error[]n_syserr])
2351if test x"$glibcxx_cv_system_error[]n_syserr" = x"yes"; then
2352  AC_DEFINE([HAVE_]SYSERR, 1, [Define if ]syserr[ exists.])
2353fi
2354m4_define([n_syserr], m4_incr(n_syserr))dnl
2355m4_popdef([SYSERR])dnl
2356])
2357m4_popdef([n_syserr])dnl
2358])
2359
2360dnl
2361dnl Check for what type of C headers to use.
2362dnl
2363dnl --enable-cheaders= [does stuff].
2364dnl --disable-cheaders [does not do anything, really].
2365dnl  +  Usage:  GLIBCXX_ENABLE_CHEADERS[(DEFAULT)]
2366dnl       Where DEFAULT is either 'c' or 'c_std' or 'c_global'.
2367dnl
2368AC_DEFUN([GLIBCXX_ENABLE_CHEADERS], [
2369  GLIBCXX_ENABLE(cheaders,$1,[[[=KIND]]],
2370    [construct "C" headers for g++], [permit c|c_std|c_global])
2371  AC_MSG_NOTICE("C" header strategy set to $enable_cheaders)
2372
2373  C_INCLUDE_DIR='${glibcxx_srcdir}/include/'$enable_cheaders
2374
2375  # Allow overrides to configure.host here.
2376  if test $enable_cheaders = c_global; then
2377     c_compatibility=yes
2378  fi
2379
2380  AC_SUBST(C_INCLUDE_DIR)
2381  GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C, test $enable_cheaders = c)
2382  GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C_STD, test $enable_cheaders = c_std)
2383  GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C_GLOBAL, test $enable_cheaders = c_global)
2384  GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_COMPATIBILITY, test $c_compatibility = yes)
2385])
2386
2387
2388dnl
2389dnl Check for which locale library to use.  The choice is mapped to
2390dnl a subdirectory of config/locale.
2391dnl
2392dnl Default is generic.
2393dnl
2394AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
2395  GLIBCXX_ENABLE(clocale,auto,[[[=MODEL]]],
2396    [use MODEL for target locale package],
2397    [permit generic|gnu|ieee_1003.1-2001|newlib|yes|no|auto])
2398
2399  # Deal with gettext issues.  Default to not using it (=no) until we detect
2400  # support for it later.  Let the user turn it off via --e/d, but let that
2401  # default to on for easier handling.
2402  USE_NLS=no
2403  AC_ARG_ENABLE(nls,
2404    AC_HELP_STRING([--enable-nls],[use Native Language Support (default)]),
2405    [],
2406    [enable_nls=yes])
2407
2408  # Either a known package, or "auto"
2409  if test $enable_clocale = no || test $enable_clocale = yes; then
2410     enable_clocale=auto
2411  fi
2412  enable_clocale_flag=$enable_clocale
2413
2414  # Probe for locale model to use if none specified.
2415  # Default to "generic".
2416  if test $enable_clocale_flag = auto; then
2417    case ${target_os} in
2418      linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
2419	enable_clocale_flag=gnu
2420	;;
2421      darwin*)
2422	enable_clocale_flag=darwin
2423	;;
2424      dragonfly* | freebsd*)
2425	enable_clocale_flag=dragonfly
2426	;;
2427      openbsd*)
2428	enable_clocale_flag=newlib
2429	;;
2430      *)
2431	if test x"$with_newlib" = x"yes"; then
2432	  enable_clocale_flag=newlib
2433	else
2434	  enable_clocale_flag=generic
2435	fi
2436	;;
2437    esac
2438  fi
2439
2440  # Sanity check model, and test for special functionality.
2441  if test $enable_clocale_flag = gnu; then
2442    AC_EGREP_CPP([_GLIBCXX_ok], [
2443    #include <features.h>
2444    #if (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined(__UCLIBC__)
2445      _GLIBCXX_ok
2446    #endif
2447    ], enable_clocale_flag=gnu, enable_clocale_flag=generic)
2448
2449    # Set it to scream when it hurts.
2450    ac_save_CFLAGS="$CFLAGS"
2451    CFLAGS="-Wimplicit-function-declaration -Werror"
2452
2453    # Use strxfrm_l if available.
2454    AC_TRY_COMPILE([#define _GNU_SOURCE 1
2455     		    #include <string.h>
2456		    #include <locale.h>],
2457		    [char s[128]; __locale_t loc; strxfrm_l(s, "C", 5, loc);],
2458		    AC_DEFINE(HAVE_STRXFRM_L, 1,
2459		    [Define if strxfrm_l is available in <string.h>.]),)
2460
2461    # Use strerror_l if available.
2462    AC_TRY_COMPILE([#define _GNU_SOURCE 1
2463		    #include <string.h>
2464		    #include <locale.h>],
2465		    [__locale_t loc; strerror_l(5, loc);],
2466		    AC_DEFINE(HAVE_STRERROR_L, 1,
2467		    [Define if strerror_l is available in <string.h>.]),)
2468
2469    CFLAGS="$ac_save_CFLAGS"
2470  fi
2471
2472  # Perhaps use strerror_r if available, and strerror_l isn't.
2473  ac_save_CFLAGS="$CFLAGS"
2474  CFLAGS="-Wimplicit-function-declaration -Werror"
2475  AC_TRY_COMPILE([#define _GNU_SOURCE 1
2476	     	  #include <string.h>
2477		  #include <locale.h>],
2478		  [char s[128]; strerror_r(5, s, 128);],
2479		  AC_DEFINE(HAVE_STRERROR_R, 1,
2480		  [Define if strerror_r is available in <string.h>.]),)
2481  CFLAGS="$ac_save_CFLAGS"
2482
2483  # Set configure bits for specified locale package
2484  AC_MSG_CHECKING([for C locale to use])
2485  case ${enable_clocale_flag} in
2486    generic)
2487      AC_MSG_RESULT(generic)
2488
2489      CLOCALE_H=config/locale/generic/c_locale.h
2490      CLOCALE_CC=config/locale/generic/c_locale.cc
2491      CCODECVT_CC=config/locale/generic/codecvt_members.cc
2492      CCOLLATE_CC=config/locale/generic/collate_members.cc
2493      CCTYPE_CC=config/locale/generic/ctype_members.cc
2494      CMESSAGES_H=config/locale/generic/messages_members.h
2495      CMESSAGES_CC=config/locale/generic/messages_members.cc
2496      CMONEY_CC=config/locale/generic/monetary_members.cc
2497      CNUMERIC_CC=config/locale/generic/numeric_members.cc
2498      CTIME_H=config/locale/generic/time_members.h
2499      CTIME_CC=config/locale/generic/time_members.cc
2500      CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
2501      ;;
2502    darwin)
2503      AC_MSG_RESULT(darwin)
2504
2505      CLOCALE_H=config/locale/generic/c_locale.h
2506      CLOCALE_CC=config/locale/generic/c_locale.cc
2507      CCODECVT_CC=config/locale/generic/codecvt_members.cc
2508      CCOLLATE_CC=config/locale/generic/collate_members.cc
2509      CCTYPE_CC=config/locale/darwin/ctype_members.cc
2510      CMESSAGES_H=config/locale/generic/messages_members.h
2511      CMESSAGES_CC=config/locale/generic/messages_members.cc
2512      CMONEY_CC=config/locale/generic/monetary_members.cc
2513      CNUMERIC_CC=config/locale/generic/numeric_members.cc
2514      CTIME_H=config/locale/generic/time_members.h
2515      CTIME_CC=config/locale/generic/time_members.cc
2516      CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
2517      ;;
2518
2519    dragonfly)
2520      AC_MSG_RESULT(dragonfly or freebsd)
2521
2522      CLOCALE_H=config/locale/dragonfly/c_locale.h
2523      CLOCALE_CC=config/locale/dragonfly/c_locale.cc
2524      CCODECVT_CC=config/locale/dragonfly/codecvt_members.cc
2525      CCOLLATE_CC=config/locale/dragonfly/collate_members.cc
2526      CCTYPE_CC=config/locale/dragonfly/ctype_members.cc
2527      CMESSAGES_H=config/locale/generic/messages_members.h
2528      CMESSAGES_CC=config/locale/generic/messages_members.cc
2529      CMONEY_CC=config/locale/dragonfly/monetary_members.cc
2530      CNUMERIC_CC=config/locale/dragonfly/numeric_members.cc
2531      CTIME_H=config/locale/dragonfly/time_members.h
2532      CTIME_CC=config/locale/dragonfly/time_members.cc
2533      CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
2534      ;;
2535
2536    gnu)
2537      AC_MSG_RESULT(gnu)
2538
2539      # Declare intention to use gettext, and add support for specific
2540      # languages.
2541      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
2542      ALL_LINGUAS="de fr"
2543
2544      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
2545      AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
2546      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
2547	USE_NLS=yes
2548      fi
2549      # Export the build objects.
2550      for ling in $ALL_LINGUAS; do \
2551	glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
2552	glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
2553      done
2554      AC_SUBST(glibcxx_MOFILES)
2555      AC_SUBST(glibcxx_POFILES)
2556
2557      CLOCALE_H=config/locale/gnu/c_locale.h
2558      CLOCALE_CC=config/locale/gnu/c_locale.cc
2559      CCODECVT_CC=config/locale/gnu/codecvt_members.cc
2560      CCOLLATE_CC=config/locale/gnu/collate_members.cc
2561      CCTYPE_CC=config/locale/gnu/ctype_members.cc
2562      CMESSAGES_H=config/locale/gnu/messages_members.h
2563      CMESSAGES_CC=config/locale/gnu/messages_members.cc
2564      CMONEY_CC=config/locale/gnu/monetary_members.cc
2565      CNUMERIC_CC=config/locale/gnu/numeric_members.cc
2566      CTIME_H=config/locale/gnu/time_members.h
2567      CTIME_CC=config/locale/gnu/time_members.cc
2568      CLOCALE_INTERNAL_H=config/locale/gnu/c++locale_internal.h
2569      ;;
2570    ieee_1003.1-2001)
2571      AC_MSG_RESULT(IEEE 1003.1)
2572
2573      CLOCALE_H=config/locale/ieee_1003.1-2001/c_locale.h
2574      CLOCALE_CC=config/locale/ieee_1003.1-2001/c_locale.cc
2575      CCODECVT_CC=config/locale/generic/codecvt_members.cc
2576      CCOLLATE_CC=config/locale/generic/collate_members.cc
2577      CCTYPE_CC=config/locale/generic/ctype_members.cc
2578      CMESSAGES_H=config/locale/ieee_1003.1-2001/messages_members.h
2579      CMESSAGES_CC=config/locale/ieee_1003.1-2001/messages_members.cc
2580      CMONEY_CC=config/locale/generic/monetary_members.cc
2581      CNUMERIC_CC=config/locale/generic/numeric_members.cc
2582      CTIME_H=config/locale/generic/time_members.h
2583      CTIME_CC=config/locale/generic/time_members.cc
2584      CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
2585      ;;
2586    newlib)
2587      AC_MSG_RESULT(newlib)
2588
2589      CLOCALE_H=config/locale/generic/c_locale.h
2590      CLOCALE_CC=config/locale/generic/c_locale.cc
2591      CCODECVT_CC=config/locale/generic/codecvt_members.cc
2592      CCOLLATE_CC=config/locale/generic/collate_members.cc
2593      CCTYPE_CC=config/locale/newlib/ctype_members.cc
2594      CMESSAGES_H=config/locale/generic/messages_members.h
2595      CMESSAGES_CC=config/locale/generic/messages_members.cc
2596      CMONEY_CC=config/locale/generic/monetary_members.cc
2597      CNUMERIC_CC=config/locale/generic/numeric_members.cc
2598      CTIME_H=config/locale/generic/time_members.h
2599      CTIME_CC=config/locale/generic/time_members.cc
2600      CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
2601      ;;
2602  esac
2603
2604  # This is where the testsuite looks for locale catalogs, using the
2605  # -DLOCALEDIR define during testsuite compilation.
2606  glibcxx_localedir=${glibcxx_builddir}/po/share/locale
2607  AC_SUBST(glibcxx_localedir)
2608
2609  # A standalone libintl (e.g., GNU libintl) may be in use.
2610  if test $USE_NLS = yes; then
2611    AC_CHECK_HEADERS([libintl.h], [], USE_NLS=no)
2612    AC_SEARCH_LIBS(gettext, intl, [], USE_NLS=no)
2613  fi
2614  if test $USE_NLS = yes; then
2615    AC_DEFINE(_GLIBCXX_USE_NLS, 1,
2616	      [Define if NLS translations are to be used.])
2617  fi
2618
2619  AC_SUBST(USE_NLS)
2620  AC_SUBST(CLOCALE_H)
2621  AC_SUBST(CMESSAGES_H)
2622  AC_SUBST(CCODECVT_CC)
2623  AC_SUBST(CCOLLATE_CC)
2624  AC_SUBST(CCTYPE_CC)
2625  AC_SUBST(CMESSAGES_CC)
2626  AC_SUBST(CMONEY_CC)
2627  AC_SUBST(CNUMERIC_CC)
2628  AC_SUBST(CTIME_H)
2629  AC_SUBST(CTIME_CC)
2630  AC_SUBST(CLOCALE_CC)
2631  AC_SUBST(CLOCALE_INTERNAL_H)
2632])
2633
2634
2635dnl
2636dnl Check for which std::allocator base class to use.  The choice is
2637dnl mapped from a subdirectory of include/ext.
2638dnl
2639dnl Default is new.
2640dnl
2641AC_DEFUN([GLIBCXX_ENABLE_ALLOCATOR], [
2642  AC_MSG_CHECKING([for std::allocator base class])
2643  GLIBCXX_ENABLE(libstdcxx-allocator,auto,[[[=KIND]]],
2644    [use KIND for target std::allocator base],
2645    [permit new|malloc|mt|bitmap|pool|yes|no|auto])
2646
2647  # If they didn't use this option switch, or if they specified --enable
2648  # with no specific model, we'll have to look for one.  If they
2649  # specified --disable (???), do likewise.
2650  if test $enable_libstdcxx_allocator = no ||
2651     test $enable_libstdcxx_allocator = yes;
2652  then
2653     enable_libstdcxx_allocator=auto
2654  fi
2655
2656  # Either a known package, or "auto". Auto implies the default choice
2657  # for a particular platform.
2658  enable_libstdcxx_allocator_flag=$enable_libstdcxx_allocator
2659
2660  # Probe for host-specific support if no specific model is specified.
2661  # Default to "new".
2662  if test $enable_libstdcxx_allocator_flag = auto; then
2663    case ${target_os} in
2664      linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
2665	enable_libstdcxx_allocator_flag=new
2666	;;
2667      *)
2668	enable_libstdcxx_allocator_flag=new
2669	;;
2670    esac
2671  fi
2672  AC_MSG_RESULT($enable_libstdcxx_allocator_flag)
2673
2674
2675  # Set configure bits for specified locale package
2676  case ${enable_libstdcxx_allocator_flag} in
2677    bitmap)
2678      ALLOCATOR_H=config/allocator/bitmap_allocator_base.h
2679      ALLOCATOR_NAME=__gnu_cxx::bitmap_allocator
2680      ;;
2681    malloc)
2682      ALLOCATOR_H=config/allocator/malloc_allocator_base.h
2683      ALLOCATOR_NAME=__gnu_cxx::malloc_allocator
2684      ;;
2685    mt)
2686      ALLOCATOR_H=config/allocator/mt_allocator_base.h
2687      ALLOCATOR_NAME=__gnu_cxx::__mt_alloc
2688      ;;
2689    new)
2690      ALLOCATOR_H=config/allocator/new_allocator_base.h
2691      ALLOCATOR_NAME=__gnu_cxx::new_allocator
2692      ;;
2693    pool)
2694      ALLOCATOR_H=config/allocator/pool_allocator_base.h
2695      ALLOCATOR_NAME=__gnu_cxx::__pool_alloc
2696      ;;
2697  esac
2698
2699  GLIBCXX_CONDITIONAL(ENABLE_ALLOCATOR_NEW,
2700		      test $enable_libstdcxx_allocator_flag = new)
2701  AC_SUBST(ALLOCATOR_H)
2702  AC_SUBST(ALLOCATOR_NAME)
2703])
2704
2705
2706dnl
2707dnl Check for whether the Boost-derived checks should be turned on.
2708dnl
2709dnl --enable-concept-checks turns them on.
2710dnl --disable-concept-checks leaves them off.
2711dnl  +  Usage:  GLIBCXX_ENABLE_CONCEPT_CHECKS[(DEFAULT)]
2712dnl       Where DEFAULT is either `yes' or `no'.
2713dnl
2714AC_DEFUN([GLIBCXX_ENABLE_CONCEPT_CHECKS], [
2715  GLIBCXX_ENABLE(concept-checks,$1,,[use Boost-derived template checks])
2716  if test $enable_concept_checks = yes; then
2717    AC_DEFINE(_GLIBCXX_CONCEPT_CHECKS, 1,
2718	      [Define to use concept checking code from the boost libraries.])
2719  fi
2720])
2721
2722dnl
2723dnl Use extern templates.
2724dnl
2725dnl --enable-extern-template defines _GLIBCXX_EXTERN_TEMPLATE to 1
2726dnl --disable-extern-template defines _GLIBCXX_EXTERN_TEMPLATE to 0
2727
2728dnl  +  Usage:  GLIBCXX_ENABLE_TEMPLATE[(DEFAULT)]
2729dnl       Where DEFAULT is `yes' or `no'.
2730dnl
2731AC_DEFUN([GLIBCXX_ENABLE_EXTERN_TEMPLATE], [
2732
2733  GLIBCXX_ENABLE(extern-template,$1,,[enable extern template])
2734
2735  AC_MSG_CHECKING([for extern template support])
2736  AC_MSG_RESULT([$enable_extern_template])
2737
2738  GLIBCXX_CONDITIONAL(ENABLE_EXTERN_TEMPLATE, test $enable_extern_template = yes)
2739])
2740
2741dnl
2742dnl Use vtable verification.
2743dnl
2744dnl --enable-vtable-verify defines _GLIBCXX_VTABLE_VERIFY to 1
2745dnl --disable-vtable-verify defines _GLIBCXX_VTABLE_VERIFY to 0
2746
2747dnl  +  Usage:  GLIBCXX_ENABLE_VTABLE_VERIFY[(DEFAULT)]
2748dnl       Where DEFAULT is `yes' or `no'.
2749dnl
2750AC_DEFUN([GLIBCXX_ENABLE_VTABLE_VERIFY], [
2751
2752  GLIBCXX_ENABLE(vtable-verify,$1,,[enable vtable verify])
2753
2754  AC_MSG_CHECKING([for vtable verify support])
2755  AC_MSG_RESULT([$enable_vtable_verify])
2756
2757  vtv_cygmin=no
2758  if test $enable_vtable_verify = yes; then
2759    case ${target_os} in
2760      cygwin*|mingw32*)
2761        VTV_CXXFLAGS="-fvtable-verify=std -Wl,-lvtv,-u_vtable_map_vars_start,-u_vtable_map_vars_end"
2762        VTV_CXXLINKFLAGS="-L${toplevel_builddir}/libvtv/.libs -Wl,--rpath -Wl,${toplevel_builddir}/libvtv/.libs"
2763        vtv_cygmin=yes
2764        ;;
2765      darwin*)
2766        VTV_CXXFLAGS="-fvtable-verify=std -Wl,-u,_vtable_map_vars_start -Wl,-u,_vtable_map_vars_end"
2767        VTV_CXXLINKFLAGS="-L${toplevel_builddir}/libvtv/.libs -Wl,-rpath,${toplevel_builddir}/libvtv/.libs"
2768        ;;
2769      solaris2*)
2770        VTV_CXXFLAGS="-fvtable-verify=std -Wl,-u_vtable_map_vars_start,-u_vtable_map_vars_end"
2771        VTV_CXXLINKFLAGS="-L${toplevel_builddir}/libvtv/.libs -Wl,-R -Wl,${toplevel_builddir}/libvtv/.libs"
2772        ;;
2773      *)
2774        VTV_CXXFLAGS="-fvtable-verify=std -Wl,-u_vtable_map_vars_start,-u_vtable_map_vars_end"
2775        VTV_CXXLINKFLAGS="-L${toplevel_builddir}/libvtv/.libs -Wl,--rpath -Wl,${toplevel_builddir}/libvtv/.libs"
2776        ;;
2777    esac
2778    VTV_PCH_CXXFLAGS="-fvtable-verify=std"
2779  else
2780    VTV_CXXFLAGS=
2781    VTV_PCH_CXXFLAGS=
2782    VTV_CXXLINKFLAGS=
2783  fi
2784
2785  AC_SUBST(VTV_CXXFLAGS)
2786  AC_SUBST(VTV_PCH_CXXFLAGS)
2787  AC_SUBST(VTV_CXXLINKFLAGS)
2788  AM_CONDITIONAL(VTV_CYGMIN, test x$vtv_cygmin = xyes)
2789  GLIBCXX_CONDITIONAL(ENABLE_VTABLE_VERIFY, test $enable_vtable_verify = yes)
2790])
2791
2792dnl
2793dnl Check for parallel mode pre-requisites, including OpenMP support.
2794dnl
2795dnl  +  Usage:  GLIBCXX_ENABLE_PARALLEL
2796dnl
2797AC_DEFUN([GLIBCXX_ENABLE_PARALLEL], [
2798
2799  enable_parallel=no;
2800
2801  # See if configured libgomp/omp.h exists. (libgomp may be in
2802  # noconfigdirs but not explicitly disabled.)
2803  if echo " ${TARGET_CONFIGDIRS} " | grep " libgomp " > /dev/null 2>&1 ; then
2804    enable_parallel=yes;
2805  else
2806    AC_MSG_NOTICE([target-libgomp not built])
2807  fi
2808
2809  AC_MSG_CHECKING([for parallel mode support])
2810  AC_MSG_RESULT([$enable_parallel])
2811])
2812
2813
2814dnl
2815dnl Check for which I/O library to use:  stdio, or something specific.
2816dnl
2817dnl Default is stdio.
2818dnl
2819AC_DEFUN([GLIBCXX_ENABLE_CSTDIO], [
2820  AC_MSG_CHECKING([for underlying I/O to use])
2821  GLIBCXX_ENABLE(cstdio,stdio,[[[=PACKAGE]]],
2822    [use target-specific I/O package], [permit stdio])
2823
2824  # Now that libio has been removed, you can have any color you want as long
2825  # as it's black.  This is one big no-op until other packages are added, but
2826  # showing the framework never hurts.
2827  case ${enable_cstdio} in
2828    stdio)
2829      CSTDIO_H=config/io/c_io_stdio.h
2830      BASIC_FILE_H=config/io/basic_file_stdio.h
2831      BASIC_FILE_CC=config/io/basic_file_stdio.cc
2832      AC_MSG_RESULT(stdio)
2833      ;;
2834  esac
2835
2836  AC_SUBST(CSTDIO_H)
2837  AC_SUBST(BASIC_FILE_H)
2838  AC_SUBST(BASIC_FILE_CC)
2839])
2840
2841
2842dnl
2843dnl Check for "unusual" flags to pass to the compiler while building.
2844dnl
2845dnl --enable-cxx-flags='-foo -bar -baz' is a general method for passing
2846dnl     experimental flags such as -fpch, -fIMI, -Dfloat=char, etc.
2847dnl --disable-cxx-flags passes nothing.
2848dnl  +  See http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00131.html
2849dnl         http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00284.html
2850dnl         http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00035.html
2851dnl  +  Usage:  GLIBCXX_ENABLE_CXX_FLAGS(default flags)
2852dnl       If "default flags" is an empty string, the effect is the same
2853dnl       as --disable or --enable=no.
2854dnl
2855AC_DEFUN([GLIBCXX_ENABLE_CXX_FLAGS], [dnl
2856  AC_MSG_CHECKING([for extra compiler flags for building])
2857  GLIBCXX_ENABLE(cxx-flags,$1,[=FLAGS],
2858    [pass compiler FLAGS when building library],
2859    [case "x$enable_cxx_flags" in
2860      xno | x)   enable_cxx_flags= ;;
2861      x-*)       ;;
2862      *)         AC_MSG_ERROR(_g_switch needs compiler flags as arguments) ;;
2863     esac])
2864
2865  # Run through flags (either default or command-line) and set anything
2866  # extra (e.g., #defines) that must accompany particular g++ options.
2867  if test -n "$enable_cxx_flags"; then
2868    for f in $enable_cxx_flags; do
2869      case "$f" in
2870	-fhonor-std)  ;;
2871	-*)  ;;
2872	*)   # and we're trying to pass /what/ exactly?
2873	     AC_MSG_ERROR([compiler flags start with a -]) ;;
2874      esac
2875    done
2876  fi
2877
2878  EXTRA_CXX_FLAGS="$enable_cxx_flags"
2879  AC_MSG_RESULT($EXTRA_CXX_FLAGS)
2880  AC_SUBST(EXTRA_CXX_FLAGS)
2881])
2882
2883
2884dnl
2885dnl Check to see if debugging libraries are to be built.
2886dnl
2887dnl --enable-libstdcxx-debug
2888dnl builds a separate set of debugging libraries in addition to the
2889dnl normal (shared, static) libstdc++ binaries.
2890dnl
2891dnl --disable-libstdcxx-debug
2892dnl builds only one (non-debug) version of libstdc++.
2893dnl
2894dnl --enable-libstdcxx-debug-flags=FLAGS
2895dnl iff --enable-debug == yes, then use FLAGS to build the debug library.
2896dnl
2897dnl  +  Usage:  GLIBCXX_ENABLE_DEBUG[(DEFAULT)]
2898dnl       Where DEFAULT is either `yes' or `no'.
2899dnl
2900AC_DEFUN([GLIBCXX_ENABLE_DEBUG], [
2901  AC_MSG_CHECKING([for additional debug build])
2902  GLIBCXX_ENABLE(libstdcxx-debug,$1,,[build extra debug library])
2903  AC_MSG_RESULT($enable_libstdcxx_debug)
2904  GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_DEBUG, test $enable_libstdcxx_debug = yes)
2905])
2906
2907
2908dnl
2909dnl Check for explicit debug flags.
2910dnl
2911dnl --enable-libstdcxx-debug-flags='-O1'
2912dnl is a general method for passing flags to be used when
2913dnl building debug libraries with --enable-libstdcxx-debug.
2914dnl
2915dnl --disable-libstdcxx-debug-flags does nothing.
2916dnl  +  Usage:  GLIBCXX_ENABLE_DEBUG_FLAGS(default flags)
2917dnl       If "default flags" is an empty string, the effect is the same
2918dnl       as --disable or --enable=no.
2919dnl
2920AC_DEFUN([GLIBCXX_ENABLE_DEBUG_FLAGS], [
2921  GLIBCXX_ENABLE(libstdcxx-debug-flags,[$1],[=FLAGS],
2922    [pass compiler FLAGS when building debug library],
2923    [case "x$enable_libstdcxx_debug_flags" in
2924      xno | x)    enable_libstdcxx_debug_flags= ;;
2925      x-*)        ;;
2926      *)          AC_MSG_ERROR(_g_switch needs compiler flags as arguments) ;;
2927     esac])
2928
2929  # Option parsed, now set things appropriately
2930  DEBUG_FLAGS="$enable_libstdcxx_debug_flags"
2931  AC_SUBST(DEBUG_FLAGS)
2932
2933  AC_MSG_NOTICE([Debug build flags set to $DEBUG_FLAGS])
2934])
2935
2936
2937dnl
2938dnl Check if the user only wants a freestanding library implementation.
2939dnl
2940dnl --disable-hosted-libstdcxx will turn off most of the library build,
2941dnl installing only the headers required by [17.4.1.3] and the language
2942dnl support library.  More than that will be built (to keep the Makefiles
2943dnl conveniently clean), but not installed.
2944dnl
2945dnl Sets:
2946dnl  is_hosted  (yes/no)
2947dnl
2948dnl Defines:
2949dnl  _GLIBCXX_HOSTED   (always defined, either to 1 or 0)
2950dnl
2951AC_DEFUN([GLIBCXX_ENABLE_HOSTED], [
2952  AC_ARG_ENABLE([hosted-libstdcxx],
2953    AC_HELP_STRING([--disable-hosted-libstdcxx],
2954		   [only build freestanding C++ runtime support]),,
2955    [case "$host" in
2956	arm*-*-symbianelf*)
2957	    enable_hosted_libstdcxx=no
2958	    ;;
2959	*)
2960	    enable_hosted_libstdcxx=yes
2961	    ;;
2962     esac])
2963  if test "$enable_hosted_libstdcxx" = no; then
2964    AC_MSG_NOTICE([Only freestanding libraries will be built])
2965    is_hosted=no
2966    hosted_define=0
2967    enable_abi_check=no
2968    enable_libstdcxx_pch=no
2969  else
2970    is_hosted=yes
2971    hosted_define=1
2972  fi
2973  GLIBCXX_CONDITIONAL(GLIBCXX_HOSTED, test $is_hosted = yes)
2974  AC_DEFINE_UNQUOTED(_GLIBCXX_HOSTED, $hosted_define,
2975    [Define to 1 if a full hosted library is built, or 0 if freestanding.])
2976])
2977
2978
2979dnl
2980dnl Check if the user wants a non-verbose library implementation.
2981dnl
2982dnl --disable-libstdcxx-verbose will turn off descriptive messages to
2983dnl standard error on termination.
2984dnl
2985dnl Defines:
2986dnl  _GLIBCXX_VERBOSE (always defined, either to 1 or 0)
2987dnl
2988AC_DEFUN([GLIBCXX_ENABLE_VERBOSE], [
2989  AC_ARG_ENABLE([libstdcxx-verbose],
2990    AC_HELP_STRING([--disable-libstdcxx-verbose],
2991		   [disable termination messages to standard error]),,
2992		   [enable_libstdcxx_verbose=yes])
2993  if test x"$enable_libstdcxx_verbose" = xyes; then
2994    verbose_define=1
2995  else
2996    AC_MSG_NOTICE([verbose termination messages are disabled])
2997    verbose_define=0
2998  fi
2999  AC_DEFINE_UNQUOTED(_GLIBCXX_VERBOSE, $verbose_define,
3000    [Define to 1 if a verbose library is built, or 0 otherwise.])
3001])
3002
3003
3004dnl
3005dnl Check for template specializations for the 'long long' type.
3006dnl The result determines only whether 'long long' I/O is enabled; things
3007dnl like numeric_limits<> specializations are always available.
3008dnl
3009dnl --enable-long-long defines _GLIBCXX_USE_LONG_LONG
3010dnl --disable-long-long leaves _GLIBCXX_USE_LONG_LONG undefined
3011dnl  +  Usage:  GLIBCXX_ENABLE_LONG_LONG[(DEFAULT)]
3012dnl       Where DEFAULT is either `yes' or `no'.
3013dnl
3014AC_DEFUN([GLIBCXX_ENABLE_LONG_LONG], [
3015  GLIBCXX_ENABLE(long-long,$1,,[enable template specializations for 'long long'])
3016  if test $enable_long_long = yes; then
3017    AC_DEFINE(_GLIBCXX_USE_LONG_LONG, 1,
3018	      [Define if code specialized for long long should be used.])
3019  fi
3020  AC_MSG_CHECKING([for enabled long long specializations])
3021  AC_MSG_RESULT([$enable_long_long])
3022])
3023
3024
3025dnl
3026dnl Check for decimal floating point.
3027dnl See:
3028dnl http://gcc.gnu.org/onlinedocs/gcc/Decimal-Float.html#Decimal-Float
3029dnl
3030dnl This checks to see if the host supports decimal floating point types.
3031dnl
3032dnl Defines:
3033dnl  _GLIBCXX_USE_DECIMAL_FLOAT
3034dnl
3035AC_DEFUN([GLIBCXX_ENABLE_DECIMAL_FLOAT], [
3036
3037  # Fake what AC_TRY_COMPILE does, without linking as this is
3038  # unnecessary for this test.
3039
3040    cat > conftest.$ac_ext << EOF
3041[#]line __oline__ "configure"
3042int main()
3043{
3044  _Decimal32 d1;
3045  _Decimal64 d2;
3046  _Decimal128 d3;
3047  return 0;
3048}
3049EOF
3050
3051    AC_MSG_CHECKING([for ISO/IEC TR 24733 ])
3052    if AC_TRY_EVAL(ac_compile); then
3053      AC_DEFINE(_GLIBCXX_USE_DECIMAL_FLOAT, 1,
3054      [Define if ISO/IEC TR 24733 decimal floating point types are supported on this host.])
3055      enable_dfp=yes
3056    else
3057      enable_dfp=no
3058    fi
3059    AC_MSG_RESULT($enable_dfp)
3060    rm -f conftest*
3061])
3062
3063dnl
3064dnl Check for GNU 128-bit integer and floating point types.
3065dnl
3066dnl Note: also checks that the types aren't standard types.
3067dnl
3068dnl Defines:
3069dnl  _GLIBCXX_USE_INT128
3070dnl  ENABLE_FLOAT128
3071dnl
3072AC_DEFUN([GLIBCXX_ENABLE_INT128_FLOAT128], [
3073
3074  AC_LANG_SAVE
3075  AC_LANG_CPLUSPLUS
3076
3077  # Fake what AC_TRY_COMPILE does, without linking as this is
3078  # unnecessary for this test.
3079
3080    cat > conftest.$ac_ext << EOF
3081[#]line __oline__ "configure"
3082template<typename T1, typename T2>
3083  struct same
3084  { typedef T2 type; };
3085
3086template<typename T>
3087  struct same<T, T>;
3088
3089int main()
3090{
3091  typename same<long, __int128>::type                i1;
3092  typename same<long long, __int128>::type           i2;
3093}
3094EOF
3095
3096    AC_MSG_CHECKING([for __int128])
3097    if AC_TRY_EVAL(ac_compile); then
3098      AC_DEFINE(_GLIBCXX_USE_INT128, 1,
3099      [Define if __int128 is supported on this host.])
3100      enable_int128=yes
3101    else
3102      enable_int128=no
3103    fi
3104    AC_MSG_RESULT($enable_int128)
3105    rm -f conftest*
3106
3107    cat > conftest.$ac_ext << EOF
3108[#]line __oline__ "configure"
3109template<typename T1, typename T2>
3110  struct same
3111  { typedef T2 type; };
3112
3113template<typename T>
3114  struct same<T, T>;
3115
3116int main()
3117{
3118  typename same<double, __float128>::type      f1;
3119  typename same<long double, __float128>::type f2;
3120}
3121EOF
3122
3123    AC_MSG_CHECKING([for __float128])
3124    if AC_TRY_EVAL(ac_compile); then
3125      enable_float128=yes
3126    else
3127      enable_float128=no
3128    fi
3129    AC_MSG_RESULT($enable_float128)
3130    GLIBCXX_CONDITIONAL(ENABLE_FLOAT128, test $enable_float128 = yes)
3131    rm -f conftest*
3132
3133  AC_LANG_RESTORE
3134])
3135
3136dnl
3137dnl Check for template specializations for the 'wchar_t' type.
3138dnl
3139dnl --enable-wchar_t defines _GLIBCXX_USE_WCHAR_T
3140dnl --disable-wchar_t leaves _GLIBCXX_USE_WCHAR_T undefined
3141dnl  +  Usage:  GLIBCXX_ENABLE_WCHAR_T[(DEFAULT)]
3142dnl       Where DEFAULT is either `yes' or `no'.
3143dnl
3144dnl Necessary support must also be present.
3145dnl
3146AC_DEFUN([GLIBCXX_ENABLE_WCHAR_T], [
3147  GLIBCXX_ENABLE(wchar_t,$1,,[enable template specializations for 'wchar_t'])
3148
3149  # Test wchar.h for mbstate_t, which is needed for char_traits and fpos.
3150  AC_CHECK_HEADERS(wchar.h, ac_has_wchar_h=yes, ac_has_wchar_h=no)
3151  AC_MSG_CHECKING([for mbstate_t])
3152  AC_TRY_COMPILE([#include <wchar.h>],
3153  [mbstate_t teststate;],
3154  have_mbstate_t=yes, have_mbstate_t=no)
3155  AC_MSG_RESULT($have_mbstate_t)
3156  if test x"$have_mbstate_t" = xyes; then
3157    AC_DEFINE(HAVE_MBSTATE_T,1,[Define if mbstate_t exists in wchar.h.])
3158  fi
3159
3160  # Test it always, for use in GLIBCXX_ENABLE_C99, together with
3161  # ac_has_wchar_h.
3162  AC_CHECK_HEADERS(wctype.h, ac_has_wctype_h=yes, ac_has_wctype_h=no)
3163
3164  if test x"$enable_wchar_t" = x"yes"; then
3165
3166    AC_LANG_SAVE
3167    AC_LANG_CPLUSPLUS
3168
3169    if test x"$ac_has_wchar_h" = xyes &&
3170       test x"$ac_has_wctype_h" = xyes; then
3171      AC_TRY_COMPILE([#include <wchar.h>
3172		      #include <stddef.h>
3173		      wint_t i;
3174		      long l = WEOF;
3175		      long j = WCHAR_MIN;
3176		      long k = WCHAR_MAX;
3177		      namespace test
3178		      {
3179			using ::btowc;
3180			using ::fgetwc;
3181			using ::fgetws;
3182			using ::fputwc;
3183			using ::fputws;
3184			using ::fwide;
3185			using ::fwprintf;
3186			using ::fwscanf;
3187			using ::getwc;
3188			using ::getwchar;
3189 			using ::mbrlen;
3190			using ::mbrtowc;
3191			using ::mbsinit;
3192			using ::mbsrtowcs;
3193			using ::putwc;
3194			using ::putwchar;
3195			using ::swprintf;
3196			using ::swscanf;
3197			using ::ungetwc;
3198			using ::vfwprintf;
3199			using ::vswprintf;
3200			using ::vwprintf;
3201			using ::wcrtomb;
3202			using ::wcscat;
3203			using ::wcschr;
3204			using ::wcscmp;
3205			using ::wcscoll;
3206			using ::wcscpy;
3207			using ::wcscspn;
3208			using ::wcsftime;
3209			using ::wcslen;
3210			using ::wcsncat;
3211			using ::wcsncmp;
3212			using ::wcsncpy;
3213			using ::wcspbrk;
3214			using ::wcsrchr;
3215			using ::wcsrtombs;
3216			using ::wcsspn;
3217			using ::wcsstr;
3218			using ::wcstod;
3219			using ::wcstok;
3220			using ::wcstol;
3221			using ::wcstoul;
3222			using ::wcsxfrm;
3223			using ::wctob;
3224			using ::wmemchr;
3225			using ::wmemcmp;
3226			using ::wmemcpy;
3227			using ::wmemmove;
3228			using ::wmemset;
3229			using ::wprintf;
3230			using ::wscanf;
3231		      }
3232		     ],[],[], [enable_wchar_t=no])
3233    else
3234      enable_wchar_t=no
3235    fi
3236
3237    AC_LANG_RESTORE
3238  fi
3239
3240  if test x"$enable_wchar_t" = x"yes"; then
3241    AC_DEFINE(_GLIBCXX_USE_WCHAR_T, 1,
3242	      [Define if code specialized for wchar_t should be used.])
3243  fi
3244
3245  AC_MSG_CHECKING([for enabled wchar_t specializations])
3246  AC_MSG_RESULT([$enable_wchar_t])
3247])
3248
3249
3250dnl
3251dnl Check to see if building and using a C++ precompiled header can be done.
3252dnl
3253dnl --enable-libstdcxx-pch=yes
3254dnl default, this shows intent to use stdc++.h.gch If it looks like it
3255dnl may work, after some light-hearted attempts to puzzle out compiler
3256dnl support, flip bits on in include/Makefile.am
3257dnl
3258dnl --disable-libstdcxx-pch
3259dnl turns off attempts to use or build stdc++.h.gch.
3260dnl
3261dnl Substs:
3262dnl  glibcxx_PCHFLAGS
3263dnl
3264AC_DEFUN([GLIBCXX_ENABLE_PCH], [
3265  GLIBCXX_ENABLE(libstdcxx-pch,$1,,[build pre-compiled libstdc++ headers])
3266  if test $enable_libstdcxx_pch = yes; then
3267    AC_CACHE_CHECK([for compiler with PCH support],
3268      [glibcxx_cv_prog_CXX_pch],
3269      [ac_save_CXXFLAGS="$CXXFLAGS"
3270       CXXFLAGS="$CXXFLAGS -Werror -Winvalid-pch -Wno-deprecated"
3271       AC_LANG_SAVE
3272       AC_LANG_CPLUSPLUS
3273       echo '#include <math.h>' > conftest.h
3274       if $CXX $CXXFLAGS $CPPFLAGS -x c++-header conftest.h \
3275			  -o conftest.h.gch 1>&5 2>&1 &&
3276		echo '#error "pch failed"' > conftest.h &&
3277	  echo '#include "conftest.h"' > conftest.cc &&
3278	       $CXX -c $CXXFLAGS $CPPFLAGS conftest.cc 1>&5 2>&1 ;
3279       then
3280	 glibcxx_cv_prog_CXX_pch=yes
3281       else
3282	 glibcxx_cv_prog_CXX_pch=no
3283       fi
3284       rm -f conftest*
3285       CXXFLAGS=$ac_save_CXXFLAGS
3286       AC_LANG_RESTORE
3287      ])
3288    enable_libstdcxx_pch=$glibcxx_cv_prog_CXX_pch
3289  fi
3290
3291  AC_MSG_CHECKING([for enabled PCH])
3292  AC_MSG_RESULT([$enable_libstdcxx_pch])
3293
3294  GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_PCH, test $enable_libstdcxx_pch = yes)
3295  if test $enable_libstdcxx_pch = yes; then
3296    glibcxx_PCHFLAGS="-include bits/stdc++.h"
3297  else
3298    glibcxx_PCHFLAGS=""
3299  fi
3300  AC_SUBST(glibcxx_PCHFLAGS)
3301])
3302
3303
3304dnl
3305dnl Check for atomic builtins.
3306dnl See:
3307dnl http://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html
3308dnl
3309dnl This checks to see if the host supports the compiler-generated
3310dnl builtins for atomic operations for various integral sizes. Note, this
3311dnl is intended to be an all-or-nothing switch, so all the atomic operations
3312dnl that are used should be checked.
3313dnl
3314dnl Note:
3315dnl libgomp and libgfortran use a link test, see CHECK_SYNC_FETCH_AND_ADD.
3316dnl
3317AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS], [
3318  AC_LANG_SAVE
3319  AC_LANG_CPLUSPLUS
3320  old_CXXFLAGS="$CXXFLAGS"
3321
3322  # Do link tests if possible, instead asm tests, limited to some platforms
3323  # see discussion in PR target/40134, PR libstdc++/40133 and the thread
3324  # starting at http://gcc.gnu.org/ml/gcc-patches/2009-07/msg00322.html
3325  atomic_builtins_link_tests=no
3326  if test x$gcc_no_link != xyes; then
3327    # Can do link tests. Limit to some tested platforms
3328    case "$host" in
3329      *-*-linux* | *-*-uclinux* | *-*-kfreebsd*-gnu | *-*-gnu*)
3330	atomic_builtins_link_tests=yes
3331	;;
3332    esac
3333  fi
3334
3335  if test x$atomic_builtins_link_tests = xyes; then
3336
3337  # Do link tests.
3338
3339  CXXFLAGS="$CXXFLAGS -fno-exceptions"
3340
3341  AC_MSG_CHECKING([for atomic builtins for bool])
3342  AC_CACHE_VAL(glibcxx_cv_atomic_bool, [
3343    AC_TRY_LINK(
3344      [ ],
3345      [typedef bool atomic_type;
3346       atomic_type c1;
3347       atomic_type c2;
3348       atomic_type c3(0);
3349       // N.B. __atomic_fetch_add is not supported for bool.
3350       __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
3351				   __ATOMIC_RELAXED);
3352       __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
3353       __atomic_load_n(&c1, __ATOMIC_RELAXED);
3354      ],
3355      [glibcxx_cv_atomic_bool=yes],
3356      [glibcxx_cv_atomic_bool=no])
3357  ])
3358  AC_MSG_RESULT($glibcxx_cv_atomic_bool)
3359
3360  AC_MSG_CHECKING([for atomic builtins for short])
3361  AC_CACHE_VAL(glibcxx_cv_atomic_short, [
3362    AC_TRY_LINK(
3363      [ ],
3364      [typedef short atomic_type;
3365       atomic_type c1;
3366       atomic_type c2;
3367       atomic_type c3(0);
3368       __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
3369       __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
3370				   __ATOMIC_RELAXED);
3371       __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
3372       __atomic_load_n(&c1, __ATOMIC_RELAXED);
3373      ],
3374      [glibcxx_cv_atomic_short=yes],
3375      [glibcxx_cv_atomic_short=no])
3376  ])
3377  AC_MSG_RESULT($glibcxx_cv_atomic_short)
3378
3379  AC_MSG_CHECKING([for atomic builtins for int])
3380  AC_CACHE_VAL(glibcxx_cv_atomic_int, [
3381    AC_TRY_LINK(
3382      [ ],
3383      [typedef int atomic_type;
3384       atomic_type c1;
3385       atomic_type c2;
3386       atomic_type c3(0);
3387       __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
3388       __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
3389				   __ATOMIC_RELAXED);
3390       __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
3391       __atomic_load_n(&c1, __ATOMIC_RELAXED);
3392      ],
3393      [glibcxx_cv_atomic_int=yes],
3394      [glibcxx_cv_atomic_int=no])
3395  ])
3396  AC_MSG_RESULT($glibcxx_cv_atomic_int)
3397
3398  AC_MSG_CHECKING([for atomic builtins for long long])
3399  AC_CACHE_VAL(glibcxx_cv_atomic_long_long, [
3400    AC_TRY_LINK(
3401      [ ],
3402      [typedef long long atomic_type;
3403       atomic_type c1;
3404       atomic_type c2;
3405       atomic_type c3(0);
3406       __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
3407       __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
3408				   __ATOMIC_RELAXED);
3409       __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
3410       __atomic_load_n(&c1, __ATOMIC_RELAXED);
3411      ],
3412      [glibcxx_cv_atomic_long_long=yes],
3413      [glibcxx_cv_atomic_long_long=no])
3414  ])
3415  AC_MSG_RESULT($glibcxx_cv_atomic_long_long)
3416
3417  else
3418
3419  # Do asm tests.
3420
3421  # Compile unoptimized.
3422  CXXFLAGS='-O0 -S'
3423
3424  # Fake what AC_TRY_COMPILE does.
3425
3426    cat > conftest.$ac_ext << EOF
3427[#]line __oline__ "configure"
3428int main()
3429{
3430  typedef bool atomic_type;
3431  atomic_type c1;
3432  atomic_type c2;
3433  atomic_type c3(0);
3434  // N.B. __atomic_fetch_add is not supported for bool.
3435  __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
3436			      __ATOMIC_RELAXED);
3437  __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
3438  __atomic_load_n(&c1, __ATOMIC_RELAXED);
3439
3440  return 0;
3441}
3442EOF
3443
3444    AC_MSG_CHECKING([for atomic builtins for bool])
3445    if AC_TRY_EVAL(ac_compile); then
3446      if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
3447	glibcxx_cv_atomic_bool=no
3448      else
3449	glibcxx_cv_atomic_bool=yes
3450      fi
3451    fi
3452    AC_MSG_RESULT($glibcxx_cv_atomic_bool)
3453    rm -f conftest*
3454
3455    cat > conftest.$ac_ext << EOF
3456[#]line __oline__ "configure"
3457int main()
3458{
3459  typedef short atomic_type;
3460  atomic_type c1;
3461  atomic_type c2;
3462  atomic_type c3(0);
3463  __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
3464  __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
3465			      __ATOMIC_RELAXED);
3466  __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
3467  __atomic_load_n(&c1, __ATOMIC_RELAXED);
3468
3469  return 0;
3470}
3471EOF
3472
3473    AC_MSG_CHECKING([for atomic builtins for short])
3474    if AC_TRY_EVAL(ac_compile); then
3475      if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
3476	glibcxx_cv_atomic_short=no
3477      else
3478	glibcxx_cv_atomic_short=yes
3479      fi
3480    fi
3481    AC_MSG_RESULT($glibcxx_cv_atomic_short)
3482    rm -f conftest*
3483
3484    cat > conftest.$ac_ext << EOF
3485[#]line __oline__ "configure"
3486int main()
3487{
3488  // NB: _Atomic_word not necessarily int.
3489  typedef int atomic_type;
3490  atomic_type c1;
3491  atomic_type c2;
3492  atomic_type c3(0);
3493  __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
3494  __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
3495			      __ATOMIC_RELAXED);
3496  __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
3497  __atomic_load_n(&c1, __ATOMIC_RELAXED);
3498
3499  return 0;
3500}
3501EOF
3502
3503    AC_MSG_CHECKING([for atomic builtins for int])
3504    if AC_TRY_EVAL(ac_compile); then
3505      if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
3506	glibcxx_cv_atomic_int=no
3507      else
3508	glibcxx_cv_atomic_int=yes
3509      fi
3510    fi
3511    AC_MSG_RESULT($glibcxx_cv_atomic_int)
3512    rm -f conftest*
3513
3514    cat > conftest.$ac_ext << EOF
3515[#]line __oline__ "configure"
3516int main()
3517{
3518  typedef long long atomic_type;
3519  atomic_type c1;
3520  atomic_type c2;
3521  atomic_type c3(0);
3522  __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
3523  __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
3524			      __ATOMIC_RELAXED);
3525  __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
3526  __atomic_load_n(&c1, __ATOMIC_RELAXED);
3527
3528  return 0;
3529}
3530EOF
3531
3532    AC_MSG_CHECKING([for atomic builtins for long long])
3533    if AC_TRY_EVAL(ac_compile); then
3534      if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
3535	glibcxx_cv_atomic_long_long=no
3536      else
3537	glibcxx_cv_atomic_long_long=yes
3538      fi
3539    fi
3540    AC_MSG_RESULT($glibcxx_cv_atomic_long_long)
3541    rm -f conftest*
3542
3543  fi
3544
3545  CXXFLAGS="$old_CXXFLAGS"
3546  AC_LANG_RESTORE
3547
3548  # Set atomicity_dir to builtins if all but the long long test above passes,
3549  # or if the builtins were already chosen (e.g. by configure.host).
3550  if { test "$glibcxx_cv_atomic_bool" = yes \
3551     && test "$glibcxx_cv_atomic_short" = yes \
3552     && test "$glibcxx_cv_atomic_int" = yes; } \
3553     || test "$atomicity_dir" = "cpu/generic/atomicity_builtins"; then
3554    AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS, 1,
3555    [Define if the compiler supports C++11 atomics.])
3556    atomicity_dir=cpu/generic/atomicity_builtins
3557  fi
3558
3559  # If still generic, set to mutex.
3560  if test $atomicity_dir = "cpu/generic" ; then
3561    atomicity_dir=cpu/generic/atomicity_mutex
3562    AC_MSG_WARN([No native atomic operations are provided for this platform.])
3563      if test "x$target_thread_file" = xsingle; then
3564	AC_MSG_WARN([They cannot be faked when thread support is disabled.])
3565	AC_MSG_WARN([Thread-safety of certain classes is not guaranteed.])
3566      else
3567	AC_MSG_WARN([They will be faked using a mutex.])
3568	AC_MSG_WARN([Performance of certain classes will degrade as a result.])
3569      fi
3570  fi
3571
3572])
3573
3574dnl
3575dnl Set default lock policy for synchronizing shared_ptr reference counting.
3576dnl
3577dnl --with-libstdcxx-lock-policy=auto
3578dnl	Use atomic operations for shared_ptr reference counting only if
3579dnl	the default target supports atomic compare-and-swap.
3580dnl --with-libstdcxx-lock-policy=atomic
3581dnl	Use atomic operations for shared_ptr reference counting.
3582dnl --with-libstdcxx-lock-policy=mutex
3583dnl	Use a mutex to synchronize shared_ptr reference counting.
3584dnl
3585dnl This controls the value of __gnu_cxx::__default_lock_policy, which
3586dnl determines how shared_ptr reference counts are synchronized.
3587dnl The option "atomic" means that atomic operations should be used,
3588dnl "mutex" means that a mutex will be used. The default option, "auto",
3589dnl will check if the target supports the compiler-generated builtins
3590dnl for atomic compare-and-swap operations for 2-byte and 4-byte integers,
3591dnl and will use "atomic" if supported, "mutex" otherwise.
3592dnl This option is ignored if the thread model used by GCC is "single",
3593dnl as no synchronization is used at all in that case.
3594dnl This option affects the library ABI (except in the "single" thread model).
3595dnl
3596dnl Defines _GLIBCXX_HAVE_ATOMIC_LOCK_POLICY to 1 if atomics should be used.
3597dnl
3598AC_DEFUN([GLIBCXX_ENABLE_LOCK_POLICY], [
3599
3600  AC_ARG_WITH([libstdcxx-lock-policy],
3601    AC_HELP_STRING([--with-libstdcxx-lock-policy={atomic,mutex,auto}],
3602      [synchronization policy for shared_ptr reference counting [default=auto]]),
3603              [libstdcxx_atomic_lock_policy=$withval],
3604              [libstdcxx_atomic_lock_policy=auto])
3605
3606  case "$libstdcxx_atomic_lock_policy" in
3607    atomic|mutex|auto) ;;
3608    *) AC_MSG_ERROR([Invalid argument for --with-libstdcxx-lock-policy]) ;;
3609  esac
3610  AC_MSG_CHECKING([for lock policy for shared_ptr reference counts])
3611
3612  if test x"$libstdcxx_atomic_lock_policy" = x"auto"; then
3613    AC_LANG_SAVE
3614    AC_LANG_CPLUSPLUS
3615    ac_save_CXXFLAGS="$CXXFLAGS"
3616
3617    dnl Why do we care about 2-byte CAS on targets with 4-byte _Atomic_word?!
3618    AC_TRY_COMPILE([
3619    #if ! defined __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2
3620    # error "No 2-byte compare-and-swap"
3621    #elif ! defined __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4
3622    # error "No 4-byte compare-and-swap"
3623    #endif
3624    ],,
3625    [libstdcxx_atomic_lock_policy=atomic],
3626    [libstdcxx_atomic_lock_policy=mutex])
3627    AC_LANG_RESTORE
3628    CXXFLAGS="$ac_save_CXXFLAGS"
3629  fi
3630
3631  if test x"$libstdcxx_atomic_lock_policy" = x"atomic"; then
3632    AC_MSG_RESULT(atomic)
3633    AC_DEFINE(HAVE_ATOMIC_LOCK_POLICY,1,
3634      [Defined if shared_ptr reference counting should use atomic operations.])
3635  else
3636    AC_MSG_RESULT(mutex)
3637  fi
3638
3639])
3640
3641dnl
3642dnl Allow visibility attributes to be used on namespaces, objects, etc.
3643dnl
3644dnl --enable-libstdcxx-visibility enables attempt to use visibility attributes.
3645dnl --disable-libstdcxx-visibility turns off all use of visibility attributes.
3646dnl  +  Usage:  GLIBCXX_ENABLE_LIBSTDCXX_VISIBILITY[(DEFAULT)]
3647dnl       Where DEFAULT is 'yes'.
3648dnl
3649AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_VISIBILITY], [
3650GLIBCXX_ENABLE(libstdcxx-visibility,$1,,[enables visibility safe usage])
3651
3652if test x$enable_libstdcxx_visibility = xyes ; then
3653  dnl all hail libgfortran
3654  dnl Check whether the target supports hidden visibility.
3655  AC_CACHE_CHECK([whether the target supports hidden visibility],
3656		 glibcxx_cv_have_attribute_visibility, [
3657  save_CFLAGS="$CFLAGS"
3658  CFLAGS="$CFLAGS -Werror"
3659  AC_TRY_COMPILE([void __attribute__((visibility("hidden"))) foo(void) { }],
3660		 [], glibcxx_cv_have_attribute_visibility=yes,
3661		 glibcxx_cv_have_attribute_visibility=no)
3662  CFLAGS="$save_CFLAGS"])
3663  if test $glibcxx_cv_have_attribute_visibility = no; then
3664    enable_libstdcxx_visibility=no
3665  fi
3666fi
3667
3668GLIBCXX_CONDITIONAL(ENABLE_VISIBILITY, test $enable_libstdcxx_visibility = yes)
3669AC_MSG_NOTICE([visibility supported: $enable_libstdcxx_visibility])
3670])
3671
3672
3673dnl
3674dnl Add version tags to symbols in shared library (or not), additionally
3675dnl marking other symbols as private/local (or not).
3676dnl
3677dnl Sets libtool_VERSION, and determines shared library SONAME.
3678dnl
3679dnl  This depends on GLIBCXX CHECK_LINKER_FEATURES, but without it assumes no.
3680dnl
3681dnl --enable-symvers=style adds a version script to the linker call when
3682dnl       creating the shared library.  The choice of version script is
3683dnl       controlled by 'style'.
3684dnl --disable-symvers does not.
3685dnl
3686dnl  +  Usage:  GLIBCXX_ENABLE_SYMVERS[(DEFAULT)]
3687dnl       Where DEFAULT is either 'yes' or 'no'.  Passing `yes' tries to
3688dnl       choose a default style based on linker characteristics.  Passing
3689dnl       'no' disables versioning.
3690dnl
3691AC_DEFUN([GLIBCXX_ENABLE_SYMVERS], [
3692
3693GLIBCXX_ENABLE(symvers,$1,[[[=STYLE]]],
3694  [enables symbol versioning of the shared library],
3695  [permit yes|no|gnu|gnu-versioned-namespace|darwin|darwin-export|sun])
3696
3697# If we never went through the GLIBCXX_CHECK_LINKER_FEATURES macro, then we
3698# don't know enough about $LD to do tricks...
3699AC_REQUIRE([GLIBCXX_CHECK_LINKER_FEATURES])
3700# Sun style symbol versions needs GNU c++filt for make_sunver.pl to work
3701# with extern "C++" in version scripts.
3702AC_REQUIRE([GCC_PROG_GNU_CXXFILT])
3703
3704# Turn a 'yes' into a suitable default.
3705if test x$enable_symvers = xyes ; then
3706  if test $enable_shared = no || test "x$LD" = x || test x$gcc_no_link = xyes; then
3707    enable_symvers=no
3708  else
3709    if test $with_gnu_ld = yes ; then
3710      case ${target_os} in
3711	hpux*)
3712	  enable_symvers=no ;;
3713	*)
3714	  enable_symvers=gnu ;;
3715      esac
3716    else
3717      case ${target_os} in
3718	darwin*)
3719	  enable_symvers=darwin ;;
3720	# Sun symbol versioning exists since Solaris 2.5.
3721	solaris2.[[5-9]]* | solaris2.1[[0-9]]*)
3722	  # make_sunver.pl needs GNU c++filt to support extern "C++" in
3723	  # version scripts, so disable symbol versioning if none can be
3724	  # found.
3725	  if test -z "$ac_cv_path_CXXFILT"; then
3726	    AC_MSG_WARN([=== You have requested Sun symbol versioning, but])
3727	    AC_MSG_WARN([=== no GNU c++filt could  be found.])
3728	    AC_MSG_WARN([=== Symbol versioning will be disabled.])
3729	    enable_symvers=no
3730	  else
3731	    enable_symvers=sun
3732	  fi
3733	  ;;
3734	*)
3735	  enable_symvers=no ;;
3736      esac
3737    fi
3738  fi
3739fi
3740
3741# Check to see if 'darwin' or 'darwin-export' can win.
3742if test x$enable_symvers = xdarwin-export ; then
3743    enable_symvers=darwin
3744fi
3745
3746# Check if 'sun' was requested on non-Solaris 2 platforms.
3747if test x$enable_symvers = xsun ; then
3748  case ${target_os} in
3749    solaris2*)
3750      # All fine.
3751      ;;
3752    *)
3753      # Unlikely to work.
3754      AC_MSG_WARN([=== You have requested Sun symbol versioning, but])
3755      AC_MSG_WARN([=== you are not targetting Solaris 2.])
3756      AC_MSG_WARN([=== Symbol versioning will be disabled.])
3757      enable_symvers=no
3758      ;;
3759  esac
3760fi
3761
3762# Check to see if 'gnu' can win.
3763if test $enable_symvers = gnu ||
3764  test $enable_symvers = gnu-versioned-namespace ||
3765  test $enable_symvers = sun; then
3766  # Check to see if libgcc_s exists, indicating that shared libgcc is possible.
3767  AC_MSG_CHECKING([for shared libgcc])
3768  ac_save_CFLAGS="$CFLAGS"
3769  CFLAGS=' -lgcc_s'
3770  AC_TRY_LINK(, [return 0;], glibcxx_shared_libgcc=yes, glibcxx_shared_libgcc=no)
3771  CFLAGS="$ac_save_CFLAGS"
3772  if test $glibcxx_shared_libgcc = no; then
3773    cat > conftest.c <<EOF
3774int main (void) { return 0; }
3775EOF
3776changequote(,)dnl
3777    glibcxx_libgcc_s_suffix=`${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
3778			     -shared -shared-libgcc -o conftest.so \
3779			     conftest.c -v 2>&1 >/dev/null \
3780			     | sed -n 's/^.* -lgcc_s\([^ ]*\) .*$/\1/p'`
3781changequote([,])dnl
3782    rm -f conftest.c conftest.so
3783    if test x${glibcxx_libgcc_s_suffix+set} = xset; then
3784      CFLAGS=" -lgcc_s$glibcxx_libgcc_s_suffix"
3785      AC_TRY_LINK(, [return 0;], glibcxx_shared_libgcc=yes)
3786      CFLAGS="$ac_save_CFLAGS"
3787    fi
3788  fi
3789  AC_MSG_RESULT($glibcxx_shared_libgcc)
3790
3791  # For GNU ld, we need at least this version.  The format is described in
3792  # GLIBCXX_CHECK_LINKER_FEATURES above.
3793  glibcxx_min_gnu_ld_version=21400
3794
3795  # If no shared libgcc, can't win.
3796  if test $glibcxx_shared_libgcc != yes; then
3797      AC_MSG_WARN([=== You have requested GNU symbol versioning, but])
3798      AC_MSG_WARN([=== you are not building a shared libgcc_s.])
3799      AC_MSG_WARN([=== Symbol versioning will be disabled.])
3800      enable_symvers=no
3801  elif test $with_gnu_ld != yes && test $enable_symvers = sun; then
3802    : All interesting versions of Sun ld support sun style symbol versioning.
3803  elif test $with_gnu_ld != yes ; then
3804    # just fail for now
3805    AC_MSG_WARN([=== You have requested GNU symbol versioning, but])
3806    AC_MSG_WARN([=== you are not using the GNU linker.])
3807    AC_MSG_WARN([=== Symbol versioning will be disabled.])
3808    enable_symvers=no
3809  elif test $glibcxx_ld_is_gold = yes ; then
3810    : All versions of gold support symbol versioning.
3811  elif test $glibcxx_gnu_ld_version -lt $glibcxx_min_gnu_ld_version ; then
3812    # The right tools, the right setup, but too old.  Fallbacks?
3813    AC_MSG_WARN(=== Linker version $glibcxx_gnu_ld_version is too old for)
3814    AC_MSG_WARN(=== full symbol versioning support in this release of GCC.)
3815    AC_MSG_WARN(=== You would need to upgrade your binutils to version)
3816    AC_MSG_WARN(=== $glibcxx_min_gnu_ld_version or later and rebuild GCC.)
3817    AC_MSG_WARN([=== Symbol versioning will be disabled.])
3818    enable_symvers=no
3819  fi
3820fi
3821
3822# For libtool versioning info, format is CURRENT:REVISION:AGE
3823libtool_VERSION=6:26:0
3824
3825# Everything parsed; figure out what files and settings to use.
3826case $enable_symvers in
3827  no)
3828    SYMVER_FILE=config/abi/pre/none.ver
3829    ;;
3830  gnu)
3831    SYMVER_FILE=config/abi/pre/gnu.ver
3832    AC_DEFINE(_GLIBCXX_SYMVER_GNU, 1,
3833	      [Define to use GNU versioning in the shared library.])
3834    ;;
3835  gnu-versioned-namespace)
3836    libtool_VERSION=8:0:0
3837    SYMVER_FILE=config/abi/pre/gnu-versioned-namespace.ver
3838    AC_DEFINE(_GLIBCXX_SYMVER_GNU_NAMESPACE, 1,
3839	      [Define to use GNU namespace versioning in the shared library.])
3840    ;;
3841  darwin)
3842    SYMVER_FILE=config/abi/pre/gnu.ver
3843    AC_DEFINE(_GLIBCXX_SYMVER_DARWIN, 1,
3844	      [Define to use darwin versioning in the shared library.])
3845    ;;
3846  sun)
3847    SYMVER_FILE=config/abi/pre/gnu.ver
3848    AC_DEFINE(_GLIBCXX_SYMVER_SUN, 1,
3849	      [Define to use Sun versioning in the shared library.])
3850    ;;
3851esac
3852
3853if test x$enable_symvers != xno ; then
3854  AC_DEFINE(_GLIBCXX_SYMVER, 1,
3855	 [Define to use symbol versioning in the shared library.])
3856fi
3857
3858AC_CACHE_CHECK([whether the target supports .symver directive],
3859	       glibcxx_cv_have_as_symver_directive, [
3860  AC_TRY_COMPILE([void foo (void); __asm (".symver foo, bar@SYMVER");],
3861		 [], glibcxx_cv_have_as_symver_directive=yes,
3862		 glibcxx_cv_have_as_symver_directive=no)])
3863if test $glibcxx_cv_have_as_symver_directive = yes; then
3864  AC_DEFINE(HAVE_AS_SYMVER_DIRECTIVE, 1,
3865    [Define to 1 if the target assembler supports .symver directive.])
3866fi
3867
3868AC_SUBST(SYMVER_FILE)
3869AC_SUBST(port_specific_symbol_files)
3870GLIBCXX_CONDITIONAL(ENABLE_SYMVERS, test $enable_symvers != no)
3871GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_GNU, test $enable_symvers = gnu)
3872GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_GNU_NAMESPACE, test $enable_symvers = gnu-versioned-namespace)
3873GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_DARWIN, test $enable_symvers = darwin)
3874GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_SUN, test $enable_symvers = sun)
3875AC_MSG_NOTICE(versioning on shared library symbols is $enable_symvers)
3876
3877if test $enable_symvers != no ; then
3878   case ${target_os} in
3879     # The Solaris 2 runtime linker doesn't support the GNU extension of
3880     # binding the same symbol to different versions
3881     solaris2*)
3882       ;;
3883     # Other platforms with GNU symbol versioning (GNU/Linux, more?) do.
3884     *)
3885       AC_DEFINE(HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT, 1,
3886	 [Define to 1 if the target runtime linker supports binding the same symbol to different versions.])
3887       ;;
3888    esac
3889fi
3890
3891# Now, set up compatibility support, if any.
3892# In addition, need this to deal with std::size_t mangling in
3893# src/compatibility.cc.  In a perfect world, could use
3894# typeid(std::size_t).name()[0] to do direct substitution.
3895AC_MSG_CHECKING([for size_t as unsigned int])
3896ac_save_CFLAGS="$CFLAGS"
3897CFLAGS="-Werror"
3898AC_TRY_COMPILE(, [__SIZE_TYPE__* stp; unsigned int* uip; stp = uip;],
3899		 [glibcxx_size_t_is_i=yes], [glibcxx_size_t_is_i=no])
3900CFLAGS=$ac_save_CFLAGS
3901if test "$glibcxx_size_t_is_i" = yes; then
3902  AC_DEFINE(_GLIBCXX_SIZE_T_IS_UINT, 1, [Define if size_t is unsigned int.])
3903fi
3904AC_MSG_RESULT([$glibcxx_size_t_is_i])
3905
3906AC_MSG_CHECKING([for ptrdiff_t as int])
3907ac_save_CFLAGS="$CFLAGS"
3908CFLAGS="-Werror"
3909AC_TRY_COMPILE(, [__PTRDIFF_TYPE__* ptp; int* ip; ptp = ip;],
3910		 [glibcxx_ptrdiff_t_is_i=yes], [glibcxx_ptrdiff_t_is_i=no])
3911CFLAGS=$ac_save_CFLAGS
3912if test "$glibcxx_ptrdiff_t_is_i" = yes; then
3913  AC_DEFINE(_GLIBCXX_PTRDIFF_T_IS_INT, 1, [Define if ptrdiff_t is int.])
3914fi
3915AC_MSG_RESULT([$glibcxx_ptrdiff_t_is_i])
3916])
3917
3918
3919dnl
3920dnl Setup to use the gcc gthr.h thread-specific memory and mutex model.
3921dnl We must stage the required headers so that they will be installed
3922dnl with the library (unlike libgcc, the STL implementation is provided
3923dnl solely within headers).  Since we must not inject random user-space
3924dnl macro names into user-provided C++ code, we first stage into <file>-in
3925dnl and process to <file> with an output command.  The reason for a two-
3926dnl stage process here is to correctly handle $srcdir!=$objdir without
3927dnl having to write complex code (the sed commands to clean the macro
3928dnl namespace are complex and fragile enough as it is).  We must also
3929dnl add a relative path so that -I- is supported properly.
3930dnl
3931dnl Substs:
3932dnl  thread_header
3933dnl
3934AC_DEFUN([GLIBCXX_ENABLE_THREADS], [
3935  AC_MSG_CHECKING([for thread model used by GCC])
3936  target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
3937  AC_MSG_RESULT([$target_thread_file])
3938  GCC_AC_THREAD_HEADER([$target_thread_file])
3939])
3940
3941
3942dnl
3943dnl Check if gthread implementation defines the types and functions
3944dnl required by the c++0x thread library.  Conforming gthread
3945dnl implementations can define __GTHREADS_CXX0X to enable use with c++0x.
3946dnl
3947dnl GLIBCXX_ENABLE_SYMVERS must be done before this.
3948dnl
3949AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [
3950  GLIBCXX_ENABLE(libstdcxx-threads,auto,,[enable C++11 threads support])
3951
3952  if test x$enable_libstdcxx_threads = xauto ||
3953     test x$enable_libstdcxx_threads = xyes; then
3954
3955  AC_LANG_SAVE
3956  AC_LANG_CPLUSPLUS
3957
3958  ac_save_CXXFLAGS="$CXXFLAGS"
3959  CXXFLAGS="$CXXFLAGS -fno-exceptions \
3960	-I${toplevel_srcdir}/libgcc -I${toplevel_builddir}/libgcc"
3961
3962  target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
3963  case $target_thread_file in
3964    posix)
3965      CXXFLAGS="$CXXFLAGS -DSUPPORTS_WEAK -DGTHREAD_USE_WEAK -D_PTHREADS"
3966  esac
3967
3968  AC_MSG_CHECKING([whether it can be safely assumed that mutex_timedlock is available])
3969
3970  AC_TRY_COMPILE([#include <unistd.h>],
3971    [
3972      // In case of POSIX threads check _POSIX_TIMEOUTS.
3973      #if (defined(_PTHREADS) \
3974	  && (!defined(_POSIX_TIMEOUTS) || _POSIX_TIMEOUTS <= 0))
3975      #error
3976      #endif
3977    ], [ac_gthread_use_mutex_timedlock=1], [ac_gthread_use_mutex_timedlock=0])
3978
3979  AC_DEFINE_UNQUOTED(_GTHREAD_USE_MUTEX_TIMEDLOCK, $ac_gthread_use_mutex_timedlock,
3980		     [Define to 1 if mutex_timedlock is available.])
3981
3982  if test $ac_gthread_use_mutex_timedlock = 1 ; then res_mutex_timedlock=yes ;
3983  else res_mutex_timedlock=no ; fi
3984  AC_MSG_RESULT([$res_mutex_timedlock])
3985
3986  AC_MSG_CHECKING([for gthreads library])
3987
3988  AC_TRY_COMPILE([#include "gthr.h"],
3989    [
3990      #ifndef __GTHREADS_CXX0X
3991      #error
3992      #endif
3993    ], [ac_has_gthreads=yes], [ac_has_gthreads=no])
3994  else
3995    ac_has_gthreads=no
3996  fi
3997
3998  AC_MSG_RESULT([$ac_has_gthreads])
3999
4000  if test x"$ac_has_gthreads" = x"yes"; then
4001    AC_DEFINE(_GLIBCXX_HAS_GTHREADS, 1,
4002	      [Define if gthreads library is available.])
4003
4004    # Also check for pthread_rwlock_t for std::shared_timed_mutex in C++14
4005    AC_CHECK_TYPE([pthread_rwlock_t],
4006            [AC_DEFINE([_GLIBCXX_USE_PTHREAD_RWLOCK_T], 1,
4007            [Define if POSIX read/write locks are available in <gthr.h>.])],
4008            [],
4009            [#include "gthr.h"])
4010  fi
4011
4012  CXXFLAGS="$ac_save_CXXFLAGS"
4013  AC_LANG_RESTORE
4014])
4015
4016
4017# Check whether LC_MESSAGES is available in <locale.h>.
4018# Ulrich Drepper <drepper@cygnus.com>, 1995.
4019#
4020# This file file be copied and used freely without restrictions.  It can
4021# be used in projects which are not available under the GNU Public License
4022# but which still want to provide support for the GNU gettext functionality.
4023# Please note that the actual code is *not* freely available.
4024AC_DEFUN([AC_LC_MESSAGES], [
4025  AC_CHECK_HEADER(locale.h, [
4026    AC_CACHE_CHECK([for LC_MESSAGES], ac_cv_val_LC_MESSAGES,
4027      [AC_TRY_COMPILE([#include <locale.h>], [return LC_MESSAGES],
4028       ac_cv_val_LC_MESSAGES=yes, ac_cv_val_LC_MESSAGES=no)])
4029    if test $ac_cv_val_LC_MESSAGES = yes; then
4030      AC_DEFINE(HAVE_LC_MESSAGES, 1,
4031		[Define if LC_MESSAGES is available in <locale.h>.])
4032    fi
4033  ])
4034])
4035
4036dnl
4037dnl Check whether rdrand is supported in the assembler.
4038AC_DEFUN([GLIBCXX_CHECK_X86_RDRAND], [
4039  AC_MSG_CHECKING([for rdrand support in assembler])
4040  AC_CACHE_VAL(ac_cv_x86_rdrand, [
4041  ac_cv_x86_rdrand=no
4042  case "$target" in
4043    i?86-*-* | \
4044    x86_64-*-*)
4045    AC_TRY_COMPILE(, [asm("rdrand %eax");],
4046		[ac_cv_x86_rdrand=yes], [ac_cv_x86_rdrand=no])
4047  esac
4048  ])
4049  if test $ac_cv_x86_rdrand = yes; then
4050    AC_DEFINE(_GLIBCXX_X86_RDRAND, 1,
4051		[ Defined if as can handle rdrand. ])
4052  fi
4053  AC_MSG_RESULT($ac_cv_x86_rdrand)
4054])
4055
4056dnl
4057dnl Check whether get_nprocs is available in <sys/sysinfo.h>, and define _GLIBCXX_USE_GET_NPROCS.
4058dnl
4059AC_DEFUN([GLIBCXX_CHECK_GET_NPROCS], [
4060
4061  AC_LANG_SAVE
4062  AC_LANG_CPLUSPLUS
4063  ac_save_CXXFLAGS="$CXXFLAGS"
4064  CXXFLAGS="$CXXFLAGS -fno-exceptions"
4065
4066  AC_MSG_CHECKING([for get_nprocs])
4067  AC_CACHE_VAL(glibcxx_cv_GET_NPROCS, [
4068    GCC_TRY_COMPILE_OR_LINK(
4069      [#include <sys/sysinfo.h>],
4070      [int n = get_nprocs();],
4071      [glibcxx_cv_GET_NPROCS=yes],
4072      [glibcxx_cv_GET_NPROCS=no])
4073  ])
4074  if test $glibcxx_cv_GET_NPROCS = yes; then
4075    AC_DEFINE(_GLIBCXX_USE_GET_NPROCS, 1, [Define if get_nprocs is available in <sys/sysinfo.h>.])
4076  fi
4077  AC_MSG_RESULT($glibcxx_cv_GET_NPROCS)
4078
4079  CXXFLAGS="$ac_save_CXXFLAGS"
4080  AC_LANG_RESTORE
4081])
4082
4083dnl
4084dnl Check whether sysconf(_SC_NPROCESSORS_ONLN) is available in <unistd.h>, and define _GLIBCXX_USE_SC_NPROCESSORS_ONLN.
4085dnl
4086AC_DEFUN([GLIBCXX_CHECK_SC_NPROCESSORS_ONLN], [
4087
4088  AC_LANG_SAVE
4089  AC_LANG_CPLUSPLUS
4090  ac_save_CXXFLAGS="$CXXFLAGS"
4091  CXXFLAGS="$CXXFLAGS -fno-exceptions"
4092
4093  AC_MSG_CHECKING([for _SC_NPROCESSORS_ONLN])
4094  AC_CACHE_VAL(glibcxx_cv_SC_NPROCESSORS_ONLN, [
4095    GCC_TRY_COMPILE_OR_LINK(
4096      [#include <unistd.h>],
4097      [int n = sysconf(_SC_NPROCESSORS_ONLN);],
4098      [glibcxx_cv_SC_NPROCESSORS_ONLN=yes],
4099      [glibcxx_cv_SC_NPROCESSORS_ONLN=no])
4100  ])
4101  if test $glibcxx_cv_SC_NPROCESSORS_ONLN = yes; then
4102    AC_DEFINE(_GLIBCXX_USE_SC_NPROCESSORS_ONLN, 1, [Define if _SC_NPROCESSORS_ONLN  is available in <unistd.h>.])
4103  fi
4104  AC_MSG_RESULT($glibcxx_cv_SC_NPROCESSORS_ONLN)
4105
4106  CXXFLAGS="$ac_save_CXXFLAGS"
4107  AC_LANG_RESTORE
4108])
4109
4110dnl
4111dnl Check whether sysconf(_SC_NPROC_ONLN) is available in <unistd.h>, and define _GLIBCXX_USE_SC_NPROC_ONLN.
4112dnl
4113AC_DEFUN([GLIBCXX_CHECK_SC_NPROC_ONLN], [
4114
4115  AC_LANG_SAVE
4116  AC_LANG_CPLUSPLUS
4117  ac_save_CXXFLAGS="$CXXFLAGS"
4118  CXXFLAGS="$CXXFLAGS -fno-exceptions"
4119
4120  AC_MSG_CHECKING([for _SC_NPROC_ONLN])
4121  AC_CACHE_VAL(glibcxx_cv_SC_NPROC_ONLN, [
4122    GCC_TRY_COMPILE_OR_LINK(
4123      [#include <unistd.h>],
4124      [int n = sysconf(_SC_NPROC_ONLN);],
4125      [glibcxx_cv_SC_NPROC_ONLN=yes],
4126      [glibcxx_cv_SC_NPROC_ONLN=no])
4127  ])
4128  if test $glibcxx_cv_SC_NPROC_ONLN = yes; then
4129    AC_DEFINE(_GLIBCXX_USE_SC_NPROC_ONLN, 1, [Define if _SC_NPROC_ONLN  is available in <unistd.h>.])
4130  fi
4131  AC_MSG_RESULT($glibcxx_cv_SC_NPROC_ONLN)
4132
4133  CXXFLAGS="$ac_save_CXXFLAGS"
4134  AC_LANG_RESTORE
4135])
4136
4137dnl
4138dnl Check whether pthread_num_processors_np is available in <pthread.h>, and define _GLIBCXX_USE_PTHREADS_NUM_PROCESSORS_NP.
4139dnl
4140AC_DEFUN([GLIBCXX_CHECK_PTHREADS_NUM_PROCESSORS_NP], [
4141
4142  AC_LANG_SAVE
4143  AC_LANG_CPLUSPLUS
4144  ac_save_CXXFLAGS="$CXXFLAGS"
4145  CXXFLAGS="$CXXFLAGS -fno-exceptions"
4146
4147  AC_MSG_CHECKING([for pthreads_num_processors_np])
4148  AC_CACHE_VAL(glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP, [
4149    GCC_TRY_COMPILE_OR_LINK(
4150      [#include <pthread.h>],
4151      [int n = pthread_num_processors_np();],
4152      [glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP=yes],
4153      [glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP=no])
4154  ])
4155  if test $glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP = yes; then
4156    AC_DEFINE(_GLIBCXX_USE_PTHREADS_NUM_PROCESSORS_NP, 1, [Define if pthreads_num_processors_np is available in <pthread.h>.])
4157  fi
4158  AC_MSG_RESULT($glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP)
4159
4160  CXXFLAGS="$ac_save_CXXFLAGS"
4161  AC_LANG_RESTORE
4162])
4163
4164dnl
4165dnl Check whether sysctl is available in <pthread.h>, and define _GLIBCXX_USE_SYSCTL_HW_NCPU.
4166dnl
4167AC_DEFUN([GLIBCXX_CHECK_SYSCTL_HW_NCPU], [
4168
4169  AC_LANG_SAVE
4170  AC_LANG_CPLUSPLUS
4171  ac_save_CXXFLAGS="$CXXFLAGS"
4172  CXXFLAGS="$CXXFLAGS -fno-exceptions"
4173
4174  AC_MSG_CHECKING([for hw.ncpu sysctl])
4175  AC_CACHE_VAL(glibcxx_cv_SYSCTL_HW_NCPU, [
4176    GCC_TRY_COMPILE_OR_LINK(
4177      [
4178       #include <stddef.h>
4179       #include <sys/sysctl.h>
4180       ],
4181      [
4182       int count;
4183       size_t size = sizeof(count);
4184       int mib[] = { CTL_HW, HW_NCPU };
4185       sysctl(mib, 2, &count, &size, NULL, 0);
4186      ],
4187      [glibcxx_cv_SYSCTL_HW_NCPU=yes],
4188      [glibcxx_cv_SYSCTL_HW_NCPU=no])
4189  ])
4190  if test $glibcxx_cv_SYSCTL_HW_NCPU = yes; then
4191    AC_DEFINE(_GLIBCXX_USE_SYSCTL_HW_NCPU, 1, [Define if sysctl(), CTL_HW and HW_NCPU are available in <sys/sysctl.h>.])
4192  fi
4193  AC_MSG_RESULT($glibcxx_cv_SYSCTL_HW_NCPU)
4194
4195  CXXFLAGS="$ac_save_CXXFLAGS"
4196  AC_LANG_RESTORE
4197])
4198
4199dnl
4200dnl Check to see if python pretty printing can be activated.
4201dnl
4202dnl --with-python-dir=dir
4203dnl installs directory into $prefix/dir
4204AC_DEFUN([GLIBCXX_ENABLE_PYTHON], [
4205
4206AC_MSG_CHECKING([for custom python install directory])
4207AC_ARG_WITH([python-dir],
4208	    AS_HELP_STRING([--with-python-dir],
4209			   [the location to install Python modules. This path is relative starting from the prefix.]),
4210	    [with_python_dir=$withval], [with_python_dir="no"])
4211AC_MSG_RESULT(${with_python_dir})
4212
4213# Needed for installing Python modules during make install.
4214python_mod_dir="${with_python_dir}"
4215AC_SUBST(python_mod_dir)
4216GLIBCXX_CONDITIONAL(ENABLE_PYTHONDIR, test $python_mod_dir != no)
4217])
4218
4219dnl
4220dnl Check to see if -Werror is disabled.
4221dnl
4222dnl --enable-werror/--disable-werror
4223AC_DEFUN([GLIBCXX_ENABLE_WERROR], [
4224  AC_MSG_CHECKING([for -Werror])
4225  GLIBCXX_ENABLE(werror,$1,,[turns on -Werror])
4226  AC_MSG_RESULT($enable_werror)
4227  GLIBCXX_CONDITIONAL(ENABLE_WERROR, test $enable_werror = yes)
4228])
4229
4230dnl
4231dnl Check whether obsolescent tmpnam is available in <stdio.h>,
4232dnl and define _GLIBCXX_USE_TMPNAM.
4233dnl
4234AC_DEFUN([GLIBCXX_CHECK_TMPNAM], [dnl
4235dnl
4236  AC_LANG_SAVE
4237  AC_LANG_CPLUSPLUS
4238  ac_save_CXXFLAGS="$CXXFLAGS"
4239  CXXFLAGS="$CXXFLAGS -fno-exceptions"
4240dnl
4241  AC_MSG_CHECKING([for tmpnam])
4242  AC_CACHE_VAL(glibcxx_cv_TMPNAM, [dnl
4243    GCC_TRY_COMPILE_OR_LINK(
4244      [#include <stdio.h>],
4245      [char *tmp = tmpnam(NULL);],
4246      [glibcxx_cv_TMPNAM=yes],
4247      [glibcxx_cv_TMPNAM=no])
4248  ])
4249  if test $glibcxx_cv_TMPNAM = yes; then
4250    AC_DEFINE(_GLIBCXX_USE_TMPNAM, 1, [Define if obsolescent tmpnam is available in <stdio.h>.])
4251  fi
4252  AC_MSG_RESULT($glibcxx_cv_TMPNAM)
4253dnl
4254  CXXFLAGS="$ac_save_CXXFLAGS"
4255  AC_LANG_RESTORE
4256])
4257
4258dnl
4259dnl Check to see if sys/sdt.h exists and that it is suitable for use.
4260dnl Some versions of sdt.h were not compatible with C++11.
4261dnl
4262AC_DEFUN([GLIBCXX_CHECK_SDT_H], [
4263  AC_MSG_CHECKING([for suitable sys/sdt.h])
4264  # Note that this test has to be run with the C language.
4265  # Otherwise, sdt.h will try to include some headers from
4266  # libstdc++ itself.
4267  AC_LANG_SAVE
4268  AC_LANG_C
4269  AC_CACHE_VAL(glibcxx_cv_sys_sdt_h, [
4270    # Because we have to run the test in C, we use grep rather
4271    # than the compiler to check for the bug.  The bug is that
4272    # were strings without trailing whitespace, causing g++
4273    # to look for operator"".  The pattern searches for the fixed
4274    # output.
4275    AC_EGREP_CPP([ \",\" ], [
4276      #include <sys/sdt.h>
4277      int f() { STAP_PROBE(hi, bob); }
4278    ], [glibcxx_cv_sys_sdt_h=yes], [glibcxx_cv_sys_sdt_h=no])
4279  ])
4280  AC_LANG_RESTORE
4281  if test $glibcxx_cv_sys_sdt_h = yes; then
4282    AC_DEFINE(HAVE_SYS_SDT_H, 1,
4283              [Define to 1 if you have a suitable <sys/sdt.h> header file])
4284  fi
4285  AC_MSG_RESULT($glibcxx_cv_sys_sdt_h)
4286])
4287
4288dnl
4289dnl Control whether the library should define symbols for old and new ABIs.
4290dnl This affects definitions of strings, stringstreams and locale facets.
4291dnl
4292dnl --disable-libstdcxx-dual-abi will use old ABI for all types.
4293dnl
4294dnl Defines:
4295dnl  _GLIBCXX_USE_DUAL_ABI (always defined, either to 1 or 0)
4296dnl
4297AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_DUAL_ABI], [
4298  GLIBCXX_ENABLE(libstdcxx-dual-abi,$1,,[support two versions of std::string])
4299  if test x$enable_symvers = xgnu-versioned-namespace; then
4300    # gnu-versioned-namespace is incompatible with the dual ABI.
4301    enable_libstdcxx_dual_abi="no"
4302  fi
4303  if test x"$enable_libstdcxx_dual_abi" != xyes; then
4304    AC_MSG_NOTICE([dual ABI is disabled])
4305    default_libstdcxx_abi="gcc4-compatible"
4306  fi
4307  GLIBCXX_CONDITIONAL(ENABLE_DUAL_ABI, test $enable_libstdcxx_dual_abi = yes)
4308])
4309
4310dnl
4311dnl Check to see which ABI should be enabled by default.
4312dnl
4313dnl --with-default-libstdcxx-abi={gcc4-compatible,new}
4314dnl
4315dnl Defines:
4316dnl  _GLIBCXX_USE_CXX11_ABI (always defined, either to 1 or 0)
4317dnl
4318AC_DEFUN([GLIBCXX_DEFAULT_ABI], [
4319  if test x$enable_libstdcxx_dual_abi = xyes; then
4320  AC_MSG_CHECKING([for default std::string ABI to use])
4321  AC_ARG_WITH([default-libstdcxx-abi],
4322    AS_HELP_STRING([--with-default-libstdcxx-abi],
4323                   [set the std::string ABI to use by default]),
4324    [case "$withval" in
4325      gcc4-compatible)  default_libstdcxx_abi="gcc4-compatible" ;;
4326      new|cxx11)  default_libstdcxx_abi="new" ;;
4327      c++*|gnu++*) AC_MSG_ERROR([Supported arguments for --with-default-libstdcxx-abi have changed, use "new" or "gcc4-compatible"]) ;;
4328      *) AC_MSG_ERROR([Invalid argument for --with-default-libstdcxx-abi]) ;;
4329     esac
4330     ],
4331    [default_libstdcxx_abi="new"])
4332  AC_MSG_RESULT(${default_libstdcxx_abi})
4333  fi
4334  if test $default_libstdcxx_abi = "new"; then
4335    glibcxx_cxx11_abi=1
4336    glibcxx_cxx98_abi=0
4337  else
4338    glibcxx_cxx11_abi=0
4339    glibcxx_cxx98_abi=1
4340  fi
4341  AC_SUBST(glibcxx_cxx98_abi)
4342  GLIBCXX_CONDITIONAL(ENABLE_CXX11_ABI, test $glibcxx_cxx11_abi = 1)
4343])
4344
4345dnl
4346dnl Check to see whether to build libstdc++fs.a
4347dnl
4348dnl --enable-libstdcxx-filesystem-ts
4349dnl
4350AC_DEFUN([GLIBCXX_ENABLE_FILESYSTEM_TS], [
4351  GLIBCXX_ENABLE(libstdcxx-filesystem-ts,auto,,
4352    [turns on ISO/IEC TS 18822 support],
4353    [permit yes|no|auto])
4354
4355  AC_MSG_CHECKING([whether to build Filesystem TS support])
4356  if test x"$ac_cv_header_dirent_h" != x"yes"; then
4357    enable_libstdcxx_filesystem_ts=no
4358  fi
4359  if test x"$enable_libstdcxx_filesystem_ts" = x"auto"; then
4360    case "${target_os}" in
4361      freebsd*|netbsd*|openbsd*|dragonfly*|darwin*)
4362        enable_libstdcxx_filesystem_ts=yes
4363        ;;
4364      gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
4365        enable_libstdcxx_filesystem_ts=yes
4366        ;;
4367      rtems*)
4368        enable_libstdcxx_filesystem_ts=yes
4369        ;;
4370      solaris*)
4371        enable_libstdcxx_filesystem_ts=yes
4372        ;;
4373      *)
4374        enable_libstdcxx_filesystem_ts=no
4375        ;;
4376    esac
4377  fi
4378  AC_MSG_RESULT($enable_libstdcxx_filesystem_ts)
4379  GLIBCXX_CONDITIONAL(ENABLE_FILESYSTEM_TS, test $enable_libstdcxx_filesystem_ts = yes)
4380])
4381
4382dnl
4383dnl Check whether the library calls required by the Filesystem TS are present.
4384dnl Defines:
4385dnl  HAVE_STRUCT_DIRENT_D_TYPE
4386dnl  _GLIBCXX_USE_REALPATH
4387dnl  _GLIBCXX_USE_UTIMENSAT
4388dnl  _GLIBCXX_USE_ST_MTIM
4389dnl  _GLIBCXX_USE_FCHMOD
4390dnl  _GLIBCXX_USE_FCHMODAT
4391dnl  _GLIBCXX_USE_SENDFILE
4392dnl  HAVE_LINK
4393dnl  HAVE_READLINK
4394dnl  HAVE_SYMLINK
4395dnl
4396AC_DEFUN([GLIBCXX_CHECK_FILESYSTEM_DEPS], [dnl
4397dnl
4398  if test $enable_libstdcxx_filesystem_ts = yes; then
4399    AC_LANG_SAVE
4400    AC_LANG_CPLUSPLUS
4401    ac_save_CXXFLAGS="$CXXFLAGS"
4402    CXXFLAGS="$CXXFLAGS -fno-exceptions"
4403dnl
4404    AC_MSG_CHECKING([for struct dirent.d_type])
4405    AC_CACHE_VAL(glibcxx_cv_dirent_d_type, [dnl
4406      GCC_TRY_COMPILE_OR_LINK(
4407        [#include <dirent.h>],
4408        [
4409         struct dirent d;
4410         if (sizeof d.d_type) return 0;
4411        ],
4412        [glibcxx_cv_dirent_d_type=yes],
4413        [glibcxx_cv_dirent_d_type=no])
4414    ])
4415    if test $glibcxx_cv_dirent_d_type = yes; then
4416      AC_DEFINE(HAVE_STRUCT_DIRENT_D_TYPE, 1, [Define to 1 if `d_type' is a member of `struct dirent'.])
4417    fi
4418    AC_MSG_RESULT($glibcxx_cv_dirent_d_type)
4419dnl
4420    AC_MSG_CHECKING([for realpath])
4421    AC_CACHE_VAL(glibcxx_cv_realpath, [dnl
4422      GCC_TRY_COMPILE_OR_LINK(
4423        [
4424         #include <limits.h>
4425         #include <stdlib.h>
4426         #include <unistd.h>
4427        ],
4428        [
4429         #if _XOPEN_VERSION < 500
4430         #error
4431         #elif _XOPEN_VERSION >= 700 || defined(PATH_MAX)
4432         char *tmp = realpath((const char*)NULL, (char*)NULL);
4433         #else
4434         #error
4435         #endif
4436        ],
4437        [glibcxx_cv_realpath=yes],
4438        [glibcxx_cv_realpath=no])
4439    ])
4440    if test $glibcxx_cv_realpath = yes; then
4441      AC_DEFINE(_GLIBCXX_USE_REALPATH, 1, [Define if usable realpath is available in <stdlib.h>.])
4442    fi
4443    AC_MSG_RESULT($glibcxx_cv_realpath)
4444dnl
4445    AC_MSG_CHECKING([for utimensat])
4446    AC_CACHE_VAL(glibcxx_cv_utimensat, [dnl
4447      GCC_TRY_COMPILE_OR_LINK(
4448        [
4449          #include <fcntl.h>
4450          #include <sys/stat.h>
4451        ],
4452        [
4453          struct timespec ts[2] = { { 0, UTIME_OMIT }, { 1, 1 } };
4454          int i = utimensat(AT_FDCWD, "path", ts, 0);
4455        ],
4456        [glibcxx_cv_utimensat=yes],
4457        [glibcxx_cv_utimensat=no])
4458    ])
4459    if test $glibcxx_cv_utimensat = yes; then
4460      AC_DEFINE(_GLIBCXX_USE_UTIMENSAT, 1, [Define if utimensat and UTIME_OMIT are available in <sys/stat.h> and AT_FDCWD in <fcntl.h>.])
4461    fi
4462    AC_MSG_RESULT($glibcxx_cv_utimensat)
4463dnl
4464    AC_MSG_CHECKING([for utime])
4465    AC_CACHE_VAL(glibcxx_cv_utime, [dnl
4466      GCC_TRY_COMPILE_OR_LINK(
4467        [
4468          #include <utime.h>
4469        ],
4470        [
4471          struct utimbuf t = { 1, 1 };
4472          int i = utime("path", &t);
4473        ],
4474        [glibcxx_cv_utime=yes],
4475        [glibcxx_cv_utime=no])
4476    ])
4477    if test $glibcxx_cv_utime = yes; then
4478      AC_DEFINE(_GLIBCXX_USE_UTIME, 1, [Define if utime is available in <utime.h>.])
4479    fi
4480    AC_MSG_RESULT($glibcxx_cv_utime)
4481dnl
4482    AC_MSG_CHECKING([for lstat])
4483    AC_CACHE_VAL(glibcxx_cv_lstat, [dnl
4484      GCC_TRY_COMPILE_OR_LINK(
4485        [ #include <sys/stat.h> ],
4486        [
4487          struct stat st;
4488          int i = lstat("path", &st);
4489        ],
4490        [glibcxx_cv_lstat=yes],
4491        [glibcxx_cv_lstat=no])
4492    ])
4493    if test $glibcxx_cv_lstat = yes; then
4494      AC_DEFINE(_GLIBCXX_USE_LSTAT, 1, [Define if lstat is available in <sys/stat.h>.])
4495    fi
4496    AC_MSG_RESULT($glibcxx_cv_lstat)
4497dnl
4498    AC_MSG_CHECKING([for struct stat.st_mtim.tv_nsec])
4499    AC_CACHE_VAL(glibcxx_cv_st_mtim, [dnl
4500      GCC_TRY_COMPILE_OR_LINK(
4501        [ #include <sys/stat.h> ],
4502        [
4503          struct stat st;
4504          return st.st_mtim.tv_nsec;
4505        ],
4506        [glibcxx_cv_st_mtim=yes],
4507        [glibcxx_cv_st_mtim=no])
4508    ])
4509    if test $glibcxx_cv_st_mtim = yes; then
4510      AC_DEFINE(_GLIBCXX_USE_ST_MTIM, 1, [Define if struct stat has timespec members.])
4511    fi
4512    AC_MSG_RESULT($glibcxx_cv_st_mtim)
4513dnl
4514    AC_MSG_CHECKING([for fchmod])
4515    AC_CACHE_VAL(glibcxx_cv_fchmod, [dnl
4516      GCC_TRY_COMPILE_OR_LINK(
4517        [#include <sys/stat.h>],
4518        [fchmod(1, S_IWUSR);],
4519        [glibcxx_cv_fchmod=yes],
4520        [glibcxx_cv_fchmod=no])
4521    ])
4522    if test $glibcxx_cv_fchmod = yes; then
4523      AC_DEFINE(_GLIBCXX_USE_FCHMOD, 1, [Define if fchmod is available in <sys/stat.h>.])
4524    fi
4525    AC_MSG_RESULT($glibcxx_cv_fchmod)
4526dnl
4527    AC_MSG_CHECKING([for fchmodat])
4528    AC_CACHE_VAL(glibcxx_cv_fchmodat, [dnl
4529      GCC_TRY_COMPILE_OR_LINK(
4530        [
4531          #include <fcntl.h>
4532          #include <sys/stat.h>
4533        ],
4534        [fchmodat(AT_FDCWD, "", 0, AT_SYMLINK_NOFOLLOW);],
4535        [glibcxx_cv_fchmodat=yes],
4536        [glibcxx_cv_fchmodat=no])
4537    ])
4538    if test $glibcxx_cv_fchmodat = yes; then
4539      AC_DEFINE(_GLIBCXX_USE_FCHMODAT, 1, [Define if fchmodat is available in <sys/stat.h>.])
4540    fi
4541    AC_MSG_RESULT($glibcxx_cv_fchmodat)
4542dnl
4543    AC_MSG_CHECKING([for sendfile that can copy files])
4544    AC_CACHE_VAL(glibcxx_cv_sendfile, [dnl
4545      case "${target_os}" in
4546        gnu* | linux* | solaris*)
4547          GCC_TRY_COMPILE_OR_LINK(
4548            [#include <sys/sendfile.h>],
4549            [sendfile(1, 2, (off_t*)0, sizeof 1);],
4550            [glibcxx_cv_sendfile=yes],
4551            [glibcxx_cv_sendfile=no])
4552          ;;
4553        *)
4554          glibcxx_cv_sendfile=no
4555          ;;
4556      esac
4557    ])
4558    if test $glibcxx_cv_sendfile = yes; then
4559      AC_DEFINE(_GLIBCXX_USE_SENDFILE, 1, [Define if sendfile is available in <sys/sendfile.h>.])
4560    fi
4561    AC_MSG_RESULT($glibcxx_cv_sendfile)
4562dnl
4563    AC_MSG_CHECKING([for link])
4564    AC_CACHE_VAL(glibcxx_cv_link, [dnl
4565      GCC_TRY_COMPILE_OR_LINK(
4566        [#include <unistd.h>],
4567        [link("", "");],
4568        [glibcxx_cv_link=yes],
4569        [glibcxx_cv_link=no])
4570    ])
4571    if test $glibcxx_cv_link = yes; then
4572      AC_DEFINE(HAVE_LINK, 1, [Define if link is available in <unistd.h>.])
4573    fi
4574    AC_MSG_RESULT($glibcxx_cv_link)
4575dnl
4576    AC_MSG_CHECKING([for readlink])
4577    AC_CACHE_VAL(glibcxx_cv_readlink, [dnl
4578      GCC_TRY_COMPILE_OR_LINK(
4579        [#include <unistd.h>],
4580        [char buf[32]; readlink("", buf, sizeof(buf));],
4581        [glibcxx_cv_readlink=yes],
4582        [glibcxx_cv_readlink=no])
4583    ])
4584    if test $glibcxx_cv_readlink = yes; then
4585      AC_DEFINE(HAVE_READLINK, 1, [Define if readlink is available in <unistd.h>.])
4586    fi
4587    AC_MSG_RESULT($glibcxx_cv_readlink)
4588dnl
4589    AC_MSG_CHECKING([for symlink])
4590    AC_CACHE_VAL(glibcxx_cv_symlink, [dnl
4591      GCC_TRY_COMPILE_OR_LINK(
4592        [#include <unistd.h>],
4593        [symlink("", "");],
4594        [glibcxx_cv_symlink=yes],
4595        [glibcxx_cv_symlink=no])
4596    ])
4597    if test $glibcxx_cv_symlink = yes; then
4598      AC_DEFINE(HAVE_SYMLINK, 1, [Define if symlink is available in <unistd.h>.])
4599    fi
4600    AC_MSG_RESULT($glibcxx_cv_symlink)
4601dnl
4602    AC_MSG_CHECKING([for truncate])
4603    AC_CACHE_VAL(glibcxx_cv_truncate, [dnl
4604      GCC_TRY_COMPILE_OR_LINK(
4605        [#include <unistd.h>],
4606        [truncate("", 99);],
4607        [glibcxx_cv_truncate=yes],
4608        [glibcxx_cv_truncate=no])
4609    ])
4610    if test $glibcxx_cv_truncate = yes; then
4611      AC_DEFINE(HAVE_TRUNCATE, 1, [Define if truncate is available in <unistd.h>.])
4612    fi
4613    AC_MSG_RESULT($glibcxx_cv_truncate)
4614dnl
4615    CXXFLAGS="$ac_save_CXXFLAGS"
4616    AC_LANG_RESTORE
4617  fi
4618])
4619
4620dnl
4621dnl Check how size_t is mangled.  Copied from libitm.
4622dnl
4623AC_DEFUN([GLIBCXX_CHECK_SIZE_T_MANGLING], [
4624  AC_CACHE_CHECK([how size_t is mangled],
4625                 glibcxx_cv_size_t_mangling, [
4626    AC_TRY_COMPILE([], [extern __SIZE_TYPE__ x; extern unsigned long x;],
4627                   [glibcxx_cv_size_t_mangling=m], [
4628      AC_TRY_COMPILE([], [extern __SIZE_TYPE__ x; extern unsigned int x;],
4629                     [glibcxx_cv_size_t_mangling=j], [
4630        AC_TRY_COMPILE([],
4631                       [extern __SIZE_TYPE__ x; extern unsigned long long x;],
4632                       [glibcxx_cv_size_t_mangling=y], [
4633          AC_TRY_COMPILE([],
4634                         [extern __SIZE_TYPE__ x; extern unsigned short x;],
4635                         [glibcxx_cv_size_t_mangling=t], [
4636            AC_TRY_COMPILE([],
4637                           [extern __SIZE_TYPE__ x; extern __int20 unsigned x;],
4638                           [glibcxx_cv_size_t_mangling=u6uint20],
4639                           [glibcxx_cv_size_t_mangling=x])
4640          ])
4641        ])
4642      ])
4643    ])
4644  ])
4645  if test $glibcxx_cv_size_t_mangling = x; then
4646    AC_MSG_ERROR([Unknown underlying type for size_t])
4647  fi
4648  AC_DEFINE_UNQUOTED(_GLIBCXX_MANGLE_SIZE_T, [$glibcxx_cv_size_t_mangling],
4649    [Define to the letter to which size_t is mangled.])
4650])
4651
4652dnl
4653dnl Determine whether std::exception_ptr symbols should be exported with
4654dnl the symbol versions from GCC 4.6.0 or GCC 7.1.0, depending on which
4655dnl release first added support for std::exception_ptr. Originally it was
4656dnl only supported for targets with always-lock-free atomics for int, but
4657dnl since GCC 7.1 it is supported for all targets.
4658dnl
4659AC_DEFUN([GLIBCXX_CHECK_EXCEPTION_PTR_SYMVER], [
4660  if test $enable_symvers != no; then
4661    AC_MSG_CHECKING([for first version to support std::exception_ptr])
4662    case ${target} in
4663      aarch64-*-* | alpha-*-* | hppa*-*-* | i?86-*-* | x86_64-*-* | \
4664      m68k-*-* | powerpc*-*-* | s390*-*-* | *-*-solaris* )
4665        ac_exception_ptr_since_gcc46=yes
4666        ;;
4667      *)
4668        # If the value of this macro changes then we will need to hardcode
4669        # yes/no here for additional targets based on the original value.
4670        AC_TRY_COMPILE([], [
4671          #if __GCC_ATOMIC_INT_LOCK_FREE <= 1
4672          # error atomic int not always lock free
4673          #endif
4674          ],
4675          [ac_exception_ptr_since_gcc46=yes],
4676          [ac_exception_ptr_since_gcc46=no])
4677        ;;
4678    esac
4679    if test x"$ac_exception_ptr_since_gcc46" = x"yes" ; then
4680      AC_DEFINE(HAVE_EXCEPTION_PTR_SINCE_GCC46, 1,
4681        [Define to 1 if GCC 4.6 supported std::exception_ptr for the target])
4682      AC_MSG_RESULT([4.6.0])
4683    else
4684      AC_MSG_RESULT([7.1.0])
4685    fi
4686  fi
4687])
4688
4689# Macros from the top-level gcc directory.
4690m4_include([../config/gc++filt.m4])
4691m4_include([../config/tls.m4])
4692m4_include([../config/gthr.m4])
4693m4_include([../config/cet.m4])
4694