OSDN Git Service

2012-01-20 Benjamin Kosnik <bkoz@redhat.com>
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / acinclude.m4
1 dnl
2 dnl GLIBCXX_CONDITIONAL (NAME, SHELL-TEST)
3 dnl
4 dnl Exactly like AM_CONDITIONAL, but delays evaluation of the test until the
5 dnl end of configure.  This lets tested variables be reassigned, and the
6 dnl conditional will depend on the final state of the variable.  For a simple
7 dnl example of why this is needed, see GLIBCXX_ENABLE_HOSTED.
8 dnl
9 m4_define([_m4_divert(glibcxx_diversion)], 8000)dnl
10 AC_DEFUN([GLIBCXX_CONDITIONAL], [dnl
11   m4_divert_text([glibcxx_diversion],dnl
12    AM_CONDITIONAL([$1],[$2])
13   )dnl
14 ])dnl
15 AC_DEFUN([GLIBCXX_EVALUATE_CONDITIONALS], [m4_undivert([glibcxx_diversion])])dnl
16
17
18 dnl
19 dnl Check to see what architecture and operating system we are compiling
20 dnl for.  Also, if architecture- or OS-specific flags are required for
21 dnl compilation, pick them up here.
22 dnl
23 AC_DEFUN([GLIBCXX_CHECK_HOST], [
24   . $glibcxx_srcdir/configure.host
25   AC_MSG_NOTICE([CPU config directory is $cpu_include_dir])
26   AC_MSG_NOTICE([OS config directory is $os_include_dir])
27 ])
28
29 dnl
30 dnl Initialize the rest of the library configury.  At this point we have
31 dnl variables like $host.
32 dnl
33 dnl Sets:
34 dnl  SUBDIRS
35 dnl Substs:
36 dnl  glibcxx_builddir     (absolute path)
37 dnl  glibcxx_srcdir       (absolute path)
38 dnl  toplevel_builddir    (absolute path)
39 dnl  toplevel_srcdir      (absolute path)
40 dnl  with_cross_host
41 dnl  with_newlib
42 dnl  with_target_subdir
43 dnl plus
44 dnl  - the variables in GLIBCXX_CHECK_HOST / configure.host
45 dnl  - default settings for all AM_CONFITIONAL test variables
46 dnl  - lots of tools, like CC and CXX
47 dnl
48 AC_DEFUN([GLIBCXX_CONFIGURE], [
49   # Keep these sync'd with the list in Makefile.am.  The first provides an
50   # expandable list at autoconf time; the second provides an expandable list
51   # (i.e., shell variable) at configure time.
52   m4_define([glibcxx_SUBDIRS],[include libsupc++ python src src/c++98 src/c++11 doc po testsuite])
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
122 dnl
123 dnl Tests for newer compiler features, or features that are present in newer
124 dnl compiler versions but not older compiler versions still in use, should
125 dnl be placed here.
126 dnl
127 dnl Defines:
128 dnl  WERROR='-Werror' if requested and possible; g++'s that lack the
129 dnl   new inlining code or the new system_header pragma will die on -Werror.
130 dnl   Leave it out by default and use maint-mode to use it.
131 dnl  SECTION_FLAGS='-ffunction-sections -fdata-sections' if
132 dnl   compiler supports it and the user has not requested debug mode.
133 dnl
134 AC_DEFUN([GLIBCXX_CHECK_COMPILER_FEATURES], [
135   # All these tests are for C++; save the language and the compiler flags.
136   # The CXXFLAGS thing is suspicious, but based on similar bits previously
137   # found in GLIBCXX_CONFIGURE.
138   AC_LANG_SAVE
139   AC_LANG_CPLUSPLUS
140   ac_test_CXXFLAGS="${CXXFLAGS+set}"
141   ac_save_CXXFLAGS="$CXXFLAGS"
142
143   # Check for maintainer-mode bits.
144   if test x"$USE_MAINTAINER_MODE" = xno; then
145     WERROR=''
146   else
147     WERROR='-Werror'
148   fi
149
150   # Check for -ffunction-sections -fdata-sections
151   AC_MSG_CHECKING([for g++ that supports -ffunction-sections -fdata-sections])
152   CXXFLAGS='-g -Werror -ffunction-sections -fdata-sections'
153   AC_TRY_COMPILE([int foo; void bar() { };],, [ac_fdsections=yes], [ac_fdsections=no])
154   if test "$ac_test_CXXFLAGS" = set; then
155     CXXFLAGS="$ac_save_CXXFLAGS"
156   else
157     # this is the suspicious part
158     CXXFLAGS=''
159   fi
160   if test x"$ac_fdsections" = x"yes"; then
161     SECTION_FLAGS='-ffunction-sections -fdata-sections'
162   fi
163   AC_MSG_RESULT($ac_fdsections)
164
165   AC_LANG_RESTORE
166   AC_SUBST(WERROR)
167   AC_SUBST(SECTION_FLAGS)
168 ])
169
170
171 dnl
172 dnl If GNU ld is in use, check to see if tricky linker opts can be used.  If
173 dnl the native linker is in use, all variables will be defined to something
174 dnl safe (like an empty string).
175 dnl
176 dnl Defines:
177 dnl  SECTION_LDFLAGS='-Wl,--gc-sections' if possible
178 dnl  OPT_LDFLAGS='-Wl,-O1' and '-z,relro' if possible
179 dnl  LD (as a side effect of testing)
180 dnl Sets:
181 dnl  with_gnu_ld
182 dnl  glibcxx_ld_is_gold (set to "no" or "yes")
183 dnl  glibcxx_gnu_ld_version (possibly)
184 dnl
185 dnl The last will be a single integer, e.g., version 1.23.45.0.67.89 will
186 dnl set glibcxx_gnu_ld_version to 12345.  Zeros cause problems.
187 dnl
188 AC_DEFUN([GLIBCXX_CHECK_LINKER_FEATURES], [
189   # If we're not using GNU ld, then there's no point in even trying these
190   # tests.  Check for that first.  We should have already tested for gld
191   # by now (in libtool), but require it now just to be safe...
192   test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS=''
193   test -z "$OPT_LDFLAGS" && OPT_LDFLAGS=''
194   AC_REQUIRE([AC_PROG_LD])
195   AC_REQUIRE([AC_PROG_AWK])
196
197   # The name set by libtool depends on the version of libtool.  Shame on us
198   # for depending on an impl detail, but c'est la vie.  Older versions used
199   # ac_cv_prog_gnu_ld, but now it's lt_cv_prog_gnu_ld, and is copied back on
200   # top of with_gnu_ld (which is also set by --with-gnu-ld, so that actually
201   # makes sense).  We'll test with_gnu_ld everywhere else, so if that isn't
202   # set (hence we're using an older libtool), then set it.
203   if test x${with_gnu_ld+set} != xset; then
204     if test x${ac_cv_prog_gnu_ld+set} != xset; then
205       # We got through "ac_require(ac_prog_ld)" and still not set?  Huh?
206       with_gnu_ld=no
207     else
208       with_gnu_ld=$ac_cv_prog_gnu_ld
209     fi
210   fi
211
212   # Start by getting the version number.  I think the libtool test already
213   # does some of this, but throws away the result.
214   glibcxx_ld_is_gold=no
215   if test x"$with_gnu_ld" = x"yes"; then
216     AC_MSG_CHECKING([for ld version])
217     changequote(,)
218     if $LD --version 2>/dev/null | grep 'GNU gold' >/dev/null 2>&1; then
219       glibcxx_ld_is_gold=yes
220     fi
221     ldver=`$LD --version 2>/dev/null |
222            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'`
223     changequote([,])
224     glibcxx_gnu_ld_version=`echo $ldver | \
225            $AWK -F. '{ if (NF<3) [$]3=0; print ([$]1*100+[$]2)*100+[$]3 }'`
226     AC_MSG_RESULT($glibcxx_gnu_ld_version)
227   fi
228
229   # Set --gc-sections.
230   glibcxx_have_gc_sections=no
231   if test "$glibcxx_ld_is_gold" = "yes"; then
232     if $LD --help 2>/dev/null | grep gc-sections >/dev/null 2>&1; then
233       glibcxx_have_gc_sections=yes
234     fi
235   else
236     glibcxx_gcsections_min_ld=21602
237     if test x"$with_gnu_ld" = x"yes" &&
238         test $glibcxx_gnu_ld_version -gt $glibcxx_gcsections_min_ld ; then
239       glibcxx_have_gc_sections=yes
240     fi
241   fi
242   if test "$glibcxx_have_gc_sections" = "yes"; then
243     # Sufficiently young GNU ld it is!  Joy and bunny rabbits!
244     # NB: This flag only works reliably after 2.16.1. Configure tests
245     # for this are difficult, so hard wire a value that should work.
246
247     ac_test_CFLAGS="${CFLAGS+set}"
248     ac_save_CFLAGS="$CFLAGS"
249     CFLAGS='-Wl,--gc-sections'
250
251     # Check for -Wl,--gc-sections
252     AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
253     AC_TRY_LINK([ int one(void) { return 1; }
254      int two(void) { return 2; }
255         ], [ two(); ] , [ac_gcsections=yes], [ac_gcsections=no])
256     if test "$ac_gcsections" = "yes"; then
257       rm -f conftest.c
258       touch conftest.c
259       if $CC -c conftest.c; then
260         if $LD --gc-sections -o conftest conftest.o 2>&1 | \
261            grep "Warning: gc-sections option ignored" > /dev/null; then
262           ac_gcsections=no
263         fi
264       fi
265       rm -f conftest.c conftest.o conftest
266     fi
267     if test "$ac_gcsections" = "yes"; then
268       SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
269     fi
270     AC_MSG_RESULT($ac_gcsections)
271
272     if test "$ac_test_CFLAGS" = set; then
273       CFLAGS="$ac_save_CFLAGS"
274     else
275       # this is the suspicious part
276       CFLAGS=''
277     fi
278   fi
279
280   # Set -z,relro.
281   # Note this is only for shared objects.
282   ac_ld_relro=no
283   if test x"$with_gnu_ld" = x"yes"; then
284     AC_MSG_CHECKING([for ld that supports -Wl,-z,relro])
285     cxx_z_relo=`$LD -v --help 2>/dev/null | grep "z relro"`
286     if test -n "$cxx_z_relo"; then
287       OPT_LDFLAGS="-Wl,-z,relro"
288       ac_ld_relro=yes
289     fi
290     AC_MSG_RESULT($ac_ld_relro)
291   fi
292
293   # Set linker optimization flags.
294   if test x"$with_gnu_ld" = x"yes"; then
295     OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
296   fi
297
298   AC_SUBST(SECTION_LDFLAGS)
299   AC_SUBST(OPT_LDFLAGS)
300 ])
301
302
303 dnl
304 dnl Check for headers for, and arguments to, the setrlimit() function.
305 dnl Used only in testsuite_hooks.h.  Called from GLIBCXX_CONFIGURE_TESTSUITE.
306 dnl
307 dnl Defines:
308 dnl  _GLIBCXX_RES_LIMITS if we can set artificial resource limits
309 dnl  various HAVE_LIMIT_* for individual limit names
310 dnl
311 AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT_ancilliary], [
312   AC_MSG_CHECKING([for RLIMIT_$1])
313   AC_TRY_COMPILE(
314     [#include <unistd.h>
315      #include <sys/time.h>
316      #include <sys/resource.h>
317     ],
318     [ int f = RLIMIT_$1 ; ],
319     [glibcxx_mresult=1], [glibcxx_mresult=0])
320   AC_DEFINE_UNQUOTED(HAVE_LIMIT_$1, $glibcxx_mresult,
321                      [Only used in build directory testsuite_hooks.h.])
322   if test $glibcxx_mresult = 1 ; then res=yes ; else res=no ; fi
323   AC_MSG_RESULT($res)
324 ])
325
326 AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT], [
327   setrlimit_have_headers=yes
328   AC_CHECK_HEADERS(unistd.h sys/time.h sys/resource.h,
329                    [],
330                    [setrlimit_have_headers=no])
331   # If don't have the headers, then we can't run the tests now, and we
332   # won't be seeing any of these during testsuite compilation.
333   if test $setrlimit_have_headers = yes; then
334     # Can't do these in a loop, else the resulting syntax is wrong.
335     GLIBCXX_CHECK_SETRLIMIT_ancilliary(DATA)
336     GLIBCXX_CHECK_SETRLIMIT_ancilliary(RSS)
337     GLIBCXX_CHECK_SETRLIMIT_ancilliary(VMEM)
338     GLIBCXX_CHECK_SETRLIMIT_ancilliary(AS)
339     GLIBCXX_CHECK_SETRLIMIT_ancilliary(FSIZE)
340
341     # Check for rlimit, setrlimit.
342     AC_CACHE_VAL(glibcxx_cv_setrlimit, [
343       AC_TRY_COMPILE(
344         [#include <unistd.h>
345          #include <sys/time.h>
346          #include <sys/resource.h>
347         ],
348         [struct rlimit r;
349          setrlimit(0, &r);],
350         [glibcxx_cv_setrlimit=yes], [glibcxx_cv_setrlimit=no])
351     ])
352   fi
353
354   AC_MSG_CHECKING([for testsuite resource limits support])
355   if test $setrlimit_have_headers = yes && test $glibcxx_cv_setrlimit = yes; then
356     ac_res_limits=yes
357     AC_DEFINE(_GLIBCXX_RES_LIMITS, 1,
358               [Define if using setrlimit to set resource limits during
359               "make check"])
360   else
361     ac_res_limits=no
362   fi
363   AC_MSG_RESULT($ac_res_limits)
364 ])
365
366
367 dnl
368 dnl Check whether S_ISREG (Posix) or S_IFREG is available in <sys/stat.h>.
369 dnl Define HAVE_S_ISREG / HAVE_S_IFREG appropriately.
370 dnl
371 AC_DEFUN([GLIBCXX_CHECK_S_ISREG_OR_S_IFREG], [
372
373   AC_LANG_SAVE
374   AC_LANG_CPLUSPLUS
375   ac_save_CXXFLAGS="$CXXFLAGS"
376   CXXFLAGS="$CXXFLAGS -fno-exceptions"
377
378   AC_MSG_CHECKING([for S_ISREG or S_IFREG])
379   AC_CACHE_VAL(glibcxx_cv_S_ISREG, [
380     GCC_TRY_COMPILE_OR_LINK(
381       [#include <sys/stat.h>],
382       [struct stat buffer;
383        fstat(0, &buffer);
384        S_ISREG(buffer.st_mode);],
385       [glibcxx_cv_S_ISREG=yes],
386       [glibcxx_cv_S_ISREG=no])
387   ])
388   AC_CACHE_VAL(glibcxx_cv_S_IFREG, [
389     GCC_TRY_COMPILE_OR_LINK(
390       [#include <sys/stat.h>],
391       [struct stat buffer;
392        fstat(0, &buffer);
393        S_IFREG & buffer.st_mode;],
394       [glibcxx_cv_S_IFREG=yes],
395       [glibcxx_cv_S_IFREG=no])
396   ])
397   res=no
398   if test $glibcxx_cv_S_ISREG = yes; then
399     AC_DEFINE(HAVE_S_ISREG, 1,
400               [Define if S_IFREG is available in <sys/stat.h>.])
401     res=S_ISREG
402   elif test $glibcxx_cv_S_IFREG = yes; then
403     AC_DEFINE(HAVE_S_IFREG, 1,
404               [Define if S_IFREG is available in <sys/stat.h>.])
405     res=S_IFREG
406   fi
407   AC_MSG_RESULT($res)
408
409   CXXFLAGS="$ac_save_CXXFLAGS"
410   AC_LANG_RESTORE
411 ])
412
413
414 dnl
415 dnl Check whether poll is available in <poll.h>, and define HAVE_POLL.
416 dnl
417 AC_DEFUN([GLIBCXX_CHECK_POLL], [
418
419   AC_LANG_SAVE
420   AC_LANG_CPLUSPLUS
421   ac_save_CXXFLAGS="$CXXFLAGS"
422   CXXFLAGS="$CXXFLAGS -fno-exceptions"
423
424   AC_MSG_CHECKING([for poll])
425   AC_CACHE_VAL(glibcxx_cv_POLL, [
426     GCC_TRY_COMPILE_OR_LINK(
427       [#include <poll.h>],
428       [struct pollfd pfd[1];
429        pfd[0].events = POLLIN;
430        poll(pfd, 1, 0);],
431       [glibcxx_cv_POLL=yes],
432       [glibcxx_cv_POLL=no])
433   ])
434   if test $glibcxx_cv_POLL = yes; then
435     AC_DEFINE(HAVE_POLL, 1, [Define if poll is available in <poll.h>.])
436   fi
437   AC_MSG_RESULT($glibcxx_cv_POLL)
438
439   CXXFLAGS="$ac_save_CXXFLAGS"
440   AC_LANG_RESTORE
441 ])
442
443
444 dnl
445 dnl Check whether writev is available in <sys/uio.h>, and define HAVE_WRITEV.
446 dnl
447 AC_DEFUN([GLIBCXX_CHECK_WRITEV], [
448
449   AC_LANG_SAVE
450   AC_LANG_CPLUSPLUS
451   ac_save_CXXFLAGS="$CXXFLAGS"
452   CXXFLAGS="$CXXFLAGS -fno-exceptions"
453
454   AC_MSG_CHECKING([for writev])
455   AC_CACHE_VAL(glibcxx_cv_WRITEV, [
456     GCC_TRY_COMPILE_OR_LINK(
457       [#include <sys/uio.h>],
458       [struct iovec iov[2];
459        writev(0, iov, 0);],
460       [glibcxx_cv_WRITEV=yes],
461       [glibcxx_cv_WRITEV=no])
462   ])
463   if test $glibcxx_cv_WRITEV = yes; then
464     AC_DEFINE(HAVE_WRITEV, 1, [Define if writev is available in <sys/uio.h>.])
465   fi
466   AC_MSG_RESULT($glibcxx_cv_WRITEV)
467
468   CXXFLAGS="$ac_save_CXXFLAGS"
469   AC_LANG_RESTORE
470 ])
471
472
473 dnl
474 dnl Check whether int64_t is available in <stdint.h>, and define HAVE_INT64_T.
475 dnl Also check whether int64_t is actually a typedef to long or long long.
476 dnl
477 AC_DEFUN([GLIBCXX_CHECK_INT64_T], [
478
479   AC_LANG_SAVE
480   AC_LANG_CPLUSPLUS
481
482   AC_MSG_CHECKING([for int64_t])
483   AC_CACHE_VAL(glibcxx_cv_INT64_T, [
484     AC_TRY_COMPILE(
485       [#include <stdint.h>],
486       [int64_t var;],
487       [glibcxx_cv_INT64_T=yes],
488       [glibcxx_cv_INT64_T=no])
489   ])
490
491   if test $glibcxx_cv_INT64_T = yes; then
492     AC_DEFINE(HAVE_INT64_T, 1, [Define if int64_t is available in <stdint.h>.])
493     AC_MSG_RESULT($glibcxx_cv_INT64_T)
494
495     AC_MSG_CHECKING([for int64_t as long])
496     AC_CACHE_VAL(glibcxx_cv_int64_t_long, [
497       AC_TRY_COMPILE(
498         [#include <stdint.h>
499         template<typename, typename> struct same { enum { value = -1 }; };
500         template<typename Tp> struct same<Tp, Tp> { enum { value = 1 }; };
501         int array[same<int64_t, long>::value];], [],
502         [glibcxx_cv_int64_t_long=yes], [glibcxx_cv_int64_t_long=no])
503     ])
504
505     if test $glibcxx_cv_int64_t_long = yes; then
506       AC_DEFINE(HAVE_INT64_T_LONG, 1, [Define if int64_t is a long.])
507       AC_MSG_RESULT($glibcxx_cv_int64_t_long)
508     fi
509
510     AC_MSG_CHECKING([for int64_t as long long])
511     AC_CACHE_VAL(glibcxx_cv_int64_t_long_long, [
512       AC_TRY_COMPILE(
513         [#include <stdint.h>
514         template<typename, typename> struct same { enum { value = -1 }; };
515         template<typename Tp> struct same<Tp, Tp> { enum { value = 1 }; };
516         int array[same<int64_t, long long>::value];], [],
517         [glibcxx_cv_int64_t_long_long=yes], [glibcxx_cv_int64_t_long_long=no])
518     ])
519
520     if test $glibcxx_cv_int64_t_long_long = yes; then
521       AC_DEFINE(HAVE_INT64_T_LONG_LONG, 1, [Define if int64_t is a long long.])
522       AC_MSG_RESULT($glibcxx_cv_int64_t_long_long)
523     fi
524   fi
525
526   AC_LANG_RESTORE
527 ])
528
529
530 dnl
531 dnl Check whether LFS support is available.
532 dnl
533 AC_DEFUN([GLIBCXX_CHECK_LFS], [
534   AC_LANG_SAVE
535   AC_LANG_CPLUSPLUS
536   ac_save_CXXFLAGS="$CXXFLAGS"
537   CXXFLAGS="$CXXFLAGS -fno-exceptions"
538   AC_MSG_CHECKING([for LFS support])
539   AC_CACHE_VAL(glibcxx_cv_LFS, [
540     GCC_TRY_COMPILE_OR_LINK(
541       [#include <unistd.h>
542        #include <stdio.h>
543        #include <sys/stat.h>
544       ],
545       [FILE* fp;
546        fopen64("t", "w");
547        fseeko64(fp, 0, SEEK_CUR);
548        ftello64(fp);
549        lseek64(1, 0, SEEK_CUR);
550        struct stat64 buf;
551        fstat64(1, &buf);],
552       [glibcxx_cv_LFS=yes],
553       [glibcxx_cv_LFS=no])
554   ])
555   if test $glibcxx_cv_LFS = yes; then
556     AC_DEFINE(_GLIBCXX_USE_LFS, 1, [Define if LFS support is available.])
557   fi
558   AC_MSG_RESULT($glibcxx_cv_LFS)
559   CXXFLAGS="$ac_save_CXXFLAGS"
560   AC_LANG_RESTORE
561 ])
562
563
564 dnl
565 dnl Check for whether a fully dynamic basic_string implementation should
566 dnl be turned on, that does not put empty objects in per-process static
567 dnl memory (mostly useful together with shared memory allocators, see PR
568 dnl libstdc++/16612 for details).
569 dnl
570 dnl --enable-fully-dynamic-string defines _GLIBCXX_FULLY_DYNAMIC_STRING to 1
571 dnl --disable-fully-dynamic-string defines _GLIBCXX_FULLY_DYNAMIC_STRING to 0
572 dnl otherwise undefined
573 dnl  +  Usage:  GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING[(DEFAULT)]
574 dnl       Where DEFAULT is either `yes' or `no'.
575 dnl
576 AC_DEFUN([GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING], [
577   GLIBCXX_ENABLE(fully-dynamic-string,$1,,[do not put empty strings in per-process static memory])
578   if test $enable_fully_dynamic_string = yes; then
579     enable_fully_dynamic_string_def=1
580   else
581     enable_fully_dynamic_string_def=0
582   fi
583   AC_DEFINE_UNQUOTED([_GLIBCXX_FULLY_DYNAMIC_STRING], [${enable_fully_dynamic_string_def}],
584               [Define to 1 if a fully dynamic basic_string is wanted, 0 to disable, undefined for platform defaults])
585 ])
586
587
588 dnl
589 dnl Does any necessary configuration of the testsuite directory.  Generates
590 dnl the testsuite_hooks.h header.
591 dnl
592 dnl GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE must be done before this.
593 dnl
594 dnl Sets:
595 dnl  enable_abi_check
596 dnl  GLIBCXX_TEST_WCHAR_T
597 dnl  GLIBCXX_TEST_THREAD
598 dnl Substs:
599 dnl  baseline_dir
600 dnl  baseline_subdir_switch
601 dnl
602 AC_DEFUN([GLIBCXX_CONFIGURE_TESTSUITE], [
603   if $GLIBCXX_IS_NATIVE ; then
604     # Do checks for resource limit functions.
605     GLIBCXX_CHECK_SETRLIMIT
606
607     # Look for setenv, so that extended locale tests can be performed.
608     GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3(setenv)
609   fi
610
611   if $GLIBCXX_IS_NATIVE && test $is_hosted = yes &&
612      test $enable_symvers != no; then
613     case "$host" in
614       *-*-cygwin*)
615         enable_abi_check=no ;;
616       *)
617         enable_abi_check=yes ;;
618     esac
619   else
620     # Only build this as native, since automake does not understand
621     # CXX_FOR_BUILD.
622     enable_abi_check=no
623   fi
624
625   # Export file names for ABI checking.
626   baseline_dir="$glibcxx_srcdir/config/abi/post/${abi_baseline_pair}"
627   AC_SUBST(baseline_dir)
628   baseline_subdir_switch="$abi_baseline_subdir_switch"
629   AC_SUBST(baseline_subdir_switch)
630 ])
631
632
633 dnl
634 dnl Does any necessary configuration for docbook in the docs directory.
635 dnl
636 dnl XSLTPROC must be set before this
637 dnl
638 dnl Sets:
639 dnl  glibcxx_stylesheets
640 dnl Substs:
641 dnl  XSL_STYLE_DIR
642 dnl
643 AC_DEFUN([GLIBCXX_CONFIGURE_DOCBOOK], [
644
645 AC_MSG_CHECKING([for docbook stylesheets for documentation creation])
646 glibcxx_stylesheets=no
647 if test x${XSLTPROC} = xyes && echo '<title/>' | xsltproc --noout --nonet --xinclude http://docbook.sourceforge.net/release/xsl-ns/current/xhtml-1_1/docbook.xsl - 2>/dev/null; then
648   glibcxx_stylesheets=yes
649 fi
650 AC_MSG_RESULT($glibcxx_stylesheets)
651
652 AC_MSG_CHECKING([for local stylesheet directory])
653 glibcxx_local_stylesheets=no
654 if test x"$glibcxx_stylesheets" = x"yes"; then
655   if test -d /usr/share/sgml/docbook/xsl-ns-stylesheets; then
656     glibcxx_local_stylesheets=yes
657     XSL_STYLE_DIR=/usr/share/sgml/docbook/xsl-ns-stylesheets
658   fi
659   if test -d /usr/share/xml/docbook/stylesheet/docbook-xsl-ns; then
660     glibcxx_local_stylesheets=yes
661     XSL_STYLE_DIR=/usr/share/xml/docbook/stylesheet/docbook-xsl-ns
662   fi
663 fi
664 AC_MSG_RESULT($glibcxx_local_stylesheets)
665
666 if test x"$glibcxx_local_stylesheets" = x"yes"; then
667   AC_SUBST(XSL_STYLE_DIR)
668   AC_MSG_NOTICE($XSL_STYLE_DIR)
669 else
670   glibcxx_stylesheets=no
671 fi
672
673 # Check for epub3 dependencies.
674 AC_MSG_CHECKING([for epub3 stylesheets for documentation creation])
675 glibcxx_epub_stylesheets=no
676 if test x"$glibcxx_local_stylesheets" = x"yes"; then
677    if test -f "$XSL_STYLE_DIR/epub3/chunk.xsl"; then
678       glibcxx_epub_stylesheets=yes
679    fi
680 fi
681 AC_MSG_RESULT($glibcxx_epub_stylesheets)
682 AM_CONDITIONAL(BUILD_EPUB, test x"$glibcxx_epub_stylesheets" = x"yes")
683
684 ])
685
686
687 dnl
688 dnl Set up *_INCLUDES variables for all sundry Makefile.am's.
689 dnl
690 dnl Substs:
691 dnl  GLIBCXX_INCLUDES
692 dnl  TOPLEVEL_INCLUDES
693 dnl
694 AC_DEFUN([GLIBCXX_EXPORT_INCLUDES], [
695   # Used for every C++ compile we perform.
696   GLIBCXX_INCLUDES="\
697 -I$glibcxx_builddir/include/$host_alias \
698 -I$glibcxx_builddir/include \
699 -I$glibcxx_srcdir/libsupc++"
700
701   # For Canadian crosses, pick this up too.
702   if test $CANADIAN = yes; then
703     GLIBCXX_INCLUDES="$GLIBCXX_INCLUDES -I\${includedir}"
704   fi
705
706   # Stuff in the actual top level.  Currently only used by libsupc++ to
707   # get unwind* headers from the libgcc dir.
708   #TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/libgcc -I$(toplevel_srcdir)/include'
709   TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/libgcc'
710
711   # Now, export this to all the little Makefiles....
712   AC_SUBST(GLIBCXX_INCLUDES)
713   AC_SUBST(TOPLEVEL_INCLUDES)
714 ])
715
716
717 dnl
718 dnl Set up *_FLAGS and *FLAGS variables for all sundry Makefile.am's.
719 dnl (SECTION_FLAGS is done under CHECK_COMPILER_FEATURES.)
720 dnl
721 dnl Substs:
722 dnl  OPTIMIZE_CXXFLAGS
723 dnl  WARN_FLAGS
724 dnl
725 AC_DEFUN([GLIBCXX_EXPORT_FLAGS], [
726   # Optimization flags that are probably a good idea for thrill-seekers. Just
727   # uncomment the lines below and make, everything else is ready to go...
728   # Alternatively OPTIMIZE_CXXFLAGS can be set in configure.host.
729   # OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc
730   AC_SUBST(OPTIMIZE_CXXFLAGS)
731
732   WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual'
733   AC_SUBST(WARN_FLAGS)
734 ])
735
736
737 dnl
738 dnl All installation directory information is determined here.
739 dnl
740 dnl Substs:
741 dnl  gxx_install_dir
742 dnl  glibcxx_prefixdir
743 dnl  glibcxx_toolexecdir
744 dnl  glibcxx_toolexeclibdir
745 dnl
746 dnl Assumes cross_compiling bits already done, and with_cross_host in
747 dnl particular.
748 dnl
749 dnl This logic must match gcc/configure.ac's setting of gcc_gxx_include_dir.
750 dnl config/gxx-include-dir.m4 must be kept consistant with this as well.
751 AC_DEFUN([GLIBCXX_EXPORT_INSTALL_INFO], [
752   glibcxx_toolexecdir=no
753   glibcxx_toolexeclibdir=no
754   glibcxx_prefixdir=$prefix
755
756   AC_MSG_CHECKING([for gxx-include-dir])
757   AC_ARG_WITH([gxx-include-dir],
758     AC_HELP_STRING([--with-gxx-include-dir=DIR],
759                    [installation directory for include files]),
760     [case "$withval" in
761       yes) AC_MSG_ERROR([Missing directory for --with-gxx-include-dir]) ;;
762       no)  gxx_include_dir=no ;;
763       *)   gxx_include_dir=$withval ;;
764      esac],
765     [gxx_include_dir=no])
766   AC_MSG_RESULT($gxx_include_dir)
767
768   AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
769   AC_ARG_ENABLE([version-specific-runtime-libs],
770     AC_HELP_STRING([--enable-version-specific-runtime-libs],
771                    [Specify that runtime libraries should be installed in a compiler-specific directory]),
772     [case "$enableval" in
773       yes) version_specific_libs=yes ;;
774       no)  version_specific_libs=no ;;
775       *)   AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);;
776      esac],
777     [version_specific_libs=no])
778   AC_MSG_RESULT($version_specific_libs)
779
780   # Default case for install directory for include files.
781   if test $version_specific_libs = no && test $gxx_include_dir = no; then
782     gxx_include_dir='include/c++/${gcc_version}'
783     if test -n "$with_cross_host" &&
784        test x"$with_cross_host" != x"no"; then
785       gxx_include_dir='${prefix}/${target_alias}/'"$gxx_include_dir"
786     else
787       gxx_include_dir='${prefix}/'"$gxx_include_dir"
788     fi
789   fi
790
791   # Version-specific runtime libs processing.
792   if test $version_specific_libs = yes; then
793     # Need the gcc compiler version to know where to install libraries
794     # and header files if --enable-version-specific-runtime-libs option
795     # is selected.  FIXME: these variables are misnamed, there are
796     # no executables installed in _toolexecdir or _toolexeclibdir.
797     if test x"$gxx_include_dir" = x"no"; then
798       gxx_include_dir='${libdir}/gcc/${host_alias}/${gcc_version}/include/c++'
799     fi
800     glibcxx_toolexecdir='${libdir}/gcc/${host_alias}'
801     glibcxx_toolexeclibdir='${toolexecdir}/${gcc_version}$(MULTISUBDIR)'
802   fi
803
804   # Calculate glibcxx_toolexecdir, glibcxx_toolexeclibdir
805   # Install a library built with a cross compiler in tooldir, not libdir.
806   if test x"$glibcxx_toolexecdir" = x"no"; then
807     if test -n "$with_cross_host" &&
808        test x"$with_cross_host" != x"no"; then
809       glibcxx_toolexecdir='${exec_prefix}/${host_alias}'
810       glibcxx_toolexeclibdir='${toolexecdir}/lib'
811     else
812       glibcxx_toolexecdir='${libdir}/gcc/${host_alias}'
813       glibcxx_toolexeclibdir='${libdir}'
814     fi
815     multi_os_directory=`$CXX -print-multi-os-directory`
816     case $multi_os_directory in
817       .) ;; # Avoid trailing /.
818       *) glibcxx_toolexeclibdir=$glibcxx_toolexeclibdir/$multi_os_directory ;;
819     esac
820   fi
821
822   AC_MSG_CHECKING([for install location])
823   AC_MSG_RESULT($gxx_include_dir)
824
825   AC_SUBST(glibcxx_prefixdir)
826   AC_SUBST(gxx_include_dir)
827   AC_SUBST(glibcxx_toolexecdir)
828   AC_SUBST(glibcxx_toolexeclibdir)
829 ])
830
831
832 dnl
833 dnl GLIBCXX_ENABLE
834 dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING)
835 dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, permit a|b|c)
836 dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, SHELL-CODE-HANDLER)
837 dnl
838 dnl See docs/html/17_intro/configury.html#enable for documentation.
839 dnl
840 m4_define([GLIBCXX_ENABLE],[dnl
841 m4_define([_g_switch],[--enable-$1])dnl
842 m4_define([_g_help],[AC_HELP_STRING([_g_switch$3],[$4 @<:@default=$2@:>@])])dnl
843  AC_ARG_ENABLE([$1],m4_dquote(_g_help),
844   m4_bmatch([$5],
845    [^permit ],
846      [[
847       case "$enableval" in
848        m4_bpatsubst([$5],[permit ])) ;;
849        *) AC_MSG_ERROR(Unknown argument to enable/disable $1) ;;
850           dnl Idea for future:  generate a URL pointing to
851           dnl "onlinedocs/configopts.html#whatever"
852       esac
853      ]],
854    [^$],
855      [[
856       case "$enableval" in
857        yes|no) ;;
858        *) AC_MSG_ERROR(Argument to enable/disable $1 must be yes or no) ;;
859       esac
860      ]],
861    [[$5]]),
862   [enable_]m4_bpatsubst([$1],-,_)[=][$2])
863 m4_undefine([_g_switch])dnl
864 m4_undefine([_g_help])dnl
865 ])
866
867
868 dnl
869 dnl Check for ISO/IEC 9899:1999 "C99" support.
870 dnl
871 dnl --enable-c99 defines _GLIBCXX_USE_C99
872 dnl --disable-c99 leaves _GLIBCXX_USE_C99 undefined
873 dnl  +  Usage:  GLIBCXX_ENABLE_C99[(DEFAULT)]
874 dnl       Where DEFAULT is either `yes' or `no'.
875 dnl  +  If 'C99' stuff is not available, ignores DEFAULT and sets `no'.
876 dnl
877 AC_DEFUN([GLIBCXX_ENABLE_C99], [
878   GLIBCXX_ENABLE(c99,$1,,[turns on ISO/IEC 9899:1999 support])
879
880   if test x"$enable_c99" = x"yes"; then
881
882   AC_LANG_SAVE
883   AC_LANG_CPLUSPLUS
884
885   # Use -std=c++98 because the default (-std=gnu++98) leaves __STRICT_ANSI__
886   # undefined and fake C99 facilities - like pre-standard snprintf - may be
887   # spuriously enabled.
888   # Long term, -std=c++0x could be even better, could manage to explicitely
889   # request C99 facilities to the underlying C headers.
890   ac_save_CXXFLAGS="$CXXFLAGS"
891   CXXFLAGS="$CXXFLAGS -std=c++98"
892   ac_save_LIBS="$LIBS"
893   ac_save_gcc_no_link="$gcc_no_link"
894
895   if test x$gcc_no_link != xyes; then
896     # Use -fno-exceptions to that the C driver can link these tests without
897     # hitting undefined references to personality routines.
898     CXXFLAGS="$CXXFLAGS -fno-exceptions"
899     AC_CHECK_LIB(m, sin, [
900       LIBS="$LIBS -lm"
901     ], [
902       # Use the default compile-only tests in GCC_TRY_COMPILE_OR_LINK
903       gcc_no_link=yes
904     ])
905   fi
906
907   # Check for the existence of <math.h> functions used if C99 is enabled.
908   AC_MSG_CHECKING([for ISO C99 support in <math.h>])
909   AC_CACHE_VAL(glibcxx_cv_c99_math, [
910   GCC_TRY_COMPILE_OR_LINK(
911      [#include <math.h>
912       volatile double d1, d2;
913       volatile int i;],
914      [i = fpclassify(d1);
915       i = isfinite(d1);
916       i = isinf(d1);
917       i = isnan(d1);
918       i = isnormal(d1);
919       i = signbit(d1);
920       i = isgreater(d1, d2);
921       i = isgreaterequal(d1, d2);
922       i = isless(d1, d2);
923       i = islessequal(d1, d2);
924       i = islessgreater(d1, d2);
925       i = islessgreater(d1, d2);
926       i = isunordered(d1, d2);
927      ],[glibcxx_cv_c99_math=yes], [glibcxx_cv_c99_math=no])
928   ])
929   AC_MSG_RESULT($glibcxx_cv_c99_math)
930   if test x"$glibcxx_cv_c99_math" = x"yes"; then
931     AC_DEFINE(_GLIBCXX_USE_C99_MATH, 1,
932               [Define if C99 functions or macros in <math.h> should be imported
933               in <cmath> in namespace std.])
934   fi
935
936   # Check for the existence of <complex.h> complex math functions.
937   # This is necessary even though libstdc++ uses the builtin versions
938   # of these functions, because if the builtin cannot be used, a reference
939   # to the library function is emitted.
940   AC_CHECK_HEADERS(tgmath.h, ac_has_tgmath_h=yes, ac_has_tgmath_h=no)
941   AC_CHECK_HEADERS(complex.h, ac_has_complex_h=yes, ac_has_complex_h=no)
942   glibcxx_cv_c99_complex=no;
943   if test x"$ac_has_complex_h" = x"yes"; then
944     AC_MSG_CHECKING([for ISO C99 support in <complex.h>])
945     GCC_TRY_COMPILE_OR_LINK(
946        [#include <complex.h>
947         typedef __complex__ float float_type;
948         typedef __complex__ double double_type;
949         typedef __complex__ long double ld_type;
950         volatile float_type tmpf;
951         volatile double_type tmpd;
952         volatile ld_type tmpld;
953         volatile float f;
954         volatile double d;
955         volatile long double ld;],
956        [f = cabsf(tmpf);
957         f = cargf(tmpf);
958         tmpf = ccosf(tmpf);
959         tmpf = ccoshf(tmpf);
960         tmpf = cexpf(tmpf);
961         tmpf = clogf(tmpf);
962         tmpf = csinf(tmpf);
963         tmpf = csinhf(tmpf);
964         tmpf = csqrtf(tmpf);
965         tmpf = ctanf(tmpf);
966         tmpf = ctanhf(tmpf);
967         tmpf = cpowf(tmpf, tmpf);
968         tmpf = cprojf(tmpf);
969         d = cabs(tmpd);
970         d = carg(tmpd);
971         tmpd = ccos(tmpd);
972         tmpd = ccosh(tmpd);
973         tmpd = cexp(tmpd);
974         tmpd = clog(tmpd);
975         tmpd = csin(tmpd);
976         tmpd = csinh(tmpd);
977         tmpd = csqrt(tmpd);
978         tmpd = ctan(tmpd);
979         tmpd = ctanh(tmpd);
980         tmpd = cpow(tmpd, tmpd);
981         tmpd = cproj(tmpd);
982         ld = cabsl(tmpld);
983         ld = cargl(tmpld);
984         tmpld = ccosl(tmpld);
985         tmpld = ccoshl(tmpld);
986         tmpld = cexpl(tmpld);
987         tmpld = clogl(tmpld);
988         tmpld = csinl(tmpld);
989         tmpld = csinhl(tmpld);
990         tmpld = csqrtl(tmpld);
991         tmpld = ctanl(tmpld);
992         tmpld = ctanhl(tmpld);
993         tmpld = cpowl(tmpld, tmpld);
994         tmpld = cprojl(tmpld);
995        ],[glibcxx_cv_c99_complex=yes], [glibcxx_cv_c99_complex=no])
996   fi
997   AC_MSG_RESULT($glibcxx_cv_c99_complex)
998   if test x"$glibcxx_cv_c99_complex" = x"yes"; then
999     AC_DEFINE(_GLIBCXX_USE_C99_COMPLEX, 1,
1000               [Define if C99 functions in <complex.h> should be used in
1001               <complex>. Using compiler builtins for these functions requires
1002               corresponding C99 library functions to be present.])
1003   fi
1004
1005   # Check for the existence in <stdio.h> of vscanf, et. al.
1006   AC_MSG_CHECKING([for ISO C99 support in <stdio.h>])
1007   AC_CACHE_VAL(glibcxx_cv_c99_stdio, [
1008   GCC_TRY_COMPILE_OR_LINK(
1009      [#include <stdio.h>
1010       #include <stdarg.h>
1011       void foo(char* fmt, ...)
1012       {
1013         va_list args; va_start(args, fmt);
1014         vfscanf(stderr, "%i", args);
1015         vscanf("%i", args);
1016         vsnprintf(fmt, 0, "%i", args);
1017         vsscanf(fmt, "%i", args);
1018       }],
1019      [snprintf("12", 0, "%i");],
1020      [glibcxx_cv_c99_stdio=yes], [glibcxx_cv_c99_stdio=no])
1021   ])
1022   AC_MSG_RESULT($glibcxx_cv_c99_stdio)
1023
1024   # Check for the existence in <stdlib.h> of lldiv_t, et. al.
1025   AC_MSG_CHECKING([for ISO C99 support in <stdlib.h>])
1026   AC_CACHE_VAL(glibcxx_cv_c99_stdlib, [
1027   GCC_TRY_COMPILE_OR_LINK(
1028      [#include <stdlib.h>
1029       volatile float f;
1030       volatile long double ld;
1031       volatile unsigned long long ll;
1032       lldiv_t mydivt;],
1033      [char* tmp;
1034       f = strtof("gnu", &tmp);
1035       ld = strtold("gnu", &tmp);
1036       ll = strtoll("gnu", &tmp, 10);
1037       ll = strtoull("gnu", &tmp, 10);
1038       ll = llabs(10);
1039       mydivt = lldiv(10,1);
1040       ll = mydivt.quot;
1041       ll = mydivt.rem;
1042       ll = atoll("10");
1043       _Exit(0);
1044       ],[glibcxx_cv_c99_stdlib=yes], [glibcxx_cv_c99_stdlib=no])
1045   ])
1046   AC_MSG_RESULT($glibcxx_cv_c99_stdlib)
1047
1048   # Check for the existence in <wchar.h> of wcstold, etc.
1049   glibcxx_cv_c99_wchar=no;
1050   if test x"$ac_has_wchar_h" = xyes &&
1051      test x"$ac_has_wctype_h" = xyes; then
1052     AC_MSG_CHECKING([for ISO C99 support in <wchar.h>])
1053     AC_TRY_COMPILE([#include <wchar.h>
1054                     namespace test
1055                     {
1056                       using ::wcstold;
1057                       using ::wcstoll;
1058                       using ::wcstoull;
1059                     }
1060                    ],[],[glibcxx_cv_c99_wchar=yes], [glibcxx_cv_c99_wchar=no])
1061
1062     # Checks for wide character functions that may not be present.
1063     # Injection of these is wrapped with guard macros.
1064     # NB: only put functions here, instead of immediately above, if
1065     # absolutely necessary.
1066     AC_TRY_COMPILE([#include <wchar.h>
1067                     namespace test { using ::vfwscanf; } ], [],
1068                    [AC_DEFINE(HAVE_VFWSCANF,1,
1069                         [Defined if vfwscanf exists.])],[])
1070
1071     AC_TRY_COMPILE([#include <wchar.h>
1072                     namespace test { using ::vswscanf; } ], [],
1073                    [AC_DEFINE(HAVE_VSWSCANF,1,
1074                         [Defined if vswscanf exists.])],[])
1075
1076     AC_TRY_COMPILE([#include <wchar.h>
1077                     namespace test { using ::vwscanf; } ], [],
1078                    [AC_DEFINE(HAVE_VWSCANF,1,[Defined if vwscanf exists.])],[])
1079
1080     AC_TRY_COMPILE([#include <wchar.h>
1081                     namespace test { using ::wcstof; } ], [],
1082                    [AC_DEFINE(HAVE_WCSTOF,1,[Defined if wcstof exists.])],[])
1083
1084     AC_TRY_COMPILE([#include <wctype.h>],
1085                    [ wint_t t; int i = iswblank(t);],
1086                    [AC_DEFINE(HAVE_ISWBLANK,1,
1087                         [Defined if iswblank exists.])],[])
1088
1089     AC_MSG_RESULT($glibcxx_cv_c99_wchar)
1090   fi
1091
1092   # Option parsed, now set things appropriately.
1093   if test x"$glibcxx_cv_c99_math" = x"no" ||
1094      test x"$glibcxx_cv_c99_complex" = x"no" ||
1095      test x"$glibcxx_cv_c99_stdio" = x"no" ||
1096      test x"$glibcxx_cv_c99_stdlib" = x"no" ||
1097      test x"$glibcxx_cv_c99_wchar" = x"no"; then
1098     enable_c99=no;
1099   else
1100     AC_DEFINE(_GLIBCXX_USE_C99, 1,
1101     [Define if C99 functions or macros from <wchar.h>, <math.h>,
1102     <complex.h>, <stdio.h>, and <stdlib.h> can be used or exposed.])
1103   fi
1104
1105   gcc_no_link="$ac_save_gcc_no_link"
1106   LIBS="$ac_save_LIBS"
1107   CXXFLAGS="$ac_save_CXXFLAGS"
1108   AC_LANG_RESTORE
1109   fi
1110
1111   AC_MSG_CHECKING([for fully enabled ISO C99 support])
1112   AC_MSG_RESULT($enable_c99)
1113 ])
1114
1115
1116 dnl
1117 dnl Check for clock_gettime, nanosleep and sched_yield, used in the
1118 dnl implementation of 20.8.5 [time.clock], and 30.2.2 [thread.thread.this]
1119 dnl in the current C++0x working draft.
1120 dnl
1121 dnl --enable-libstdcxx-time
1122 dnl --enable-libstdcxx-time=yes
1123 dnl        checks for the availability of monotonic and realtime clocks,
1124 dnl        nanosleep and sched_yield in libc and libposix4 and, in case, links
1125 dnl       the latter
1126 dnl --enable-libstdcxx-time=rt
1127 dnl        also searches (and, in case, links) librt.  Note that this is
1128 dnl        not always desirable because, in glibc, for example, in turn it
1129 dnl        triggers the linking of libpthread too, which activates locking,
1130 dnl        a large overhead for single-thread programs.
1131 dnl --enable-libstdcxx-time=no
1132 dnl --disable-libstdcxx-time
1133 dnl        disables the checks completely
1134 dnl
1135 AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME], [
1136
1137   AC_MSG_CHECKING([for clock_gettime, nanosleep and sched_yield])
1138   GLIBCXX_ENABLE(libstdcxx-time,$1,[[[=KIND]]],
1139     [use KIND for check type],
1140     [permit yes|no|rt])
1141
1142   AC_LANG_SAVE
1143   AC_LANG_CPLUSPLUS
1144   ac_save_CXXFLAGS="$CXXFLAGS"
1145   CXXFLAGS="$CXXFLAGS -fno-exceptions"
1146   ac_save_LIBS="$LIBS"
1147
1148   ac_has_clock_monotonic=no
1149   ac_has_clock_realtime=no
1150   AC_MSG_RESULT($enable_libstdcxx_time)
1151
1152   if test x"$enable_libstdcxx_time" != x"no"; then
1153
1154     if test x"$enable_libstdcxx_time" = x"rt"; then
1155       AC_SEARCH_LIBS(clock_gettime, [rt posix4])
1156       AC_SEARCH_LIBS(nanosleep, [rt posix4])
1157     else
1158       AC_SEARCH_LIBS(clock_gettime, [posix4])
1159       AC_SEARCH_LIBS(nanosleep, [posix4])
1160     fi
1161
1162     case "$ac_cv_search_clock_gettime" in
1163       -l*) GLIBCXX_LIBS=$ac_cv_search_clock_gettime
1164       ;;
1165     esac
1166     case "$ac_cv_search_nanosleep" in
1167       -l*) GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_nanosleep"
1168       ;;
1169     esac
1170
1171     AC_SEARCH_LIBS(sched_yield, [rt posix4])
1172
1173     case "$ac_cv_search_sched_yield" in
1174       -lposix4*)
1175       GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_sched_yield"
1176       AC_DEFINE(_GLIBCXX_USE_SCHED_YIELD, 1,
1177                 [ Defined if sched_yield is available. ])
1178       ;;
1179       -lrt*)
1180       if test x"$enable_libstdcxx_time" = x"rt"; then
1181         GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_sched_yield"
1182         AC_DEFINE(_GLIBCXX_USE_SCHED_YIELD, 1,
1183                   [ Defined if sched_yield is available. ])
1184       fi
1185       ;;
1186       *)
1187       AC_DEFINE(_GLIBCXX_USE_SCHED_YIELD, 1,
1188                 [ Defined if sched_yield is available. ])
1189       ;;
1190     esac
1191
1192     AC_CHECK_HEADERS(unistd.h, ac_has_unistd_h=yes, ac_has_unistd_h=no)
1193
1194     if test x"$ac_has_unistd_h" = x"yes"; then
1195       AC_MSG_CHECKING([for monotonic clock])
1196       AC_TRY_LINK(
1197         [#include <unistd.h>
1198          #include <time.h>
1199         ],
1200         [#if _POSIX_TIMERS > 0 && defined(_POSIX_MONOTONIC_CLOCK)
1201           timespec tp;
1202          #endif
1203           clock_gettime(CLOCK_MONOTONIC, &tp);
1204         ], [ac_has_clock_monotonic=yes], [ac_has_clock_monotonic=no])
1205
1206       AC_MSG_RESULT($ac_has_clock_monotonic)
1207
1208       AC_MSG_CHECKING([for realtime clock])
1209       AC_TRY_LINK(
1210         [#include <unistd.h>
1211          #include <time.h>
1212         ],
1213         [#if _POSIX_TIMERS > 0
1214           timespec tp;
1215          #endif
1216           clock_gettime(CLOCK_REALTIME, &tp);
1217         ], [ac_has_clock_realtime=yes], [ac_has_clock_realtime=no])
1218
1219       AC_MSG_RESULT($ac_has_clock_realtime)
1220
1221       AC_MSG_CHECKING([for nanosleep])
1222       AC_TRY_LINK(
1223         [#include <unistd.h>
1224          #include <time.h>
1225         ],
1226         [#if _POSIX_TIMERS > 0
1227           timespec tp;
1228          #endif
1229           nanosleep(&tp, 0);
1230         ], [ac_has_nanosleep=yes], [ac_has_nanosleep=no])
1231
1232       AC_MSG_RESULT($ac_has_nanosleep)
1233     fi
1234   fi
1235
1236   if test x"$ac_has_clock_monotonic" = x"yes"; then
1237     AC_DEFINE(_GLIBCXX_USE_CLOCK_MONOTONIC, 1,
1238       [ Defined if clock_gettime has monotonic clock support. ])
1239   fi
1240
1241   if test x"$ac_has_clock_realtime" = x"yes"; then
1242     AC_DEFINE(_GLIBCXX_USE_CLOCK_REALTIME, 1,
1243       [ Defined if clock_gettime has realtime clock support. ])
1244   fi
1245
1246   if test x"$ac_has_nanosleep" = x"yes"; then
1247     AC_DEFINE(_GLIBCXX_USE_NANOSLEEP, 1,
1248       [ Defined if nanosleep is available. ])
1249   fi
1250
1251   AC_SUBST(GLIBCXX_LIBS)
1252
1253   CXXFLAGS="$ac_save_CXXFLAGS"
1254   LIBS="$ac_save_LIBS"
1255   AC_LANG_RESTORE
1256 ])
1257
1258 dnl
1259 dnl Check for gettimeofday, used in the implementation of 20.8.5
1260 dnl [time.clock] in the current C++0x working draft.
1261 dnl
1262 AC_DEFUN([GLIBCXX_CHECK_GETTIMEOFDAY], [
1263
1264   AC_MSG_CHECKING([for gettimeofday])
1265
1266   AC_LANG_SAVE
1267   AC_LANG_CPLUSPLUS
1268   ac_save_CXXFLAGS="$CXXFLAGS"
1269   CXXFLAGS="$CXXFLAGS -fno-exceptions"
1270
1271   ac_has_gettimeofday=no;
1272   AC_CHECK_HEADERS(sys/time.h, ac_has_sys_time_h=yes, ac_has_sys_time_h=no)
1273   if test x"$ac_has_sys_time_h" = x"yes"; then
1274     AC_MSG_CHECKING([for gettimeofday])
1275     GCC_TRY_COMPILE_OR_LINK([#include <sys/time.h>],
1276       [timeval tv; gettimeofday(&tv, 0);],
1277       [ac_has_gettimeofday=yes], [ac_has_gettimeofday=no])
1278
1279     AC_MSG_RESULT($ac_has_gettimeofday)
1280   fi
1281
1282   if test x"$ac_has_gettimeofday" = x"yes"; then
1283     AC_DEFINE(_GLIBCXX_USE_GETTIMEOFDAY, 1,
1284       [ Defined if gettimeofday is available. ])
1285   fi
1286
1287   CXXFLAGS="$ac_save_CXXFLAGS"
1288   AC_LANG_RESTORE
1289 ])
1290
1291 dnl
1292 dnl Check for ISO/IEC 9899:1999 "C99" support to ISO/IEC DTR 19768 "TR1"
1293 dnl facilities in Chapter 8, "C compatibility".
1294 dnl
1295 AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [
1296
1297   AC_LANG_SAVE
1298   AC_LANG_CPLUSPLUS
1299
1300   # Use -std=c++98 because the default (-std=gnu++98) leaves __STRICT_ANSI__
1301   # undefined and fake C99 facilities may be spuriously enabled.
1302   ac_save_CXXFLAGS="$CXXFLAGS"
1303   CXXFLAGS="$CXXFLAGS -std=c++98"
1304
1305   # Check for the existence of <complex.h> complex math functions used
1306   # by tr1/complex.
1307   AC_CHECK_HEADERS(complex.h, ac_has_complex_h=yes, ac_has_complex_h=no)
1308   ac_c99_complex_tr1=no;
1309   if test x"$ac_has_complex_h" = x"yes"; then
1310     AC_MSG_CHECKING([for ISO C99 support to TR1 in <complex.h>])
1311     AC_TRY_COMPILE([#include <complex.h>],
1312                    [typedef __complex__ float float_type; float_type tmpf;
1313                     cacosf(tmpf);
1314                     casinf(tmpf);
1315                     catanf(tmpf);
1316                     cacoshf(tmpf);
1317                     casinhf(tmpf);
1318                     catanhf(tmpf);
1319                     typedef __complex__ double double_type; double_type tmpd;
1320                     cacos(tmpd);
1321                     casin(tmpd);
1322                     catan(tmpd);
1323                     cacosh(tmpd);
1324                     casinh(tmpd);
1325                     catanh(tmpd);
1326                     typedef __complex__ long double ld_type; ld_type tmpld;
1327                     cacosl(tmpld);
1328                     casinl(tmpld);
1329                     catanl(tmpld);
1330                     cacoshl(tmpld);
1331                     casinhl(tmpld);
1332                     catanhl(tmpld);
1333                    ],[ac_c99_complex_tr1=yes], [ac_c99_complex_tr1=no])
1334   fi
1335   AC_MSG_RESULT($ac_c99_complex_tr1)
1336   if test x"$ac_c99_complex_tr1" = x"yes"; then
1337     AC_DEFINE(_GLIBCXX_USE_C99_COMPLEX_TR1, 1,
1338               [Define if C99 functions in <complex.h> should be used in
1339               <tr1/complex>. Using compiler builtins for these functions
1340               requires corresponding C99 library functions to be present.])
1341   fi
1342
1343   # Check for the existence of <ctype.h> functions.
1344   AC_MSG_CHECKING([for ISO C99 support to TR1 in <ctype.h>])
1345   AC_CACHE_VAL(glibcxx_cv_c99_ctype_tr1, [
1346   AC_TRY_COMPILE([#include <ctype.h>],
1347                  [int ch;
1348                   int ret;
1349                   ret = isblank(ch);
1350                  ],[glibcxx_cv_c99_ctype_tr1=yes],
1351                    [glibcxx_cv_c99_ctype_tr1=no])
1352   ])
1353   AC_MSG_RESULT($glibcxx_cv_c99_ctype_tr1)
1354   if test x"$glibcxx_cv_c99_ctype_tr1" = x"yes"; then
1355     AC_DEFINE(_GLIBCXX_USE_C99_CTYPE_TR1, 1,
1356               [Define if C99 functions in <ctype.h> should be imported in
1357               <tr1/cctype> in namespace std::tr1.])
1358   fi
1359
1360   # Check for the existence of <fenv.h> functions.
1361   AC_CHECK_HEADERS(fenv.h, ac_has_fenv_h=yes, ac_has_fenv_h=no)
1362   ac_c99_fenv_tr1=no;
1363   if test x"$ac_has_fenv_h" = x"yes"; then
1364     AC_MSG_CHECKING([for ISO C99 support to TR1 in <fenv.h>])
1365     AC_TRY_COMPILE([#include <fenv.h>],
1366                    [int except, mode;
1367                     fexcept_t* pflag;
1368                     fenv_t* penv;
1369                     int ret;
1370                     ret = feclearexcept(except);
1371                     ret = fegetexceptflag(pflag, except);
1372                     ret = feraiseexcept(except);
1373                     ret = fesetexceptflag(pflag, except);
1374                     ret = fetestexcept(except);
1375                     ret = fegetround();
1376                     ret = fesetround(mode);
1377                     ret = fegetenv(penv);
1378                     ret = feholdexcept(penv);
1379                     ret = fesetenv(penv);
1380                     ret = feupdateenv(penv);
1381                    ],[ac_c99_fenv_tr1=yes], [ac_c99_fenv_tr1=no])
1382   fi
1383   AC_MSG_RESULT($ac_c99_fenv_tr1)
1384   if test x"$ac_c99_fenv_tr1" = x"yes"; then
1385     AC_DEFINE(_GLIBCXX_USE_C99_FENV_TR1, 1,
1386               [Define if C99 functions in <fenv.h> should be imported in
1387               <tr1/cfenv> in namespace std::tr1.])
1388   fi
1389
1390   # Check for the existence of <stdint.h> types.
1391   AC_MSG_CHECKING([for ISO C99 support to TR1 in <stdint.h>])
1392   AC_CACHE_VAL(glibcxx_cv_c99_stdint_tr1, [
1393   AC_TRY_COMPILE([#define __STDC_LIMIT_MACROS
1394                   #define __STDC_CONSTANT_MACROS
1395                   #include <stdint.h>],
1396                  [typedef int8_t          my_int8_t;
1397                   my_int8_t               i8 = INT8_MIN;
1398                   i8 = INT8_MAX;
1399                   typedef int16_t         my_int16_t;
1400                   my_int16_t              i16 = INT16_MIN;
1401                   i16 = INT16_MAX;
1402                   typedef int32_t         my_int32_t;
1403                   my_int32_t              i32 = INT32_MIN;
1404                   i32 = INT32_MAX;
1405                   typedef int64_t         my_int64_t;
1406                   my_int64_t              i64 = INT64_MIN;
1407                   i64 = INT64_MAX;
1408                   typedef int_fast8_t     my_int_fast8_t;
1409                   my_int_fast8_t          if8 = INT_FAST8_MIN;
1410                   if8 = INT_FAST8_MAX;
1411                   typedef int_fast16_t    my_int_fast16_t;
1412                   my_int_fast16_t         if16 = INT_FAST16_MIN;
1413                   if16 = INT_FAST16_MAX;
1414                   typedef int_fast32_t    my_int_fast32_t;
1415                   my_int_fast32_t         if32 = INT_FAST32_MIN;
1416                   if32 = INT_FAST32_MAX;
1417                   typedef int_fast64_t    my_int_fast64_t;
1418                   my_int_fast64_t         if64 = INT_FAST64_MIN;
1419                   if64 = INT_FAST64_MAX;
1420                   typedef int_least8_t    my_int_least8_t;
1421                   my_int_least8_t         il8 = INT_LEAST8_MIN;
1422                   il8 = INT_LEAST8_MAX;
1423                   typedef int_least16_t   my_int_least16_t;
1424                   my_int_least16_t        il16 = INT_LEAST16_MIN;
1425                   il16 = INT_LEAST16_MAX;
1426                   typedef int_least32_t   my_int_least32_t;
1427                   my_int_least32_t        il32 = INT_LEAST32_MIN;
1428                   il32 = INT_LEAST32_MAX;
1429                   typedef int_least64_t   my_int_least64_t;
1430                   my_int_least64_t        il64 = INT_LEAST64_MIN;
1431                   il64 = INT_LEAST64_MAX;
1432                   typedef intmax_t        my_intmax_t;
1433                   my_intmax_t             im = INTMAX_MAX;
1434                   im = INTMAX_MIN;
1435                   typedef intptr_t        my_intptr_t;
1436                   my_intptr_t             ip = INTPTR_MAX;
1437                   ip = INTPTR_MIN;
1438                   typedef uint8_t         my_uint8_t;
1439                   my_uint8_t              ui8 = UINT8_MAX;
1440                   ui8 = UINT8_MAX;
1441                   typedef uint16_t        my_uint16_t;
1442                   my_uint16_t             ui16 = UINT16_MAX;
1443                   ui16 = UINT16_MAX;
1444                   typedef uint32_t        my_uint32_t;
1445                   my_uint32_t             ui32 = UINT32_MAX;
1446                   ui32 = UINT32_MAX;
1447                   typedef uint64_t        my_uint64_t;
1448                   my_uint64_t             ui64 = UINT64_MAX;
1449                   ui64 = UINT64_MAX;
1450                   typedef uint_fast8_t    my_uint_fast8_t;
1451                   my_uint_fast8_t         uif8 = UINT_FAST8_MAX;
1452                   uif8 = UINT_FAST8_MAX;
1453                   typedef uint_fast16_t   my_uint_fast16_t;
1454                   my_uint_fast16_t        uif16 = UINT_FAST16_MAX;
1455                   uif16 = UINT_FAST16_MAX;
1456                   typedef uint_fast32_t   my_uint_fast32_t;
1457                   my_uint_fast32_t        uif32 = UINT_FAST32_MAX;
1458                   uif32 = UINT_FAST32_MAX;
1459                   typedef uint_fast64_t   my_uint_fast64_t;
1460                   my_uint_fast64_t        uif64 = UINT_FAST64_MAX;
1461                   uif64 = UINT_FAST64_MAX;
1462                   typedef uint_least8_t   my_uint_least8_t;
1463                   my_uint_least8_t        uil8 = UINT_LEAST8_MAX;
1464                   uil8 = UINT_LEAST8_MAX;
1465                   typedef uint_least16_t  my_uint_least16_t;
1466                   my_uint_least16_t       uil16 = UINT_LEAST16_MAX;
1467                   uil16 = UINT_LEAST16_MAX;
1468                   typedef uint_least32_t  my_uint_least32_t;
1469                   my_uint_least32_t       uil32 = UINT_LEAST32_MAX;
1470                   uil32 = UINT_LEAST32_MAX;
1471                   typedef uint_least64_t  my_uint_least64_t;
1472                   my_uint_least64_t       uil64 = UINT_LEAST64_MAX;
1473                   uil64 = UINT_LEAST64_MAX;
1474                   typedef uintmax_t       my_uintmax_t;
1475                   my_uintmax_t            uim = UINTMAX_MAX;
1476                   uim = UINTMAX_MAX;
1477                   typedef uintptr_t       my_uintptr_t;
1478                   my_uintptr_t            uip = UINTPTR_MAX;
1479                   uip = UINTPTR_MAX;
1480                  ],[glibcxx_cv_c99_stdint_tr1=yes],
1481                    [glibcxx_cv_c99_stdint_tr1=no])
1482   ])
1483   AC_MSG_RESULT($glibcxx_cv_c99_stdint_tr1)
1484   if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
1485     AC_DEFINE(_GLIBCXX_USE_C99_STDINT_TR1, 1,
1486               [Define if C99 types in <stdint.h> should be imported in
1487               <tr1/cstdint> in namespace std::tr1.])
1488   fi
1489
1490   # Check for the existence of <math.h> functions.
1491   AC_MSG_CHECKING([for ISO C99 support to TR1 in <math.h>])
1492   AC_CACHE_VAL(glibcxx_cv_c99_math_tr1, [
1493   AC_TRY_COMPILE([#include <math.h>],
1494                  [typedef double_t  my_double_t;
1495                   typedef float_t   my_float_t;
1496                   acosh(0.0);
1497                   acoshf(0.0f);
1498                   acoshl(0.0l);
1499                   asinh(0.0);
1500                   asinhf(0.0f);
1501                   asinhl(0.0l);
1502                   atanh(0.0);
1503                   atanhf(0.0f);
1504                   atanhl(0.0l);
1505                   cbrt(0.0);
1506                   cbrtf(0.0f);
1507                   cbrtl(0.0l);
1508                   copysign(0.0, 0.0);
1509                   copysignf(0.0f, 0.0f);
1510                   copysignl(0.0l, 0.0l);
1511                   erf(0.0);
1512                   erff(0.0f);
1513                   erfl(0.0l);
1514                   erfc(0.0);
1515                   erfcf(0.0f);
1516                   erfcl(0.0l);
1517                   exp2(0.0);
1518                   exp2f(0.0f);
1519                   exp2l(0.0l);
1520                   expm1(0.0);
1521                   expm1f(0.0f);
1522                   expm1l(0.0l);
1523                   fdim(0.0, 0.0);
1524                   fdimf(0.0f, 0.0f);
1525                   fdiml(0.0l, 0.0l);
1526                   fma(0.0, 0.0, 0.0);
1527                   fmaf(0.0f, 0.0f, 0.0f);
1528                   fmal(0.0l, 0.0l, 0.0l);
1529                   fmax(0.0, 0.0);
1530                   fmaxf(0.0f, 0.0f);
1531                   fmaxl(0.0l, 0.0l);
1532                   fmin(0.0, 0.0);
1533                   fminf(0.0f, 0.0f);
1534                   fminl(0.0l, 0.0l);
1535                   hypot(0.0, 0.0);
1536                   hypotf(0.0f, 0.0f);
1537                   hypotl(0.0l, 0.0l);
1538                   ilogb(0.0);
1539                   ilogbf(0.0f);
1540                   ilogbl(0.0l);
1541                   lgamma(0.0);
1542                   lgammaf(0.0f);
1543                   lgammal(0.0l);
1544                   llrint(0.0);
1545                   llrintf(0.0f);
1546                   llrintl(0.0l);
1547                   llround(0.0);
1548                   llroundf(0.0f);
1549                   llroundl(0.0l);
1550                   log1p(0.0);
1551                   log1pf(0.0f);
1552                   log1pl(0.0l);
1553                   log2(0.0);
1554                   log2f(0.0f);
1555                   log2l(0.0l);
1556                   logb(0.0);
1557                   logbf(0.0f);
1558                   logbl(0.0l);
1559                   lrint(0.0);
1560                   lrintf(0.0f);
1561                   lrintl(0.0l);
1562                   lround(0.0);
1563                   lroundf(0.0f);
1564                   lroundl(0.0l);
1565                   nan(0);
1566                   nanf(0);
1567                   nanl(0);
1568                   nearbyint(0.0);
1569                   nearbyintf(0.0f);
1570                   nearbyintl(0.0l);
1571                   nextafter(0.0, 0.0);
1572                   nextafterf(0.0f, 0.0f);
1573                   nextafterl(0.0l, 0.0l);
1574                   nexttoward(0.0, 0.0);
1575                   nexttowardf(0.0f, 0.0f);
1576                   nexttowardl(0.0l, 0.0l);
1577                   remainder(0.0, 0.0);
1578                   remainderf(0.0f, 0.0f);
1579                   remainderl(0.0l, 0.0l);
1580                   remquo(0.0, 0.0, 0);
1581                   remquof(0.0f, 0.0f, 0);
1582                   remquol(0.0l, 0.0l, 0);
1583                   rint(0.0);
1584                   rintf(0.0f);
1585                   rintl(0.0l);
1586                   round(0.0);
1587                   roundf(0.0f);
1588                   roundl(0.0l);
1589                   scalbln(0.0, 0l);
1590                   scalblnf(0.0f, 0l);
1591                   scalblnl(0.0l, 0l);
1592                   scalbn(0.0, 0);
1593                   scalbnf(0.0f, 0);
1594                   scalbnl(0.0l, 0);
1595                   tgamma(0.0);
1596                   tgammaf(0.0f);
1597                   tgammal(0.0l);
1598                   trunc(0.0);
1599                   truncf(0.0f);
1600                   truncl(0.0l);
1601                  ],[glibcxx_cv_c99_math_tr1=yes], [glibcxx_cv_c99_math_tr1=no])
1602   ])
1603   AC_MSG_RESULT($glibcxx_cv_c99_math_tr1)
1604   if test x"$glibcxx_cv_c99_math_tr1" = x"yes"; then
1605     AC_DEFINE(_GLIBCXX_USE_C99_MATH_TR1, 1,
1606               [Define if C99 functions or macros in <math.h> should be imported
1607               in <tr1/cmath> in namespace std::tr1.])
1608   fi
1609
1610   # Check for the existence of <inttypes.h> functions (NB: doesn't make
1611   # sense if the glibcxx_cv_c99_stdint_tr1 check fails, per C99, 7.8/1).
1612   ac_c99_inttypes_tr1=no;
1613   if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
1614     AC_MSG_CHECKING([for ISO C99 support to TR1 in <inttypes.h>])
1615     AC_TRY_COMPILE([#include <inttypes.h>],
1616                    [intmax_t i, numer, denom, base;
1617                     const char* s;
1618                     char** endptr;
1619                     intmax_t ret = imaxabs(i);
1620                     imaxdiv_t dret = imaxdiv(numer, denom);
1621                     ret = strtoimax(s, endptr, base);
1622                     uintmax_t uret = strtoumax(s, endptr, base);
1623                    ],[ac_c99_inttypes_tr1=yes], [ac_c99_inttypes_tr1=no])
1624   fi
1625   AC_MSG_RESULT($ac_c99_inttypes_tr1)
1626   if test x"$ac_c99_inttypes_tr1" = x"yes"; then
1627     AC_DEFINE(_GLIBCXX_USE_C99_INTTYPES_TR1, 1,
1628               [Define if C99 functions in <inttypes.h> should be imported in
1629               <tr1/cinttypes> in namespace std::tr1.])
1630   fi
1631
1632   # Check for the existence of whcar_t <inttypes.h> functions (NB: doesn't
1633   # make sense if the glibcxx_cv_c99_stdint_tr1 check fails, per C99, 7.8/1).
1634   ac_c99_inttypes_wchar_t_tr1=no;
1635   if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
1636     AC_MSG_CHECKING([for wchar_t ISO C99 support to TR1 in <inttypes.h>])
1637     AC_TRY_COMPILE([#include <inttypes.h>],
1638                    [intmax_t base;
1639                     const wchar_t* s;
1640                     wchar_t** endptr;
1641                     intmax_t ret = wcstoimax(s, endptr, base);
1642                     uintmax_t uret = wcstoumax(s, endptr, base);
1643                    ],[ac_c99_inttypes_wchar_t_tr1=yes],
1644                      [ac_c99_inttypes_wchar_t_tr1=no])
1645   fi
1646   AC_MSG_RESULT($ac_c99_inttypes_wchar_t_tr1)
1647   if test x"$ac_c99_inttypes_wchar_t_tr1" = x"yes"; then
1648     AC_DEFINE(_GLIBCXX_USE_C99_INTTYPES_WCHAR_T_TR1, 1,
1649               [Define if wchar_t C99 functions in <inttypes.h> should be
1650               imported in <tr1/cinttypes> in namespace std::tr1.])
1651   fi
1652
1653   # Check for the existence of the <stdbool.h> header.
1654   AC_CHECK_HEADERS(stdbool.h)
1655
1656   # Check for the existence of the <stdalign.h> header.
1657   AC_CHECK_HEADERS(stdalign.h)
1658
1659   CXXFLAGS="$ac_save_CXXFLAGS"
1660   AC_LANG_RESTORE
1661 ])
1662
1663 dnl
1664 dnl Check whether "/dev/random" and "/dev/urandom" are available for the
1665 dnl random_device of "TR1" (Chapter 5.1, "Random number generation").
1666 dnl
1667 AC_DEFUN([GLIBCXX_CHECK_RANDOM_TR1], [
1668
1669   AC_MSG_CHECKING([for "/dev/random" and "/dev/urandom" for TR1 random_device])
1670   AC_CACHE_VAL(glibcxx_cv_random_tr1, [
1671     if test -r /dev/random && test -r /dev/urandom; then
1672       glibcxx_cv_random_tr1=yes;
1673     else
1674       glibcxx_cv_random_tr1=no;
1675     fi
1676   ])
1677   AC_MSG_RESULT($glibcxx_cv_random_tr1)
1678
1679   if test x"$glibcxx_cv_random_tr1" = x"yes"; then
1680     AC_DEFINE(_GLIBCXX_USE_RANDOM_TR1, 1,
1681               [Define if /dev/random and /dev/urandom are available for
1682                the random_device of TR1 (Chapter 5.1).])
1683   fi
1684
1685 ])
1686
1687 dnl
1688 dnl Compute the EOF, SEEK_CUR, and SEEK_END integer constants.
1689 dnl
1690 AC_DEFUN([GLIBCXX_COMPUTE_STDIO_INTEGER_CONSTANTS], [
1691
1692   AC_CACHE_CHECK([for the value of EOF], glibcxx_cv_stdio_eof, [
1693   AC_COMPUTE_INT([glibcxx_cv_stdio_eof], [[EOF]],
1694                  [#include <stdio.h>],
1695                  [AC_MSG_ERROR([computing EOF failed])])
1696   ])
1697   AC_DEFINE_UNQUOTED(_GLIBCXX_STDIO_EOF, $glibcxx_cv_stdio_eof,
1698                      [Define to the value of the EOF integer constant.])
1699
1700   AC_CACHE_CHECK([for the value of SEEK_CUR], glibcxx_cv_stdio_seek_cur, [
1701   AC_COMPUTE_INT([glibcxx_cv_stdio_seek_cur], [[SEEK_CUR]],
1702                  [#include <stdio.h>],
1703                  [AC_MSG_ERROR([computing SEEK_CUR failed])])
1704   ])
1705   AC_DEFINE_UNQUOTED(_GLIBCXX_STDIO_SEEK_CUR, $glibcxx_cv_stdio_seek_cur,
1706                      [Define to the value of the SEEK_CUR integer constant.])
1707
1708   AC_CACHE_CHECK([for the value of SEEK_END], glibcxx_cv_stdio_seek_end, [
1709   AC_COMPUTE_INT([glibcxx_cv_stdio_seek_end], [[SEEK_END]],
1710                  [#include <stdio.h>],
1711                  [AC_MSG_ERROR([computing SEEK_END failed])])
1712   ])
1713   AC_DEFINE_UNQUOTED(_GLIBCXX_STDIO_SEEK_END, $glibcxx_cv_stdio_seek_end,
1714                      [Define to the value of the SEEK_END integer constant.])
1715 ])
1716
1717 dnl
1718 dnl Check whether required C++ overloads are present in <math.h>.
1719 dnl
1720
1721 AC_DEFUN([GLIBCXX_CHECK_MATH_PROTO], [
1722
1723   AC_LANG_SAVE
1724   AC_LANG_CPLUSPLUS
1725
1726   case "$host" in
1727     *-*-solaris2.*)
1728       # Solaris 8 FCS only had an overload for double std::abs(double) in
1729       # <iso/math_iso.h>.  Patches 111721-04 (SPARC) and 112757-01 (x86)
1730       # introduced the full set also found from Solaris 9 onwards.
1731       AC_MSG_CHECKING([for float std::abs(float) overload])
1732       AC_CACHE_VAL(glibcxx_cv_abs_float, [
1733         AC_COMPILE_IFELSE([AC_LANG_SOURCE(
1734           [#include <math.h>
1735            namespace std {
1736              inline float abs(float __x)
1737              {  return __builtin_fabsf(__x); }
1738            }
1739         ])],
1740         [glibcxx_cv_abs_float=no],
1741         [glibcxx_cv_abs_float=yes]
1742       )])
1743
1744       # autoheader cannot handle indented templates.
1745       AH_VERBATIM([__CORRECT_ISO_CPP_MATH_H_PROTO1],
1746         [/* Define if all C++ overloads are available in <math.h>.  */
1747 #if __cplusplus >= 199711L
1748 #undef __CORRECT_ISO_CPP_MATH_H_PROTO1
1749 #endif])
1750       AH_VERBATIM([__CORRECT_ISO_CPP_MATH_H_PROTO2],
1751         [/* Define if only double std::abs(double) is available in <math.h>.  */
1752 #if __cplusplus >= 199711L
1753 #undef __CORRECT_ISO_CPP_MATH_H_PROTO2
1754 #endif])
1755
1756       if test $glibcxx_cv_abs_float = yes; then
1757         AC_DEFINE(__CORRECT_ISO_CPP_MATH_H_PROTO1)
1758       else
1759         AC_DEFINE(__CORRECT_ISO_CPP_MATH_H_PROTO2)
1760       fi
1761       AC_MSG_RESULT($glibcxx_cv_abs_float)
1762       ;;
1763   esac
1764
1765   AC_LANG_RESTORE
1766 ])
1767
1768 dnl
1769 dnl Check whether required C++ overloads are present in <stdlib.h>.
1770 dnl
1771
1772 AC_DEFUN([GLIBCXX_CHECK_STDLIB_PROTO], [
1773
1774   AC_LANG_SAVE
1775   AC_LANG_CPLUSPLUS
1776
1777   case "$host" in
1778     *-*-solaris2.*)
1779       # Solaris 8 FCS lacked the overloads for long std::abs(long) and
1780       # ldiv_t std::div(long, long) in <iso/stdlib_iso.h>.  Patches 109607-02
1781       # (SPARC) and 109608-02 (x86) introduced them.
1782       AC_MSG_CHECKING([for long std::abs(long) overload])
1783       AC_CACHE_VAL(glibcxx_cv_abs_long, [
1784         AC_COMPILE_IFELSE([AC_LANG_SOURCE(
1785           [#include <stdlib.h>
1786            namespace std {
1787              inline long
1788              abs(long __i) { return labs(__i); }
1789            }
1790         ])],
1791         [glibcxx_cv_abs_long=no],
1792         [glibcxx_cv_abs_long=yes]
1793       )])
1794
1795       # autoheader cannot handle indented templates.
1796       AH_VERBATIM([__CORRECT_ISO_CPP_STDLIB_H_PROTO],
1797         [/* Define if all C++ overloads are available in <stdlib.h>.  */
1798 #if __cplusplus >= 199711L
1799 #undef __CORRECT_ISO_CPP_STDLIB_H_PROTO
1800 #endif])
1801       if test $glibcxx_cv_abs_long = yes; then
1802         AC_DEFINE(__CORRECT_ISO_CPP_STDLIB_H_PROTO, 1)
1803       fi
1804       AC_MSG_RESULT($glibcxx_cv_abs_long)
1805       ;;
1806   esac
1807
1808   AC_LANG_RESTORE
1809 ])
1810
1811 dnl
1812 dnl Check whether macros, etc are present for <system_error>
1813 dnl
1814 AC_DEFUN([GLIBCXX_CHECK_SYSTEM_ERROR], [
1815
1816 m4_pushdef([n_syserr], [1])dnl
1817 m4_foreach([syserr], [EOWNERDEAD, ENOTRECOVERABLE, ENOLINK, EPROTO, ENODATA,
1818                       ENOSR, ENOSTR, ETIME, EBADMSG, ECANCELED,
1819                       EOVERFLOW, ENOTSUP, EIDRM, ETXTBSY,
1820                       ECHILD, ENOSPC, EPERM,
1821                       ETIMEDOUT, EWOULDBLOCK],
1822 [m4_pushdef([SYSERR], m4_toupper(syserr))dnl
1823 AC_MSG_CHECKING([for syserr])
1824 AC_CACHE_VAL([glibcxx_cv_system_error[]n_syserr], [
1825 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <errno.h>]],
1826                                    [int i = syserr;])],
1827                   [glibcxx_cv_system_error[]n_syserr=yes],
1828                   [glibcxx_cv_system_error[]n_syserr=no])
1829 ])
1830 AC_MSG_RESULT([$glibcxx_cv_system_error[]n_syserr])
1831 if test x"$glibcxx_cv_system_error[]n_syserr" = x"yes"; then
1832   AC_DEFINE([HAVE_]SYSERR, 1, [Define if ]syserr[ exists.])
1833 fi
1834 m4_define([n_syserr], m4_incr(n_syserr))dnl
1835 m4_popdef([SYSERR])dnl
1836 ])
1837 m4_popdef([n_syserr])dnl
1838 ])
1839
1840 dnl
1841 dnl Check for what type of C headers to use.
1842 dnl
1843 dnl --enable-cheaders= [does stuff].
1844 dnl --disable-cheaders [does not do anything, really].
1845 dnl  +  Usage:  GLIBCXX_ENABLE_CHEADERS[(DEFAULT)]
1846 dnl       Where DEFAULT is either 'c' or 'c_std' or 'c_global'.
1847 dnl
1848 AC_DEFUN([GLIBCXX_ENABLE_CHEADERS], [
1849   GLIBCXX_ENABLE(cheaders,$1,[[[=KIND]]],
1850     [construct "C" headers for g++], [permit c|c_std|c_global])
1851   AC_MSG_NOTICE("C" header strategy set to $enable_cheaders)
1852
1853   C_INCLUDE_DIR='${glibcxx_srcdir}/include/'$enable_cheaders
1854
1855   # Allow overrides to configure.host here.
1856   if test $enable_cheaders = c_global; then
1857      c_compatibility=yes
1858   fi
1859
1860   AC_SUBST(C_INCLUDE_DIR)
1861   GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C, test $enable_cheaders = c)
1862   GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C_STD, test $enable_cheaders = c_std)
1863   GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C_GLOBAL, test $enable_cheaders = c_global)
1864   GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_COMPATIBILITY, test $c_compatibility = yes)
1865 ])
1866
1867
1868 dnl
1869 dnl Check for which locale library to use.  The choice is mapped to
1870 dnl a subdirectory of config/locale.
1871 dnl
1872 dnl Default is generic.
1873 dnl
1874 AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
1875   GLIBCXX_ENABLE(clocale,auto,[[[=MODEL]]],
1876     [use MODEL for target locale package],
1877     [permit generic|gnu|ieee_1003.1-2001|newlib|yes|no|auto])
1878
1879   # Deal with gettext issues.  Default to not using it (=no) until we detect
1880   # support for it later.  Let the user turn it off via --e/d, but let that
1881   # default to on for easier handling.
1882   USE_NLS=no
1883   AC_ARG_ENABLE(nls,
1884     AC_HELP_STRING([--enable-nls],[use Native Language Support (default)]),
1885     [],
1886     [enable_nls=yes])
1887
1888   # Either a known package, or "auto"
1889   if test $enable_clocale = no || test $enable_clocale = yes; then
1890      enable_clocale=auto
1891   fi
1892   enable_clocale_flag=$enable_clocale
1893
1894   # Probe for locale model to use if none specified.
1895   # Default to "generic".
1896   if test $enable_clocale_flag = auto; then
1897     case ${target_os} in
1898       linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
1899         enable_clocale_flag=gnu
1900         ;;
1901       darwin* | freebsd*)
1902         enable_clocale_flag=darwin
1903         ;;
1904       *)
1905         if test x"$with_newlib" = x"yes"; then
1906           enable_clocale_flag=newlib
1907         else
1908           enable_clocale_flag=generic
1909         fi
1910         ;;
1911     esac
1912   fi
1913
1914   # Sanity check model, and test for special functionality.
1915   if test $enable_clocale_flag = gnu; then
1916     AC_EGREP_CPP([_GLIBCXX_ok], [
1917     #include <features.h>
1918     #if (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined(__UCLIBC__)
1919       _GLIBCXX_ok
1920     #endif
1921     ], enable_clocale_flag=gnu, enable_clocale_flag=generic)
1922
1923     # Set it to scream when it hurts.
1924     ac_save_CFLAGS="$CFLAGS"
1925     CFLAGS="-Wimplicit-function-declaration -Werror"
1926
1927     # Use strxfrm_l if available.
1928     AC_TRY_COMPILE([#define _GNU_SOURCE 1
1929                     #include <string.h>
1930                     #include <locale.h>],
1931                     [char s[128]; __locale_t loc; strxfrm_l(s, "C", 5, loc);],
1932                     AC_DEFINE(HAVE_STRXFRM_L, 1,
1933                     [Define if strxfrm_l is available in <string.h>.]),)
1934
1935     # Use strerror_l if available.
1936     AC_TRY_COMPILE([#define _GNU_SOURCE 1
1937                     #include <string.h>
1938                     #include <locale.h>],
1939                     [__locale_t loc; strerror_l(5, loc);],
1940                     AC_DEFINE(HAVE_STRERROR_L, 1,
1941                     [Define if strerror_l is available in <string.h>.]),)
1942
1943     CFLAGS="$ac_save_CFLAGS"
1944   fi
1945
1946   # Perhaps use strerror_r if available, and strerror_l isn't.
1947   ac_save_CFLAGS="$CFLAGS"
1948   CFLAGS="-Wimplicit-function-declaration -Werror"
1949   AC_TRY_COMPILE([#define _GNU_SOURCE 1
1950                   #include <string.h>
1951                   #include <locale.h>],
1952                   [char s[128]; strerror_r(5, s, 128);],
1953                   AC_DEFINE(HAVE_STRERROR_R, 1,
1954                   [Define if strerror_r is available in <string.h>.]),)
1955   CFLAGS="$ac_save_CFLAGS"
1956
1957   # Set configure bits for specified locale package
1958   AC_MSG_CHECKING([for C locale to use])
1959   case ${enable_clocale_flag} in
1960     generic)
1961       AC_MSG_RESULT(generic)
1962
1963       CLOCALE_H=config/locale/generic/c_locale.h
1964       CLOCALE_CC=config/locale/generic/c_locale.cc
1965       CCODECVT_CC=config/locale/generic/codecvt_members.cc
1966       CCOLLATE_CC=config/locale/generic/collate_members.cc
1967       CCTYPE_CC=config/locale/generic/ctype_members.cc
1968       CMESSAGES_H=config/locale/generic/messages_members.h
1969       CMESSAGES_CC=config/locale/generic/messages_members.cc
1970       CMONEY_CC=config/locale/generic/monetary_members.cc
1971       CNUMERIC_CC=config/locale/generic/numeric_members.cc
1972       CTIME_H=config/locale/generic/time_members.h
1973       CTIME_CC=config/locale/generic/time_members.cc
1974       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
1975       ;;
1976     darwin)
1977       AC_MSG_RESULT(darwin or freebsd)
1978
1979       CLOCALE_H=config/locale/generic/c_locale.h
1980       CLOCALE_CC=config/locale/generic/c_locale.cc
1981       CCODECVT_CC=config/locale/generic/codecvt_members.cc
1982       CCOLLATE_CC=config/locale/generic/collate_members.cc
1983       CCTYPE_CC=config/locale/darwin/ctype_members.cc
1984       CMESSAGES_H=config/locale/generic/messages_members.h
1985       CMESSAGES_CC=config/locale/generic/messages_members.cc
1986       CMONEY_CC=config/locale/generic/monetary_members.cc
1987       CNUMERIC_CC=config/locale/generic/numeric_members.cc
1988       CTIME_H=config/locale/generic/time_members.h
1989       CTIME_CC=config/locale/generic/time_members.cc
1990       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
1991       ;;
1992
1993     gnu)
1994       AC_MSG_RESULT(gnu)
1995
1996       # Declare intention to use gettext, and add support for specific
1997       # languages.
1998       # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
1999       ALL_LINGUAS="de fr"
2000
2001       # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
2002       AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
2003       if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
2004         USE_NLS=yes
2005       fi
2006       # Export the build objects.
2007       for ling in $ALL_LINGUAS; do \
2008         glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
2009         glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
2010       done
2011       AC_SUBST(glibcxx_MOFILES)
2012       AC_SUBST(glibcxx_POFILES)
2013
2014       CLOCALE_H=config/locale/gnu/c_locale.h
2015       CLOCALE_CC=config/locale/gnu/c_locale.cc
2016       CCODECVT_CC=config/locale/gnu/codecvt_members.cc
2017       CCOLLATE_CC=config/locale/gnu/collate_members.cc
2018       CCTYPE_CC=config/locale/gnu/ctype_members.cc
2019       CMESSAGES_H=config/locale/gnu/messages_members.h
2020       CMESSAGES_CC=config/locale/gnu/messages_members.cc
2021       CMONEY_CC=config/locale/gnu/monetary_members.cc
2022       CNUMERIC_CC=config/locale/gnu/numeric_members.cc
2023       CTIME_H=config/locale/gnu/time_members.h
2024       CTIME_CC=config/locale/gnu/time_members.cc
2025       CLOCALE_INTERNAL_H=config/locale/gnu/c++locale_internal.h
2026       ;;
2027     ieee_1003.1-2001)
2028       AC_MSG_RESULT(IEEE 1003.1)
2029
2030       CLOCALE_H=config/locale/ieee_1003.1-2001/c_locale.h
2031       CLOCALE_CC=config/locale/ieee_1003.1-2001/c_locale.cc
2032       CCODECVT_CC=config/locale/generic/codecvt_members.cc
2033       CCOLLATE_CC=config/locale/generic/collate_members.cc
2034       CCTYPE_CC=config/locale/generic/ctype_members.cc
2035       CMESSAGES_H=config/locale/ieee_1003.1-2001/messages_members.h
2036       CMESSAGES_CC=config/locale/ieee_1003.1-2001/messages_members.cc
2037       CMONEY_CC=config/locale/generic/monetary_members.cc
2038       CNUMERIC_CC=config/locale/generic/numeric_members.cc
2039       CTIME_H=config/locale/generic/time_members.h
2040       CTIME_CC=config/locale/generic/time_members.cc
2041       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
2042       ;;
2043     newlib)
2044       AC_MSG_RESULT(newlib)
2045
2046       CLOCALE_H=config/locale/generic/c_locale.h
2047       CLOCALE_CC=config/locale/generic/c_locale.cc
2048       CCODECVT_CC=config/locale/generic/codecvt_members.cc
2049       CCOLLATE_CC=config/locale/generic/collate_members.cc
2050       CCTYPE_CC=config/locale/newlib/ctype_members.cc
2051       CMESSAGES_H=config/locale/generic/messages_members.h
2052       CMESSAGES_CC=config/locale/generic/messages_members.cc
2053       CMONEY_CC=config/locale/generic/monetary_members.cc
2054       CNUMERIC_CC=config/locale/generic/numeric_members.cc
2055       CTIME_H=config/locale/generic/time_members.h
2056       CTIME_CC=config/locale/generic/time_members.cc
2057       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
2058       ;;
2059   esac
2060
2061   # This is where the testsuite looks for locale catalogs, using the
2062   # -DLOCALEDIR define during testsuite compilation.
2063   glibcxx_localedir=${glibcxx_builddir}/po/share/locale
2064   AC_SUBST(glibcxx_localedir)
2065
2066   # A standalone libintl (e.g., GNU libintl) may be in use.
2067   if test $USE_NLS = yes; then
2068     AC_CHECK_HEADERS([libintl.h], [], USE_NLS=no)
2069     AC_SEARCH_LIBS(gettext, intl, [], USE_NLS=no)
2070   fi
2071   if test $USE_NLS = yes; then
2072     AC_DEFINE(_GLIBCXX_USE_NLS, 1,
2073               [Define if NLS translations are to be used.])
2074   fi
2075
2076   AC_SUBST(USE_NLS)
2077   AC_SUBST(CLOCALE_H)
2078   AC_SUBST(CMESSAGES_H)
2079   AC_SUBST(CCODECVT_CC)
2080   AC_SUBST(CCOLLATE_CC)
2081   AC_SUBST(CCTYPE_CC)
2082   AC_SUBST(CMESSAGES_CC)
2083   AC_SUBST(CMONEY_CC)
2084   AC_SUBST(CNUMERIC_CC)
2085   AC_SUBST(CTIME_H)
2086   AC_SUBST(CTIME_CC)
2087   AC_SUBST(CLOCALE_CC)
2088   AC_SUBST(CLOCALE_INTERNAL_H)
2089 ])
2090
2091
2092 dnl
2093 dnl Check for which std::allocator base class to use.  The choice is
2094 dnl mapped from a subdirectory of include/ext.
2095 dnl
2096 dnl Default is new.
2097 dnl
2098 AC_DEFUN([GLIBCXX_ENABLE_ALLOCATOR], [
2099   AC_MSG_CHECKING([for std::allocator base class])
2100   GLIBCXX_ENABLE(libstdcxx-allocator,auto,[[[=KIND]]],
2101     [use KIND for target std::allocator base],
2102     [permit new|malloc|mt|bitmap|pool|yes|no|auto])
2103
2104   # If they didn't use this option switch, or if they specified --enable
2105   # with no specific model, we'll have to look for one.  If they
2106   # specified --disable (???), do likewise.
2107   if test $enable_libstdcxx_allocator = no ||
2108      test $enable_libstdcxx_allocator = yes;
2109   then
2110      enable_libstdcxx_allocator=auto
2111   fi
2112
2113   # Either a known package, or "auto". Auto implies the default choice
2114   # for a particular platform.
2115   enable_libstdcxx_allocator_flag=$enable_libstdcxx_allocator
2116
2117   # Probe for host-specific support if no specific model is specified.
2118   # Default to "new".
2119   if test $enable_libstdcxx_allocator_flag = auto; then
2120     case ${target_os} in
2121       linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
2122         enable_libstdcxx_allocator_flag=new
2123         ;;
2124       *)
2125         enable_libstdcxx_allocator_flag=new
2126         ;;
2127     esac
2128   fi
2129   AC_MSG_RESULT($enable_libstdcxx_allocator_flag)
2130
2131
2132   # Set configure bits for specified locale package
2133   case ${enable_libstdcxx_allocator_flag} in
2134     bitmap)
2135       ALLOCATOR_H=config/allocator/bitmap_allocator_base.h
2136       ALLOCATOR_NAME=__gnu_cxx::bitmap_allocator
2137       ;;
2138     malloc)
2139       ALLOCATOR_H=config/allocator/malloc_allocator_base.h
2140       ALLOCATOR_NAME=__gnu_cxx::malloc_allocator
2141       ;;
2142     mt)
2143       ALLOCATOR_H=config/allocator/mt_allocator_base.h
2144       ALLOCATOR_NAME=__gnu_cxx::__mt_alloc
2145       ;;
2146     new)
2147       ALLOCATOR_H=config/allocator/new_allocator_base.h
2148       ALLOCATOR_NAME=__gnu_cxx::new_allocator
2149       ;;
2150     pool)
2151       ALLOCATOR_H=config/allocator/pool_allocator_base.h
2152       ALLOCATOR_NAME=__gnu_cxx::__pool_alloc
2153       ;;
2154   esac
2155
2156   AC_SUBST(ALLOCATOR_H)
2157   AC_SUBST(ALLOCATOR_NAME)
2158 ])
2159
2160
2161 dnl
2162 dnl Check for whether the Boost-derived checks should be turned on.
2163 dnl
2164 dnl --enable-concept-checks turns them on.
2165 dnl --disable-concept-checks leaves them off.
2166 dnl  +  Usage:  GLIBCXX_ENABLE_CONCEPT_CHECKS[(DEFAULT)]
2167 dnl       Where DEFAULT is either `yes' or `no'.
2168 dnl
2169 AC_DEFUN([GLIBCXX_ENABLE_CONCEPT_CHECKS], [
2170   GLIBCXX_ENABLE(concept-checks,$1,,[use Boost-derived template checks])
2171   if test $enable_concept_checks = yes; then
2172     AC_DEFINE(_GLIBCXX_CONCEPT_CHECKS, 1,
2173               [Define to use concept checking code from the boost libraries.])
2174   fi
2175 ])
2176
2177 dnl
2178 dnl Use extern templates.
2179 dnl
2180 dnl --enable-extern-template defines _GLIBCXX_EXTERN_TEMPLATE to 1
2181 dnl --disable-extern-template defines _GLIBCXX_EXTERN_TEMPLATE to 0
2182
2183 dnl  +  Usage:  GLIBCXX_ENABLE_TEMPLATE[(DEFAULT)]
2184 dnl       Where DEFAULT is `yes' or `no'.
2185 dnl
2186 AC_DEFUN([GLIBCXX_ENABLE_EXTERN_TEMPLATE], [
2187
2188   GLIBCXX_ENABLE(extern-template,$1,,[enable extern template])
2189
2190   AC_MSG_CHECKING([for extern template support])
2191   AC_MSG_RESULT([$enable_extern_template])
2192
2193   GLIBCXX_CONDITIONAL(ENABLE_EXTERN_TEMPLATE, test $enable_extern_template = yes)
2194 ])
2195
2196 dnl
2197 dnl Check for parallel mode pre-requisites, including OpenMP support.
2198 dnl
2199 dnl  +  Usage:  GLIBCXX_ENABLE_PARALLEL
2200 dnl
2201 AC_DEFUN([GLIBCXX_ENABLE_PARALLEL], [
2202
2203   enable_parallel=no;
2204
2205   # See if configured libgomp/omp.h exists. (libgomp may be in
2206   # noconfigdirs but not explicitly disabled.)
2207   if echo " ${TARGET_CONFIGDIRS} " | grep " libgomp " > /dev/null 2>&1 ; then
2208     enable_parallel=yes;
2209   else
2210     AC_MSG_NOTICE([target-libgomp not built])
2211   fi
2212
2213   AC_MSG_CHECKING([for parallel mode support])
2214   AC_MSG_RESULT([$enable_parallel])
2215   GLIBCXX_CONDITIONAL(ENABLE_PARALLEL, test $enable_parallel = yes)
2216 ])
2217
2218
2219 dnl
2220 dnl Check for which I/O library to use:  stdio, or something specific.
2221 dnl
2222 dnl Default is stdio.
2223 dnl
2224 AC_DEFUN([GLIBCXX_ENABLE_CSTDIO], [
2225   AC_MSG_CHECKING([for underlying I/O to use])
2226   GLIBCXX_ENABLE(cstdio,stdio,[[[=PACKAGE]]],
2227     [use target-specific I/O package], [permit stdio])
2228
2229   # Now that libio has been removed, you can have any color you want as long
2230   # as it's black.  This is one big no-op until other packages are added, but
2231   # showing the framework never hurts.
2232   case ${enable_cstdio} in
2233     stdio)
2234       CSTDIO_H=config/io/c_io_stdio.h
2235       BASIC_FILE_H=config/io/basic_file_stdio.h
2236       BASIC_FILE_CC=config/io/basic_file_stdio.cc
2237       AC_MSG_RESULT(stdio)
2238       ;;
2239   esac
2240
2241   AC_SUBST(CSTDIO_H)
2242   AC_SUBST(BASIC_FILE_H)
2243   AC_SUBST(BASIC_FILE_CC)
2244 ])
2245
2246
2247 dnl
2248 dnl Check for "unusual" flags to pass to the compiler while building.
2249 dnl
2250 dnl --enable-cxx-flags='-foo -bar -baz' is a general method for passing
2251 dnl     experimental flags such as -fpch, -fIMI, -Dfloat=char, etc.
2252 dnl --disable-cxx-flags passes nothing.
2253 dnl  +  See http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00131.html
2254 dnl         http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00284.html
2255 dnl         http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00035.html
2256 dnl  +  Usage:  GLIBCXX_ENABLE_CXX_FLAGS(default flags)
2257 dnl       If "default flags" is an empty string, the effect is the same
2258 dnl       as --disable or --enable=no.
2259 dnl
2260 AC_DEFUN([GLIBCXX_ENABLE_CXX_FLAGS], [dnl
2261   AC_MSG_CHECKING([for extra compiler flags for building])
2262   GLIBCXX_ENABLE(cxx-flags,$1,[=FLAGS],
2263     [pass compiler FLAGS when building library],
2264     [case "x$enable_cxx_flags" in
2265       xno | x)   enable_cxx_flags= ;;
2266       x-*)       ;;
2267       *)         AC_MSG_ERROR(_g_switch needs compiler flags as arguments) ;;
2268      esac])
2269
2270   # Run through flags (either default or command-line) and set anything
2271   # extra (e.g., #defines) that must accompany particular g++ options.
2272   if test -n "$enable_cxx_flags"; then
2273     for f in $enable_cxx_flags; do
2274       case "$f" in
2275         -fhonor-std)  ;;
2276         -*)  ;;
2277         *)   # and we're trying to pass /what/ exactly?
2278              AC_MSG_ERROR([compiler flags start with a -]) ;;
2279       esac
2280     done
2281   fi
2282
2283   EXTRA_CXX_FLAGS="$enable_cxx_flags"
2284   AC_MSG_RESULT($EXTRA_CXX_FLAGS)
2285   AC_SUBST(EXTRA_CXX_FLAGS)
2286 ])
2287
2288
2289 dnl
2290 dnl Check to see if debugging libraries are to be built.
2291 dnl
2292 dnl --enable-libstdcxx-debug
2293 dnl builds a separate set of debugging libraries in addition to the
2294 dnl normal (shared, static) libstdc++ binaries.
2295 dnl
2296 dnl --disable-libstdcxx-debug
2297 dnl builds only one (non-debug) version of libstdc++.
2298 dnl
2299 dnl --enable-libstdcxx-debug-flags=FLAGS
2300 dnl iff --enable-debug == yes, then use FLAGS to build the debug library.
2301 dnl
2302 dnl  +  Usage:  GLIBCXX_ENABLE_DEBUG[(DEFAULT)]
2303 dnl       Where DEFAULT is either `yes' or `no'.
2304 dnl
2305 AC_DEFUN([GLIBCXX_ENABLE_DEBUG], [
2306   AC_MSG_CHECKING([for additional debug build])
2307   GLIBCXX_ENABLE(libstdcxx-debug,$1,,[build extra debug library])
2308   AC_MSG_RESULT($enable_libstdcxx_debug)
2309   GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_DEBUG, test $enable_libstdcxx_debug = yes)
2310 ])
2311
2312
2313 dnl
2314 dnl Check for explicit debug flags.
2315 dnl
2316 dnl --enable-libstdcxx-debug-flags='-O1'
2317 dnl is a general method for passing flags to be used when
2318 dnl building debug libraries with --enable-debug.
2319 dnl
2320 dnl --disable-libstdcxx-debug-flags does nothing.
2321 dnl  +  Usage:  GLIBCXX_ENABLE_DEBUG_FLAGS(default flags)
2322 dnl       If "default flags" is an empty string, the effect is the same
2323 dnl       as --disable or --enable=no.
2324 dnl
2325 AC_DEFUN([GLIBCXX_ENABLE_DEBUG_FLAGS], [
2326   GLIBCXX_ENABLE(libstdcxx-debug-flags,[$1],[=FLAGS],
2327     [pass compiler FLAGS when building debug library],
2328     [case "x$enable_libstdcxx_debug_flags" in
2329       xno | x)    enable_libstdcxx_debug_flags= ;;
2330       x-*)        ;;
2331       *)          AC_MSG_ERROR(_g_switch needs compiler flags as arguments) ;;
2332      esac])
2333
2334   # Option parsed, now set things appropriately
2335   DEBUG_FLAGS="$enable_libstdcxx_debug_flags"
2336   AC_SUBST(DEBUG_FLAGS)
2337
2338   AC_MSG_NOTICE([Debug build flags set to $DEBUG_FLAGS])
2339 ])
2340
2341
2342 dnl
2343 dnl Check if the user only wants a freestanding library implementation.
2344 dnl
2345 dnl --disable-hosted-libstdcxx will turn off most of the library build,
2346 dnl installing only the headers required by [17.4.1.3] and the language
2347 dnl support library.  More than that will be built (to keep the Makefiles
2348 dnl conveniently clean), but not installed.
2349 dnl
2350 dnl Sets:
2351 dnl  is_hosted  (yes/no)
2352 dnl
2353 dnl Defines:
2354 dnl  _GLIBCXX_HOSTED   (always defined, either to 1 or 0)
2355 dnl
2356 AC_DEFUN([GLIBCXX_ENABLE_HOSTED], [
2357   AC_ARG_ENABLE([hosted-libstdcxx],
2358     AC_HELP_STRING([--disable-hosted-libstdcxx],
2359                    [only build freestanding C++ runtime support]),,
2360     [case "$host" in
2361         arm*-*-symbianelf*)
2362             enable_hosted_libstdcxx=no
2363             ;;
2364         *)
2365             enable_hosted_libstdcxx=yes
2366             ;;
2367      esac])
2368   if test "$enable_hosted_libstdcxx" = no; then
2369     AC_MSG_NOTICE([Only freestanding libraries will be built])
2370     is_hosted=no
2371     hosted_define=0
2372     enable_abi_check=no
2373     enable_libstdcxx_pch=no
2374   else
2375     is_hosted=yes
2376     hosted_define=1
2377   fi
2378   GLIBCXX_CONDITIONAL(GLIBCXX_HOSTED, test $is_hosted = yes)
2379   AC_DEFINE_UNQUOTED(_GLIBCXX_HOSTED, $hosted_define,
2380     [Define to 1 if a full hosted library is built, or 0 if freestanding.])
2381 ])
2382
2383
2384 dnl
2385 dnl Check for template specializations for the 'long long' type.
2386 dnl The result determines only whether 'long long' I/O is enabled; things
2387 dnl like numeric_limits<> specializations are always available.
2388 dnl
2389 dnl --enable-long-long defines _GLIBCXX_USE_LONG_LONG
2390 dnl --disable-long-long leaves _GLIBCXX_USE_LONG_LONG undefined
2391 dnl  +  Usage:  GLIBCXX_ENABLE_LONG_LONG[(DEFAULT)]
2392 dnl       Where DEFAULT is either `yes' or `no'.
2393 dnl
2394 AC_DEFUN([GLIBCXX_ENABLE_LONG_LONG], [
2395   GLIBCXX_ENABLE(long-long,$1,,[enable template specializations for 'long long'])
2396   if test $enable_long_long = yes; then
2397     AC_DEFINE(_GLIBCXX_USE_LONG_LONG, 1,
2398               [Define if code specialized for long long should be used.])
2399   fi
2400   AC_MSG_CHECKING([for enabled long long specializations])
2401   AC_MSG_RESULT([$enable_long_long])
2402 ])
2403
2404
2405 dnl
2406 dnl Check for decimal floating point.
2407 dnl See:
2408 dnl http://gcc.gnu.org/onlinedocs/gcc/Decimal-Float.html#Decimal-Float
2409 dnl
2410 dnl This checks to see if the host supports decimal floating point types.
2411 dnl
2412 dnl Defines:
2413 dnl  _GLIBCXX_USE_DECIMAL_FLOAT
2414 dnl
2415 AC_DEFUN([GLIBCXX_ENABLE_DECIMAL_FLOAT], [
2416
2417   # Fake what AC_TRY_COMPILE does, without linking as this is
2418   # unnecessary for this test.
2419
2420     cat > conftest.$ac_ext << EOF
2421 [#]line __oline__ "configure"
2422 int main()
2423 {
2424   _Decimal32 d1;
2425   _Decimal64 d2;
2426   _Decimal128 d3;
2427   return 0;
2428 }
2429 EOF
2430
2431     AC_MSG_CHECKING([for ISO/IEC TR 24733 ])
2432     if AC_TRY_EVAL(ac_compile); then
2433       AC_DEFINE(_GLIBCXX_USE_DECIMAL_FLOAT, 1,
2434       [Define if ISO/IEC TR 24733 decimal floating point types are supported on this host.])
2435       enable_dfp=yes
2436     else
2437       enable_dfp=no
2438     fi
2439     AC_MSG_RESULT($enable_dfp)
2440     rm -f conftest*
2441 ])
2442
2443 dnl
2444 dnl Check for GNU 128-bit integer and floating point types.
2445 dnl
2446 dnl Note: also checks that the types aren't standard types.
2447 dnl
2448 dnl Defines:
2449 dnl  _GLIBCXX_USE_INT128
2450 dnl  _GLIBCXX_USE_FLOAT128
2451 dnl
2452 AC_DEFUN([GLIBCXX_ENABLE_INT128_FLOAT128], [
2453
2454   AC_LANG_SAVE
2455   AC_LANG_CPLUSPLUS
2456
2457   # Fake what AC_TRY_COMPILE does, without linking as this is
2458   # unnecessary for this test.
2459
2460     cat > conftest.$ac_ext << EOF
2461 [#]line __oline__ "configure"
2462 template<typename T1, typename T2>
2463   struct same
2464   { typedef T2 type; };
2465
2466 template<typename T>
2467   struct same<T, T>;
2468
2469 int main()
2470 {
2471   typename same<long, __int128>::type                i1;
2472   typename same<long long, __int128>::type           i2;
2473 }
2474 EOF
2475
2476     AC_MSG_CHECKING([for __int128])
2477     if AC_TRY_EVAL(ac_compile); then
2478       AC_DEFINE(_GLIBCXX_USE_INT128, 1,
2479       [Define if __int128 is supported on this host.])
2480       enable_int128=yes
2481     else
2482       enable_int128=no
2483     fi
2484     AC_MSG_RESULT($enable_int128)
2485     rm -f conftest*
2486
2487     cat > conftest.$ac_ext << EOF
2488 [#]line __oline__ "configure"
2489 template<typename T1, typename T2>
2490   struct same
2491   { typedef T2 type; };
2492
2493 template<typename T>
2494   struct same<T, T>;
2495
2496 int main()
2497 {
2498   typename same<double, __float128>::type      f1;      
2499   typename same<long double, __float128>::type f2;
2500 }
2501 EOF
2502
2503     AC_MSG_CHECKING([for __float128])
2504     if AC_TRY_EVAL(ac_compile); then
2505       AC_DEFINE(_GLIBCXX_USE_FLOAT128, 1,
2506       [Define if __float128 is supported on this host.])
2507       enable_float128=yes
2508     else
2509       enable_float128=no
2510     fi
2511     AC_MSG_RESULT($enable_float128)
2512     rm -f conftest*
2513
2514   AC_LANG_RESTORE
2515 ])
2516
2517 dnl
2518 dnl Check for template specializations for the 'wchar_t' type.
2519 dnl
2520 dnl --enable-wchar_t defines _GLIBCXX_USE_WCHAR_T
2521 dnl --disable-wchar_t leaves _GLIBCXX_USE_WCHAR_T undefined
2522 dnl  +  Usage:  GLIBCXX_ENABLE_WCHAR_T[(DEFAULT)]
2523 dnl       Where DEFAULT is either `yes' or `no'.
2524 dnl
2525 dnl Necessary support must also be present.
2526 dnl
2527 AC_DEFUN([GLIBCXX_ENABLE_WCHAR_T], [
2528   GLIBCXX_ENABLE(wchar_t,$1,,[enable template specializations for 'wchar_t'])
2529
2530   # Test wchar.h for mbstate_t, which is needed for char_traits and fpos.
2531   AC_CHECK_HEADERS(wchar.h, ac_has_wchar_h=yes, ac_has_wchar_h=no)
2532   AC_MSG_CHECKING([for mbstate_t])
2533   AC_TRY_COMPILE([#include <wchar.h>],
2534   [mbstate_t teststate;],
2535   have_mbstate_t=yes, have_mbstate_t=no)
2536   AC_MSG_RESULT($have_mbstate_t)
2537   if test x"$have_mbstate_t" = xyes; then
2538     AC_DEFINE(HAVE_MBSTATE_T,1,[Define if mbstate_t exists in wchar.h.])
2539   fi
2540
2541   # Test it always, for use in GLIBCXX_ENABLE_C99, together with
2542   # ac_has_wchar_h.
2543   AC_CHECK_HEADERS(wctype.h, ac_has_wctype_h=yes, ac_has_wctype_h=no)
2544
2545   if test x"$enable_wchar_t" = x"yes"; then
2546
2547     AC_LANG_SAVE
2548     AC_LANG_CPLUSPLUS
2549
2550     if test x"$ac_has_wchar_h" = xyes &&
2551        test x"$ac_has_wctype_h" = xyes; then
2552       AC_TRY_COMPILE([#include <wchar.h>
2553                       #include <stddef.h>
2554                       wint_t i;
2555                       long l = WEOF;
2556                       long j = WCHAR_MIN;
2557                       long k = WCHAR_MAX;
2558                       namespace test
2559                       {
2560                         using ::btowc;
2561                         using ::fgetwc;
2562                         using ::fgetws;
2563                         using ::fputwc;
2564                         using ::fputws;
2565                         using ::fwide;
2566                         using ::fwprintf;
2567                         using ::fwscanf;
2568                         using ::getwc;
2569                         using ::getwchar;
2570                         using ::mbrlen;
2571                         using ::mbrtowc;
2572                         using ::mbsinit;
2573                         using ::mbsrtowcs;
2574                         using ::putwc;
2575                         using ::putwchar;
2576                         using ::swprintf;
2577                         using ::swscanf;
2578                         using ::ungetwc;
2579                         using ::vfwprintf;
2580                         using ::vswprintf;
2581                         using ::vwprintf;
2582                         using ::wcrtomb;
2583                         using ::wcscat;
2584                         using ::wcschr;
2585                         using ::wcscmp;
2586                         using ::wcscoll;
2587                         using ::wcscpy;
2588                         using ::wcscspn;
2589                         using ::wcsftime;
2590                         using ::wcslen;
2591                         using ::wcsncat;
2592                         using ::wcsncmp;
2593                         using ::wcsncpy;
2594                         using ::wcspbrk;
2595                         using ::wcsrchr;
2596                         using ::wcsrtombs;
2597                         using ::wcsspn;
2598                         using ::wcsstr;
2599                         using ::wcstod;
2600                         using ::wcstok;
2601                         using ::wcstol;
2602                         using ::wcstoul;
2603                         using ::wcsxfrm;
2604                         using ::wctob;
2605                         using ::wmemchr;
2606                         using ::wmemcmp;
2607                         using ::wmemcpy;
2608                         using ::wmemmove;
2609                         using ::wmemset;
2610                         using ::wprintf;
2611                         using ::wscanf;
2612                       }
2613                      ],[],[], [enable_wchar_t=no])
2614     else
2615       enable_wchar_t=no
2616     fi
2617
2618     AC_LANG_RESTORE
2619   fi
2620
2621   if test x"$enable_wchar_t" = x"yes"; then
2622     AC_DEFINE(_GLIBCXX_USE_WCHAR_T, 1,
2623               [Define if code specialized for wchar_t should be used.])
2624   fi
2625
2626   AC_MSG_CHECKING([for enabled wchar_t specializations])
2627   AC_MSG_RESULT([$enable_wchar_t])
2628 ])
2629
2630
2631 dnl
2632 dnl Check to see if building and using a C++ precompiled header can be done.
2633 dnl
2634 dnl --enable-libstdcxx-pch=yes
2635 dnl default, this shows intent to use stdc++.h.gch If it looks like it
2636 dnl may work, after some light-hearted attempts to puzzle out compiler
2637 dnl support, flip bits on in include/Makefile.am
2638 dnl
2639 dnl --disable-libstdcxx-pch
2640 dnl turns off attempts to use or build stdc++.h.gch.
2641 dnl
2642 dnl Substs:
2643 dnl  glibcxx_PCHFLAGS
2644 dnl
2645 AC_DEFUN([GLIBCXX_ENABLE_PCH], [
2646   GLIBCXX_ENABLE(libstdcxx-pch,$1,,[build pre-compiled libstdc++ headers])
2647   if test $enable_libstdcxx_pch = yes; then
2648     AC_CACHE_CHECK([for compiler with PCH support],
2649       [glibcxx_cv_prog_CXX_pch],
2650       [ac_save_CXXFLAGS="$CXXFLAGS"
2651        CXXFLAGS="$CXXFLAGS -Werror -Winvalid-pch -Wno-deprecated"
2652        AC_LANG_SAVE
2653        AC_LANG_CPLUSPLUS
2654        echo '#include <math.h>' > conftest.h
2655        if $CXX $CXXFLAGS $CPPFLAGS -x c++-header conftest.h \
2656                           -o conftest.h.gch 1>&5 2>&1 &&
2657                 echo '#error "pch failed"' > conftest.h &&
2658           echo '#include "conftest.h"' > conftest.cc &&
2659                $CXX -c $CXXFLAGS $CPPFLAGS conftest.cc 1>&5 2>&1 ;
2660        then
2661          glibcxx_cv_prog_CXX_pch=yes
2662        else
2663          glibcxx_cv_prog_CXX_pch=no
2664        fi
2665        rm -f conftest*
2666        CXXFLAGS=$ac_save_CXXFLAGS
2667        AC_LANG_RESTORE
2668       ])
2669     enable_libstdcxx_pch=$glibcxx_cv_prog_CXX_pch
2670   fi
2671
2672   AC_MSG_CHECKING([for enabled PCH])
2673   AC_MSG_RESULT([$enable_libstdcxx_pch])
2674
2675   GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_PCH, test $enable_libstdcxx_pch = yes)
2676   if test $enable_libstdcxx_pch = yes; then
2677     glibcxx_PCHFLAGS="-include bits/stdc++.h"
2678   else
2679     glibcxx_PCHFLAGS=""
2680   fi
2681   AC_SUBST(glibcxx_PCHFLAGS)
2682 ])
2683
2684
2685 dnl
2686 dnl Check for atomic builtins.
2687 dnl See:
2688 dnl http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html#Atomic-Builtins
2689 dnl
2690 dnl This checks to see if the host supports the compiler-generated
2691 dnl builtins for atomic operations for various integral sizes. Note, this
2692 dnl is intended to be an all-or-nothing switch, so all the atomic operations
2693 dnl that are used should be checked.
2694 dnl
2695 dnl Note:
2696 dnl libgomp and libgfortran use a link test, see CHECK_SYNC_FETCH_AND_ADD.
2697 dnl
2698 AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS], [
2699   AC_LANG_SAVE
2700   AC_LANG_CPLUSPLUS
2701   old_CXXFLAGS="$CXXFLAGS"
2702
2703   # Do link tests if possible, instead asm tests, limited to some platforms
2704   # see discussion in PR target/40134, PR libstdc++/40133 and the thread
2705   # starting at http://gcc.gnu.org/ml/gcc-patches/2009-07/msg00322.html
2706   atomic_builtins_link_tests=no
2707   if test x$gcc_no_link != xyes; then
2708     # Can do link tests. Limit to some tested platforms
2709     case "$host" in
2710       *-*-linux* | *-*-uclinux* | *-*-kfreebsd*-gnu | *-*-gnu*)
2711         atomic_builtins_link_tests=yes
2712         ;;
2713     esac
2714   fi
2715
2716   if test x$atomic_builtins_link_tests = xyes; then
2717
2718   # Do link tests.
2719
2720   CXXFLAGS="$CXXFLAGS -fno-exceptions"
2721
2722   AC_MSG_CHECKING([for atomic builtins for bool])
2723   AC_CACHE_VAL(glibcxx_cv_atomic_bool, [
2724     AC_TRY_LINK(
2725       [ ],
2726       [typedef bool atomic_type;
2727        atomic_type c1;
2728        atomic_type c2;
2729        const atomic_type c3(0);
2730        __sync_fetch_and_add(&c1, c2);
2731        __sync_val_compare_and_swap(&c1, c3, c2);
2732        __sync_lock_test_and_set(&c1, c3);
2733        __sync_lock_release(&c1);
2734        __sync_synchronize();],
2735       [glibcxx_cv_atomic_bool=yes],
2736       [glibcxx_cv_atomic_bool=no])
2737   ])
2738   AC_MSG_RESULT($glibcxx_cv_atomic_bool)
2739
2740   AC_MSG_CHECKING([for atomic builtins for short])
2741   AC_CACHE_VAL(glibcxx_cv_atomic_short, [
2742     AC_TRY_LINK(
2743       [ ],
2744       [typedef short atomic_type;
2745        atomic_type c1;
2746        atomic_type c2;
2747        const atomic_type c3(0);
2748        __sync_fetch_and_add(&c1, c2);
2749        __sync_val_compare_and_swap(&c1, c3, c2);
2750        __sync_lock_test_and_set(&c1, c3);
2751        __sync_lock_release(&c1);
2752        __sync_synchronize();],
2753       [glibcxx_cv_atomic_short=yes],
2754       [glibcxx_cv_atomic_short=no])
2755   ])
2756   AC_MSG_RESULT($glibcxx_cv_atomic_short)
2757
2758   AC_MSG_CHECKING([for atomic builtins for int])
2759   AC_CACHE_VAL(glibcxx_cv_atomic_int, [
2760     AC_TRY_LINK(
2761       [ ],
2762       [typedef int atomic_type;
2763        atomic_type c1;
2764        atomic_type c2;
2765        const atomic_type c3(0);
2766        __sync_fetch_and_add(&c1, c2);
2767        __sync_val_compare_and_swap(&c1, c3, c2);
2768        __sync_lock_test_and_set(&c1, c3);
2769        __sync_lock_release(&c1);
2770        __sync_synchronize();],
2771       [glibcxx_cv_atomic_int=yes],
2772       [glibcxx_cv_atomic_int=no])
2773   ])
2774   AC_MSG_RESULT($glibcxx_cv_atomic_int)
2775
2776   AC_MSG_CHECKING([for atomic builtins for long long])
2777   AC_CACHE_VAL(glibcxx_cv_atomic_long_long, [
2778     AC_TRY_LINK(
2779       [ ],
2780       [typedef long long atomic_type;
2781        atomic_type c1;
2782        atomic_type c2;
2783        const atomic_type c3(0);
2784        __sync_fetch_and_add(&c1, c2);
2785        __sync_val_compare_and_swap(&c1, c3, c2);
2786        __sync_lock_test_and_set(&c1, c3);
2787        __sync_lock_release(&c1);
2788        __sync_synchronize();],
2789       [glibcxx_cv_atomic_long_long=yes],
2790       [glibcxx_cv_atomic_long_long=no])
2791   ])
2792   AC_MSG_RESULT($glibcxx_cv_atomic_long_long)
2793
2794   else
2795
2796   # Do asm tests.
2797
2798   # Compile unoptimized.
2799   CXXFLAGS='-O0 -S'
2800
2801   # Fake what AC_TRY_COMPILE does.
2802
2803     cat > conftest.$ac_ext << EOF
2804 [#]line __oline__ "configure"
2805 int main()
2806 {
2807   typedef bool atomic_type;
2808   atomic_type c1;
2809   atomic_type c2;
2810   const atomic_type c3(0);
2811   __sync_fetch_and_add(&c1, c2);
2812   __sync_val_compare_and_swap(&c1, c3, c2);
2813   __sync_lock_test_and_set(&c1, c3);
2814   __sync_lock_release(&c1);
2815   __sync_synchronize();
2816   return 0;
2817 }
2818 EOF
2819
2820     AC_MSG_CHECKING([for atomic builtins for bool])
2821     if AC_TRY_EVAL(ac_compile); then
2822       if grep __sync_ conftest.s >/dev/null 2>&1 ; then
2823         glibcxx_cv_atomic_bool=no
2824       else
2825         glibcxx_cv_atomic_bool=yes
2826       fi
2827     fi
2828     AC_MSG_RESULT($glibcxx_cv_atomic_bool)
2829     rm -f conftest*
2830
2831     cat > conftest.$ac_ext << EOF
2832 [#]line __oline__ "configure"
2833 int main()
2834 {
2835   typedef short atomic_type;
2836   atomic_type c1;
2837   atomic_type c2;
2838   const atomic_type c3(0);
2839   __sync_fetch_and_add(&c1, c2);
2840   __sync_val_compare_and_swap(&c1, c3, c2);
2841   __sync_lock_test_and_set(&c1, c3);
2842   __sync_lock_release(&c1);
2843   __sync_synchronize();
2844   return 0;
2845 }
2846 EOF
2847
2848     AC_MSG_CHECKING([for atomic builtins for short])
2849     if AC_TRY_EVAL(ac_compile); then
2850       if grep __sync_ conftest.s >/dev/null 2>&1 ; then
2851         glibcxx_cv_atomic_short=no
2852       else
2853         glibcxx_cv_atomic_short=yes
2854       fi
2855     fi
2856     AC_MSG_RESULT($glibcxx_cv_atomic_short)
2857     rm -f conftest*
2858
2859     cat > conftest.$ac_ext << EOF
2860 [#]line __oline__ "configure"
2861 int main()
2862 {
2863   // NB: _Atomic_word not necessarily int.
2864   typedef int atomic_type;
2865   atomic_type c1;
2866   atomic_type c2;
2867   const atomic_type c3(0);
2868   __sync_fetch_and_add(&c1, c2);
2869   __sync_val_compare_and_swap(&c1, c3, c2);
2870   __sync_lock_test_and_set(&c1, c3);
2871   __sync_lock_release(&c1);
2872   __sync_synchronize();
2873   return 0;
2874 }
2875 EOF
2876
2877     AC_MSG_CHECKING([for atomic builtins for int])
2878     if AC_TRY_EVAL(ac_compile); then
2879       if grep __sync_ conftest.s >/dev/null 2>&1 ; then
2880         glibcxx_cv_atomic_int=no
2881       else
2882         glibcxx_cv_atomic_int=yes
2883       fi
2884     fi
2885     AC_MSG_RESULT($glibcxx_cv_atomic_int)
2886     rm -f conftest*
2887
2888     cat > conftest.$ac_ext << EOF
2889 [#]line __oline__ "configure"
2890 int main()
2891 {
2892   typedef long long atomic_type;
2893   atomic_type c1;
2894   atomic_type c2;
2895   const atomic_type c3(0);
2896   __sync_fetch_and_add(&c1, c2);
2897   __sync_val_compare_and_swap(&c1, c3, c2);
2898   __sync_lock_test_and_set(&c1, c3);
2899   __sync_lock_release(&c1);
2900   __sync_synchronize();
2901   return 0;
2902 }
2903 EOF
2904
2905     AC_MSG_CHECKING([for atomic builtins for long long])
2906     if AC_TRY_EVAL(ac_compile); then
2907       if grep __sync_ conftest.s >/dev/null 2>&1 ; then
2908         glibcxx_cv_atomic_long_long=no
2909       else
2910         glibcxx_cv_atomic_long_long=yes
2911       fi
2912     fi
2913     AC_MSG_RESULT($glibcxx_cv_atomic_long_long)
2914     rm -f conftest*
2915
2916   fi
2917
2918   CXXFLAGS="$old_CXXFLAGS"
2919   AC_LANG_RESTORE
2920
2921   # Set atomicity_dir to builtins if either of above tests pass.
2922   if test $glibcxx_cv_atomic_int = yes || test $glibcxx_cv_atomic_bool = yes ; then
2923     AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS, 1,
2924     [Define if the compiler supports C++11 atomics.])
2925     atomicity_dir=cpu/generic/atomicity_builtins
2926   fi
2927
2928   # If still generic, set to mutex.
2929   if test $atomicity_dir = "cpu/generic" ; then
2930     atomicity_dir=cpu/generic/atomicity_mutex
2931     AC_MSG_WARN([No native atomic operations are provided for this platform.])
2932       if test "x$target_thread_file" = xsingle; then
2933         AC_MSG_WARN([They cannot be faked when thread support is disabled.])
2934         AC_MSG_WARN([Thread-safety of certain classes is not guaranteed.])
2935       else
2936         AC_MSG_WARN([They will be faked using a mutex.])
2937         AC_MSG_WARN([Performance of certain classes will degrade as a result.])
2938       fi
2939   fi
2940
2941 ])
2942
2943
2944 dnl
2945 dnl Check for exception handling support.  If an explicit enable/disable
2946 dnl sjlj exceptions is given, we don't have to detect.  Otherwise the
2947 dnl target may or may not support call frame exceptions.
2948 dnl
2949 dnl --enable-sjlj-exceptions forces the use of builtin setjmp.
2950 dnl --disable-sjlj-exceptions forces the use of call frame unwinding.
2951 dnl Neither one forces an attempt at detection.
2952 dnl
2953 dnl Defines:
2954 dnl  _GLIBCXX_SJLJ_EXCEPTIONS if the compiler is configured for it
2955 dnl
2956 AC_DEFUN([GLIBCXX_ENABLE_SJLJ_EXCEPTIONS], [
2957   AC_MSG_CHECKING([for exception model to use])
2958   AC_LANG_SAVE
2959   AC_LANG_CPLUSPLUS
2960   GLIBCXX_ENABLE(sjlj-exceptions,auto,,
2961     [force use of builtin_setjmp for exceptions],
2962     [permit yes|no|auto])
2963
2964   if test $enable_sjlj_exceptions = auto; then
2965     # Botheration.  Now we've got to detect the exception model.  Link tests
2966     # against libgcc.a are problematic since we've not been given proper -L
2967     # bits for single-tree newlib and libgloss.
2968     #
2969     # Fake what AC_TRY_COMPILE does.  XXX Look at redoing this new-style.
2970     cat > conftest.$ac_ext << EOF
2971 [#]line __oline__ "configure"
2972 struct S { ~S(); };
2973 void bar();
2974 void foo()
2975 {
2976   S s;
2977   bar();
2978 }
2979 EOF
2980     old_CXXFLAGS="$CXXFLAGS"
2981     CXXFLAGS=-S
2982     if AC_TRY_EVAL(ac_compile); then
2983       if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
2984         enable_sjlj_exceptions=yes
2985       elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then
2986         enable_sjlj_exceptions=no
2987       elif grep __cxa_end_cleanup conftest.s >/dev/null 2>&1 ; then
2988         enable_sjlj_exceptions=no
2989       fi
2990     fi
2991     CXXFLAGS="$old_CXXFLAGS"
2992     rm -f conftest*
2993   fi
2994
2995   # This is a tad weird, for hysterical raisins.  We have to map
2996   # enable/disable to two different models.
2997   case $enable_sjlj_exceptions in
2998     yes)
2999       AC_DEFINE(_GLIBCXX_SJLJ_EXCEPTIONS, 1,
3000         [Define if the compiler is configured for setjmp/longjmp exceptions.])
3001       ac_exception_model_name=sjlj
3002       ;;
3003     no)
3004       ac_exception_model_name="call frame"
3005       ;;
3006     *)
3007       AC_MSG_ERROR([unable to detect exception model])
3008       ;;
3009   esac
3010  AC_LANG_RESTORE
3011  AC_MSG_RESULT($ac_exception_model_name)
3012 ])
3013
3014
3015 dnl
3016 dnl Allow visibility attributes to be used on namespaces, objects, etc.
3017 dnl
3018 dnl --enable-libstdcxx-visibility enables attempt to use visibility attributes.
3019 dnl --disable-libstdcxx-visibility turns off all use of visibility attributes.
3020 dnl  +  Usage:  GLIBCXX_ENABLE_LIBSTDCXX_VISIBILITY[(DEFAULT)]
3021 dnl       Where DEFAULT is 'yes'.
3022 dnl
3023 AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_VISIBILITY], [
3024 GLIBCXX_ENABLE(libstdcxx-visibility,$1,,[enables visibility safe usage])
3025
3026 if test x$enable_libstdcxx_visibility = xyes ; then
3027   dnl all hail libgfortran
3028   dnl Check whether the target supports hidden visibility.
3029   AC_CACHE_CHECK([whether the target supports hidden visibility],
3030                  glibcxx_cv_have_attribute_visibility, [
3031   save_CFLAGS="$CFLAGS"
3032   CFLAGS="$CFLAGS -Werror"
3033   AC_TRY_COMPILE([void __attribute__((visibility("hidden"))) foo(void) { }],
3034                  [], glibcxx_cv_have_attribute_visibility=yes,
3035                  glibcxx_cv_have_attribute_visibility=no)
3036   CFLAGS="$save_CFLAGS"])
3037   if test $glibcxx_cv_have_attribute_visibility = no; then
3038     enable_libstdcxx_visibility=no
3039   fi
3040 fi
3041
3042 GLIBCXX_CONDITIONAL(ENABLE_VISIBILITY, test $enable_libstdcxx_visibility = yes)
3043 AC_MSG_NOTICE([visibility supported: $enable_libstdcxx_visibility])
3044 ])
3045
3046
3047 dnl
3048 dnl Add version tags to symbols in shared library (or not), additionally
3049 dnl marking other symbols as private/local (or not).
3050 dnl
3051 dnl Sets libtool_VERSION, and determines shared library SONAME.
3052 dnl
3053 dnl  This depends on GLIBCXX CHECK_LINKER_FEATURES, but without it assumes no.
3054 dnl
3055 dnl --enable-symvers=style adds a version script to the linker call when
3056 dnl       creating the shared library.  The choice of version script is
3057 dnl       controlled by 'style'.
3058 dnl --disable-symvers does not.
3059 dnl
3060 dnl  +  Usage:  GLIBCXX_ENABLE_SYMVERS[(DEFAULT)]
3061 dnl       Where DEFAULT is either 'yes' or 'no'.  Passing `yes' tries to
3062 dnl       choose a default style based on linker characteristics.  Passing
3063 dnl       'no' disables versioning.
3064 dnl
3065 AC_DEFUN([GLIBCXX_ENABLE_SYMVERS], [
3066
3067 GLIBCXX_ENABLE(symvers,$1,[[[=STYLE]]],
3068   [enables symbol versioning of the shared library],
3069   [permit yes|no|gnu|gnu-versioned-namespace|darwin|darwin-export|sun])
3070
3071 # If we never went through the GLIBCXX_CHECK_LINKER_FEATURES macro, then we
3072 # don't know enough about $LD to do tricks...
3073 AC_REQUIRE([GLIBCXX_CHECK_LINKER_FEATURES])
3074 # Sun style symbol versions needs GNU c++filt for make_sunver.pl to work
3075 # with extern "C++" in version scripts.
3076 AC_REQUIRE([GCC_PROG_GNU_CXXFILT])
3077
3078 # Turn a 'yes' into a suitable default.
3079 if test x$enable_symvers = xyes ; then
3080   if test $enable_shared = no || test "x$LD" = x || test x$gcc_no_link = xyes; then
3081     enable_symvers=no
3082   else
3083     if test $with_gnu_ld = yes ; then
3084       case ${target_os} in
3085         hpux*)
3086           enable_symvers=no ;;
3087         *)
3088           enable_symvers=gnu ;;
3089       esac
3090     else
3091       case ${target_os} in
3092         darwin*)
3093           enable_symvers=darwin ;;
3094         # Sun symbol versioning exists since Solaris 2.5.
3095         solaris2.[[5-9]]* | solaris2.1[[0-9]]*)
3096           # make_sunver.pl needs GNU c++filt to support extern "C++" in
3097           # version scripts, so disable symbol versioning if none can be
3098           # found.
3099           if test -z "$ac_cv_path_CXXFILT"; then
3100             AC_MSG_WARN([=== You have requested Sun symbol versioning, but])
3101             AC_MSG_WARN([=== no GNU c++filt could  be found.])
3102             AC_MSG_WARN([=== Symbol versioning will be disabled.])
3103             enable_symvers=no
3104           else
3105             enable_symvers=sun
3106           fi
3107           ;;
3108         *)
3109           enable_symvers=no ;;
3110       esac
3111     fi
3112   fi
3113 fi
3114
3115 # Check to see if 'darwin' or 'darwin-export' can win.
3116 if test x$enable_symvers = xdarwin-export ; then
3117     enable_symvers=darwin
3118 fi
3119
3120 # Check if 'sun' was requested on non-Solaris 2 platforms.
3121 if test x$enable_symvers = xsun ; then
3122   case ${target_os} in
3123     solaris2*)
3124       # All fine.
3125       ;;
3126     *)
3127       # Unlikely to work.
3128       AC_MSG_WARN([=== You have requested Sun symbol versioning, but])
3129       AC_MSG_WARN([=== you are not targetting Solaris 2.])
3130       AC_MSG_WARN([=== Symbol versioning will be disabled.])
3131       enable_symvers=no
3132       ;;
3133   esac
3134 fi
3135
3136 # Check to see if 'gnu' can win.
3137 if test $enable_symvers = gnu ||
3138   test $enable_symvers = gnu-versioned-namespace ||
3139   test $enable_symvers = sun; then
3140   # Check to see if libgcc_s exists, indicating that shared libgcc is possible.
3141   AC_MSG_CHECKING([for shared libgcc])
3142   ac_save_CFLAGS="$CFLAGS"
3143   CFLAGS=' -lgcc_s'
3144   AC_TRY_LINK(, [return 0;], glibcxx_shared_libgcc=yes, glibcxx_shared_libgcc=no)
3145   CFLAGS="$ac_save_CFLAGS"
3146   if test $glibcxx_shared_libgcc = no; then
3147     cat > conftest.c <<EOF
3148 int main (void) { return 0; }
3149 EOF
3150 changequote(,)dnl
3151     glibcxx_libgcc_s_suffix=`${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
3152                              -shared -shared-libgcc -o conftest.so \
3153                              conftest.c -v 2>&1 >/dev/null \
3154                              | sed -n 's/^.* -lgcc_s\([^ ]*\) .*$/\1/p'`
3155 changequote([,])dnl
3156     rm -f conftest.c conftest.so
3157     if test x${glibcxx_libgcc_s_suffix+set} = xset; then
3158       CFLAGS=" -lgcc_s$glibcxx_libgcc_s_suffix"
3159       AC_TRY_LINK(, [return 0;], glibcxx_shared_libgcc=yes)
3160       CFLAGS="$ac_save_CFLAGS"
3161     fi
3162   fi
3163   AC_MSG_RESULT($glibcxx_shared_libgcc)
3164
3165   # For GNU ld, we need at least this version.  The format is described in
3166   # GLIBCXX_CHECK_LINKER_FEATURES above.
3167   glibcxx_min_gnu_ld_version=21400
3168
3169   # If no shared libgcc, can't win.
3170   if test $glibcxx_shared_libgcc != yes; then
3171       AC_MSG_WARN([=== You have requested GNU symbol versioning, but])
3172       AC_MSG_WARN([=== you are not building a shared libgcc_s.])
3173       AC_MSG_WARN([=== Symbol versioning will be disabled.])
3174       enable_symvers=no
3175   elif test $with_gnu_ld != yes && test $enable_symvers = sun; then
3176     : All interesting versions of Sun ld support sun style symbol versioning.
3177   elif test $with_gnu_ld != yes ; then
3178     # just fail for now
3179     AC_MSG_WARN([=== You have requested GNU symbol versioning, but])
3180     AC_MSG_WARN([=== you are not using the GNU linker.])
3181     AC_MSG_WARN([=== Symbol versioning will be disabled.])
3182     enable_symvers=no
3183   elif test $glibcxx_ld_is_gold = yes ; then
3184     : All versions of gold support symbol versioning.
3185   elif test $glibcxx_gnu_ld_version -lt $glibcxx_min_gnu_ld_version ; then
3186     # The right tools, the right setup, but too old.  Fallbacks?
3187     AC_MSG_WARN(=== Linker version $glibcxx_gnu_ld_version is too old for)
3188     AC_MSG_WARN(=== full symbol versioning support in this release of GCC.)
3189     AC_MSG_WARN(=== You would need to upgrade your binutils to version)
3190     AC_MSG_WARN(=== $glibcxx_min_gnu_ld_version or later and rebuild GCC.)
3191     AC_MSG_WARN([=== Symbol versioning will be disabled.])
3192     enable_symvers=no
3193   fi
3194 fi
3195
3196 # For libtool versioning info, format is CURRENT:REVISION:AGE
3197 libtool_VERSION=6:17:0
3198
3199 # Everything parsed; figure out what files and settings to use.
3200 case $enable_symvers in
3201   no)
3202     SYMVER_FILE=config/abi/pre/none.ver
3203     ;;
3204   gnu)
3205     SYMVER_FILE=config/abi/pre/gnu.ver
3206     AC_DEFINE(_GLIBCXX_SYMVER_GNU, 1,
3207               [Define to use GNU versioning in the shared library.])
3208     ;;
3209   gnu-versioned-namespace)
3210     libtool_VERSION=7:0:0
3211     SYMVER_FILE=config/abi/pre/gnu-versioned-namespace.ver
3212     AC_DEFINE(_GLIBCXX_SYMVER_GNU_NAMESPACE, 1,
3213               [Define to use GNU namespace versioning in the shared library.])
3214     ;;
3215   darwin)
3216     SYMVER_FILE=config/abi/pre/gnu.ver
3217     AC_DEFINE(_GLIBCXX_SYMVER_DARWIN, 1,
3218               [Define to use darwin versioning in the shared library.])
3219     ;;
3220   sun)
3221     SYMVER_FILE=config/abi/pre/gnu.ver
3222     AC_DEFINE(_GLIBCXX_SYMVER_SUN, 1,
3223               [Define to use Sun versioning in the shared library.])
3224     ;;
3225 esac
3226
3227 if test x$enable_symvers != xno ; then
3228   AC_DEFINE(_GLIBCXX_SYMVER, 1,
3229          [Define to use symbol versioning in the shared library.])
3230 fi
3231
3232 AC_CACHE_CHECK([whether the target supports .symver directive],
3233                glibcxx_cv_have_as_symver_directive, [
3234   AC_TRY_COMPILE([void foo (void); __asm (".symver foo, bar@SYMVER");],
3235                  [], glibcxx_cv_have_as_symver_directive=yes,
3236                  glibcxx_cv_have_as_symver_directive=no)])
3237 if test $glibcxx_cv_have_as_symver_directive = yes; then
3238   AC_DEFINE(HAVE_AS_SYMVER_DIRECTIVE, 1,
3239     [Define to 1 if the target assembler supports .symver directive.])
3240 fi
3241
3242 AC_SUBST(SYMVER_FILE)
3243 AC_SUBST(port_specific_symbol_files)
3244 GLIBCXX_CONDITIONAL(ENABLE_SYMVERS, test $enable_symvers != no)
3245 GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_GNU, test $enable_symvers = gnu)
3246 GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_GNU_NAMESPACE, test $enable_symvers = gnu-versioned-namespace)
3247 GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_DARWIN, test $enable_symvers = darwin)
3248 GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_SUN, test $enable_symvers = sun)
3249 AC_MSG_NOTICE(versioning on shared library symbols is $enable_symvers)
3250
3251 if test $enable_symvers != no ; then
3252    case ${target_os} in
3253      # The Solaris 2 runtime linker doesn't support the GNU extension of
3254      # binding the same symbol to different versions
3255      solaris2*)
3256        symvers_renaming=no  ;;
3257      # Other platforms with GNU symbol versioning (GNU/Linux, more?) do.
3258      *)
3259        AC_DEFINE(HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT, 1,
3260          [Define to 1 if the target runtime linker supports binding the same symbol to different versions.])
3261        symvers_renaming=yes  ;;
3262     esac
3263 else
3264     symvers_renaming=no
3265 fi
3266 GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_SOL2, test $symvers_renaming = no)
3267
3268 # Now, set up compatibility support, if any.
3269 # In addition, need this to deal with std::size_t mangling in
3270 # src/compatibility.cc.  In a perfect world, could use
3271 # typeid(std::size_t).name()[0] to do direct substitution.
3272 AC_MSG_CHECKING([for size_t as unsigned int])
3273 ac_save_CFLAGS="$CFLAGS"
3274 CFLAGS="-Werror"
3275 AC_TRY_COMPILE(, [__SIZE_TYPE__* stp; unsigned int* uip; stp = uip;],
3276                  [glibcxx_size_t_is_i=yes], [glibcxx_size_t_is_i=no])
3277 CFLAGS=$ac_save_CFLAGS
3278 if test "$glibcxx_size_t_is_i" = yes; then
3279   AC_DEFINE(_GLIBCXX_SIZE_T_IS_UINT, 1, [Define if size_t is unsigned int.])
3280 fi
3281 AC_MSG_RESULT([$glibcxx_size_t_is_i])
3282
3283 AC_MSG_CHECKING([for ptrdiff_t as int])
3284 ac_save_CFLAGS="$CFLAGS"
3285 CFLAGS="-Werror"
3286 AC_TRY_COMPILE(, [__PTRDIFF_TYPE__* ptp; int* ip; ptp = ip;],
3287                  [glibcxx_ptrdiff_t_is_i=yes], [glibcxx_ptrdiff_t_is_i=no])
3288 CFLAGS=$ac_save_CFLAGS
3289 if test "$glibcxx_ptrdiff_t_is_i" = yes; then
3290   AC_DEFINE(_GLIBCXX_PTRDIFF_T_IS_INT, 1, [Define if ptrdiff_t is int.])
3291 fi
3292 AC_MSG_RESULT([$glibcxx_ptrdiff_t_is_i])
3293 ])
3294
3295
3296 dnl
3297 dnl Setup to use the gcc gthr.h thread-specific memory and mutex model.
3298 dnl We must stage the required headers so that they will be installed
3299 dnl with the library (unlike libgcc, the STL implementation is provided
3300 dnl solely within headers).  Since we must not inject random user-space
3301 dnl macro names into user-provided C++ code, we first stage into <file>-in
3302 dnl and process to <file> with an output command.  The reason for a two-
3303 dnl stage process here is to correctly handle $srcdir!=$objdir without
3304 dnl having to write complex code (the sed commands to clean the macro
3305 dnl namespace are complex and fragile enough as it is).  We must also
3306 dnl add a relative path so that -I- is supported properly.
3307 dnl
3308 AC_DEFUN([GLIBCXX_ENABLE_THREADS], [
3309   AC_MSG_CHECKING([for thread model used by GCC])
3310   target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
3311   AC_MSG_RESULT([$target_thread_file])
3312 ])
3313
3314
3315 dnl
3316 dnl Check if gthread implementation defines the types and functions
3317 dnl required by the c++0x thread library.  Conforming gthread
3318 dnl implementations can define __GTHREADS_CXX0X to enable use with c++0x.
3319 dnl
3320 AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [
3321   AC_LANG_SAVE
3322   AC_LANG_CPLUSPLUS
3323
3324   ac_save_CXXFLAGS="$CXXFLAGS"
3325   CXXFLAGS="$CXXFLAGS -fno-exceptions \
3326         -I${toplevel_srcdir}/libgcc -I${toplevel_builddir}/libgcc"
3327
3328   target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
3329   case $target_thread_file in
3330     posix)
3331       CXXFLAGS="$CXXFLAGS -DSUPPORTS_WEAK -DGTHREAD_USE_WEAK -D_PTHREADS"
3332   esac
3333
3334   AC_MSG_CHECKING([whether it can be safely assumed that mutex_timedlock is available])
3335
3336   AC_TRY_COMPILE([#include <unistd.h>],
3337     [
3338       // In case of POSIX threads check _POSIX_TIMEOUTS.
3339       #if (defined(_PTHREADS) \
3340           && (!defined(_POSIX_TIMEOUTS) || _POSIX_TIMEOUTS <= 0))
3341       #error
3342       #endif
3343     ], [ac_gthread_use_mutex_timedlock=1], [ac_gthread_use_mutex_timedlock=0])
3344
3345   AC_DEFINE_UNQUOTED(_GTHREAD_USE_MUTEX_TIMEDLOCK, $ac_gthread_use_mutex_timedlock,
3346                      [Define to 1 if mutex_timedlock is available.])
3347
3348   if test $ac_gthread_use_mutex_timedlock = 1 ; then res_mutex_timedlock=yes ;
3349   else res_mutex_timedlock=no ; fi
3350   AC_MSG_RESULT([$res_mutex_timedlock])
3351
3352   AC_MSG_CHECKING([for gthreads library])
3353
3354   AC_TRY_COMPILE([#include "gthr.h"],
3355     [
3356       #ifndef __GTHREADS_CXX0X
3357       #error
3358       #endif
3359     ], [ac_has_gthreads=yes], [ac_has_gthreads=no])
3360
3361   AC_MSG_RESULT([$ac_has_gthreads])
3362
3363   if test x"$ac_has_gthreads" = x"yes"; then
3364     AC_DEFINE(_GLIBCXX_HAS_GTHREADS, 1,
3365               [Define if gthreads library is available.])
3366   fi
3367
3368   CXXFLAGS="$ac_save_CXXFLAGS"
3369   AC_LANG_RESTORE
3370 ])
3371
3372
3373 # Check whether LC_MESSAGES is available in <locale.h>.
3374 # Ulrich Drepper <drepper@cygnus.com>, 1995.
3375 #
3376 # This file file be copied and used freely without restrictions.  It can
3377 # be used in projects which are not available under the GNU Public License
3378 # but which still want to provide support for the GNU gettext functionality.
3379 # Please note that the actual code is *not* freely available.
3380 AC_DEFUN([AC_LC_MESSAGES], [
3381   AC_CHECK_HEADER(locale.h, [
3382     AC_CACHE_CHECK([for LC_MESSAGES], ac_cv_val_LC_MESSAGES,
3383       [AC_TRY_COMPILE([#include <locale.h>], [return LC_MESSAGES],
3384        ac_cv_val_LC_MESSAGES=yes, ac_cv_val_LC_MESSAGES=no)])
3385     if test $ac_cv_val_LC_MESSAGES = yes; then
3386       AC_DEFINE(HAVE_LC_MESSAGES, 1,
3387                 [Define if LC_MESSAGES is available in <locale.h>.])
3388     fi
3389   ])
3390 ])
3391
3392 dnl
3393 dnl Check whether get_nprocs is available in <sys/sysinfo.h>, and define _GLIBCXX_USE_GET_NPROCS.
3394 dnl
3395 AC_DEFUN([GLIBCXX_CHECK_GET_NPROCS], [
3396
3397   AC_LANG_SAVE
3398   AC_LANG_CPLUSPLUS
3399   ac_save_CXXFLAGS="$CXXFLAGS"
3400   CXXFLAGS="$CXXFLAGS -fno-exceptions"
3401
3402   AC_MSG_CHECKING([for get_nprocs])
3403   AC_CACHE_VAL(glibcxx_cv_GET_NPROCS, [
3404     GCC_TRY_COMPILE_OR_LINK(
3405       [#include <sys/sysinfo.h>],
3406       [int n = get_nprocs();],
3407       [glibcxx_cv_GET_NPROCS=yes],
3408       [glibcxx_cv_GET_NPROCS=no])
3409   ])
3410   if test $glibcxx_cv_GET_NPROCS = yes; then
3411     AC_DEFINE(_GLIBCXX_USE_GET_NPROCS, 1, [Define if get_nprocs is available in <sys/sysinfo.h>.])
3412   fi
3413   AC_MSG_RESULT($glibcxx_cv_GET_NPROCS)
3414
3415   CXXFLAGS="$ac_save_CXXFLAGS"
3416   AC_LANG_RESTORE
3417 ])
3418
3419 dnl
3420 dnl Check whether sysconf(_SC_NPROCESSORS_ONLN) is available in <unistd.h>, and define _GLIBCXX_USE_SC_NPROCESSORS_ONLN.
3421 dnl
3422 AC_DEFUN([GLIBCXX_CHECK_SC_NPROCESSORS_ONLN], [
3423
3424   AC_LANG_SAVE
3425   AC_LANG_CPLUSPLUS
3426   ac_save_CXXFLAGS="$CXXFLAGS"
3427   CXXFLAGS="$CXXFLAGS -fno-exceptions"
3428
3429   AC_MSG_CHECKING([for _SC_NPROCESSORS_ONLN])
3430   AC_CACHE_VAL(glibcxx_cv_SC_NPROCESSORS_ONLN, [
3431     GCC_TRY_COMPILE_OR_LINK(
3432       [#include <unistd.h>],
3433       [int n = sysconf(_SC_NPROCESSORS_ONLN);],
3434       [glibcxx_cv_SC_NPROCESSORS_ONLN=yes],
3435       [glibcxx_cv_SC_NPROCESSORS_ONLN=no])
3436   ])
3437   if test $glibcxx_cv_SC_NPROCESSORS_ONLN = yes; then
3438     AC_DEFINE(_GLIBCXX_USE_SC_NPROCESSORS_ONLN, 1, [Define if _SC_NPROCESSORS_ONLN  is available in <unistd.h>.])
3439   fi
3440   AC_MSG_RESULT($glibcxx_cv_SC_NPROCESSORS_ONLN)
3441
3442   CXXFLAGS="$ac_save_CXXFLAGS"
3443   AC_LANG_RESTORE
3444 ])
3445
3446 dnl
3447 dnl Check whether sysconf(_SC_NPROC_ONLN) is available in <unistd.h>, and define _GLIBCXX_USE_SC_NPROC_ONLN.
3448 dnl
3449 AC_DEFUN([GLIBCXX_CHECK_SC_NPROC_ONLN], [
3450
3451   AC_LANG_SAVE
3452   AC_LANG_CPLUSPLUS
3453   ac_save_CXXFLAGS="$CXXFLAGS"
3454   CXXFLAGS="$CXXFLAGS -fno-exceptions"
3455
3456   AC_MSG_CHECKING([for _SC_NPROC_ONLN])
3457   AC_CACHE_VAL(glibcxx_cv_SC_NPROC_ONLN, [
3458     GCC_TRY_COMPILE_OR_LINK(
3459       [#include <unistd.h>],
3460       [int n = sysconf(_SC_NPROC_ONLN);],
3461       [glibcxx_cv_SC_NPROC_ONLN=yes],
3462       [glibcxx_cv_SC_NPROC_ONLN=no])
3463   ])
3464   if test $glibcxx_cv_SC_NPROC_ONLN = yes; then
3465     AC_DEFINE(_GLIBCXX_USE_SC_NPROC_ONLN, 1, [Define if _SC_NPROC_ONLN  is available in <unistd.h>.])
3466   fi
3467   AC_MSG_RESULT($glibcxx_cv_SC_NPROC_ONLN)
3468
3469   CXXFLAGS="$ac_save_CXXFLAGS"
3470   AC_LANG_RESTORE
3471 ])
3472
3473 dnl
3474 dnl Check whether pthread_num_processors_np is available in <pthread.h>, and define _GLIBCXX_USE_PTHREADS_NUM_PROCESSORS_NP.
3475 dnl
3476 AC_DEFUN([GLIBCXX_CHECK_PTHREADS_NUM_PROCESSORS_NP], [
3477
3478   AC_LANG_SAVE
3479   AC_LANG_CPLUSPLUS
3480   ac_save_CXXFLAGS="$CXXFLAGS"
3481   CXXFLAGS="$CXXFLAGS -fno-exceptions"
3482
3483   AC_MSG_CHECKING([for pthreads_num_processors_np])
3484   AC_CACHE_VAL(glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP, [
3485     GCC_TRY_COMPILE_OR_LINK(
3486       [#include <pthread.h>],
3487       [int n = pthread_num_processors_np();],
3488       [glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP=yes],
3489       [glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP=no])
3490   ])
3491   if test $glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP = yes; then
3492     AC_DEFINE(_GLIBCXX_USE_PTHREADS_NUM_PROCESSORS_NP, 1, [Define if pthreads_num_processors_np is available in <pthread.h>.])
3493   fi
3494   AC_MSG_RESULT($glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP)
3495
3496   CXXFLAGS="$ac_save_CXXFLAGS"
3497   AC_LANG_RESTORE
3498 ])
3499
3500 dnl
3501 dnl Check whether sysctl is available in <pthread.h>, and define _GLIBCXX_USE_SYSCTL_HW_NCPU.
3502 dnl
3503 AC_DEFUN([GLIBCXX_CHECK_SYSCTL_HW_NCPU], [
3504
3505   AC_LANG_SAVE
3506   AC_LANG_CPLUSPLUS
3507   ac_save_CXXFLAGS="$CXXFLAGS"
3508   CXXFLAGS="$CXXFLAGS -fno-exceptions"
3509
3510   AC_MSG_CHECKING([for hw.ncpu sysctl])
3511   AC_CACHE_VAL(glibcxx_cv_SYSCTL_HW_NCPU, [
3512     GCC_TRY_COMPILE_OR_LINK(
3513       [
3514        #include <stddef.h>
3515        #include <sys/sysctl.h>
3516        ],
3517       [
3518        int count;
3519        size_t size = sizeof(count);
3520        int mib[] = { CTL_HW, HW_NCPU };
3521        sysctl(mib, 2, &count, &size, NULL, 0);
3522       ],
3523       [glibcxx_cv_SYSCTL_HW_NCPU=yes],
3524       [glibcxx_cv_SYSCTL_HW_NCPU=no])
3525   ])
3526   if test $glibcxx_cv_SYSCTL_HW_NCPU = yes; then
3527     AC_DEFINE(_GLIBCXX_USE_SYSCTL_HW_NCPU, 1, [Define if sysctl(), CTL_HW and HW_NCPU are available in <sys/sysctl.h>.])
3528   fi
3529   AC_MSG_RESULT($glibcxx_cv_SYSCTL_HW_NCPU)
3530
3531   CXXFLAGS="$ac_save_CXXFLAGS"
3532   AC_LANG_RESTORE
3533 ])
3534
3535 # Macros from the top-level gcc directory.
3536 m4_include([../config/gc++filt.m4])
3537 m4_include([../config/tls.m4])