OSDN Git Service

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