acinclude.m4 revision 225736
1
2dnl
3dnl GLIBCXX_CONDITIONAL (NAME, SHELL-TEST)
4dnl
5dnl Exactly like AM_CONDITIONAL, but delays evaluation of the test until the
6dnl end of configure.  This lets tested variables be reassigned, and the
7dnl conditional will depend on the final state of the variable.  For a simple
8dnl example of why this is needed, see GLIBCXX_ENABLE_HOSTED.
9dnl
10m4_define([_m4_divert(glibcxx_diversion)], 8000)dnl
11AC_DEFUN([GLIBCXX_CONDITIONAL], [dnl
12  m4_divert_text([glibcxx_diversion],dnl
13   AM_CONDITIONAL([$1],[$2])
14  )dnl
15])dnl
16AC_DEFUN([GLIBCXX_EVALUATE_CONDITIONALS], [m4_undivert([glibcxx_diversion])])dnl
17
18
19dnl
20dnl Check to see what architecture and operating system we are compiling
21dnl for.  Also, if architecture- or OS-specific flags are required for
22dnl compilation, pick them up here.
23dnl
24AC_DEFUN([GLIBCXX_CHECK_HOST], [
25  . $glibcxx_srcdir/configure.host
26  AC_MSG_NOTICE([CPU config directory is $cpu_include_dir])
27  AC_MSG_NOTICE([OS config directory is $os_include_dir])
28])
29
30dnl
31dnl Initialize the rest of the library configury.  At this point we have
32dnl variables like $host.
33dnl
34dnl Sets:
35dnl  SUBDIRS
36dnl Substs:
37dnl  glibcxx_builddir     (absolute path)
38dnl  glibcxx_srcdir       (absolute path)
39dnl  toplevel_srcdir      (absolute path)
40dnl  with_cross_host
41dnl  with_newlib
42dnl  with_target_subdir
43dnl plus
44dnl  - the variables in GLIBCXX_CHECK_HOST / configure.host
45dnl  - default settings for all AM_CONFITIONAL test variables
46dnl  - lots of tools, like CC and CXX
47dnl
48AC_DEFUN([GLIBCXX_CONFIGURE], [
49  # Keep these sync'd with the list in Makefile.am.  The first provides an
50  # expandable list at autoconf time; the second provides an expandable list
51  # (i.e., shell variable) at configure time.
52  m4_define([glibcxx_SUBDIRS],[include libmath libsupc++ src 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_srcdir=${glibcxx_srcdir}/..
64  AC_SUBST(glibcxx_builddir)
65  AC_SUBST(glibcxx_srcdir)
66  AC_SUBST(toplevel_srcdir)
67
68  # We use these options to decide which functions to include.  They are
69  # set from the top level.
70  AC_ARG_WITH([target-subdir],
71    AC_HELP_STRING([--with-target-subdir=SUBDIR],
72                   [configuring in a subdirectory]))
73
74  AC_ARG_WITH([cross-host],
75    AC_HELP_STRING([--with-cross-host=HOST],
76                   [configuring with a cross compiler]))
77
78  AC_ARG_WITH([newlib],
79    AC_HELP_STRING([--with-newlib],
80                   [assume newlib as a system C library]))
81
82  # We're almost certainly being configured before anything else which uses
83  # C++, so all of our AC_PROG_* discoveries will be cached.  It's vital that
84  # we not cache the value of CXX that we "discover" here, because it's set
85  # to something unique for us and libjava.  Other target libraries need to
86  # find CXX for themselves.  We yank the rug out from under the normal AC_*
87  # process by sneakily renaming the cache variable.  This also lets us debug
88  # the value of "our" CXX in postmortems.
89  #
90  # We must also force CXX to /not/ be a precious variable, otherwise the
91  # wrong (non-multilib-adjusted) value will be used in multilibs.  This
92  # little trick also affects CPPFLAGS, CXXFLAGS, and LDFLAGS.  And as a side
93  # effect, CXXFLAGS is no longer automagically subst'd, so we have to do
94  # that ourselves.  Un-preciousing AC_PROG_CC also affects CC and CFLAGS.
95  #
96  # -fno-builtin must be present here so that a non-conflicting form of
97  # std::exit can be guessed by AC_PROG_CXX, and used in later tests.
98
99  m4_define([ac_cv_prog_CXX],[glibcxx_cv_prog_CXX])
100  m4_rename([_AC_ARG_VAR_PRECIOUS],[glibcxx_PRECIOUS])
101  m4_define([_AC_ARG_VAR_PRECIOUS],[])
102  save_CXXFLAGS="$CXXFLAGS"
103  CXXFLAGS="$CXXFLAGS -fno-builtin"
104  AC_PROG_CC
105  AC_PROG_CXX
106  CXXFLAGS="$save_CXXFLAGS"
107  m4_rename([glibcxx_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
108  AC_SUBST(CFLAGS)
109  AC_SUBST(CXXFLAGS)
110
111  # Will set LN_S to either 'ln -s', 'ln', or 'cp -p' (if linking isn't
112  # available).  Uncomment the next line to force a particular method.
113  AC_PROG_LN_S
114  #LN_S='cp -p'
115
116  AC_CHECK_TOOL(AS, as)
117  AC_CHECK_TOOL(AR, ar)
118  AC_CHECK_TOOL(RANLIB, ranlib, ranlib-not-found-in-path-error)
119
120  AM_MAINTAINER_MODE
121
122  # Set up safe default values for all subsequent AM_CONDITIONAL tests
123  # which are themselves conditionally expanded.
124  ## (Right now, this only matters for enable_wchar_t, but nothing prevents
125  ## other macros from doing the same.  This should be automated.)  -pme
126  need_libmath=no
127
128  # Check for uClibc since Linux platforms use different configuration
129  # directories depending on the C library in use.
130  AC_EGREP_CPP([_using_uclibc], [
131  #include <stdio.h>
132  #if __UCLIBC__
133    _using_uclibc
134  #endif
135  ], uclibc=yes, uclibc=no)
136
137  # Find platform-specific directories containing configuration info.
138  # Also possibly modify flags used elsewhere, as needed by the platform.
139  GLIBCXX_CHECK_HOST
140])
141
142
143dnl
144dnl Tests for newer compiler features, or features that are present in newer
145dnl compiler versions but not older compiler versions still in use, should
146dnl be placed here.
147dnl
148dnl Defines:
149dnl  WERROR='-Werror' if requested and possible; g++'s that lack the
150dnl   new inlining code or the new system_header pragma will die on -Werror.
151dnl   Leave it out by default and use maint-mode to use it.
152dnl  SECTION_FLAGS='-ffunction-sections -fdata-sections' if
153dnl   compiler supports it and the user has not requested debug mode.
154dnl
155AC_DEFUN([GLIBCXX_CHECK_COMPILER_FEATURES], [
156  # All these tests are for C++; save the language and the compiler flags.
157  # The CXXFLAGS thing is suspicious, but based on similar bits previously
158  # found in GLIBCXX_CONFIGURE.
159  AC_LANG_SAVE
160  AC_LANG_CPLUSPLUS
161  ac_test_CXXFLAGS="${CXXFLAGS+set}"
162  ac_save_CXXFLAGS="$CXXFLAGS"
163
164  # Check for maintainer-mode bits.
165  if test x"$USE_MAINTAINER_MODE" = xno; then
166    WERROR=''
167  else
168    WERROR='-Werror'
169  fi
170
171  # Check for -ffunction-sections -fdata-sections
172  AC_MSG_CHECKING([for g++ that supports -ffunction-sections -fdata-sections])
173  CXXFLAGS='-Werror -ffunction-sections -fdata-sections'
174  AC_TRY_COMPILE(, [int foo;], [ac_fdsections=yes], [ac_fdsections=no])
175  if test "$ac_test_CXXFLAGS" = set; then
176    CXXFLAGS="$ac_save_CXXFLAGS"
177  else
178    # this is the suspicious part
179    CXXFLAGS=''
180  fi
181  if test x"$ac_fdsections" = x"yes"; then
182    SECTION_FLAGS='-ffunction-sections -fdata-sections'
183  fi
184  AC_MSG_RESULT($ac_fdsections)
185
186  AC_LANG_RESTORE
187  AC_SUBST(WERROR)
188  AC_SUBST(SECTION_FLAGS)
189])
190
191
192dnl
193dnl If GNU ld is in use, check to see if tricky linker opts can be used.  If
194dnl the native linker is in use, all variables will be defined to something
195dnl safe (like an empty string).
196dnl
197dnl Defines:
198dnl  SECTION_LDFLAGS='-Wl,--gc-sections' if possible
199dnl  OPT_LDFLAGS='-Wl,-O1' and '-z,relro' if possible
200dnl  LD (as a side effect of testing)
201dnl Sets:
202dnl  with_gnu_ld
203dnl  glibcxx_gnu_ld_version (possibly)
204dnl
205dnl The last will be a single integer, e.g., version 1.23.45.0.67.89 will
206dnl set glibcxx_gnu_ld_version to 12345.  Zeros cause problems.
207dnl
208AC_DEFUN([GLIBCXX_CHECK_LINKER_FEATURES], [
209  # If we're not using GNU ld, then there's no point in even trying these
210  # tests.  Check for that first.  We should have already tested for gld
211  # by now (in libtool), but require it now just to be safe...
212  test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS=''
213  test -z "$OPT_LDFLAGS" && OPT_LDFLAGS=''
214  AC_REQUIRE([AC_PROG_LD])
215  AC_REQUIRE([AC_PROG_AWK])
216
217  # The name set by libtool depends on the version of libtool.  Shame on us
218  # for depending on an impl detail, but c'est la vie.  Older versions used
219  # ac_cv_prog_gnu_ld, but now it's lt_cv_prog_gnu_ld, and is copied back on
220  # top of with_gnu_ld (which is also set by --with-gnu-ld, so that actually
221  # makes sense).  We'll test with_gnu_ld everywhere else, so if that isn't
222  # set (hence we're using an older libtool), then set it.
223  if test x${with_gnu_ld+set} != xset; then
224    if test x${ac_cv_prog_gnu_ld+set} != xset; then
225      # We got through "ac_require(ac_prog_ld)" and still not set?  Huh?
226      with_gnu_ld=no
227    else
228      with_gnu_ld=$ac_cv_prog_gnu_ld
229    fi
230  fi
231
232  # Start by getting the version number.  I think the libtool test already
233  # does some of this, but throws away the result.
234  if test x"$with_gnu_ld" = x"yes"; then
235    AC_MSG_CHECKING([for ld version])
236    changequote(,)
237    ldver=`$LD --version 2>/dev/null | head -1 | \
238           sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'`
239    changequote([,])
240    glibcxx_gnu_ld_version=`echo $ldver | \
241           $AWK -F. '{ if (NF<3) [$]3=0; print ([$]1*100+[$]2)*100+[$]3 }'`
242    AC_MSG_RESULT($glibcxx_gnu_ld_version)
243  fi
244
245  # Set --gc-sections.
246  glibcxx_gcsections_min_ld=21602
247  if test x"$with_gnu_ld" = x"yes" && 
248	test $glibcxx_gnu_ld_version -gt $glibcxx_gcsections_min_ld ; then
249
250    # Sufficiently young GNU ld it is!  Joy and bunny rabbits!
251    # NB: This flag only works reliably after 2.16.1. Configure tests
252    # for this are difficult, so hard wire a value that should work.
253
254    ac_test_CFLAGS="${CFLAGS+set}"
255    ac_save_CFLAGS="$CFLAGS"
256    CFLAGS='-Wl,--gc-sections'
257
258    # Check for -Wl,--gc-sections
259    AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
260    AC_TRY_LINK([ int one(void) { return 1; }
261     int two(void) { return 2; }
262	], [ two(); ] , [ac_gcsections=yes], [ac_gcsections=no])
263    if test "$ac_gcsections" = "yes"; then
264      rm -f conftest.c
265      touch conftest.c
266      if $CC -c conftest.c; then
267	if $LD --gc-sections -o conftest conftest.o 2>&1 | \
268	   grep "Warning: gc-sections option ignored" > /dev/null; then
269	  ac_gcsections=no
270	fi
271      fi
272      rm -f conftest.c conftest.o conftest
273    fi
274    if test "$ac_gcsections" = "yes"; then
275      SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
276    fi
277    AC_MSG_RESULT($ac_gcsections)
278
279    if test "$ac_test_CFLAGS" = set; then
280      CFLAGS="$ac_save_CFLAGS"
281    else
282      # this is the suspicious part
283      CFLAGS=''
284    fi
285  fi
286
287  # Set -z,relro.
288  # Note this is only for shared objects.
289  ac_ld_relro=no
290  if test x"$with_gnu_ld" = x"yes"; then
291    AC_MSG_CHECKING([for ld that supports -Wl,-z,relro])
292    cxx_z_relo=`$LD -v --help 2>/dev/null | grep "z relro"`
293    if test -n "$cxx_z_relo"; then
294      OPT_LDFLAGS="-Wl,-z,relro"
295      ac_ld_relro=yes
296    fi
297    AC_MSG_RESULT($ac_ld_relro)
298  fi
299
300  # Set linker optimization flags.
301  if test x"$with_gnu_ld" = x"yes"; then
302    OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
303  fi
304
305  AC_SUBST(SECTION_LDFLAGS)
306  AC_SUBST(OPT_LDFLAGS)
307])
308
309
310dnl
311dnl Check to see if this target can enable the iconv specializations.
312dnl If --disable-c-mbchar was given, no wchar_t specialization is enabled.  
313dnl (This must have been previously checked, along with the rest of C99 
314dnl support.) By default, iconv support is disabled.
315dnl
316dnl Defines:
317dnl  _GLIBCXX_USE_ICONV if all the bits are found.
318dnl Substs:
319dnl  LIBICONV to a -l string containing the iconv library, if needed.
320dnl
321AC_DEFUN([GLIBCXX_CHECK_ICONV_SUPPORT], [
322
323  enable_iconv=no
324  # Only continue checking if the ISO C99 headers exist and support is on.
325  if test x"$enable_wchar_t" = xyes; then
326
327    # Use iconv for wchar_t to char conversions. As such, check for
328    # X/Open Portability Guide, version 2 features (XPG2).
329    AC_CHECK_HEADER(iconv.h, ac_has_iconv_h=yes, ac_has_iconv_h=no)
330    AC_CHECK_HEADER(langinfo.h, ac_has_langinfo_h=yes, ac_has_langinfo_h=no)
331
332    # Check for existence of libiconv.a providing XPG2 wchar_t support.
333    AC_CHECK_LIB(iconv, iconv, LIBICONV="-liconv")
334    ac_save_LIBS="$LIBS"
335    LIBS="$LIBS $LIBICONV"
336    AC_SUBST(LIBICONV)
337
338    AC_CHECK_FUNCS([iconv_open iconv_close iconv nl_langinfo],
339    [ac_XPG2funcs=yes], [ac_XPG2funcs=no])
340
341    LIBS="$ac_save_LIBS"
342
343    if test x"$ac_has_iconv_h" = xyes &&
344       test x"$ac_has_langinfo_h" = xyes &&
345       test x"$ac_XPG2funcs" = xyes;
346    then
347      AC_DEFINE([_GLIBCXX_USE_ICONV],1,
348	        [Define if iconv and related functions exist and are usable.])
349      enable_iconv=yes
350    fi
351  fi
352  AC_MSG_CHECKING([for enabled iconv specializations])
353  AC_MSG_RESULT($enable_iconv)
354])
355
356
357dnl
358dnl Check for headers for, and arguments to, the setrlimit() function.
359dnl Used only in testsuite_hooks.h.  Called from GLIBCXX_CONFIGURE_TESTSUITE.
360dnl
361dnl Defines:
362dnl  _GLIBCXX_RES_LIMITS if we can set artificial resource limits 
363dnl  various HAVE_LIMIT_* for individual limit names
364dnl
365AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT_ancilliary], [
366  AC_MSG_CHECKING([for RLIMIT_$1])
367  AC_TRY_COMPILE(
368    [#include <unistd.h>
369     #include <sys/time.h>
370     #include <sys/resource.h>
371    ],
372    [ int f = RLIMIT_$1 ; ],
373    [glibcxx_mresult=1], [glibcxx_mresult=0])
374  AC_DEFINE_UNQUOTED(HAVE_LIMIT_$1, $glibcxx_mresult,
375                     [Only used in build directory testsuite_hooks.h.])
376  if test $glibcxx_mresult = 1 ; then res=yes ; else res=no ; fi
377  AC_MSG_RESULT($res)
378])
379
380AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT], [
381  setrlimit_have_headers=yes
382  AC_CHECK_HEADERS(unistd.h sys/time.h sys/resource.h,
383                   [],
384                   [setrlimit_have_headers=no])
385  # If don't have the headers, then we can't run the tests now, and we
386  # won't be seeing any of these during testsuite compilation.
387  if test $setrlimit_have_headers = yes; then
388    # Can't do these in a loop, else the resulting syntax is wrong.
389    GLIBCXX_CHECK_SETRLIMIT_ancilliary(DATA)
390    GLIBCXX_CHECK_SETRLIMIT_ancilliary(RSS)
391    GLIBCXX_CHECK_SETRLIMIT_ancilliary(VMEM)
392    GLIBCXX_CHECK_SETRLIMIT_ancilliary(AS)
393    GLIBCXX_CHECK_SETRLIMIT_ancilliary(FSIZE)
394
395    # Check for rlimit, setrlimit.
396    AC_CACHE_VAL(ac_setrlimit, [
397      AC_TRY_COMPILE(
398        [#include <unistd.h>
399         #include <sys/time.h>
400         #include <sys/resource.h>
401        ],
402        [struct rlimit r;
403         setrlimit(0, &r);],
404        [ac_setrlimit=yes], [ac_setrlimit=no])
405    ])
406  fi
407
408  AC_MSG_CHECKING([for testsuite resource limits support])
409  if test $setrlimit_have_headers = yes && test $ac_setrlimit = yes; then
410    ac_res_limits=yes
411    AC_DEFINE(_GLIBCXX_RES_LIMITS, 1,
412              [Define if using setrlimit to set resource limits during
413              "make check"])
414  else
415    ac_res_limits=no
416  fi
417  AC_MSG_RESULT($ac_res_limits)
418])
419
420
421dnl
422dnl Check whether S_ISREG (Posix) or S_IFREG is available in <sys/stat.h>.
423dnl Define HAVE_S_ISREG / HAVE_S_IFREG appropriately.
424dnl
425AC_DEFUN([GLIBCXX_CHECK_S_ISREG_OR_S_IFREG], [
426  AC_MSG_CHECKING([for S_ISREG or S_IFREG])
427  AC_CACHE_VAL(glibcxx_cv_S_ISREG, [
428    AC_TRY_LINK(
429      [#include <sys/stat.h>],
430      [struct stat buffer;
431       fstat(0, &buffer);
432       S_ISREG(buffer.st_mode);],
433      [glibcxx_cv_S_ISREG=yes],
434      [glibcxx_cv_S_ISREG=no])
435  ])
436  AC_CACHE_VAL(glibcxx_cv_S_IFREG, [
437    AC_TRY_LINK(
438      [#include <sys/stat.h>],
439      [struct stat buffer;
440       fstat(0, &buffer);
441       S_IFREG & buffer.st_mode;],
442      [glibcxx_cv_S_IFREG=yes],
443      [glibcxx_cv_S_IFREG=no])
444  ])
445  res=no
446  if test $glibcxx_cv_S_ISREG = yes; then
447    AC_DEFINE(HAVE_S_ISREG, 1, 
448              [Define if S_IFREG is available in <sys/stat.h>.])
449    res=S_ISREG
450  elif test $glibcxx_cv_S_IFREG = yes; then
451    AC_DEFINE(HAVE_S_IFREG, 1,
452              [Define if S_IFREG is available in <sys/stat.h>.])
453    res=S_IFREG
454  fi
455  AC_MSG_RESULT($res)
456])
457
458
459dnl
460dnl Check whether poll is available in <poll.h>, and define HAVE_POLL.
461dnl
462AC_DEFUN([GLIBCXX_CHECK_POLL], [
463  AC_MSG_CHECKING([for poll])
464  AC_CACHE_VAL(glibcxx_cv_POLL, [
465    AC_TRY_LINK(
466      [#include <poll.h>],
467      [struct pollfd pfd[1];
468       pfd[0].events = POLLIN;
469       poll(pfd, 1, 0);],
470      [glibcxx_cv_POLL=yes],
471      [glibcxx_cv_POLL=no])
472  ])
473  if test $glibcxx_cv_POLL = yes; then
474    AC_DEFINE(HAVE_POLL, 1, [Define if poll is available in <poll.h>.])
475  fi
476  AC_MSG_RESULT($glibcxx_cv_POLL)
477])
478
479
480dnl
481dnl Check whether writev is available in <sys/uio.h>, and define HAVE_WRITEV.
482dnl
483AC_DEFUN([GLIBCXX_CHECK_WRITEV], [
484  AC_MSG_CHECKING([for writev])
485  AC_CACHE_VAL(glibcxx_cv_WRITEV, [
486    AC_TRY_LINK(
487      [#include <sys/uio.h>],
488      [struct iovec iov[2];
489       writev(0, iov, 0);],
490      [glibcxx_cv_WRITEV=yes],
491      [glibcxx_cv_WRITEV=no])
492  ])
493  if test $glibcxx_cv_WRITEV = yes; then
494    AC_DEFINE(HAVE_WRITEV, 1, [Define if writev is available in <sys/uio.h>.])
495  fi
496  AC_MSG_RESULT($glibcxx_cv_WRITEV)
497])
498
499
500dnl
501dnl Check whether int64_t is available in <stdint.h>, and define HAVE_INT64_T.
502dnl
503AC_DEFUN([GLIBCXX_CHECK_INT64_T], [
504  AC_MSG_CHECKING([for int64_t])
505  AC_CACHE_VAL(glibcxx_cv_INT64_T, [
506    AC_TRY_COMPILE(
507      [#include <stdint.h>],
508      [int64_t var;],
509      [glibcxx_cv_INT64_T=yes],
510      [glibcxx_cv_INT64_T=no])
511  ])
512  if test $glibcxx_cv_INT64_T = yes; then
513    AC_DEFINE(HAVE_INT64_T, 1, [Define if int64_t is available in <stdint.h>.])
514  fi
515  AC_MSG_RESULT($glibcxx_cv_INT64_T)
516])
517
518
519dnl
520dnl Check whether LFS support is available.
521dnl
522AC_DEFUN([GLIBCXX_CHECK_LFS], [
523  AC_LANG_SAVE
524  AC_LANG_CPLUSPLUS
525  ac_save_CXXFLAGS="$CXXFLAGS"
526  CXXFLAGS="$CXXFLAGS -fno-exceptions"	
527  AC_MSG_CHECKING([for LFS support])
528  AC_CACHE_VAL(glibcxx_cv_LFS, [
529    AC_TRY_LINK(
530      [#include <unistd.h>
531       #include <stdio.h>
532       #include <sys/stat.h>
533      ],
534      [FILE* fp;
535       fopen64("t", "w");
536       fseeko64(fp, 0, SEEK_CUR);
537       ftello64(fp);
538       lseek64(1, 0, SEEK_CUR);
539       struct stat64 buf;
540       fstat64(1, &buf);],
541      [glibcxx_cv_LFS=yes],
542      [glibcxx_cv_LFS=no])
543  ])
544  if test $glibcxx_cv_LFS = yes; then
545    AC_DEFINE(_GLIBCXX_USE_LFS, 1, [Define if LFS support is available.])
546  fi
547  AC_MSG_RESULT($glibcxx_cv_LFS)
548  CXXFLAGS="$ac_save_CXXFLAGS"
549  AC_LANG_RESTORE
550])
551
552
553dnl
554dnl Check for whether a fully dynamic basic_string implementation should
555dnl be turned on, that does not put empty objects in per-process static
556dnl memory (mostly useful together with shared memory allocators, see PR
557dnl libstdc++/16612 for details).
558dnl
559dnl --enable-fully-dynamic-string defines _GLIBCXX_FULLY_DYNAMIC_STRING
560dnl --disable-fully-dynamic-string leaves _GLIBCXX_FULLY_DYNAMIC_STRING undefined
561dnl  +  Usage:  GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING[(DEFAULT)]
562dnl       Where DEFAULT is either `yes' or `no'.
563dnl
564AC_DEFUN([GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING], [
565  GLIBCXX_ENABLE(fully-dynamic-string,$1,,[do not put empty strings in per-process static memory])
566  if test $enable_fully_dynamic_string = yes; then
567    AC_DEFINE(_GLIBCXX_FULLY_DYNAMIC_STRING, 1,
568              [Define if a fully dynamic basic_string is wanted.])
569  fi
570])
571
572
573dnl
574dnl Does any necessary configuration of the testsuite directory.  Generates
575dnl the testsuite_hooks.h header.
576dnl
577dnl GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE must be done before this.
578dnl
579dnl Sets:
580dnl  enable_abi_check 
581dnl  GLIBCXX_TEST_WCHAR_T
582dnl  GLIBCXX_TEST_THREAD
583dnl Substs:
584dnl  baseline_dir
585dnl
586AC_DEFUN([GLIBCXX_CONFIGURE_TESTSUITE], [
587  if $GLIBCXX_IS_NATIVE ; then
588    # Do checks for resource limit functions.
589    GLIBCXX_CHECK_SETRLIMIT
590
591    # Look for setenv, so that extended locale tests can be performed.
592    GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3(setenv)
593  fi
594
595  if $GLIBCXX_IS_NATIVE && test $is_hosted = yes &&
596     test $enable_symvers != no; then
597    case "$host" in
598      *-*-cygwin*)
599        enable_abi_check=no ;;
600      *)
601        enable_abi_check=yes ;;
602    esac
603  else
604    # Only build this as native, since automake does not understand
605    # CXX_FOR_BUILD.
606    enable_abi_check=no
607  fi
608  
609  # Export file names for ABI checking.
610  baseline_dir="$glibcxx_srcdir/config/abi/post/${abi_baseline_pair}\$(MULTISUBDIR)"
611  AC_SUBST(baseline_dir)
612])
613
614
615dnl
616dnl Set up *_INCLUDES variables for all sundry Makefile.am's.
617dnl
618dnl Substs:
619dnl  GLIBCXX_INCLUDES
620dnl  TOPLEVEL_INCLUDES
621dnl
622AC_DEFUN([GLIBCXX_EXPORT_INCLUDES], [
623  # Used for every C++ compile we perform.
624  GLIBCXX_INCLUDES="\
625-I$glibcxx_builddir/include/$host_alias \
626-I$glibcxx_builddir/include \
627-I$glibcxx_srcdir/libsupc++"
628
629  # For Canadian crosses, pick this up too.
630  if test $CANADIAN = yes; then
631    GLIBCXX_INCLUDES="$GLIBCXX_INCLUDES -I\${includedir}"
632  fi
633
634  # Stuff in the actual top level.  Currently only used by libsupc++ to
635  # get unwind* headers from the gcc dir.
636  #TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/gcc -I$(toplevel_srcdir)/include'
637  TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/gcc'
638
639  # Now, export this to all the little Makefiles....
640  AC_SUBST(GLIBCXX_INCLUDES)
641  AC_SUBST(TOPLEVEL_INCLUDES)
642])
643
644
645dnl
646dnl Set up *_FLAGS and *FLAGS variables for all sundry Makefile.am's.
647dnl (SECTION_FLAGS is done under CHECK_COMPILER_FEATURES.)
648dnl
649dnl Substs:
650dnl  OPTIMIZE_CXXFLAGS
651dnl  WARN_FLAGS
652dnl
653AC_DEFUN([GLIBCXX_EXPORT_FLAGS], [
654  # Optimization flags that are probably a good idea for thrill-seekers. Just
655  # uncomment the lines below and make, everything else is ready to go...
656  # OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc
657  OPTIMIZE_CXXFLAGS=
658  AC_SUBST(OPTIMIZE_CXXFLAGS)
659
660  WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual'
661  AC_SUBST(WARN_FLAGS)
662])
663
664
665dnl
666dnl All installation directory information is determined here.
667dnl
668dnl Substs:
669dnl  gxx_install_dir
670dnl  glibcxx_prefixdir
671dnl  glibcxx_toolexecdir
672dnl  glibcxx_toolexeclibdir
673dnl
674dnl Assumes cross_compiling bits already done, and with_cross_host in
675dnl particular.
676dnl
677dnl This logic must match gcc/configure.ac's setting of gcc_gxx_include_dir.
678dnl config/gxx-include-dir.m4 must be kept consistant with this as well.
679AC_DEFUN([GLIBCXX_EXPORT_INSTALL_INFO], [
680  glibcxx_toolexecdir=no
681  glibcxx_toolexeclibdir=no
682  glibcxx_prefixdir=$prefix
683
684  AC_MSG_CHECKING([for gxx-include-dir])
685  AC_ARG_WITH([gxx-include-dir],
686    AC_HELP_STRING([--with-gxx-include-dir=DIR],
687                   [installation directory for include files]),
688    [case "$withval" in
689      yes) AC_MSG_ERROR([Missing directory for --with-gxx-include-dir]) ;;
690      no)  gxx_include_dir=no ;;
691      *)   gxx_include_dir=$withval ;;
692     esac],
693    [gxx_include_dir=no])
694  AC_MSG_RESULT($gxx_include_dir)
695
696  AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
697  AC_ARG_ENABLE([version-specific-runtime-libs],
698    AC_HELP_STRING([--enable-version-specific-runtime-libs],
699                   [Specify that runtime libraries should be installed in a compiler-specific directory]),
700    [case "$enableval" in
701      yes) version_specific_libs=yes ;;
702      no)  version_specific_libs=no ;;
703      *)   AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);;
704     esac],
705    [version_specific_libs=no])
706  AC_MSG_RESULT($version_specific_libs)
707
708  # Default case for install directory for include files.
709  if test $version_specific_libs = no && test $gxx_include_dir = no; then
710    gxx_include_dir='include/c++/${gcc_version}'
711    if test -n "$with_cross_host" && 
712       test x"$with_cross_host" != x"no"; then	
713      gxx_include_dir='${prefix}/${target_alias}/'"$gxx_include_dir"
714    else
715      gxx_include_dir='${prefix}/'"$gxx_include_dir"
716    fi
717  fi
718
719  # Version-specific runtime libs processing.
720  if test $version_specific_libs = yes; then
721    # Need the gcc compiler version to know where to install libraries
722    # and header files if --enable-version-specific-runtime-libs option
723    # is selected.  FIXME: these variables are misnamed, there are
724    # no executables installed in _toolexecdir or _toolexeclibdir.
725    if test x"$gxx_include_dir" = x"no"; then
726      gxx_include_dir='${libdir}/gcc/${host_alias}/${gcc_version}/include/c++'
727    fi
728    glibcxx_toolexecdir='${libdir}/gcc/${host_alias}'
729    glibcxx_toolexeclibdir='${toolexecdir}/${gcc_version}$(MULTISUBDIR)'
730  fi
731
732  # Calculate glibcxx_toolexecdir, glibcxx_toolexeclibdir
733  # Install a library built with a cross compiler in tooldir, not libdir.
734  if test x"$glibcxx_toolexecdir" = x"no"; then
735    if test -n "$with_cross_host" &&
736       test x"$with_cross_host" != x"no"; then
737      glibcxx_toolexecdir='${exec_prefix}/${host_alias}'
738      glibcxx_toolexeclibdir='${toolexecdir}/lib'
739    else
740      glibcxx_toolexecdir='${libdir}/gcc/${host_alias}'
741      glibcxx_toolexeclibdir='${libdir}'
742    fi
743    multi_os_directory=`$CXX -print-multi-os-directory`
744    case $multi_os_directory in
745      .) ;; # Avoid trailing /.
746      *) glibcxx_toolexeclibdir=$glibcxx_toolexeclibdir/$multi_os_directory ;;
747    esac
748  fi
749
750  AC_MSG_CHECKING([for install location])
751  AC_MSG_RESULT($gxx_include_dir)
752
753  AC_SUBST(glibcxx_prefixdir)
754  AC_SUBST(gxx_include_dir)
755  AC_SUBST(glibcxx_toolexecdir)
756  AC_SUBST(glibcxx_toolexeclibdir)
757])
758
759
760dnl
761dnl GLIBCXX_ENABLE
762dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING)
763dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, permit a|b|c)
764dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, SHELL-CODE-HANDLER)
765dnl
766dnl See docs/html/17_intro/configury.html#enable for documentation.
767dnl
768m4_define([GLIBCXX_ENABLE],[dnl
769m4_define([_g_switch],[--enable-$1])dnl
770m4_define([_g_help],[AC_HELP_STRING(_g_switch$3,[$4 @<:@default=$2@:>@])])dnl
771 AC_ARG_ENABLE($1,_g_help,
772  m4_bmatch([$5],
773   [^permit ],
774     [[
775      case "$enableval" in
776       m4_bpatsubst([$5],[permit ])) ;;
777       *) AC_MSG_ERROR(Unknown argument to enable/disable $1) ;;
778          dnl Idea for future:  generate a URL pointing to
779          dnl "onlinedocs/configopts.html#whatever"
780      esac
781     ]],
782   [^$],
783     [[
784      case "$enableval" in
785       yes|no) ;;
786       *) AC_MSG_ERROR(Argument to enable/disable $1 must be yes or no) ;;
787      esac
788     ]],
789   [[$5]]),
790  [enable_]m4_bpatsubst([$1],-,_)[=][$2])
791m4_undefine([_g_switch])dnl
792m4_undefine([_g_help])dnl
793])
794
795
796dnl
797dnl Check for ISO/IEC 9899:1999 "C99" support.
798dnl
799dnl --enable-c99 defines _GLIBCXX_USE_C99
800dnl --disable-c99 leaves _GLIBCXX_USE_C99 undefined
801dnl  +  Usage:  GLIBCXX_ENABLE_C99[(DEFAULT)]
802dnl       Where DEFAULT is either `yes' or `no'.
803dnl  +  If 'C99' stuff is not available, ignores DEFAULT and sets `no'.
804dnl
805AC_DEFUN([GLIBCXX_ENABLE_C99], [
806  GLIBCXX_ENABLE(c99,$1,,[turns on ISO/IEC 9899:1999 support])
807
808  if test x"$enable_c99" = x"yes"; then
809
810  AC_LANG_SAVE
811  AC_LANG_CPLUSPLUS
812
813  # Check for the existence of <math.h> functions used if C99 is enabled.
814  AC_MSG_CHECKING([for ISO C99 support in <math.h>])
815  AC_CACHE_VAL(ac_c99_math, [
816  AC_TRY_COMPILE([#include <math.h>],
817	         [fpclassify(0.0);
818	          isfinite(0.0); 
819		  isinf(0.0);
820	          isnan(0.0);
821		  isnormal(0.0);
822	  	  signbit(0.0);
823	 	  isgreater(0.0,0.0);
824		  isgreaterequal(0.0,0.0);
825		  isless(0.0,0.0);
826		  islessequal(0.0,0.0);
827		  islessgreater(0.0,0.0);
828		  islessgreater(0.0,0.0);
829		  isunordered(0.0,0.0);
830		 ],[ac_c99_math=yes], [ac_c99_math=no])
831  ])
832  AC_MSG_RESULT($ac_c99_math)
833  if test x"$ac_c99_math" = x"yes"; then
834    AC_DEFINE(_GLIBCXX_USE_C99_MATH, 1,
835              [Define if C99 functions or macros in <math.h> should be imported
836              in <cmath> in namespace std.])
837  fi
838
839  # Check for the existence of <complex.h> complex math functions.
840  # This is necessary even though libstdc++ uses the builtin versions
841  # of these functions, because if the builtin cannot be used, a reference
842  # to the library function is emitted.
843  AC_CHECK_HEADERS(complex.h, ac_has_complex_h=yes, ac_has_complex_h=no)
844  ac_c99_complex=no;
845  if test x"$ac_has_complex_h" = x"yes"; then
846    AC_MSG_CHECKING([for ISO C99 support in <complex.h>])
847    AC_TRY_COMPILE([#include <complex.h>],
848	           [typedef __complex__ float float_type; float_type tmpf;
849	            cabsf(tmpf);
850		    cargf(tmpf);
851		    ccosf(tmpf);
852  		    ccoshf(tmpf);
853		    cexpf(tmpf);
854	            clogf(tmpf);
855		    csinf(tmpf);
856		    csinhf(tmpf);
857		    csqrtf(tmpf);
858		    ctanf(tmpf);
859		    ctanhf(tmpf);
860		    cpowf(tmpf, tmpf);
861		    typedef __complex__ double double_type; double_type tmpd;
862	            cabs(tmpd);
863		    carg(tmpd);
864		    ccos(tmpd);
865  		    ccosh(tmpd);
866		    cexp(tmpd);
867	            clog(tmpd);
868		    csin(tmpd);
869		    csinh(tmpd);
870		    csqrt(tmpd);
871		    ctan(tmpd);
872		    ctanh(tmpd);
873		    cpow(tmpd, tmpd);
874		    typedef __complex__ long double ld_type; ld_type tmpld;
875	            cabsl(tmpld);
876		    cargl(tmpld);
877		    ccosl(tmpld);
878  		    ccoshl(tmpld);
879		    cexpl(tmpld);
880	            clogl(tmpld);
881		    csinl(tmpld);
882		    csinhl(tmpld);
883		    csqrtl(tmpld);
884		    ctanl(tmpld);
885		    ctanhl(tmpld);
886		    cpowl(tmpld, tmpld);
887		   ],[ac_c99_complex=yes], [ac_c99_complex=no])
888  fi
889  AC_MSG_RESULT($ac_c99_complex)
890  if test x"$ac_c99_complex" = x"yes"; then
891    AC_DEFINE(_GLIBCXX_USE_C99_COMPLEX, 1,
892              [Define if C99 functions in <complex.h> should be used in
893              <complex>. Using compiler builtins for these functions requires
894              corresponding C99 library functions to be present.])
895  fi
896
897  # Check for the existence in <stdio.h> of vscanf, et. al.
898  AC_MSG_CHECKING([for ISO C99 support in <stdio.h>])
899  AC_CACHE_VAL(ac_c99_stdio, [
900  AC_TRY_COMPILE([#include <stdio.h>
901		  #include <stdarg.h>
902                  void foo(char* fmt, ...)
903                  {
904	            va_list args; va_start(args, fmt);
905                    vfscanf(stderr, "%i", args); 
906		    vscanf("%i", args);
907                    vsnprintf(fmt, 0, "%i", args);
908                    vsscanf(fmt, "%i", args);
909		  }],
910                 [snprintf("12", 0, "%i");],
911		 [ac_c99_stdio=yes], [ac_c99_stdio=no])
912  ])
913  AC_MSG_RESULT($ac_c99_stdio)
914
915  # Check for the existence in <stdlib.h> of lldiv_t, et. al.
916  AC_MSG_CHECKING([for ISO C99 support in <stdlib.h>])
917  AC_CACHE_VAL(ac_c99_stdlib, [
918  AC_TRY_COMPILE([#include <stdlib.h>],
919                 [char* tmp;
920	    	  strtof("gnu", &tmp);
921		  strtold("gnu", &tmp);
922	          strtoll("gnu", &tmp, 10);
923	          strtoull("gnu", &tmp, 10);
924	          llabs(10);
925		  lldiv(10,1);
926		  atoll("10");
927		  _Exit(0);
928		  lldiv_t mydivt;],[ac_c99_stdlib=yes], [ac_c99_stdlib=no])
929  ])
930  AC_MSG_RESULT($ac_c99_stdlib)
931
932  # Check for the existence in <wchar.h> of wcstold, etc.
933  ac_c99_wchar=no;
934  if test x"$ac_has_wchar_h" = xyes &&
935     test x"$ac_has_wctype_h" = xyes; then
936    AC_MSG_CHECKING([for ISO C99 support in <wchar.h>])	
937    AC_TRY_COMPILE([#include <wchar.h>
938                    namespace test
939                    {
940		      using ::wcstold;
941		      using ::wcstoll;
942		      using ::wcstoull;
943		    }
944		   ],[],[ac_c99_wchar=yes], [ac_c99_wchar=no])
945
946    # Checks for wide character functions that may not be present.
947    # Injection of these is wrapped with guard macros.
948    # NB: only put functions here, instead of immediately above, if
949    # absolutely necessary.
950    AC_TRY_COMPILE([#include <wchar.h>
951                    namespace test { using ::vfwscanf; } ], [],
952 	    	   [AC_DEFINE(HAVE_VFWSCANF,1,
953			[Defined if vfwscanf exists.])],[])
954
955    AC_TRY_COMPILE([#include <wchar.h>
956                    namespace test { using ::vswscanf; } ], [],
957 	    	   [AC_DEFINE(HAVE_VSWSCANF,1,
958			[Defined if vswscanf exists.])],[])
959
960    AC_TRY_COMPILE([#include <wchar.h>
961                    namespace test { using ::vwscanf; } ], [],
962 	    	   [AC_DEFINE(HAVE_VWSCANF,1,[Defined if vwscanf exists.])],[])
963
964    AC_TRY_COMPILE([#include <wchar.h>
965                    namespace test { using ::wcstof; } ], [],
966 	    	   [AC_DEFINE(HAVE_WCSTOF,1,[Defined if wcstof exists.])],[])
967
968    AC_TRY_COMPILE([#include <wctype.h>],
969                   [ wint_t t; int i = iswblank(t);], 
970 	    	   [AC_DEFINE(HAVE_ISWBLANK,1,
971			[Defined if iswblank exists.])],[])
972
973    AC_MSG_RESULT($ac_c99_wchar)
974  fi
975
976  # Option parsed, now set things appropriately.
977  if test x"$ac_c99_math" = x"no" ||
978     test x"$ac_c99_complex" = x"no" ||
979     test x"$ac_c99_stdio" = x"no" ||
980     test x"$ac_c99_stdlib" = x"no" ||
981     test x"$ac_c99_wchar" = x"no"; then
982    enable_c99=no;
983  else
984    AC_DEFINE(_GLIBCXX_USE_C99, 1,
985    [Define if C99 functions or macros from <wchar.h>, <math.h>,
986    <complex.h>, <stdio.h>, and <stdlib.h> can be used or exposed.])
987  fi
988
989  AC_LANG_RESTORE
990  fi	
991
992  AC_MSG_CHECKING([for fully enabled ISO C99 support])
993  AC_MSG_RESULT($enable_c99)
994])
995
996
997dnl
998dnl Check for ISO/IEC 9899:1999 "C99" support to ISO/IEC DTR 19768 "TR1"
999dnl facilities in Chapter 8, "C compatibility".
1000dnl
1001AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [
1002
1003  AC_LANG_SAVE
1004  AC_LANG_CPLUSPLUS
1005
1006  # Check for the existence of <complex.h> complex math functions used
1007  # by tr1/complex.
1008  AC_CHECK_HEADERS(complex.h, ac_has_complex_h=yes, ac_has_complex_h=no)
1009  ac_c99_complex_tr1=no;
1010  if test x"$ac_has_complex_h" = x"yes"; then
1011    AC_MSG_CHECKING([for ISO C99 support to TR1 in <complex.h>])
1012    AC_TRY_COMPILE([#include <complex.h>],
1013	           [typedef __complex__ float float_type; float_type tmpf;
1014	            cacosf(tmpf);
1015	            casinf(tmpf);
1016	            catanf(tmpf);
1017	            cacoshf(tmpf);
1018	            casinhf(tmpf);
1019	            catanhf(tmpf);
1020		    typedef __complex__ double double_type; double_type tmpd;
1021	            cacos(tmpd);
1022	            casin(tmpd);
1023	            catan(tmpd);
1024	            cacosh(tmpd);
1025	            casinh(tmpd);
1026	            catanh(tmpd);
1027		    typedef __complex__ long double ld_type; ld_type tmpld;
1028	            cacosl(tmpld);
1029	            casinl(tmpld);
1030	            catanl(tmpld);
1031	            cacoshl(tmpld);
1032	            casinhl(tmpld);
1033	            catanhl(tmpld);
1034		   ],[ac_c99_complex_tr1=yes], [ac_c99_complex_tr1=no])
1035  fi
1036  AC_MSG_RESULT($ac_c99_complex_tr1)
1037  if test x"$ac_c99_complex_tr1" = x"yes"; then
1038    AC_DEFINE(_GLIBCXX_USE_C99_COMPLEX_TR1, 1,
1039              [Define if C99 functions in <complex.h> should be used in
1040              <tr1/complex>. Using compiler builtins for these functions
1041	      requires corresponding C99 library functions to be present.])
1042  fi
1043
1044  # Check for the existence of <ctype.h> functions.
1045  AC_MSG_CHECKING([for ISO C99 support to TR1 in <ctype.h>])
1046  AC_CACHE_VAL(ac_c99_ctype_tr1, [
1047  AC_TRY_COMPILE([#include <ctype.h>],
1048	         [int ch;
1049	          int ret;
1050	          ret = isblank(ch);
1051		 ],[ac_c99_ctype_tr1=yes], [ac_c99_ctype_tr1=no])
1052  ])
1053  AC_MSG_RESULT($ac_c99_ctype_tr1)
1054  if test x"$ac_c99_ctype_tr1" = x"yes"; then
1055    AC_DEFINE(_GLIBCXX_USE_C99_CTYPE_TR1, 1,
1056              [Define if C99 functions in <ctype.h> should be imported in
1057	      <tr1/cctype> in namespace std::tr1.])
1058  fi
1059
1060  # Check for the existence of <fenv.h> functions.
1061  AC_CHECK_HEADERS(fenv.h, ac_has_fenv_h=yes, ac_has_fenv_h=no)
1062  ac_c99_fenv_tr1=no;
1063  if test x"$ac_has_fenv_h" = x"yes"; then
1064    AC_MSG_CHECKING([for ISO C99 support to TR1 in <fenv.h>])
1065    AC_TRY_COMPILE([#include <fenv.h>],
1066	           [int except, mode;
1067	            fexcept_t* pflag;
1068                    fenv_t* penv;
1069	            int ret;
1070	            ret = feclearexcept(except);
1071	            ret = fegetexceptflag(pflag, except);
1072	            ret = feraiseexcept(except);
1073	            ret = fesetexceptflag(pflag, except);
1074	            ret = fetestexcept(except);
1075	            ret = fegetround();
1076	            ret = fesetround(mode);
1077	            ret = fegetenv(penv);
1078	            ret = feholdexcept(penv);
1079	            ret = fesetenv(penv);
1080	            ret = feupdateenv(penv);
1081		   ],[ac_c99_fenv_tr1=yes], [ac_c99_fenv_tr1=no])
1082  fi
1083  AC_MSG_RESULT($ac_c99_fenv_tr1)
1084  if test x"$ac_c99_fenv_tr1" = x"yes"; then
1085    AC_DEFINE(_GLIBCXX_USE_C99_FENV_TR1, 1,
1086              [Define if C99 functions in <fenv.h> should be imported in
1087	      <tr1/cfenv> in namespace std::tr1.])
1088  fi
1089
1090  # Check for the existence of <stdint.h> types.
1091  AC_MSG_CHECKING([for ISO C99 support to TR1 in <stdint.h>])
1092  AC_CACHE_VAL(ac_c99_stdint_tr1, [
1093  AC_TRY_COMPILE([#include <stdint.h>],
1094	         [typedef int8_t          my_int8_t;
1095	          typedef int16_t         my_int16_t;
1096	          typedef int32_t         my_int32_t;
1097	          typedef int64_t         my_int64_t;
1098	          typedef int_fast8_t     my_int_fast8_t;
1099	          typedef int_fast16_t    my_int_fast16_t;
1100	          typedef int_fast32_t    my_int_fast32_t;
1101	          typedef int_fast64_t    my_int_fast64_t;	
1102	          typedef int_least8_t    my_int_least8_t;
1103	          typedef int_least16_t   my_int_least16_t;
1104	          typedef int_least32_t   my_int_least32_t;
1105	          typedef int_least64_t   my_int_least64_t;
1106		  typedef intmax_t        my_intmax_t;
1107		  typedef intptr_t        my_intptr_t;
1108	          typedef uint8_t         my_uint8_t;
1109	          typedef uint16_t        my_uint16_t;
1110	          typedef uint32_t        my_uint32_t;
1111	          typedef uint64_t        my_uint64_t;
1112	          typedef uint_fast8_t    my_uint_fast8_t;
1113	          typedef uint_fast16_t   my_uint_fast16_t;
1114	          typedef uint_fast32_t   my_uint_fast32_t;
1115	          typedef uint_fast64_t   my_uint_fast64_t;	
1116	          typedef uint_least8_t   my_uint_least8_t;
1117	          typedef uint_least16_t  my_uint_least16_t;
1118	          typedef uint_least32_t  my_uint_least32_t;
1119	          typedef uint_least64_t  my_uint_least64_t;
1120		  typedef uintmax_t       my_uintmax_t;
1121		  typedef uintptr_t       my_uintptr_t;
1122		 ],[ac_c99_stdint_tr1=yes], [ac_c99_stdint_tr1=no])
1123  ])
1124  AC_MSG_RESULT($ac_c99_stdint_tr1)
1125  if test x"$ac_c99_stdint_tr1" = x"yes"; then
1126    AC_DEFINE(_GLIBCXX_USE_C99_STDINT_TR1, 1,
1127              [Define if C99 types in <stdint.h> should be imported in
1128	      <tr1/cstdint> in namespace std::tr1.])
1129  fi
1130
1131  # Check for the existence of <math.h> functions.
1132  AC_MSG_CHECKING([for ISO C99 support to TR1 in <math.h>])
1133  AC_CACHE_VAL(ac_c99_math_tr1, [
1134  AC_TRY_COMPILE([#include <math.h>],
1135	         [typedef double_t  my_double_t;
1136	          typedef float_t   my_float_t;
1137	          acosh(0.0);
1138	          acoshf(0.0f);
1139	          acoshl(0.0l);
1140	          asinh(0.0);
1141	          asinhf(0.0f);
1142	          asinhl(0.0l);
1143	          atanh(0.0);
1144	          atanhf(0.0f);
1145	          atanhl(0.0l);
1146	          cbrt(0.0);
1147	          cbrtf(0.0f);
1148	          cbrtl(0.0l);
1149	          copysign(0.0, 0.0);
1150	          copysignf(0.0f, 0.0f);
1151	          copysignl(0.0l, 0.0l);
1152	          erf(0.0);
1153	          erff(0.0f);
1154	          erfl(0.0l);
1155	          erfc(0.0);
1156	          erfcf(0.0f);
1157	          erfcl(0.0l);
1158	          exp2(0.0);
1159	          exp2f(0.0f);
1160	          exp2l(0.0l);
1161	          expm1(0.0);
1162	          expm1f(0.0f);
1163	          expm1l(0.0l);
1164	          fdim(0.0, 0.0);
1165	          fdimf(0.0f, 0.0f);
1166	          fdiml(0.0l, 0.0l);
1167	          fma(0.0, 0.0, 0.0);
1168	          fmaf(0.0f, 0.0f, 0.0f);
1169	          fmal(0.0l, 0.0l, 0.0l);
1170	          fmax(0.0, 0.0);
1171	          fmaxf(0.0f, 0.0f);
1172	          fmaxl(0.0l, 0.0l);
1173	          fmin(0.0, 0.0);
1174	          fminf(0.0f, 0.0f);
1175	          fminl(0.0l, 0.0l);
1176	          hypot(0.0, 0.0);
1177	          hypotf(0.0f, 0.0f);
1178	          hypotl(0.0l, 0.0l);
1179	          ilogb(0.0);
1180	          ilogbf(0.0f);
1181	          ilogbl(0.0l);
1182	          lgamma(0.0);
1183	          lgammaf(0.0f);
1184	          lgammal(0.0l);
1185	          llrint(0.0);
1186	          llrintf(0.0f);
1187	          llrintl(0.0l);
1188	          llround(0.0);
1189	          llroundf(0.0f);
1190	          llroundl(0.0l);
1191	          log1p(0.0);
1192	          log1pf(0.0f);
1193	          log1pl(0.0l);
1194	          log2(0.0);
1195	          log2f(0.0f);
1196	          log2l(0.0l);
1197	          logb(0.0);
1198	          logbf(0.0f);
1199	          logbl(0.0l);
1200	          lrint(0.0);
1201	          lrintf(0.0f);
1202	          lrintl(0.0l);
1203	          lround(0.0);
1204	          lroundf(0.0f);
1205	          lroundl(0.0l);
1206	          nan(0);
1207	          nanf(0);
1208	          nanl(0);
1209	          nearbyint(0.0);
1210	          nearbyintf(0.0f);
1211	          nearbyintl(0.0l);
1212	          nextafter(0.0, 0.0);
1213	          nextafterf(0.0f, 0.0f);
1214	          nextafterl(0.0l, 0.0l);
1215	          nexttoward(0.0, 0.0);
1216	          nexttowardf(0.0f, 0.0f);
1217	          nexttowardl(0.0l, 0.0l);
1218	          remainder(0.0, 0.0);
1219	          remainderf(0.0f, 0.0f);
1220	          remainderl(0.0l, 0.0l);
1221	          remquo(0.0, 0.0, 0);
1222	          remquo(0.0f, 0.0f, 0);
1223	          remquo(0.0l, 0.0l, 0);
1224	          rint(0.0);
1225	          rintf(0.0f);
1226	          rintl(0.0l);
1227	          round(0.0);
1228	          roundf(0.0f);
1229	          roundl(0.0l);
1230	          scalbln(0.0, 0l);
1231	          scalblnf(0.0f, 0l);
1232	          scalblnl(0.0l, 0l);
1233	          scalbn(0.0, 0);
1234	          scalbnf(0.0f, 0);
1235	          scalbnl(0.0l, 0);
1236	          tgamma(0.0);
1237	          tgammaf(0.0f);
1238	          tgammal(0.0l);
1239	          trunc(0.0);
1240	          truncf(0.0f);
1241	          truncl(0.0l);
1242		 ],[ac_c99_math_tr1=yes], [ac_c99_math_tr1=no])
1243  ])
1244  AC_MSG_RESULT($ac_c99_math_tr1)
1245  if test x"$ac_c99_math_tr1" = x"yes"; then
1246    AC_DEFINE(_GLIBCXX_USE_C99_MATH_TR1, 1,
1247              [Define if C99 functions or macros in <math.h> should be imported
1248              in <tr1/cmath> in namespace std::tr1.])
1249  fi
1250
1251  # Check for the existence of <inttypes.h> functions (NB: doesn't make
1252  # sense if the previous check fails, per C99, 7.8/1).
1253  ac_c99_inttypes_tr1=no;
1254  if test x"$ac_c99_stdint_tr1" = x"yes"; then
1255    AC_MSG_CHECKING([for ISO C99 support to TR1 in <inttypes.h>])
1256    AC_TRY_COMPILE([#include <inttypes.h>],
1257	           [intmax_t i, numer, denom, base;
1258	            const char* s;
1259	            char** endptr;
1260	            intmax_t ret = imaxabs(i);
1261	            imaxdiv_t dret = imaxdiv(numer, denom);
1262	            ret = strtoimax(s, endptr, base);
1263	            uintmax_t uret = strtoumax(s, endptr, base);
1264        	   ],[ac_c99_inttypes_tr1=yes], [ac_c99_inttypes_tr1=no])
1265  fi
1266  AC_MSG_RESULT($ac_c99_inttypes_tr1)
1267  if test x"$ac_c99_inttypes_tr1" = x"yes"; then
1268    AC_DEFINE(_GLIBCXX_USE_C99_INTTYPES_TR1, 1,
1269              [Define if C99 functions in <inttypes.h> should be imported in
1270              <tr1/cinttypes> in namespace std::tr1.])
1271  fi
1272
1273  # Check for the existence of the <stdbool.h> header.	
1274  AC_CHECK_HEADERS(stdbool.h)
1275
1276  AC_LANG_RESTORE
1277])
1278
1279dnl
1280dnl Check whether "dev/random" and "dev/urandom" are available for the
1281dnl random_device of "TR1" (Chapter 5.1, "Random number generation").
1282dnl
1283AC_DEFUN([GLIBCXX_CHECK_RANDOM_TR1], [
1284
1285  AC_MSG_CHECKING([for "dev/random" and "dev/urandom" for TR1 random_device])
1286  AC_CACHE_VAL(ac_random_tr1, [
1287  AC_TRY_RUN([#include <stdio.h>
1288	      int main()
1289	      {
1290                return !(fopen("/dev/random", "r")
1291                         && fopen("/dev/urandom", "r"));
1292	      }	      
1293	     ],
1294             [ac_random_tr1=yes], [ac_random_tr1=no],
1295	     [ac_random_tr1=no])
1296  ])
1297  AC_MSG_RESULT($ac_random_tr1)
1298  if test x"$ac_random_tr1" = x"yes"; then
1299    AC_DEFINE(_GLIBCXX_USE_RANDOM_TR1, 1,
1300              [Define if dev/random and dev/urandom are available for
1301	       the random_device of TR1 (Chapter 5.1).])
1302  fi
1303
1304])
1305
1306dnl
1307dnl Check for what type of C headers to use.
1308dnl
1309dnl --enable-cheaders= [does stuff].
1310dnl --disable-cheaders [does not do anything, really].
1311dnl  +  Usage:  GLIBCXX_ENABLE_CHEADERS[(DEFAULT)]
1312dnl       Where DEFAULT is either `c' or `c_std'.
1313dnl
1314AC_DEFUN([GLIBCXX_ENABLE_CHEADERS], [
1315  GLIBCXX_ENABLE(cheaders,$1,[=KIND],
1316    [construct "C" headers for g++], [permit c|c_std])
1317  AC_MSG_NOTICE("C" header strategy set to $enable_cheaders)
1318
1319  C_INCLUDE_DIR='${glibcxx_srcdir}/include/'$enable_cheaders
1320
1321  AC_SUBST(C_INCLUDE_DIR)
1322  GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C, test $enable_cheaders = c)
1323  GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C_STD, test $enable_cheaders = c_std)
1324  GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_COMPATIBILITY, test $c_compatibility = yes)
1325])
1326
1327
1328dnl
1329dnl Check for which locale library to use.  The choice is mapped to
1330dnl a subdirectory of config/locale.
1331dnl
1332dnl Default is generic.
1333dnl
1334AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
1335  GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@],
1336    [use MODEL for target locale package],
1337    [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
1338
1339  # Deal with gettext issues.  Default to not using it (=no) until we detect
1340  # support for it later.  Let the user turn it off via --e/d, but let that
1341  # default to on for easier handling.
1342  USE_NLS=no
1343  AC_ARG_ENABLE(nls,
1344    AC_HELP_STRING([--enable-nls],[use Native Language Support (default)]),
1345    [],
1346    [enable_nls=yes])
1347  
1348  # Either a known packaage, or "auto"
1349  if test $enable_clocale = no || test $enable_clocale = yes; then
1350     enable_clocale=auto
1351  fi
1352  enable_clocale_flag=$enable_clocale
1353
1354  # Probe for locale model to use if none specified.
1355  # Default to "generic".
1356  if test $enable_clocale_flag = auto; then
1357    case ${target_os} in
1358      linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
1359        enable_clocale_flag=gnu	
1360        ;;
1361      darwin* | freebsd*)
1362        enable_clocale_flag=darwin
1363	;;
1364      *)
1365        enable_clocale_flag=generic
1366        ;;
1367    esac
1368  fi
1369
1370  # Sanity check model, and test for special functionality.
1371  if test $enable_clocale_flag = gnu; then
1372    AC_EGREP_CPP([_GLIBCXX_ok], [
1373    #include <features.h>
1374    #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
1375      _GLIBCXX_ok
1376    #endif
1377    ], enable_clocale_flag=gnu, enable_clocale_flag=generic)
1378
1379    if test $enable_clocale = auto; then
1380      # Test for bugs early in glibc-2.2.x series
1381      AC_TRY_RUN([
1382      #define _GNU_SOURCE 1
1383      #include <locale.h>
1384      #include <string.h>
1385      #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
1386      extern __typeof(newlocale) __newlocale;
1387      extern __typeof(duplocale) __duplocale;
1388      extern __typeof(strcoll_l) __strcoll_l;
1389      #endif
1390      int main()
1391      {
1392	const char __one[] = "�uglein Augmen";
1393        const char __two[] = "�uglein";
1394       	int i;
1395        int j;
1396        __locale_t        loc;
1397        __locale_t        loc_dup;
1398        loc = __newlocale(1 << LC_ALL, "de_DE", 0);
1399        loc_dup = __duplocale(loc);
1400        i = __strcoll_l(__one, __two, loc);
1401        j = __strcoll_l(__one, __two, loc_dup);
1402        return 0;
1403      }
1404      ],
1405      [enable_clocale_flag=gnu],[enable_clocale_flag=generic],
1406      [enable_clocale_flag=generic])
1407    fi
1408
1409    # Set it to scream when it hurts.
1410    ac_save_CFLAGS="$CFLAGS"	
1411    CFLAGS="-Wimplicit-function-declaration -Werror"
1412
1413    # Use strxfrm_l if available.
1414    AC_TRY_COMPILE([#define _GNU_SOURCE 1
1415     		    #include <string.h>
1416		    #include <locale.h>],
1417	            [char s[128]; __locale_t loc; strxfrm_l(s, "C", 5, loc);], 
1418                    AC_DEFINE(HAVE_STRXFRM_L, 1, 
1419                    [Define if strxfrm_l is available in <string.h>.]),)
1420    
1421    # Use strerror_l if available.
1422    AC_TRY_COMPILE([#define _GNU_SOURCE 1
1423		    #include <string.h>
1424		    #include <locale.h>],
1425	            [__locale_t loc; strerror_l(5, loc);], 
1426                    AC_DEFINE(HAVE_STRERROR_L, 1, 
1427                    [Define if strerror_l is available in <string.h>.]),)
1428
1429    CFLAGS="$ac_save_CFLAGS"
1430  fi
1431
1432  # Perhaps use strerror_r if available, and strerror_l isn't.
1433  ac_save_CFLAGS="$CFLAGS"	
1434  CFLAGS="-Wimplicit-function-declaration -Werror"
1435  AC_TRY_COMPILE([#define _GNU_SOURCE 1
1436	     	  #include <string.h>
1437		  #include <locale.h>],
1438	          [char s[128]; strerror_r(5, s, 128);], 
1439                  AC_DEFINE(HAVE_STRERROR_R, 1, 
1440                  [Define if strerror_r is available in <string.h>.]),)
1441  CFLAGS="$ac_save_CFLAGS"
1442
1443  # Set configure bits for specified locale package
1444  AC_MSG_CHECKING([for C locale to use])
1445  case ${enable_clocale_flag} in
1446    generic)
1447      AC_MSG_RESULT(generic)
1448
1449      CLOCALE_H=config/locale/generic/c_locale.h
1450      CLOCALE_CC=config/locale/generic/c_locale.cc
1451      CCODECVT_CC=config/locale/generic/codecvt_members.cc
1452      CCOLLATE_CC=config/locale/generic/collate_members.cc
1453      CCTYPE_CC=config/locale/generic/ctype_members.cc
1454      CMESSAGES_H=config/locale/generic/messages_members.h
1455      CMESSAGES_CC=config/locale/generic/messages_members.cc
1456      CMONEY_CC=config/locale/generic/monetary_members.cc
1457      CNUMERIC_CC=config/locale/generic/numeric_members.cc
1458      CTIME_H=config/locale/generic/time_members.h
1459      CTIME_CC=config/locale/generic/time_members.cc
1460      CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
1461      ;;
1462    darwin)
1463      AC_MSG_RESULT(darwin or freebsd)
1464
1465      CLOCALE_H=config/locale/generic/c_locale.h
1466      CLOCALE_CC=config/locale/generic/c_locale.cc
1467      CCODECVT_CC=config/locale/generic/codecvt_members.cc
1468      CCOLLATE_CC=config/locale/generic/collate_members.cc
1469      CCTYPE_CC=config/locale/darwin/ctype_members.cc
1470      CMESSAGES_H=config/locale/generic/messages_members.h
1471      CMESSAGES_CC=config/locale/generic/messages_members.cc
1472      CMONEY_CC=config/locale/generic/monetary_members.cc
1473      CNUMERIC_CC=config/locale/generic/numeric_members.cc
1474      CTIME_H=config/locale/generic/time_members.h
1475      CTIME_CC=config/locale/generic/time_members.cc
1476      CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
1477      ;;
1478	
1479    gnu)
1480      AC_MSG_RESULT(gnu)
1481
1482      # Declare intention to use gettext, and add support for specific
1483      # languages.
1484      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
1485      ALL_LINGUAS="de fr"
1486
1487      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
1488      AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
1489      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
1490        USE_NLS=yes
1491      fi
1492      # Export the build objects.
1493      for ling in $ALL_LINGUAS; do \
1494        glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
1495        glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
1496      done
1497      AC_SUBST(glibcxx_MOFILES)
1498      AC_SUBST(glibcxx_POFILES)
1499
1500      CLOCALE_H=config/locale/gnu/c_locale.h
1501      CLOCALE_CC=config/locale/gnu/c_locale.cc
1502      CCODECVT_CC=config/locale/gnu/codecvt_members.cc
1503      CCOLLATE_CC=config/locale/gnu/collate_members.cc
1504      CCTYPE_CC=config/locale/gnu/ctype_members.cc
1505      CMESSAGES_H=config/locale/gnu/messages_members.h
1506      CMESSAGES_CC=config/locale/gnu/messages_members.cc
1507      CMONEY_CC=config/locale/gnu/monetary_members.cc
1508      CNUMERIC_CC=config/locale/gnu/numeric_members.cc
1509      CTIME_H=config/locale/gnu/time_members.h
1510      CTIME_CC=config/locale/gnu/time_members.cc
1511      CLOCALE_INTERNAL_H=config/locale/gnu/c++locale_internal.h
1512      ;;
1513    ieee_1003.1-2001)
1514      AC_MSG_RESULT(IEEE 1003.1)
1515
1516      CLOCALE_H=config/locale/ieee_1003.1-2001/c_locale.h
1517      CLOCALE_CC=config/locale/ieee_1003.1-2001/c_locale.cc
1518      CCODECVT_CC=config/locale/generic/codecvt_members.cc
1519      CCOLLATE_CC=config/locale/generic/collate_members.cc
1520      CCTYPE_CC=config/locale/generic/ctype_members.cc
1521      CMESSAGES_H=config/locale/ieee_1003.1-2001/messages_members.h
1522      CMESSAGES_CC=config/locale/ieee_1003.1-2001/messages_members.cc
1523      CMONEY_CC=config/locale/generic/monetary_members.cc
1524      CNUMERIC_CC=config/locale/generic/numeric_members.cc
1525      CTIME_H=config/locale/generic/time_members.h
1526      CTIME_CC=config/locale/generic/time_members.cc
1527      CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
1528      ;;
1529  esac
1530
1531  # This is where the testsuite looks for locale catalogs, using the
1532  # -DLOCALEDIR define during testsuite compilation.
1533  glibcxx_localedir=${glibcxx_builddir}/po/share/locale
1534  AC_SUBST(glibcxx_localedir)
1535
1536  # A standalone libintl (e.g., GNU libintl) may be in use.
1537  if test $USE_NLS = yes; then
1538    AC_CHECK_HEADERS([libintl.h], [], USE_NLS=no)
1539    AC_SEARCH_LIBS(gettext, intl, [], USE_NLS=no)
1540  fi
1541  if test $USE_NLS = yes; then
1542    AC_DEFINE(_GLIBCXX_USE_NLS, 1, 
1543              [Define if NLS translations are to be used.])
1544  fi
1545
1546  AC_SUBST(USE_NLS)
1547  AC_SUBST(CLOCALE_H)
1548  AC_SUBST(CMESSAGES_H)
1549  AC_SUBST(CCODECVT_CC)
1550  AC_SUBST(CCOLLATE_CC)
1551  AC_SUBST(CCTYPE_CC)
1552  AC_SUBST(CMESSAGES_CC)
1553  AC_SUBST(CMONEY_CC)
1554  AC_SUBST(CNUMERIC_CC)
1555  AC_SUBST(CTIME_H)
1556  AC_SUBST(CTIME_CC)
1557  AC_SUBST(CLOCALE_CC)
1558  AC_SUBST(CLOCALE_INTERNAL_H)
1559])
1560
1561
1562dnl
1563dnl Check for which std::allocator base class to use.  The choice is
1564dnl mapped from a subdirectory of include/ext.
1565dnl
1566dnl Default is new.
1567dnl
1568AC_DEFUN([GLIBCXX_ENABLE_ALLOCATOR], [
1569  AC_MSG_CHECKING([for std::allocator base class])
1570  GLIBCXX_ENABLE(libstdcxx-allocator,auto,[=KIND],
1571    [use KIND for target std::allocator base],
1572    [permit new|malloc|mt|bitmap|pool|yes|no|auto])
1573
1574  # If they didn't use this option switch, or if they specified --enable
1575  # with no specific model, we'll have to look for one.  If they
1576  # specified --disable (???), do likewise.
1577  if test $enable_libstdcxx_allocator = no ||
1578     test $enable_libstdcxx_allocator = yes;
1579  then
1580     enable_libstdcxx_allocator=auto
1581  fi
1582
1583  # Either a known package, or "auto". Auto implies the default choice
1584  # for a particular platform.
1585  enable_libstdcxx_allocator_flag=$enable_libstdcxx_allocator
1586
1587  # Probe for host-specific support if no specific model is specified.
1588  # Default to "new".
1589  if test $enable_libstdcxx_allocator_flag = auto; then
1590    case ${target_os} in
1591      linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
1592        enable_libstdcxx_allocator_flag=new
1593        ;;
1594      *)
1595        enable_libstdcxx_allocator_flag=new
1596        ;;
1597    esac
1598  fi
1599  AC_MSG_RESULT($enable_libstdcxx_allocator_flag)
1600  
1601
1602  # Set configure bits for specified locale package
1603  case ${enable_libstdcxx_allocator_flag} in
1604    bitmap)
1605      ALLOCATOR_H=config/allocator/bitmap_allocator_base.h
1606      ALLOCATOR_NAME=__gnu_cxx::bitmap_allocator
1607      ;;
1608    malloc)
1609      ALLOCATOR_H=config/allocator/malloc_allocator_base.h
1610      ALLOCATOR_NAME=__gnu_cxx::malloc_allocator
1611      ;;
1612    mt)
1613      ALLOCATOR_H=config/allocator/mt_allocator_base.h
1614      ALLOCATOR_NAME=__gnu_cxx::__mt_alloc
1615      ;;
1616    new)
1617      ALLOCATOR_H=config/allocator/new_allocator_base.h
1618      ALLOCATOR_NAME=__gnu_cxx::new_allocator
1619      ;;
1620    pool)
1621      ALLOCATOR_H=config/allocator/pool_allocator_base.h
1622      ALLOCATOR_NAME=__gnu_cxx::__pool_alloc
1623      ;;	
1624  esac
1625
1626  AC_SUBST(ALLOCATOR_H)
1627  AC_SUBST(ALLOCATOR_NAME)
1628])
1629
1630
1631dnl
1632dnl Check for whether the Boost-derived checks should be turned on.
1633dnl
1634dnl --enable-concept-checks turns them on.
1635dnl --disable-concept-checks leaves them off.
1636dnl  +  Usage:  GLIBCXX_ENABLE_CONCEPT_CHECKS[(DEFAULT)]
1637dnl       Where DEFAULT is either `yes' or `no'.
1638dnl
1639AC_DEFUN([GLIBCXX_ENABLE_CONCEPT_CHECKS], [
1640  GLIBCXX_ENABLE(concept-checks,$1,,[use Boost-derived template checks])
1641  if test $enable_concept_checks = yes; then
1642    AC_DEFINE(_GLIBCXX_CONCEPT_CHECKS, 1,
1643              [Define to use concept checking code from the boost libraries.])
1644  fi
1645])
1646
1647
1648dnl
1649dnl Check for which I/O library to use:  stdio, or something specific.
1650dnl
1651dnl Default is stdio.
1652dnl
1653AC_DEFUN([GLIBCXX_ENABLE_CSTDIO], [
1654  AC_MSG_CHECKING([for underlying I/O to use])
1655  GLIBCXX_ENABLE(cstdio,stdio,[=PACKAGE],
1656    [use target-specific I/O package], [permit stdio])
1657
1658  # Now that libio has been removed, you can have any color you want as long
1659  # as it's black.  This is one big no-op until other packages are added, but
1660  # showing the framework never hurts.
1661  case ${enable_cstdio} in
1662    stdio)
1663      CSTDIO_H=config/io/c_io_stdio.h
1664      BASIC_FILE_H=config/io/basic_file_stdio.h
1665      BASIC_FILE_CC=config/io/basic_file_stdio.cc
1666      AC_MSG_RESULT(stdio)
1667      ;;
1668  esac
1669
1670  AC_SUBST(CSTDIO_H)
1671  AC_SUBST(BASIC_FILE_H)
1672  AC_SUBST(BASIC_FILE_CC)
1673])
1674
1675
1676dnl
1677dnl Check for "unusual" flags to pass to the compiler while building.
1678dnl
1679dnl --enable-cxx-flags='-foo -bar -baz' is a general method for passing
1680dnl     experimental flags such as -fpch, -fIMI, -Dfloat=char, etc.
1681dnl --disable-cxx-flags passes nothing.
1682dnl  +  See http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00131.html
1683dnl         http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00284.html
1684dnl         http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00035.html
1685dnl  +  Usage:  GLIBCXX_ENABLE_CXX_FLAGS(default flags)
1686dnl       If "default flags" is an empty string, the effect is the same
1687dnl       as --disable or --enable=no.
1688dnl
1689AC_DEFUN([GLIBCXX_ENABLE_CXX_FLAGS], [dnl
1690  AC_MSG_CHECKING([for extra compiler flags for building])
1691  GLIBCXX_ENABLE(cxx-flags,$1,[=FLAGS],
1692    [pass compiler FLAGS when building library],
1693    [case "x$enable_cxx_flags" in
1694      xno | x)   enable_cxx_flags= ;;
1695      x-*)       ;;
1696      *)         AC_MSG_ERROR(_g_switch needs compiler flags as arguments) ;;
1697     esac])
1698
1699  # Run through flags (either default or command-line) and set anything
1700  # extra (e.g., #defines) that must accompany particular g++ options.
1701  if test -n "$enable_cxx_flags"; then
1702    for f in $enable_cxx_flags; do
1703      case "$f" in
1704        -fhonor-std)  ;;
1705        -*)  ;;
1706        *)   # and we're trying to pass /what/ exactly?
1707             AC_MSG_ERROR([compiler flags start with a -]) ;;
1708      esac
1709    done
1710  fi
1711
1712  EXTRA_CXX_FLAGS="$enable_cxx_flags"
1713  AC_MSG_RESULT($EXTRA_CXX_FLAGS)
1714  AC_SUBST(EXTRA_CXX_FLAGS)
1715])
1716
1717
1718dnl
1719dnl Check to see if debugging libraries are to be built.
1720dnl
1721dnl --enable-libstdcxx-debug
1722dnl builds a separate set of debugging libraries in addition to the
1723dnl normal (shared, static) libstdc++ binaries.
1724dnl
1725dnl --disable-libstdcxx-debug
1726dnl builds only one (non-debug) version of libstdc++.
1727dnl
1728dnl --enable-libstdcxx-debug-flags=FLAGS
1729dnl iff --enable-debug == yes, then use FLAGS to build the debug library.
1730dnl
1731dnl  +  Usage:  GLIBCXX_ENABLE_DEBUG[(DEFAULT)]
1732dnl       Where DEFAULT is either `yes' or `no'.
1733dnl
1734AC_DEFUN([GLIBCXX_ENABLE_DEBUG], [
1735  AC_MSG_CHECKING([for additional debug build])
1736  GLIBCXX_ENABLE(libstdcxx-debug,$1,,[build extra debug library])
1737  AC_MSG_RESULT($enable_libstdcxx_debug)
1738  GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_DEBUG, test $enable_libstdcxx_debug = yes)
1739])
1740
1741
1742dnl
1743dnl Check for explicit debug flags.
1744dnl
1745dnl --enable-libstdcxx-debug-flags='-O1'
1746dnl is a general method for passing flags to be used when
1747dnl building debug libraries with --enable-debug.
1748dnl
1749dnl --disable-libstdcxx-debug-flags does nothing.
1750dnl  +  Usage:  GLIBCXX_ENABLE_DEBUG_FLAGS(default flags)
1751dnl       If "default flags" is an empty string, the effect is the same
1752dnl       as --disable or --enable=no.
1753dnl
1754AC_DEFUN([GLIBCXX_ENABLE_DEBUG_FLAGS], [
1755  GLIBCXX_ENABLE(libstdcxx-debug-flags,[$1],[=FLAGS],
1756    [pass compiler FLAGS when building debug library],
1757    [case "x$enable_libstdcxx_debug_flags" in
1758      xno | x)    enable_libstdcxx_debug_flags= ;;
1759      x-*)        ;;
1760      *)          AC_MSG_ERROR(_g_switch needs compiler flags as arguments) ;;
1761     esac])
1762
1763  # Option parsed, now set things appropriately
1764  DEBUG_FLAGS="$enable_libstdcxx_debug_flags"
1765  AC_SUBST(DEBUG_FLAGS)
1766
1767  AC_MSG_NOTICE([Debug build flags set to $DEBUG_FLAGS])
1768])
1769
1770
1771dnl
1772dnl Check if the user only wants a freestanding library implementation.
1773dnl
1774dnl --disable-hosted-libstdcxx will turn off most of the library build,
1775dnl installing only the headers required by [17.4.1.3] and the language
1776dnl support library.  More than that will be built (to keep the Makefiles
1777dnl conveniently clean), but not installed.
1778dnl
1779dnl Sets:
1780dnl  is_hosted  (yes/no)
1781dnl
1782dnl Defines:
1783dnl  _GLIBCXX_HOSTED   (always defined, either to 1 or 0)
1784dnl
1785AC_DEFUN([GLIBCXX_ENABLE_HOSTED], [
1786  AC_ARG_ENABLE([hosted-libstdcxx],
1787    AC_HELP_STRING([--disable-hosted-libstdcxx],
1788                   [only build freestanding C++ runtime support]),,
1789    [case "$host" in
1790	arm*-*-symbianelf*) 
1791	    enable_hosted_libstdcxx=no
1792	    ;;
1793        *) 
1794	    enable_hosted_libstdcxx=yes
1795	    ;;
1796     esac])
1797  if test "$enable_hosted_libstdcxx" = no; then
1798    AC_MSG_NOTICE([Only freestanding libraries will be built])
1799    is_hosted=no
1800    hosted_define=0
1801    enable_abi_check=no
1802    enable_libstdcxx_pch=no
1803  else
1804    is_hosted=yes
1805    hosted_define=1
1806  fi
1807  GLIBCXX_CONDITIONAL(GLIBCXX_HOSTED, test $is_hosted = yes)
1808  AC_DEFINE_UNQUOTED(_GLIBCXX_HOSTED, $hosted_define,
1809    [Define to 1 if a full hosted library is built, or 0 if freestanding.])
1810])
1811
1812
1813dnl
1814dnl Check for template specializations for the 'long long' type.
1815dnl The result determines only whether 'long long' I/O is enabled; things
1816dnl like numeric_limits<> specializations are always available.
1817dnl
1818dnl --enable-long-long defines _GLIBCXX_USE_LONG_LONG
1819dnl --disable-long-long leaves _GLIBCXX_USE_LONG_LONG undefined
1820dnl  +  Usage:  GLIBCXX_ENABLE_LONG_LONG[(DEFAULT)]
1821dnl       Where DEFAULT is either `yes' or `no'.
1822dnl
1823AC_DEFUN([GLIBCXX_ENABLE_LONG_LONG], [
1824  GLIBCXX_ENABLE(long-long,$1,,[enable template specializations for 'long long'])
1825  if test $enable_long_long = yes; then
1826    AC_DEFINE(_GLIBCXX_USE_LONG_LONG, 1, 
1827              [Define if code specialized for long long should be used.])
1828  fi
1829  AC_MSG_CHECKING([for enabled long long specializations])
1830  AC_MSG_RESULT([$enable_long_long])
1831])
1832
1833
1834dnl
1835dnl Check for template specializations for the 'wchar_t' type.
1836dnl
1837dnl --enable-wchar_t defines _GLIBCXX_USE_WCHAR_T
1838dnl --disable-wchar_t leaves _GLIBCXX_USE_WCHAR_T undefined
1839dnl  +  Usage:  GLIBCXX_ENABLE_WCHAR_T[(DEFAULT)]
1840dnl       Where DEFAULT is either `yes' or `no'.
1841dnl
1842dnl Necessary support must also be present.
1843dnl
1844AC_DEFUN([GLIBCXX_ENABLE_WCHAR_T], [
1845  GLIBCXX_ENABLE(wchar_t,$1,,[enable template specializations for 'wchar_t'])
1846
1847  # Test wchar.h for mbstate_t, which is needed for char_traits and fpos.
1848  AC_CHECK_HEADERS(wchar.h, ac_has_wchar_h=yes, ac_has_wchar_h=no)
1849  AC_MSG_CHECKING([for mbstate_t])
1850  AC_TRY_COMPILE([#include <wchar.h>],
1851  [mbstate_t teststate;],
1852  have_mbstate_t=yes, have_mbstate_t=no)
1853  AC_MSG_RESULT($have_mbstate_t)
1854  if test x"$have_mbstate_t" = xyes; then
1855    AC_DEFINE(HAVE_MBSTATE_T,1,[Define if mbstate_t exists in wchar.h.])
1856  fi
1857
1858  # Test it always, for use in GLIBCXX_ENABLE_C99, together with
1859  # ac_has_wchar_h.
1860  AC_CHECK_HEADERS(wctype.h, ac_has_wctype_h=yes, ac_has_wctype_h=no)
1861  
1862  if test x"$enable_wchar_t" = x"yes"; then
1863
1864    AC_LANG_SAVE
1865    AC_LANG_CPLUSPLUS
1866    
1867    if test x"$ac_has_wchar_h" = xyes &&
1868       test x"$ac_has_wctype_h" = xyes; then
1869      AC_TRY_COMPILE([#include <wchar.h>
1870                      #include <stddef.h>
1871                      wint_t i;
1872		      long l = WEOF;
1873		      long j = WCHAR_MIN;
1874		      long k = WCHAR_MAX;
1875                      namespace test
1876                      {
1877			using ::btowc;
1878			using ::fgetwc;
1879			using ::fgetws;
1880			using ::fputwc;
1881			using ::fputws;
1882			using ::fwide;
1883			using ::fwprintf; 
1884			using ::fwscanf;
1885			using ::getwc;
1886			using ::getwchar;
1887 			using ::mbrlen; 
1888			using ::mbrtowc; 
1889			using ::mbsinit; 
1890			using ::mbsrtowcs; 
1891			using ::putwc;
1892			using ::putwchar;
1893			using ::swprintf; 
1894			using ::swscanf; 
1895			using ::ungetwc;
1896			using ::vfwprintf; 
1897			using ::vswprintf; 
1898			using ::vwprintf; 
1899			using ::wcrtomb; 
1900			using ::wcscat; 
1901			using ::wcschr; 
1902			using ::wcscmp; 
1903			using ::wcscoll; 
1904			using ::wcscpy; 
1905			using ::wcscspn; 
1906			using ::wcsftime; 
1907			using ::wcslen;
1908			using ::wcsncat; 
1909			using ::wcsncmp; 
1910			using ::wcsncpy; 
1911			using ::wcspbrk;
1912			using ::wcsrchr; 
1913			using ::wcsrtombs; 
1914			using ::wcsspn; 
1915			using ::wcsstr;
1916			using ::wcstod; 
1917			using ::wcstok; 
1918			using ::wcstol;
1919			using ::wcstoul; 
1920			using ::wcsxfrm; 
1921			using ::wctob; 
1922			using ::wmemchr;
1923			using ::wmemcmp;
1924			using ::wmemcpy;
1925			using ::wmemmove;
1926			using ::wmemset;
1927			using ::wprintf; 
1928			using ::wscanf; 
1929		      }
1930		     ],[],[], [enable_wchar_t=no])
1931    else
1932      enable_wchar_t=no
1933    fi
1934
1935    AC_LANG_RESTORE
1936  fi
1937
1938  if test x"$enable_wchar_t" = x"yes"; then
1939    AC_DEFINE(_GLIBCXX_USE_WCHAR_T, 1,
1940              [Define if code specialized for wchar_t should be used.])
1941  fi
1942
1943  AC_MSG_CHECKING([for enabled wchar_t specializations])
1944  AC_MSG_RESULT([$enable_wchar_t])
1945])
1946
1947
1948dnl
1949dnl Check to see if building and using a C++ precompiled header can be done.
1950dnl
1951dnl --enable-libstdcxx-pch=yes
1952dnl default, this shows intent to use stdc++.h.gch If it looks like it
1953dnl may work, after some light-hearted attempts to puzzle out compiler
1954dnl support, flip bits on in include/Makefile.am
1955dnl
1956dnl --disable-libstdcxx-pch
1957dnl turns off attempts to use or build stdc++.h.gch.
1958dnl
1959dnl Substs:
1960dnl  glibcxx_PCHFLAGS
1961dnl
1962AC_DEFUN([GLIBCXX_ENABLE_PCH], [
1963  GLIBCXX_ENABLE(libstdcxx-pch,$1,,[build pre-compiled libstdc++ headers])
1964  if test $enable_libstdcxx_pch = yes; then
1965    AC_CACHE_CHECK([for compiler with PCH support],
1966      [glibcxx_cv_prog_CXX_pch],
1967      [ac_save_CXXFLAGS="$CXXFLAGS"
1968       CXXFLAGS="$CXXFLAGS -Werror -Winvalid-pch -Wno-deprecated"
1969       AC_LANG_SAVE
1970       AC_LANG_CPLUSPLUS
1971       echo '#include <math.h>' > conftest.h
1972       if $CXX $CXXFLAGS $CPPFLAGS -x c++-header conftest.h \
1973		          -o conftest.h.gch 1>&5 2>&1 &&
1974	        echo '#error "pch failed"' > conftest.h &&
1975          echo '#include "conftest.h"' > conftest.cc &&
1976	       $CXX -c $CXXFLAGS $CPPFLAGS conftest.cc 1>&5 2>&1 ;
1977       then
1978         glibcxx_cv_prog_CXX_pch=yes
1979       else
1980         glibcxx_cv_prog_CXX_pch=no
1981       fi
1982       rm -f conftest*
1983       CXXFLAGS=$ac_save_CXXFLAGS
1984       AC_LANG_RESTORE
1985      ])
1986    enable_libstdcxx_pch=$glibcxx_cv_prog_CXX_pch
1987  fi
1988
1989  AC_MSG_CHECKING([for enabled PCH])
1990  AC_MSG_RESULT([$enable_libstdcxx_pch])
1991
1992  GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_PCH, test $enable_libstdcxx_pch = yes)
1993  if test $enable_libstdcxx_pch = yes; then
1994    glibcxx_PCHFLAGS="-include bits/stdtr1c++.h"
1995  else
1996    glibcxx_PCHFLAGS=""
1997  fi
1998  AC_SUBST(glibcxx_PCHFLAGS)
1999])
2000
2001
2002dnl
2003dnl Check for atomic builtins.
2004dnl See:
2005dnl http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html#Atomic-Builtins
2006dnl
2007dnl This checks to see if the host supports the compiler-generated
2008dnl builtins for atomic operations. Note, this is intended to be an
2009dnl all-or-nothing switch, so all the atomic operations that are used
2010dnl should be checked.
2011dnl
2012dnl Note:
2013dnl libgomp and libgfortran do this with a link test, instead of an asm test.
2014dnl see: CHECK_SYNC_FETCH_AND_ADD
2015dnl
2016dnl Defines:
2017dnl  _GLIBCXX_ATOMIC_BUILTINS if the compiler on this target supports atomics.
2018dnl
2019AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS], [
2020  AC_MSG_CHECKING([for atomic builtins])
2021  AC_LANG_SAVE
2022  AC_LANG_CPLUSPLUS
2023
2024  # Fake what AC_TRY_COMPILE does.  XXX Look at redoing this new-style.
2025    cat > conftest.$ac_ext << EOF
2026[#]line __oline__ "configure"
2027int main()
2028{
2029  // NB: _Atomic_word not necessarily int. 
2030  typedef int atomic_type;
2031  atomic_type c1;
2032  atomic_type c2;
2033  const atomic_type c3(0);
2034  if (__sync_fetch_and_add(&c1, c2) == c3)
2035    {
2036      // Do something.
2037    }
2038   return 0;
2039}
2040EOF
2041    old_CXXFLAGS="$CXXFLAGS"
2042    CXXFLAGS=-S
2043    if AC_TRY_EVAL(ac_compile); then
2044      if grep __sync_fetch_and_add conftest.s >/dev/null 2>&1 ; then
2045        enable_atomic_builtins=no
2046      else
2047      AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS, 1,
2048        [Define if builtin atomic operations are supported on this host.])
2049        enable_atomic_builtins=yes
2050	atomicity_dir=cpu/generic/atomicity_builtins
2051      fi
2052    fi
2053    CXXFLAGS="$old_CXXFLAGS"
2054    rm -f conftest*
2055
2056   # Now, if still generic, set to mutex.
2057  if test $atomicity_dir = "cpu/generic" ; then
2058	atomicity_dir=cpu/generic/atomicity_mutex
2059  fi
2060 AC_LANG_RESTORE
2061 AC_MSG_RESULT($enable_atomic_builtins)
2062])
2063
2064
2065dnl
2066dnl Check for exception handling support.  If an explicit enable/disable
2067dnl sjlj exceptions is given, we don't have to detect.  Otherwise the
2068dnl target may or may not support call frame exceptions.
2069dnl
2070dnl --enable-sjlj-exceptions forces the use of builtin setjmp.
2071dnl --disable-sjlj-exceptions forces the use of call frame unwinding.
2072dnl Neither one forces an attempt at detection.
2073dnl
2074dnl Defines:
2075dnl  _GLIBCXX_SJLJ_EXCEPTIONS if the compiler is configured for it
2076dnl
2077AC_DEFUN([GLIBCXX_ENABLE_SJLJ_EXCEPTIONS], [
2078  AC_MSG_CHECKING([for exception model to use])
2079  AC_LANG_SAVE
2080  AC_LANG_CPLUSPLUS
2081  GLIBCXX_ENABLE(sjlj-exceptions,auto,,
2082    [force use of builtin_setjmp for exceptions],
2083    [permit yes|no|auto])
2084
2085  if test $enable_sjlj_exceptions = auto; then
2086    # Botheration.  Now we've got to detect the exception model.  Link tests
2087    # against libgcc.a are problematic since we've not been given proper -L
2088    # bits for single-tree newlib and libgloss.
2089    #
2090    # Fake what AC_TRY_COMPILE does.  XXX Look at redoing this new-style.
2091    cat > conftest.$ac_ext << EOF
2092[#]line __oline__ "configure"
2093struct S { ~S(); };
2094void bar();
2095void foo()
2096{
2097  S s;
2098  bar();
2099}
2100EOF
2101    old_CXXFLAGS="$CXXFLAGS"
2102    CXXFLAGS=-S
2103    if AC_TRY_EVAL(ac_compile); then
2104      if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
2105        enable_sjlj_exceptions=yes
2106      elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then
2107        enable_sjlj_exceptions=no
2108      elif grep __cxa_end_cleanup conftest.s >/dev/null 2>&1 ; then
2109        enable_sjlj_exceptions=no
2110      fi
2111    fi
2112    CXXFLAGS="$old_CXXFLAGS"
2113    rm -f conftest*
2114  fi
2115
2116  # This is a tad weird, for hysterical raisins.  We have to map
2117  # enable/disable to two different models.
2118  case $enable_sjlj_exceptions in
2119    yes)
2120      AC_DEFINE(_GLIBCXX_SJLJ_EXCEPTIONS, 1,
2121        [Define if the compiler is configured for setjmp/longjmp exceptions.])
2122      ac_exception_model_name=sjlj
2123      ;;
2124    no)
2125      ac_exception_model_name="call frame"
2126      ;;
2127    *)
2128      AC_MSG_ERROR([unable to detect exception model])
2129      ;;
2130  esac
2131 AC_LANG_RESTORE
2132 AC_MSG_RESULT($ac_exception_model_name)
2133])
2134
2135
2136dnl
2137dnl Allow visibility attributes to be used on namespaces, objects, etc.
2138dnl
2139dnl --enable-visibility enables attempt to use visibility attributes.
2140dnl --disable-visibility turns off all use of visibility attributes.
2141dnl  +  Usage:  GLIBCXX_ENABLE_VISIBILITY[(DEFAULT)]
2142dnl       Where DEFAULT is 'yes'.
2143dnl
2144AC_DEFUN([GLIBCXX_ENABLE_VISIBILITY], [
2145GLIBCXX_ENABLE(visibility,$1,,[enables visibility safe usage])
2146
2147if test x$enable_visibility = xyes ; then
2148  dnl all hail libgfortran
2149  dnl Check whether the target supports hidden visibility.
2150  AC_CACHE_CHECK([whether the target supports hidden visibility],
2151		 have_attribute_visibility, [
2152  save_CFLAGS="$CFLAGS"
2153  CFLAGS="$CFLAGS -Werror"
2154  AC_TRY_COMPILE([void __attribute__((visibility("hidden"))) foo(void) { }],
2155		 [], have_attribute_visibility=yes,
2156		 have_attribute_visibility=no)
2157  CFLAGS="$save_CFLAGS"])
2158  if test $have_attribute_visibility = no; then
2159    enable_visibility=no
2160  fi
2161fi
2162
2163GLIBCXX_CONDITIONAL(ENABLE_VISIBILITY, test $enable_visibility = yes)
2164AC_MSG_NOTICE([visibility supported: $enable_visibility])
2165])
2166
2167
2168dnl
2169dnl Add version tags to symbols in shared library (or not), additionally
2170dnl marking other symbols as private/local (or not).
2171dnl
2172dnl --enable-symvers=style adds a version script to the linker call when
2173dnl       creating the shared library.  The choice of version script is
2174dnl       controlled by 'style'.
2175dnl --disable-symvers does not.
2176dnl  +  Usage:  GLIBCXX_ENABLE_SYMVERS[(DEFAULT)]
2177dnl       Where DEFAULT is either 'yes' or 'no'.  Passing `yes' tries to
2178dnl       choose a default style based on linker characteristics.  Passing
2179dnl       'no' disables versioning.
2180dnl
2181AC_DEFUN([GLIBCXX_ENABLE_SYMVERS], [
2182
2183GLIBCXX_ENABLE(symvers,$1,[=STYLE],
2184  [enables symbol versioning of the shared library],
2185  [permit yes|no|gnu|gnu-versioned-namespace|darwin|darwin-export])
2186
2187# If we never went through the GLIBCXX_CHECK_LINKER_FEATURES macro, then we
2188# don't know enough about $LD to do tricks...
2189AC_REQUIRE([GLIBCXX_CHECK_LINKER_FEATURES])
2190
2191# Turn a 'yes' into a suitable default.
2192if test x$enable_symvers = xyes ; then
2193  if test $enable_shared = no || test "x$LD" = x || test x$gcc_no_link = xyes; then
2194    enable_symvers=no
2195  else
2196    if test $with_gnu_ld = yes ; then
2197      enable_symvers=gnu
2198    else
2199      case ${target_os} in
2200        darwin*)
2201	  enable_symvers=darwin ;;
2202        *)
2203          enable_symvers=no ;;
2204      esac
2205    fi
2206  fi
2207fi
2208
2209# Check to see if 'darwin' or 'darwin-export' can win.
2210if test x$enable_symvers = xdarwin-export ; then
2211    enable_symvers=darwin
2212fi
2213
2214# Check to see if 'gnu' can win.
2215if test $enable_symvers = gnu || test $enable_symvers = gnu-versioned-namespace; then
2216  # Check to see if libgcc_s exists, indicating that shared libgcc is possible.
2217  AC_MSG_CHECKING([for shared libgcc])
2218  ac_save_CFLAGS="$CFLAGS"
2219  CFLAGS=' -lgcc_s'
2220  AC_TRY_LINK(, [return 0;], glibcxx_shared_libgcc=yes, glibcxx_shared_libgcc=no)
2221  CFLAGS="$ac_save_CFLAGS"
2222  if test $glibcxx_shared_libgcc = no; then
2223    cat > conftest.c <<EOF
2224int main (void) { return 0; }
2225EOF
2226changequote(,)dnl
2227    glibcxx_libgcc_s_suffix=`${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
2228			     -shared -shared-libgcc -o conftest.so \
2229			     conftest.c -v 2>&1 >/dev/null \
2230			     | sed -n 's/^.* -lgcc_s\([^ ]*\) .*$/\1/p'`
2231changequote([,])dnl
2232    rm -f conftest.c conftest.so
2233    if test x${glibcxx_libgcc_s_suffix+set} = xset; then
2234      CFLAGS=" -lgcc_s$glibcxx_libgcc_s_suffix"
2235      AC_TRY_LINK(, [return 0;], glibcxx_shared_libgcc=yes)
2236      CFLAGS="$ac_save_CFLAGS"
2237    fi
2238  fi
2239  AC_MSG_RESULT($glibcxx_shared_libgcc)
2240
2241  # For GNU ld, we need at least this version.  The format is described in
2242  # GLIBCXX_CHECK_LINKER_FEATURES above.
2243  glibcxx_min_gnu_ld_version=21400
2244
2245  # If no shared libgcc, can't win.
2246  if test $glibcxx_shared_libgcc != yes; then
2247      AC_MSG_WARN([=== You have requested GNU symbol versioning, but])
2248      AC_MSG_WARN([=== you are not building a shared libgcc_s.])
2249      AC_MSG_WARN([=== Symbol versioning will be disabled.])
2250      enable_symvers=no
2251  elif test $with_gnu_ld != yes ; then
2252    # just fail for now
2253    AC_MSG_WARN([=== You have requested GNU symbol versioning, but])
2254    AC_MSG_WARN([=== you are not using the GNU linker.])
2255    AC_MSG_WARN([=== Symbol versioning will be disabled.])
2256    enable_symvers=no
2257  elif test $glibcxx_gnu_ld_version -lt $glibcxx_min_gnu_ld_version ; then
2258    # The right tools, the right setup, but too old.  Fallbacks?
2259    AC_MSG_WARN(=== Linker version $glibcxx_gnu_ld_version is too old for)
2260    AC_MSG_WARN(=== full symbol versioning support in this release of GCC.)
2261    AC_MSG_WARN(=== You would need to upgrade your binutils to version)
2262    AC_MSG_WARN(=== $glibcxx_min_gnu_ld_version or later and rebuild GCC.)
2263    AC_MSG_WARN([=== Symbol versioning will be disabled.])
2264    enable_symvers=no
2265  fi
2266fi
2267
2268# Everything parsed; figure out what file to use.
2269case $enable_symvers in
2270  no)
2271    SYMVER_FILE=config/abi/pre/none.ver
2272    ;;
2273  gnu)
2274    SYMVER_FILE=config/abi/pre/gnu.ver
2275    AC_DEFINE(_GLIBCXX_SYMVER_GNU, 1, 
2276              [Define to use GNU versioning in the shared library.])
2277    ;;
2278  gnu-versioned-namespace)
2279    SYMVER_FILE=config/abi/pre/gnu-versioned-namespace.ver
2280    AC_DEFINE(_GLIBCXX_SYMVER_GNU_NAMESPACE, 1, 
2281              [Define to use GNU namespace versioning in the shared library.])
2282    ;;
2283  darwin)
2284    SYMVER_FILE=config/abi/pre/gnu.ver
2285    AC_DEFINE(_GLIBCXX_SYMVER_DARWIN, 1, 
2286              [Define to use darwin versioning in the shared library.])
2287    ;;
2288esac
2289
2290if test x$enable_symvers != xno ; then
2291  AC_DEFINE(_GLIBCXX_SYMVER, 1,
2292	 [Define to use symbol versioning in the shared library.])
2293fi
2294
2295AC_SUBST(SYMVER_FILE)
2296AC_SUBST(port_specific_symbol_files)
2297GLIBCXX_CONDITIONAL(ENABLE_SYMVERS, test $enable_symvers != no)
2298GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_GNU, test $enable_symvers = gnu)
2299GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_GNU_NAMESPACE, test $enable_symvers = gnu-versioned-namespace)
2300GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_DARWIN, test $enable_symvers = darwin)
2301AC_MSG_NOTICE(versioning on shared library symbols is $enable_symvers)
2302
2303# Now, set up compatibility support, if any.
2304# In addition, need this to deal with std::size_t mangling in
2305# src/compatibility.cc.  In a perfect world, could use
2306# typeid(std::size_t).name()[0] to do direct substitution.
2307AC_MSG_CHECKING([for size_t as unsigned int])
2308ac_save_CFLAGS="$CFLAGS"
2309CFLAGS="-Werror"
2310AC_TRY_COMPILE(, [__SIZE_TYPE__* stp; unsigned int* uip; stp = uip;], 
2311	         [glibcxx_size_t_is_i=yes], [glibcxx_size_t_is_i=no])
2312CFLAGS=$ac_save_CFLAGS
2313if test "$glibcxx_size_t_is_i" = yes; then
2314  AC_DEFINE(_GLIBCXX_SIZE_T_IS_UINT, 1, [Define if size_t is unsigned int.])
2315fi
2316AC_MSG_RESULT([$glibcxx_size_t_is_i])
2317
2318AC_MSG_CHECKING([for ptrdiff_t as int])
2319ac_save_CFLAGS="$CFLAGS"
2320CFLAGS="-Werror"
2321AC_TRY_COMPILE(, [__PTRDIFF_TYPE__* ptp; int* ip; ptp = ip;], 
2322	         [glibcxx_ptrdiff_t_is_i=yes], [glibcxx_ptrdiff_t_is_i=no])
2323CFLAGS=$ac_save_CFLAGS
2324if test "$glibcxx_ptrdiff_t_is_i" = yes; then
2325  AC_DEFINE(_GLIBCXX_PTRDIFF_T_IS_INT, 1, [Define if ptrdiff_t is int.])
2326fi
2327AC_MSG_RESULT([$glibcxx_ptrdiff_t_is_i])
2328])
2329
2330
2331dnl
2332dnl Setup to use the gcc gthr.h thread-specific memory and mutex model.
2333dnl We must stage the required headers so that they will be installed
2334dnl with the library (unlike libgcc, the STL implementation is provided
2335dnl solely within headers).  Since we must not inject random user-space
2336dnl macro names into user-provided C++ code, we first stage into <file>-in
2337dnl and process to <file> with an output command.  The reason for a two-
2338dnl stage process here is to correctly handle $srcdir!=$objdir without
2339dnl having to write complex code (the sed commands to clean the macro
2340dnl namespace are complex and fragile enough as it is).  We must also
2341dnl add a relative path so that -I- is supported properly.
2342dnl
2343dnl Substs:
2344dnl  glibcxx_thread_h
2345dnl
2346dnl Defines:
2347dnl  HAVE_GTHR_DEFAULT
2348dnl
2349AC_DEFUN([GLIBCXX_ENABLE_THREADS], [
2350  AC_MSG_CHECKING([for thread model used by GCC])
2351  target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
2352  AC_MSG_RESULT([$target_thread_file])
2353
2354  if test $target_thread_file != single; then
2355    AC_DEFINE(HAVE_GTHR_DEFAULT, 1,
2356              [Define if gthr-default.h exists 
2357              (meaning that threading support is enabled).])
2358  fi
2359
2360  glibcxx_thread_h=gthr-$target_thread_file.h
2361
2362  dnl Check for __GTHREADS define.
2363  gthread_file=${toplevel_srcdir}/gcc/${glibcxx_thread_h}
2364  if grep __GTHREADS $gthread_file >/dev/null 2>&1 ; then
2365    enable_thread=yes
2366  else
2367   enable_thread=no
2368  fi
2369
2370  AC_SUBST(glibcxx_thread_h)
2371])
2372
2373
2374# Check whether LC_MESSAGES is available in <locale.h>.
2375# Ulrich Drepper <drepper@cygnus.com>, 1995.
2376#
2377# This file file be copied and used freely without restrictions.  It can
2378# be used in projects which are not available under the GNU Public License
2379# but which still want to provide support for the GNU gettext functionality.
2380# Please note that the actual code is *not* freely available.
2381
2382# serial 1
2383AC_DEFUN([AC_LC_MESSAGES], [
2384  AC_CHECK_HEADER(locale.h, [
2385    AC_CACHE_CHECK([for LC_MESSAGES], ac_cv_val_LC_MESSAGES,
2386      [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
2387       ac_cv_val_LC_MESSAGES=yes, ac_cv_val_LC_MESSAGES=no)])
2388    if test $ac_cv_val_LC_MESSAGES = yes; then
2389      AC_DEFINE(HAVE_LC_MESSAGES, 1, 
2390                [Define if LC_MESSAGES is available in <locale.h>.])
2391    fi
2392  ])
2393])
2394
2395# Macros from the top-level gcc directory.
2396m4_include([../config/tls.m4])
2397
2398