OSDN Git Service

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