OSDN Git Service

2003-05-01 Benjamin Kosnik <bkoz@redhat.com>
[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 Because the builtins are picky picky picky about the arguments they take,
595 dnl do an explict linkage tests here.
596 dnl Check to see if the (math function) argument passed is
597 dnl 1) declared when using the c++ compiler
598 dnl 2) has "C" linkage
599 dnl
600 dnl Define HAVE_CARGF etc if "cargf" is declared and links
601 dnl
602 dnl argument 1 is name of function to check
603 dnl
604 dnl ASSUMES argument is a math function with ONE parameter
605 dnl
606 dnl GLIBCPP_CHECK_BUILTIN_MATH_DECL_LINKAGE_1
607 AC_DEFUN(GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1, [
608   AC_MSG_CHECKING([for $1 declaration])
609   if test x${glibcpp_cv_func_$1_use+set} != xset; then
610     AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
611       AC_LANG_SAVE
612       AC_LANG_CPLUSPLUS
613       AC_TRY_COMPILE([#include <math.h>],
614                      [ $1(0);],
615                      [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
616       AC_LANG_RESTORE
617     ])
618   fi
619   AC_MSG_RESULT($glibcpp_cv_func_$1_use)
620   if test x$glibcpp_cv_func_$1_use = x"yes"; then
621     AC_MSG_CHECKING([for $1 linkage])
622     if test x${glibcpp_cv_func_$1_link+set} != xset; then
623       AC_CACHE_VAL(glibcpp_cv_func_$1_link, [
624         AC_TRY_LINK([#include <math.h>],
625                     [ $1(0);],
626                     [glibcpp_cv_func_$1_link=yes], [glibcpp_cv_func_$1_link=no])
627       ])
628     fi
629     AC_MSG_RESULT($glibcpp_cv_func_$1_link)
630     if test x$glibcpp_cv_func_$1_link = x"yes"; then
631       ac_tr_func=HAVE_`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
632       AC_DEFINE_UNQUOTED(${ac_tr_func})
633     fi
634   fi
635 ])
636
637
638 dnl
639 dnl Check to see what builtin math functions are supported
640 dnl
641 dnl check for __builtin_abs
642 dnl check for __builtin_fabsf
643 dnl check for __builtin_fabs
644 dnl check for __builtin_fabl
645 dnl check for __builtin_labs
646 dnl check for __builtin_sqrtf
647 dnl check for __builtin_sqrtl
648 dnl check for __builtin_sqrt
649 dnl check for __builtin_sinf
650 dnl check for __builtin_sin
651 dnl check for __builtin_sinl
652 dnl check for __builtin_cosf
653 dnl check for __builtin_cos
654 dnl check for __builtin_cosl
655 dnl
656 dnl GLIBCPP_CHECK_BUILTIN_MATH_SUPPORT
657 AC_DEFUN(GLIBCPP_CHECK_BUILTIN_MATH_SUPPORT, [
658   dnl Test for builtin math functions.
659   dnl These are made in gcc/c-common.c
660   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_abs)
661   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabsf)
662   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabs)
663   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabsl)
664   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_labs)
665
666   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrtf)
667   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrt)
668   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrtl)
669
670   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sinf)
671   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sin)
672   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sinl)
673
674   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cosf)
675   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cos)
676   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cosl)
677
678   dnl There is, without a doubt, a more elegant way to have these
679   dnl names exported so that they won't be stripped out of acconfig.h by
680   dnl autoheader. I leave this as an exercise to somebody less frustrated
681   dnl than I.... please email the libstdc++ list if you can figure out a
682   dnl more elegant approach (see autoconf/acgen.m4 and specifically
683   dnl AC_CHECK_FUNC for things to steal.)
684   dummyvar=no
685   if test x$dummyvar = x"yes"; then
686     AC_DEFINE(HAVE___BUILTIN_ABS)
687     AC_DEFINE(HAVE___BUILTIN_LABS)
688     AC_DEFINE(HAVE___BUILTIN_COS)
689     AC_DEFINE(HAVE___BUILTIN_COSF)
690     AC_DEFINE(HAVE___BUILTIN_COSL)
691     AC_DEFINE(HAVE___BUILTIN_FABS)
692     AC_DEFINE(HAVE___BUILTIN_FABSF)
693     AC_DEFINE(HAVE___BUILTIN_FABSL)
694     AC_DEFINE(HAVE___BUILTIN_SIN)
695     AC_DEFINE(HAVE___BUILTIN_SINF)
696     AC_DEFINE(HAVE___BUILTIN_SINL)
697     AC_DEFINE(HAVE___BUILTIN_SQRT)
698     AC_DEFINE(HAVE___BUILTIN_SQRTF)
699     AC_DEFINE(HAVE___BUILTIN_SQRTL)
700   fi
701 ])
702
703 dnl
704 dnl Check to see what the underlying c library is like
705 dnl These checks need to do two things:
706 dnl 1) make sure the name is declared when using the c++ compiler
707 dnl 2) make sure the name has "C" linkage
708 dnl This might seem like overkill but experience has shown that it's not...
709 dnl
710 dnl Define HAVE_STRTOLD if "strtold" is declared and links
711 dnl Define HAVE_STRTOF if "strtof" is declared and links
712 dnl Define HAVE_DRAND48 if "drand48" is declared and links
713 dnl
714 dnl GLIBCPP_CHECK_STDLIB_SUPPORT
715 AC_DEFUN(GLIBCPP_CHECK_STDLIB_SUPPORT, [
716   ac_test_CXXFLAGS="${CXXFLAGS+set}"
717   ac_save_CXXFLAGS="$CXXFLAGS"
718   CXXFLAGS='-fno-builtins -D_GNU_SOURCE'
719
720   GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtold)
721   GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtof)
722   AC_CHECK_FUNCS(drand48)
723
724   CXXFLAGS="$ac_save_CXXFLAGS"
725 ])
726
727 dnl
728 dnl Check to see what the underlying c library or math library is like.
729 dnl These checks need to do two things:
730 dnl 1) make sure the name is declared when using the c++ compiler
731 dnl 2) make sure the name has "C" linkage
732 dnl This might seem like overkill but experience has shown that it's not...
733 dnl
734 dnl Define HAVE_CARGF etc if "cargf" is found.
735 dnl
736 dnl GLIBCPP_CHECK_MATH_SUPPORT
737 AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
738   ac_test_CXXFLAGS="${CXXFLAGS+set}"
739   ac_save_CXXFLAGS="$CXXFLAGS"
740   CXXFLAGS='-fno-builtins -D_GNU_SOURCE'
741
742   dnl Check libm
743   AC_CHECK_LIB(m, sin, libm="-lm")
744   ac_save_LIBS="$LIBS"
745   LIBS="$LIBS $libm"
746
747   dnl Check to see if certain C math functions exist.
748   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinf)
749   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnan)
750   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finite)
751   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(copysign)
752   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincos)
753   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fpclass)
754   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(qfpclass)
755   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(hypot)
756
757   dnl Check to see if basic C math functions have float versions.
758   GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(float trig,
759                                           float_trig,
760                                           acosf asinf atanf \
761                                           cosf sinf tanf \
762                                           coshf sinhf tanhf)
763   GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(float round,
764                                           float_round,
765                                           ceilf floorf)
766   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(expf)
767   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnanf)
768   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinff)
769   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(atan2f)
770   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fabsf)
771   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(fmodf)
772   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(frexpf)
773   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(hypotf)
774   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpf)
775   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(logf)
776   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(log10f)
777   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(modff)
778   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(powf)
779   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtf)
780   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincosf)
781   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finitef)
782
783   dnl Check to see if basic C math functions have long double versions.
784   GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(long double trig,
785                                           long_double_trig,
786                                           acosl asinl atanl \
787                                           cosl sinl tanl \
788                                           coshl sinhl tanhl)
789   GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(long double round,
790                                           long_double_round,
791                                           ceill floorl)
792   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnanl)
793   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinfl)
794   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(copysignl)
795   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(atan2l)
796   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(expl)
797   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fabsl)
798   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(fmodl)
799   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(frexpl)
800   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(hypotl)
801   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpl)
802   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(logl)
803   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(log10l)
804   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(modfl)
805   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(powl)
806   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtl)
807   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincosl)
808   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finitel)
809
810   dnl Some runtimes have these functions with a preceding underscore. Please
811   dnl keep this sync'd with the one above. And if you add any new symbol,
812   dnl please add the corresponding block in the @BOTTOM@ section of acconfig.h.
813   dnl Check to see if certain C math functions exist.
814
815   dnl Check to see if basic C math functions have float versions.
816   GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(_float trig,
817                                           _float_trig,
818                                           _acosf _asinf _atanf \
819                                           _cosf _sinf _tanf \
820                                           _coshf _sinhf _tanhf)
821   GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(_float round,
822                                           _float_round,
823                                           _ceilf _floorf)
824
825   dnl Check to see if basic C math functions have long double versions.
826   GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(_long double trig,
827                                           _long_double_trig,
828                                           _acosl _asinl _atanl \
829                                           _cosl _sinl _tanl \
830                                           _coshl _sinhl _tanhl)
831   GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(_long double round,
832                                           _long_double_round,
833                                           _ceill _floorl)
834
835   LIBS="$ac_save_LIBS"
836   CXXFLAGS="$ac_save_CXXFLAGS"
837 ])
838
839
840 dnl
841 dnl Check to see if there is native support for complex
842 dnl
843 dnl Don't compile bits in math/* if native support exits.
844 dnl
845 dnl Define USE_COMPLEX_LONG_DOUBLE etc if "copysignl" is found.
846 dnl
847 dnl GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT
848 AC_DEFUN(GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT, [
849   dnl Check for complex versions of math functions of platform.
850   AC_CHECK_LIB(m, main)
851   AC_REPLACE_MATHFUNCS(nan copysignf)
852
853   dnl For __signbit to signbit conversions.
854   AC_CHECK_FUNCS([__signbit], , [LIBMATHOBJS="$LIBMATHOBJS signbit.lo"])
855   AC_CHECK_FUNCS([__signbitf], , [LIBMATHOBJS="$LIBMATHOBJS signbitf.lo"])
856
857   dnl Compile the long double complex functions only if the function
858   dnl provides the non-complex long double functions that are needed.
859   dnl Currently this includes copysignl, which should be
860   dnl cached from the GLIBCPP_CHECK_MATH_SUPPORT macro, above.
861   if test x$ac_cv_func_copysignl = x"yes"; then
862     AC_CHECK_FUNCS([__signbitl], , [LIBMATHOBJS="$LIBMATHOBJS signbitl.lo"])
863   fi
864
865   if test -n "$LIBMATHOBJS"; then
866     need_libmath=yes
867   fi
868   AC_SUBST(LIBMATHOBJS)
869   AM_CONDITIONAL(GLIBCPP_BUILD_LIBMATH,  test "$need_libmath" = yes)
870 ])
871
872
873 dnl Check to see what architecture and operating system we are compiling
874 dnl for.  Also, if architecture- or OS-specific flags are required for
875 dnl compilation, pick them up here.
876 dnl
877 dnl GLIBCPP_CHECK_TARGET
878 AC_DEFUN(GLIBCPP_CHECK_TARGET, [
879   . [$]{glibcpp_basedir}/configure.target
880   AC_MSG_RESULT(CPU config directory is $cpu_include_dir)
881   AC_MSG_RESULT(OS config directory is $os_include_dir)
882 ])
883
884
885 dnl
886 dnl Check to see if this target can enable the wchar_t parts of libstdc++.
887 dnl If --disable-c-mbchar was given, no wchar_t stuff is enabled.  (This
888 dnl must have been previously checked.)
889 dnl
890 dnl Define _GLIBCPP_USE_WCHAR_T if all the bits are found
891 dnl Define HAVE_MBSTATE_T if mbstate_t is not in wchar.h
892 dnl
893 dnl GLIBCPP_CHECK_WCHAR_T_SUPPORT
894 AC_DEFUN(GLIBCPP_CHECK_WCHAR_T_SUPPORT, [
895   dnl Wide characters disabled by default.
896   enable_wchar_t=no
897
898   dnl Test wchar.h for mbstate_t, which is needed for char_traits and
899   dnl others even if wchar_t support is not on.
900   AC_MSG_CHECKING([for mbstate_t])
901   AC_TRY_COMPILE([#include <wchar.h>],
902   [mbstate_t teststate;],
903   have_mbstate_t=yes, have_mbstate_t=no)
904   AC_MSG_RESULT($have_mbstate_t)
905   if test x"$have_mbstate_t" = xyes; then
906     AC_DEFINE(HAVE_MBSTATE_T)
907   fi
908
909   dnl Sanity check for existence of ISO C99 headers for extended encoding.
910   AC_CHECK_HEADERS(wchar.h, ac_has_wchar_h=yes, ac_has_wchar_h=no)
911   AC_CHECK_HEADERS(wctype.h, ac_has_wctype_h=yes, ac_has_wctype_h=no)
912
913   dnl Only continue checking if the ISO C99 headers exist and support is on.
914   if test x"$ac_has_wchar_h" = xyes &&
915      test x"$ac_has_wctype_h" = xyes &&
916      test x"$enable_c_mbchar" != xno; then
917
918     dnl Test wchar.h for WCHAR_MIN, WCHAR_MAX, which is needed before
919     dnl numeric_limits can instantiate type_traits<wchar_t>
920     AC_MSG_CHECKING([for WCHAR_MIN and WCHAR_MAX])
921     AC_TRY_COMPILE([#include <wchar.h>],
922     [int i = WCHAR_MIN; int j = WCHAR_MAX;],
923     has_wchar_minmax=yes, has_wchar_minmax=no)
924     AC_MSG_RESULT($has_wchar_minmax)
925
926     dnl Test wchar.h for WEOF, which is what we use to determine whether
927     dnl to specialize for char_traits<wchar_t> or not.
928     AC_MSG_CHECKING([for WEOF])
929     AC_TRY_COMPILE([
930       #include <wchar.h>
931       #include <stddef.h>],
932     [wint_t i = WEOF;],
933     has_weof=yes, has_weof=no)
934     AC_MSG_RESULT($has_weof)
935
936     dnl Tests for wide character functions used in char_traits<wchar_t>.
937     ac_wfuncs=yes
938     AC_CHECK_FUNCS(wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset,, \
939     ac_wfuncs=no)
940
941     dnl Checks for names injected into std:: by the c_std headers.
942     AC_CHECK_FUNCS(btowc wctob fgetwc fgetws fputwc fputws fwide \
943     fwprintf fwscanf swprintf swscanf vfwprintf vfwscanf vswprintf vswscanf \
944     vwprintf vwscanf wprintf wscanf getwc getwchar mbsinit mbrlen mbrtowc \
945     mbsrtowcs wcsrtombs putwc putwchar ungetwc wcrtomb wcstod wcstof wcstol \
946     wcstoul wcscpy wcsncpy wcscat wcsncat wcscmp wcscoll wcsncmp wcsxfrm \
947     wcscspn wcsspn wcstok wcsftime wcschr wcspbrk wcsrchr wcsstr,, \
948     ac_wfuncs=no)
949
950     AC_MSG_CHECKING([for ISO C99 wchar_t support])
951     if test x"$has_weof" = xyes &&
952        test x"$has_wchar_minmax" = xyes &&
953        test x"$ac_wfuncs" = xyes; then
954       ac_isoC99_wchar_t=yes
955     else
956       ac_isoC99_wchar_t=no
957     fi
958     AC_MSG_RESULT($ac_isoC99_wchar_t)
959
960     dnl Use iconv for wchar_t to char conversions. As such, check for
961     dnl X/Open Portability Guide, version 2 features (XPG2).
962     AC_CHECK_HEADER(iconv.h, ac_has_iconv_h=yes, ac_has_iconv_h=no)
963     AC_CHECK_HEADER(langinfo.h, ac_has_langinfo_h=yes, ac_has_langinfo_h=no)
964
965     dnl Check for existence of libiconv.a providing XPG2 wchar_t support.
966     AC_CHECK_LIB(iconv, iconv, libiconv="-liconv")
967     ac_save_LIBS="$LIBS"
968     LIBS="$LIBS $libiconv"
969
970     AC_CHECK_FUNCS(iconv_open iconv_close iconv nl_langinfo, \
971     ac_XPG2funcs=yes, ac_XPG2funcs=no)
972
973     LIBS="$ac_save_LIBS"
974
975     AC_MSG_CHECKING([for XPG2 wchar_t support])
976     if test x"$ac_has_iconv_h" = xyes &&
977        test x"$ac_has_langinfo_h" = xyes &&
978        test x"$ac_XPG2funcs" = xyes; then
979       ac_XPG2_wchar_t=yes
980     else
981       ac_XPG2_wchar_t=no
982     fi
983     AC_MSG_RESULT($ac_XPG2_wchar_t)
984
985     dnl At the moment, only enable wchar_t specializations if all the
986     dnl above support is present.
987     if test x"$ac_isoC99_wchar_t" = xyes && 
988         test x"$ac_XPG2_wchar_t" = xyes; then
989       AC_DEFINE(_GLIBCPP_USE_WCHAR_T)
990       enable_wchar_t=yes
991     fi
992   fi
993   AC_MSG_CHECKING([for enabled wchar_t specializations])
994   AC_MSG_RESULT($enable_wchar_t)        
995   AM_CONDITIONAL(GLIBCPP_TEST_WCHAR_T, test "$enable_wchar_t" = yes)    
996 ])
997
998
999 dnl
1000 dnl Check to see if debugging libraries are to be built.
1001 dnl
1002 dnl GLIBCPP_ENABLE_DEBUG
1003 dnl
1004 dnl --enable-debug
1005 dnl builds a separate set of debugging libraries in addition to the
1006 dnl normal (shared, static) libstdc++ binaries.
1007 dnl
1008 dnl --disable-debug
1009 dnl builds only one (non-debug) version of libstdc++.
1010 dnl
1011 dnl --enable-debug-flags=FLAGS
1012 dnl iff --enable-debug == yes, then use FLAGS to build the debug library.
1013 dnl
1014 dnl  +  Usage:  GLIBCPP_ENABLE_DEBUG[(DEFAULT)]
1015 dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
1016 dnl       defaults to `no'.
1017 AC_DEFUN(GLIBCPP_ENABLE_DEBUG, [dnl
1018 define([GLIBCPP_ENABLE_DEBUG_DEFAULT], ifelse($1, yes, yes, no))dnl
1019 AC_ARG_ENABLE(debug,
1020 changequote(<<, >>)dnl
1021 <<  --enable-debug          build extra debug library [default=>>GLIBCPP_ENABLE_DEBUG_DEFAULT],
1022 changequote([, ])dnl
1023 [case "${enableval}" in
1024  yes) enable_debug=yes ;;
1025  no)  enable_debug=no ;;
1026  *)   AC_MSG_ERROR([Unknown argument to enable/disable extra debugging]) ;;
1027  esac],
1028 enable_debug=GLIBCPP_ENABLE_DEBUG_DEFAULT)dnl
1029 AC_MSG_CHECKING([for additional debug build])
1030 AC_MSG_RESULT($enable_debug)
1031 AM_CONDITIONAL(GLIBCPP_BUILD_DEBUG, test "$enable_debug" = yes)
1032 ])
1033
1034
1035 dnl Check for explicit debug flags.
1036 dnl
1037 dnl GLIBCPP_ENABLE_DEBUG_FLAGS
1038 dnl
1039 dnl --enable-debug-flags='-O1'
1040 dnl is a general method for passing flags to be used when
1041 dnl building debug libraries with --enable-debug.
1042 dnl
1043 dnl --disable-debug-flags does nothing.
1044 dnl  +  Usage:  GLIBCPP_ENABLE_DEBUG_FLAGS(default flags)
1045 dnl       If "default flags" is an empty string (or "none"), the effect is
1046 dnl       the same as --disable or --enable=no.
1047 AC_DEFUN(GLIBCPP_ENABLE_DEBUG_FLAGS, [dnl
1048 define([GLIBCPP_ENABLE_DEBUG_FLAGS_DEFAULT], ifelse($1,,, $1))dnl
1049 AC_ARG_ENABLE(debug_flags,
1050 changequote(<<, >>)dnl
1051 <<  --enable-debug-flags=FLAGS    pass compiler FLAGS when building debug
1052                         library;[default=>>GLIBCPP_ENABLE_DEBUG_FLAGS_DEFAULT],
1053 changequote([, ])dnl
1054 [case "${enableval}" in
1055  none)  ;;
1056  -*) enable_debug_flags="${enableval}" ;;
1057  *)   AC_MSG_ERROR([Unknown argument to extra debugging flags]) ;;
1058  esac],
1059 enable_debug_flags=GLIBCPP_ENABLE_DEBUG_FLAGS_DEFAULT)dnl
1060
1061 dnl Option parsed, now set things appropriately
1062 case x"$enable_debug" in
1063     xyes)
1064         case "$enable_debug_flags" in
1065           none)
1066             DEBUG_FLAGS="-g3 -O0";;
1067           -*) #valid input
1068             DEBUG_FLAGS="${enableval}"
1069         esac
1070         ;;
1071     xno)
1072         DEBUG_FLAGS=""
1073         ;;
1074 esac
1075 AC_SUBST(DEBUG_FLAGS)
1076
1077 AC_MSG_CHECKING([for debug build flags])
1078 AC_MSG_RESULT($DEBUG_FLAGS)
1079 ])
1080
1081
1082 dnl
1083 dnl Check for "unusual" flags to pass to the compiler while building.
1084 dnl
1085 dnl GLIBCPP_ENABLE_CXX_FLAGS
1086 dnl --enable-cxx-flags='-foo -bar -baz' is a general method for passing
1087 dnl     experimental flags such as -fhonor-std, -fsquangle, -Dfloat=char, etc.
1088 dnl     Somehow this same set of flags must be passed when [re]building
1089 dnl     libgcc.
1090 dnl --disable-cxx-flags passes nothing.
1091 dnl  +  See http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00131.html
1092 dnl         http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00284.html
1093 dnl         http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00035.html
1094 dnl  +  Usage:  GLIBCPP_ENABLE_CXX_FLAGS(default flags)
1095 dnl       If "default flags" is an empty string (or "none"), the effect is
1096 dnl       the same as --disable or --enable=no.
1097 AC_DEFUN(GLIBCPP_ENABLE_CXX_FLAGS, [dnl
1098 define([GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT], ifelse($1,,, $1))dnl
1099 AC_MSG_CHECKING([for extra compiler flags for building])
1100 AC_ARG_ENABLE(cxx_flags,
1101 changequote(<<, >>)dnl
1102 <<  --enable-cxx-flags=FLAGS      pass compiler FLAGS when building library;
1103                                   [default=>>GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT],
1104 changequote([, ])dnl
1105 [case "x$enable_cxx_flags" in
1106   xyes)
1107     AC_MSG_ERROR([--enable-cxx-flags needs compiler flags as arguments]) ;;
1108   xno | xnone | x)
1109     enable_cxx_flags='' ;;
1110   *)
1111     enable_cxx_flags="$enableval" ;;
1112 esac],
1113 enable_cxx_flags=GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT)
1114
1115 dnl Run through flags (either default or command-line) and set anything
1116 dnl extra (e.g., #defines) that must accompany particular g++ options.
1117 if test -n "$enable_cxx_flags"; then
1118   for f in $enable_cxx_flags; do
1119     case "$f" in
1120       -fhonor-std)  ;;
1121       -*)  ;;
1122       *)   # and we're trying to pass /what/ exactly?
1123            AC_MSG_ERROR([compiler flags start with a -]) ;;
1124     esac
1125   done
1126 fi
1127 EXTRA_CXX_FLAGS="$enable_cxx_flags"
1128 AC_MSG_RESULT($EXTRA_CXX_FLAGS)
1129 AC_SUBST(EXTRA_CXX_FLAGS)
1130 ])
1131
1132
1133 dnl
1134 dnl Check for which locale library to use:  gnu or generic.
1135 dnl
1136 dnl GLIBCPP_ENABLE_CLOCALE
1137 dnl --enable-clocale=gnu sets config/locale/c_locale_gnu.cc and friends
1138 dnl --enable-clocale=generic sets config/locale/c_locale_generic.cc and friends
1139 dnl
1140 dnl default is generic
1141 dnl
1142 AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [
1143   AC_MSG_CHECKING([for clocale to use])
1144   AC_ARG_ENABLE(clocale,
1145   [  --enable-clocale        enable model for target locale package.
1146   --enable-clocale=MODEL  use MODEL target-speific locale package. [default=generic]
1147   ],
1148   if test x$enable_clocale = xno; then
1149      enable_clocale=no
1150   fi,
1151      enable_clocale=no)
1152
1153   enable_clocale_flag=$enable_clocale
1154
1155   dnl Probe for locale support if no specific model is specified.
1156   dnl Default to "generic"
1157   if test x$enable_clocale_flag = xno; then
1158     case x${target_os} in
1159       xlinux* | xgnu*)
1160         AC_EGREP_CPP([_GLIBCPP_ok], [
1161         #include <features.h>
1162         #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
1163           _GLIBCPP_ok
1164         #endif
1165         ], enable_clocale_flag=gnu, enable_clocale_flag=generic)
1166
1167         # Test for bugs early in glibc-2.2.x series
1168         if test x$enable_clocale_flag = xgnu; then
1169           AC_TRY_RUN([
1170           #define _GNU_SOURCE 1
1171           #include <locale.h>
1172           #include <string.h>
1173           #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
1174           extern __typeof(newlocale) __newlocale;
1175           extern __typeof(duplocale) __duplocale;
1176           extern __typeof(strcoll_l) __strcoll_l;
1177           #endif
1178           int main()
1179           {
1180             const char __one[] = "Äuglein Augmen";
1181             const char __two[] = "Äuglein";
1182             int i;
1183             int j;
1184             __locale_t  loc;
1185             __locale_t  loc_dup;
1186             loc = __newlocale(1 << LC_ALL, "de_DE", 0);
1187             loc_dup = __duplocale(loc);
1188             i = __strcoll_l(__one, __two, loc);
1189             j = __strcoll_l(__one, __two, loc_dup);
1190             return 0;
1191           }
1192           ],
1193           [enable_clocale_flag=gnu],[enable_clocale_flag=generic],
1194           [enable_clocale_flag=generic])
1195         fi
1196
1197         # ... at some point put __strxfrm_l tests in as well.
1198         ;;
1199       *)
1200         enable_clocale_flag=generic
1201         ;;
1202     esac
1203   fi
1204
1205   dnl Deal with gettext issues.
1206   AC_ARG_ENABLE(nls,
1207   [  --enable-nls            use Native Language Support (default)],
1208   , enable_nls=yes)
1209   USE_NLS=no
1210
1211   dnl Set configure bits for specified locale package
1212   case x${enable_clocale_flag} in
1213     xgeneric)
1214       AC_MSG_RESULT(generic)
1215
1216       CLOCALE_H=config/locale/generic/c_locale.h
1217       CLOCALE_CC=config/locale/generic/c_locale.cc
1218       CCODECVT_H=config/locale/generic/codecvt_specializations.h
1219       CCODECVT_CC=config/locale/generic/codecvt_members.cc
1220       CCOLLATE_CC=config/locale/generic/collate_members.cc
1221       CCTYPE_CC=config/locale/generic/ctype_members.cc
1222       CMESSAGES_H=config/locale/generic/messages_members.h
1223       CMESSAGES_CC=config/locale/generic/messages_members.cc
1224       CMONEY_CC=config/locale/generic/monetary_members.cc
1225       CNUMERIC_CC=config/locale/generic/numeric_members.cc
1226       CTIME_H=config/locale/generic/time_members.h
1227       CTIME_CC=config/locale/generic/time_members.cc
1228       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
1229       ;;
1230     xgnu)
1231       AC_MSG_RESULT(gnu)
1232
1233       # Declare intention to use gettext, and add support for specific
1234       # languages.
1235       # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
1236       ALL_LINGUAS="de fr"
1237
1238       # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
1239       AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
1240       if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
1241         USE_NLS=yes
1242       fi
1243       # Export the build objects.
1244       for ling in $ALL_LINGUAS; do \
1245         glibcpp_MOFILES="$glibcpp_MOFILES $ling.mo"; \
1246         glibcpp_POFILES="$glibcpp_POFILES $ling.po"; \
1247       done
1248       AC_SUBST(glibcpp_MOFILES)
1249       AC_SUBST(glibcpp_POFILES)
1250
1251       CLOCALE_H=config/locale/gnu/c_locale.h
1252       CLOCALE_CC=config/locale/gnu/c_locale.cc
1253       CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
1254       CCODECVT_CC=config/locale/gnu/codecvt_members.cc
1255       CCOLLATE_CC=config/locale/gnu/collate_members.cc
1256       CCTYPE_CC=config/locale/gnu/ctype_members.cc
1257       CMESSAGES_H=config/locale/gnu/messages_members.h
1258       CMESSAGES_CC=config/locale/gnu/messages_members.cc
1259       CMONEY_CC=config/locale/gnu/monetary_members.cc
1260       CNUMERIC_CC=config/locale/gnu/numeric_members.cc
1261       CTIME_H=config/locale/gnu/time_members.h
1262       CTIME_CC=config/locale/gnu/time_members.cc
1263       CLOCALE_INTERNAL_H=config/locale/gnu/c++locale_internal.h
1264       ;;
1265     xieee_1003.1-2001)
1266       AC_MSG_RESULT(IEEE 1003.1)
1267
1268       CLOCALE_H=config/locale/ieee_1003.1-2001/c_locale.h
1269       CLOCALE_CC=config/locale/ieee_1003.1-2001/c_locale.cc
1270       CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
1271       CCODECVT_CC=config/locale/generic/codecvt_members.cc
1272       CCOLLATE_CC=config/locale/generic/collate_members.cc
1273       CCTYPE_CC=config/locale/generic/ctype_members.cc
1274       CMESSAGES_H=config/locale/ieee_1003.1-2001/messages_members.h
1275       CMESSAGES_CC=config/locale/ieee_1003.1-2001/messages_members.cc
1276       CMONEY_CC=config/locale/generic/monetary_members.cc
1277       CNUMERIC_CC=config/locale/generic/numeric_members.cc
1278       CTIME_H=config/locale/generic/time_members.h
1279       CTIME_CC=config/locale/generic/time_members.cc
1280       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
1281       ;;
1282     *)
1283       echo "$enable_clocale is an unknown locale package" 1>&2
1284       exit 1
1285       ;;
1286   esac
1287
1288   # This is where the testsuite looks for locale catalogs, using the
1289   # -DLOCALEDIR define during testsuite compilation.
1290   glibcpp_localedir=${glibcpp_builddir}/po/share/locale
1291   AC_SUBST(glibcpp_localedir)
1292
1293   # A standalone libintl (e.g., GNU libintl) may be in use.
1294   if test $USE_NLS = yes; then
1295     AC_SEARCH_LIBS(gettext, intl,, USE_NLS=no)
1296   fi
1297
1298   AC_SUBST(USE_NLS)
1299   AC_SUBST(CLOCALE_H)
1300   AC_SUBST(CCODECVT_H)
1301   AC_SUBST(CMESSAGES_H)
1302   AC_SUBST(CCODECVT_CC)
1303   AC_SUBST(CCOLLATE_CC)
1304   AC_SUBST(CCTYPE_CC)
1305   AC_SUBST(CMESSAGES_CC)
1306   AC_SUBST(CMONEY_CC)
1307   AC_SUBST(CNUMERIC_CC)
1308   AC_SUBST(CTIME_H)
1309   AC_SUBST(CTIME_CC)
1310   AC_SUBST(CLOCALE_CC)
1311   AC_SUBST(CLOCALE_INTERNAL_H)
1312 ])
1313
1314
1315 dnl
1316 dnl Check for which I/O library to use:  libio, or something specific.
1317 dnl
1318 dnl GLIBCPP_ENABLE_CSTDIO
1319 dnl --enable-cstdio=libio sets config/io/c_io_libio.h and friends
1320 dnl
1321 dnl default is stdio
1322 dnl
1323 AC_DEFUN(GLIBCPP_ENABLE_CSTDIO, [
1324   AC_MSG_CHECKING([for cstdio to use])
1325   AC_ARG_ENABLE(cstdio,
1326   [  --enable-cstdio         enable stdio for target io package.
1327   --enable-cstdio=LIB     use LIB target-speific io package. [default=stdio]
1328   ],
1329   if test x$enable_cstdio = xno; then
1330      enable_cstdio=stdio
1331   fi,
1332      enable_cstdio=stdio)
1333
1334   enable_cstdio_flag=$enable_cstdio
1335
1336   dnl Check if a valid I/O package
1337   case x${enable_cstdio_flag} in
1338     xlibio)
1339       CSTDIO_H=config/io/c_io_libio.h
1340       BASIC_FILE_H=config/io/basic_file_libio.h
1341       BASIC_FILE_CC=config/io/basic_file_libio.cc
1342       AC_MSG_RESULT(libio)
1343
1344       # see if we are on a system with libio native (ie, linux)
1345       AC_CHECK_HEADER(libio.h,  has_libio=yes, has_libio=no)
1346
1347       # Need to check and see what version of glibc is being used. If
1348       # it's not glibc-2.2 or higher, then we'll need to go ahead and
1349       # compile most of libio for linux systems.
1350       if test x$has_libio = x"yes"; then
1351         case "$target" in
1352           *-*-linux*)
1353               AC_MSG_CHECKING([for glibc version >= 2.2])
1354               AC_EGREP_CPP([ok], [
1355             #include <features.h>
1356               #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
1357                     ok
1358               #endif
1359               ], glibc_satisfactory=yes, glibc_satisfactory=no)
1360               AC_MSG_RESULT($glibc_satisfactory)
1361             ;;
1362         esac
1363
1364         # XXX at the moment, admit defeat and force the recompilation
1365         # XXX of glibc even on glibc-2.2 systems, because libio is not synched.
1366         glibc_satisfactory=no
1367
1368         if test x$glibc_satisfactory = x"yes"; then
1369            need_libio=no
1370            need_wlibio=no
1371         else
1372            need_libio=yes
1373            # bkoz XXX need to add checks to enable this
1374            # pme XXX here's a first pass at such a check
1375            if test x$enable_c_mbchar != xno; then
1376               need_wlibio=yes
1377            else
1378               need_wlibio=no
1379            fi
1380         fi
1381
1382       else
1383          # Using libio, but <libio.h> doesn't exist on the target system. . .
1384          need_libio=yes
1385          # bkoz XXX need to add checks to enable this
1386          # pme XXX here's a first pass at such a check
1387          if test x$enable_c_mbchar != xno; then
1388              need_wlibio=yes
1389          else
1390              need_wlibio=no
1391          fi
1392       fi
1393       ;;
1394     xstdio | x | xno | xnone | xyes)
1395       # default
1396       CSTDIO_H=config/io/c_io_stdio.h
1397       BASIC_FILE_H=config/io/basic_file_stdio.h
1398       BASIC_FILE_CC=config/io/basic_file_stdio.cc
1399       AC_MSG_RESULT(stdio)
1400
1401       # We're not using stdio.
1402       need_libio=no
1403       need_wlibio=no
1404       ;;
1405     *)
1406       echo "$enable_cstdio is an unknown io package" 1>&2
1407       exit 1
1408       ;;
1409   esac
1410   AC_SUBST(CSTDIO_H)
1411   AC_SUBST(BASIC_FILE_H)
1412   AC_SUBST(BASIC_FILE_CC)
1413
1414   # 2000-08-04 bkoz hack
1415   CCODECVT_C=config/io/c_io_libio_codecvt.c
1416   AC_SUBST(CCODECVT_C)
1417   # 2000-08-04 bkoz hack
1418
1419   AM_CONDITIONAL(GLIBCPP_BUILD_LIBIO,
1420                  test "$need_libio" = yes || test "$need_wlibio" = yes)
1421   AM_CONDITIONAL(GLIBCPP_NEED_LIBIO, test "$need_libio" = yes)
1422   AM_CONDITIONAL(GLIBCPP_NEED_WLIBIO, test "$need_wlibio" = yes)
1423   if test "$need_libio" = yes || test "$need_wlibio" = yes; then
1424     libio_la=../libio/libio.la
1425   else
1426     libio_la=
1427   fi
1428   AC_SUBST(libio_la)
1429 ])
1430
1431
1432 dnl
1433 dnl Check to see if building and using a C++ precompiled header can be done.
1434 dnl
1435 dnl GLIBCPP_CHECK_PCH
1436 dnl
1437 dnl If it looks like it may work, flip bits on in include/Makefile.am
1438 dnl
1439 AC_DEFUN(GLIBCPP_CHECK_PCH, [
1440   ac_test_CXXFLAGS="${CXXFLAGS+set}"
1441   ac_save_CXXFLAGS="$CXXFLAGS"
1442   CXXFLAGS='-Werror -Winvalid-pch -Wno-deprecated -x c++-header'
1443
1444   AC_MSG_CHECKING([for compiler that seems to compile .gch files])
1445   if test x${glibcpp_pch_comp+set} != xset; then
1446     AC_CACHE_VAL(glibcpp_pch_comp, [
1447       AC_LANG_SAVE
1448       AC_LANG_CPLUSPLUS
1449       AC_TRY_COMPILE([#include <math.h>
1450                      ],
1451                      [ $1(0);],
1452                      [glibcpp_pch_comp=yes], [glibcpp_pch_comp=no])
1453       AC_LANG_RESTORE
1454     ])
1455   fi
1456   AC_MSG_RESULT([$glibcpp_pch_comp])
1457
1458   CXXFLAGS="$ac_save_CXXFLAGS"
1459   AM_CONDITIONAL(GLIBCPP_BUILD_PCH, test "$glibcpp_pch_comp" = yes)
1460 ])
1461
1462 dnl
1463 dnl Setup to use the gcc gthr.h thread-specific memory and mutex model.
1464 dnl We must stage the required headers so that they will be installed
1465 dnl with the library (unlike libgcc, the STL implementation is provided
1466 dnl solely within headers).  Since we must not inject random user-space
1467 dnl macro names into user-provided C++ code, we first stage into <file>-in
1468 dnl and process to <file> with an output command.  The reason for a two-
1469 dnl stage process here is to correctly handle $srcdir!=$objdir without
1470 dnl having to write complex code (the sed commands to clean the macro
1471 dnl namespace are complex and fragile enough as it is).  We must also
1472 dnl add a relative path so that -I- is supported properly.
1473 dnl
1474 AC_DEFUN(GLIBCPP_ENABLE_THREADS, [
1475   AC_MSG_CHECKING([for thread model used by GCC])
1476   target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
1477   AC_MSG_RESULT([$target_thread_file])
1478
1479   if test $target_thread_file != single; then
1480     AC_DEFINE(HAVE_GTHR_DEFAULT)
1481     AC_DEFINE(_GLIBCPP_SUPPORTS_WEAK, __GXX_WEAK__)
1482   fi
1483
1484   glibcpp_thread_h=gthr-$target_thread_file.h
1485   AC_SUBST(glibcpp_thread_h)
1486 ])
1487
1488
1489 dnl
1490 dnl Check for exception handling support.  If an explicit enable/disable
1491 dnl sjlj exceptions is given, we don't have to detect.  Otherwise the
1492 dnl target may or may not support call frame exceptions.
1493 dnl
1494 dnl GLIBCPP_ENABLE_SJLJ_EXCEPTIONS
1495 dnl --enable-sjlj-exceptions forces the use of builtin setjmp.
1496 dnl --disable-sjlj-exceptions forces the use of call frame unwinding.
1497 dnl
1498 dnl Define _GLIBCPP_SJLJ_EXCEPTIONS if the compiler is configured for it.
1499 dnl
1500 AC_DEFUN(GLIBCPP_ENABLE_SJLJ_EXCEPTIONS, [
1501   AC_MSG_CHECKING([for exception model to use])
1502   AC_LANG_SAVE
1503   AC_LANG_CPLUSPLUS
1504   AC_ARG_ENABLE(sjlj-exceptions,
1505   [  --enable-sjlj-exceptions  force use of builtin_setjmp for exceptions],
1506   [:],
1507   [dnl Botheration.  Now we've got to detect the exception model.
1508    dnl Link tests against libgcc.a are problematic since -- at least
1509    dnl as of this writing -- we've not been given proper -L bits for
1510    dnl single-tree newlib and libgloss.
1511    dnl
1512    dnl This is what AC_TRY_COMPILE would do if it didn't delete the
1513    dnl conftest files before we got a change to grep them first.
1514    cat > conftest.$ac_ext << EOF
1515 [#]line __oline__ "configure"
1516 struct S { ~S(); };
1517 void bar();
1518 void foo()
1519 {
1520   S s;
1521   bar();
1522 }
1523 EOF
1524    old_CXXFLAGS="$CXXFLAGS"
1525    CXXFLAGS=-S
1526    if AC_TRY_EVAL(ac_compile); then
1527      if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
1528        enable_sjlj_exceptions=yes
1529      elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then
1530        enable_sjlj_exceptions=no
1531      fi
1532    fi
1533    CXXFLAGS="$old_CXXFLAGS"
1534    rm -f conftest*])
1535    if test x$enable_sjlj_exceptions = xyes; then
1536      AC_DEFINE(_GLIBCPP_SJLJ_EXCEPTIONS, 1,
1537         [Define if the compiler is configured for setjmp/longjmp exceptions.])
1538      ac_exception_model_name=sjlj
1539    elif test x$enable_sjlj_exceptions = xno; then
1540      ac_exception_model_name="call frame"
1541    else
1542      AC_MSG_ERROR([unable to detect exception model])
1543    fi
1544    AC_LANG_RESTORE
1545    AC_MSG_RESULT($ac_exception_model_name)
1546 ])
1547
1548
1549 dnl
1550 dnl Check for libunwind exception handling support. If enabled then
1551 dnl we assume that the _Unwind_* functions that make up the Unwind ABI
1552 dnl (_Unwind_RaiseException, _Unwind_Resume, etc.) are defined by
1553 dnl libunwind instead of libgcc and that libstdc++ has a dependency
1554 dnl on libunwind as well as libgcc.
1555 dnl
1556 dnl GLIBCPP_ENABLE_LIBUNWIND_EXCEPTIONS
1557 dnl --enable-libunwind-exceptions forces the use of libunwind.
1558 dnl --disable-libunwind-exceptions assumes there is no libunwind.
1559 dnl
1560 dnl Define _GLIBCPP_LIBUNWIND_EXCEPTIONS if requested.
1561 dnl
1562 AC_DEFUN(GLIBCPP_ENABLE_LIBUNWIND_EXCEPTIONS, [
1563   AC_MSG_CHECKING([for use of libunwind])
1564   AC_ARG_ENABLE(libunwind-exceptions,
1565   [  --enable-libunwind-exceptions  force use of libunwind for exceptions],
1566   use_libunwind_exceptions=$enableval,
1567   use_libunwind_exceptions=no)
1568   AC_MSG_RESULT($use_libunwind_exceptions)
1569   dnl Option parsed, now set things appropriately
1570   if test x"$use_libunwind_exceptions" = xyes; then
1571     LIBUNWIND_FLAG="-lunwind"
1572   else
1573     LIBUNWIND_FLAG=""
1574   fi
1575   AC_SUBST(LIBUNWIND_FLAG)
1576 ])
1577
1578 dnl
1579 dnl Check for ISO/IEC 9899:1999 "C99" support.
1580 dnl
1581 dnl GLIBCPP_ENABLE_C99
1582 dnl --enable-c99 defines _GLIBCPP_USE_C99
1583 dnl --disable-c99 leaves _GLIBCPP_USE_C99 undefined
1584 dnl  +  Usage:  GLIBCPP_ENABLE_C99[(DEFAULT)]
1585 dnl       Where DEFAULT is either `yes' or `no'.  If omitted, it
1586 dnl       defaults to `no'.
1587 dnl  +  If 'C99' stuff is not available, ignores DEFAULT and sets `no'.
1588 dnl
1589 dnl GLIBCPP_ENABLE_C99
1590 AC_DEFUN(GLIBCPP_ENABLE_C99, [dnl
1591   define([GLIBCPP_ENABLE_C99_DEFAULT], ifelse($1, yes, yes, no))dnl
1592
1593   AC_ARG_ENABLE(c99,
1594   changequote(<<, >>)dnl
1595   <<--enable-c99            turns on 'ISO/IEC 9899:1999 support' [default=>>GLIBCPP_ENABLE_C99_DEFAULT],
1596   changequote([, ])dnl
1597   [case "$enableval" in
1598    yes) enable_c99=yes ;;
1599    no)  enable_c99=no ;;
1600    *)   AC_MSG_ERROR([Unknown argument to enable/disable C99]) ;;
1601    esac],
1602   enable_c99=GLIBCPP_ENABLE_C99_DEFAULT)dnl
1603
1604   AC_LANG_SAVE
1605   AC_LANG_CPLUSPLUS
1606
1607   # Check for the existence of <math.h> functions used if C99 is enabled.
1608   ac_c99_math=yes;
1609   AC_MSG_CHECKING([for ISO C99 support in <math.h>])
1610   AC_TRY_COMPILE([#include <math.h>],[fpclassify(0.0);],, [ac_c99_math=no])
1611   AC_TRY_COMPILE([#include <math.h>],[isfinite(0.0);],, [ac_c99_math=no])
1612   AC_TRY_COMPILE([#include <math.h>],[isinf(0.0);],, [ac_c99_math=no])
1613   AC_TRY_COMPILE([#include <math.h>],[isnan(0.0);],, [ac_c99_math=no])
1614   AC_TRY_COMPILE([#include <math.h>],[isnormal(0.0);],, [ac_c99_math=no])
1615   AC_TRY_COMPILE([#include <math.h>],[signbit(0.0);],, [ac_c99_math=no])
1616   AC_TRY_COMPILE([#include <math.h>],[isgreater(0.0,0.0);],, [ac_c99_math=no])
1617   AC_TRY_COMPILE([#include <math.h>],
1618                  [isgreaterequal(0.0,0.0);],, [ac_c99_math=no])
1619   AC_TRY_COMPILE([#include <math.h>],[isless(0.0,0.0);],, [ac_c99_math=no])
1620   AC_TRY_COMPILE([#include <math.h>],[islessequal(0.0,0.0);],,[ac_c99_math=no])
1621   AC_TRY_COMPILE([#include <math.h>],
1622                  [islessgreater(0.0,0.0);],, [ac_c99_math=no])
1623   AC_TRY_COMPILE([#include <math.h>],
1624                  [isunordered(0.0,0.0);],, [ac_c99_math=no])
1625   AC_MSG_RESULT($ac_c99_math)
1626
1627   # Check for the existence in <stdio.h> of vscanf, et. al.
1628   ac_c99_stdio=yes;
1629   AC_MSG_CHECKING([for ISO C99 support in <stdio.h>])
1630   AC_TRY_COMPILE([#include <stdio.h>],
1631                  [snprintf("12", 0, "%i");],, [ac_c99_stdio=no])
1632   AC_TRY_COMPILE([#include <stdio.h>
1633                   #include <stdarg.h>
1634                   void foo(char* fmt, ...)
1635                   {va_list args; va_start(args, fmt);
1636                   vfscanf(stderr, "%i", args);}],
1637                   [],, [ac_c99_stdio=no])
1638   AC_TRY_COMPILE([#include <stdio.h>
1639                   #include <stdarg.h>
1640                   void foo(char* fmt, ...)
1641                   {va_list args; va_start(args, fmt);
1642                   vscanf("%i", args);}],
1643                   [],, [ac_c99_stdio=no])
1644   AC_TRY_COMPILE([#include <stdio.h>
1645                   #include <stdarg.h>
1646                   void foo(char* fmt, ...)
1647                   {va_list args; va_start(args, fmt);
1648                   vsnprintf(fmt, 0, "%i", args);}],
1649                   [],, [ac_c99_stdio=no])
1650   AC_TRY_COMPILE([#include <stdio.h>
1651                   #include <stdarg.h>
1652                   void foo(char* fmt, ...)
1653                   {va_list args; va_start(args, fmt);
1654                   vsscanf(fmt, "%i", args);}],
1655                   [],, [ac_c99_stdio=no])
1656   AC_MSG_RESULT($ac_c99_stdio)
1657
1658   # Check for the existence in <stdlib.h> of lldiv_t, et. al.
1659   ac_c99_stdlib=yes;
1660   AC_MSG_CHECKING([for lldiv_t declaration])
1661   AC_CACHE_VAL(ac_c99_lldiv_t, [
1662   AC_TRY_COMPILE([#include <stdlib.h>],
1663                    [ lldiv_t mydivt;],
1664                    [ac_c99_lldiv_t=yes], [ac_c99_lldiv_t=no])
1665   ])
1666   AC_MSG_RESULT($ac_c99_lldiv_t)
1667
1668   AC_MSG_CHECKING([for ISO C99 support in <stdlib.h>])
1669   AC_TRY_COMPILE([#include <stdlib.h>],
1670                  [char* tmp; strtof("gnu", &tmp);],, [ac_c99_stdlib=no])
1671   AC_TRY_COMPILE([#include <stdlib.h>],
1672                  [char* tmp; strtold("gnu", &tmp);],, [ac_c99_stdlib=no])
1673   AC_TRY_COMPILE([#include <stdlib.h>], [llabs(10);],, [ac_c99_stdlib=no])
1674   AC_TRY_COMPILE([#include <stdlib.h>], [lldiv(10,1);],, [ac_c99_stdlib=no])
1675   AC_TRY_COMPILE([#include <stdlib.h>], [atoll("10");],, [ac_c99_stdlib=no])
1676   AC_TRY_COMPILE([#include <stdlib.h>], [_Exit(0);],, [ac_c99_stdlib=no])
1677   if test x"$ac_c99_lldiv_t" = x"no"; then
1678     ac_c99_stdlib=no;
1679   fi;
1680   AC_MSG_RESULT($ac_c99_stdlib)
1681
1682   # Check for the existence of <wchar.h> functions used if C99 is enabled.
1683   # XXX the wchar.h checks should be rolled into the general C99 bits.
1684   ac_c99_wchar=yes;
1685   AC_MSG_CHECKING([for additional ISO C99 support in <wchar.h>])
1686   AC_TRY_COMPILE([#include <wchar.h>],
1687                  [wcstold(L"10.0", NULL);],, [ac_c99_wchar=no])
1688   AC_TRY_COMPILE([#include <wchar.h>],
1689                  [wcstoll(L"10", NULL, 10);],, [ac_c99_wchar=no])
1690   AC_TRY_COMPILE([#include <wchar.h>],
1691                  [wcstoull(L"10", NULL, 10);],, [ac_c99_wchar=no])
1692   AC_MSG_RESULT($ac_c99_wchar)
1693
1694   AC_MSG_CHECKING([for enabled ISO C99 support])
1695   if test x"$ac_c99_math" = x"no" ||
1696      test x"$ac_c99_stdio" = x"no" ||
1697      test x"$ac_c99_stdlib" = x"no" ||
1698      test x"$ac_c99_wchar" = x"no"; then
1699     enable_c99=no;
1700   fi;
1701   AC_MSG_RESULT($enable_c99)
1702
1703   # Option parsed, now set things appropriately
1704   if test x"$enable_c99" = x"yes"; then
1705     AC_DEFINE(_GLIBCPP_USE_C99)
1706   fi
1707
1708   AC_LANG_RESTORE
1709 ])
1710
1711
1712 dnl
1713 dnl Check for template specializations for the 'long long' type extension.
1714 dnl The result determines only whether 'long long' I/O is enabled; things
1715 dnl like numeric_limits<> specializations are always available.
1716 dnl
1717 dnl GLIBCPP_ENABLE_LONG_LONG
1718 dnl --enable-long-long defines _GLIBCPP_USE_LONG_LONG
1719 dnl --disable-long-long leaves _GLIBCPP_USE_LONG_LONG undefined
1720 dnl  +  Usage:  GLIBCPP_ENABLE_LONG_LONG[(DEFAULT)]
1721 dnl       Where DEFAULT is either `yes' or `no'.  If omitted, it
1722 dnl       defaults to `no'.
1723 dnl  +  If 'long long' stuff is not available, ignores DEFAULT and sets `no'.
1724 dnl
1725 dnl GLIBCPP_ENABLE_LONG_LONG
1726 AC_DEFUN(GLIBCPP_ENABLE_LONG_LONG, [dnl
1727   define([GLIBCPP_ENABLE_LONG_LONG_DEFAULT], ifelse($1, yes, yes, no))dnl
1728
1729   AC_ARG_ENABLE(long-long,
1730   changequote(<<, >>)dnl
1731   <<--enable-long-long      turns on 'long long' [default=>>GLIBCPP_ENABLE_LONG_LONG_DEFAULT],
1732   changequote([, ])dnl
1733   [case "$enableval" in
1734    yes) enable_long_long=yes ;;
1735    no)  enable_long_long=no ;;
1736    *)   AC_MSG_ERROR([Unknown argument to enable/disable long long]) ;;
1737    esac],
1738   enable_long_long=GLIBCPP_ENABLE_LONG_LONG_DEFAULT)dnl
1739
1740   AC_LANG_SAVE
1741   AC_LANG_CPLUSPLUS
1742
1743   AC_MSG_CHECKING([for enabled long long I/O support])
1744   # iostreams require strtoll, strtoull to compile
1745   AC_TRY_COMPILE([#include <stdlib.h>],
1746                  [char* tmp; strtoll("gnu", &tmp, 10);],,[enable_long_long=no])
1747   AC_TRY_COMPILE([#include <stdlib.h>],
1748                  [char* tmp; strtoull("gnu", &tmp, 10);],,[enable_long_long=no])
1749
1750   # Option parsed, now set things appropriately
1751   if test x"$enable_long_long" = xyes; then
1752     AC_DEFINE(_GLIBCPP_USE_LONG_LONG)
1753   fi
1754   AC_MSG_RESULT($enable_long_long)
1755
1756   AC_LANG_RESTORE
1757 ])
1758
1759
1760 dnl
1761 dnl Check for what type of C headers to use.
1762 dnl
1763 dnl GLIBCPP_ENABLE_CHEADERS
1764 dnl --enable-cheaders= [does stuff].
1765 dnl --disable-cheaders [does not do anything, really].
1766 dnl  +  Usage:  GLIBCPP_ENABLE_CHEADERS[(DEFAULT)]
1767 dnl       Where DEFAULT is either `c' or `c_std'.
1768 dnl       If ommitted, it defaults to `c_std'.
1769 AC_DEFUN(GLIBCPP_ENABLE_CHEADERS, [dnl
1770 define([GLIBCPP_ENABLE_CHEADERS_DEFAULT], ifelse($1, c_std, c_std, c_std))dnl
1771 AC_MSG_CHECKING([for c header strategy to use])
1772 AC_ARG_ENABLE(cheaders,
1773 changequote(<<, >>)dnl
1774 <<  --enable-cheaders=MODEL       construct "C" header files for g++ [default=>>GLIBCPP_ENABLE_CHEADERS_DEFAULT],
1775 changequote([, ])
1776   [case "$enableval" in
1777    c)
1778         enable_cheaders=c
1779         ;;
1780    c_std)
1781         enable_cheaders=c_std
1782         ;;
1783    *)   AC_MSG_ERROR([Unknown argument to enable/disable "C" headers])
1784         ;;
1785   esac],
1786   enable_cheaders=GLIBCPP_ENABLE_CHEADERS_DEFAULT)
1787   AC_MSG_RESULT($enable_cheaders)
1788
1789   dnl Option parsed, now set things appropriately
1790   case "$enable_cheaders" in
1791     c_std)
1792         C_INCLUDE_DIR='${glibcpp_srcdir}/include/c_std'
1793         ;;
1794     c)
1795         C_INCLUDE_DIR='${glibcpp_srcdir}/include/c'
1796         ;;
1797   esac
1798
1799   AC_SUBST(C_INCLUDE_DIR)
1800   AM_CONDITIONAL(GLIBCPP_C_HEADERS_C, test "$enable_cheaders" = c)
1801   AM_CONDITIONAL(GLIBCPP_C_HEADERS_C_STD, test "$enable_cheaders" = c_std)
1802   AM_CONDITIONAL(GLIBCPP_C_HEADERS_COMPATIBILITY, test "$c_compatibility" = yes)
1803 ])
1804
1805
1806 dnl
1807 dnl Check for wide character support.  Has the same effect as the option
1808 dnl in gcc's configure, but in a form that autoconf can mess with.
1809 dnl
1810 dnl GLIBCPP_ENABLE_C_MBCHAR
1811 dnl --enable-c-mbchar requests all the wchar_t stuff.
1812 dnl --disable-c-mbchar doesn't.
1813 dnl  +  Usage:  GLIBCPP_ENABLE_C_MBCHAR[(DEFAULT)]
1814 dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
1815 dnl       defaults to `no'.
1816 AC_DEFUN(GLIBCPP_ENABLE_C_MBCHAR, [dnl
1817 define([GLIBCPP_ENABLE_C_MBCHAR_DEFAULT], ifelse($1, yes, yes, no))dnl
1818 AC_ARG_ENABLE(c-mbchar,
1819 changequote(<<, >>)dnl
1820 <<  --enable-c-mbchar       enable multibyte (wide) characters [default=>>GLIBCPP_ENABLE_C_MBCHAR_DEFAULT],
1821 changequote([, ])dnl
1822 [case "$enableval" in
1823  yes) enable_c_mbchar=yes ;;
1824  no)  enable_c_mbchar=no ;;
1825  *)   AC_MSG_ERROR([Unknown argument to enable/disable c-mbchar]) ;;
1826  esac],
1827 enable_c_mbchar=GLIBCPP_ENABLE_C_MBCHAR_DEFAULT)dnl
1828 dnl Option parsed, now other scripts can test enable_c_mbchar for yes/no.
1829 ])
1830
1831
1832 dnl
1833 dnl Set up *_INCLUDES and *_INCLUDE_DIR variables for all sundry Makefile.am's.
1834 dnl
1835 dnl TOPLEVEL_INCLUDES
1836 dnl LIBMATH_INCLUDES
1837 dnl LIBSUPCXX_INCLUDES
1838 dnl LIBIO_INCLUDES
1839 dnl
1840 dnl GLIBCPP_EXPORT_INCLUDES
1841 AC_DEFUN(GLIBCPP_EXPORT_INCLUDES, [
1842   # Root level of the build directory include sources.
1843   GLIBCPP_INCLUDES="-I${glibcpp_builddir}/include/${target_alias} -I${glibcpp_builddir}/include"
1844
1845   # Passed down for canadian crosses.
1846   if test x"$CANADIAN" = xyes; then
1847     TOPLEVEL_INCLUDES='-I$(includedir)'
1848   fi
1849
1850   LIBMATH_INCLUDES='-I$(top_srcdir)/libmath'
1851
1852   LIBSUPCXX_INCLUDES='-I$(top_srcdir)/libsupc++'
1853
1854   if test x"$need_libio" = xyes; then
1855     LIBIO_INCLUDES='-I$(top_builddir)/libio -I$(top_srcdir)/libio'
1856     AC_SUBST(LIBIO_INCLUDES)
1857   fi
1858
1859   # Now, export this to all the little Makefiles....
1860   AC_SUBST(GLIBCPP_INCLUDES)
1861   AC_SUBST(TOPLEVEL_INCLUDES)
1862   AC_SUBST(LIBMATH_INCLUDES)
1863   AC_SUBST(LIBSUPCXX_INCLUDES)
1864 ])
1865
1866
1867 dnl
1868 dnl Set up *_FLAGS and *FLAGS variables for all sundry Makefile.am's.
1869 dnl
1870 AC_DEFUN(GLIBCPP_EXPORT_FLAGS, [
1871   # Optimization flags that are probably a good idea for thrill-seekers. Just
1872   # uncomment the lines below and make, everything else is ready to go...
1873   # OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc
1874   OPTIMIZE_CXXFLAGS=
1875   AC_SUBST(OPTIMIZE_CXXFLAGS)
1876
1877   WARN_FLAGS='-Wall -Wno-format -W -Wwrite-strings'
1878   AC_SUBST(WARN_FLAGS)
1879 ])
1880
1881 dnl
1882 dnl  GLIBCPP_EXPORT_INSTALL_INFO
1883 dnl  calculates gxx_install_dir
1884 dnl  exports glibcpp_toolexecdir
1885 dnl  exports glibcpp_toolexeclibdir
1886 dnl  exports glibcpp_prefixdir
1887 dnl
1888 dnl Assumes cross_compiling bits already done, and with_cross_host in
1889 dnl particular
1890 dnl
1891 dnl GLIBCPP_EXPORT_INSTALL_INFO
1892 AC_DEFUN(GLIBCPP_EXPORT_INSTALL_INFO, [
1893 # Assumes glibcpp_builddir, glibcpp_srcdir are alreay set up and
1894 # exported correctly in GLIBCPP_CONFIGURE.
1895 glibcpp_toolexecdir=no
1896 glibcpp_toolexeclibdir=no
1897 glibcpp_prefixdir=${prefix}
1898
1899 # Process the option --with-gxx-include-dir=<path to include-files directory>
1900 AC_MSG_CHECKING([for --with-gxx-include-dir])
1901 AC_ARG_WITH(gxx-include-dir,
1902 [  --with-gxx-include-dir  the installation directory for include files],
1903 [case "${withval}" in
1904   yes)
1905     AC_MSG_ERROR(Missing directory for --with-gxx-include-dir)
1906     gxx_include_dir=no
1907     ;;
1908   no)
1909     gxx_include_dir=no
1910     ;;
1911   *)
1912     gxx_include_dir=${withval}
1913     ;;
1914 esac], [gxx_include_dir=no])
1915 AC_MSG_RESULT($gxx_include_dir)
1916
1917 # Process the option "--enable-version-specific-runtime-libs"
1918 AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
1919 AC_ARG_ENABLE(version-specific-runtime-libs,
1920 [  --enable-version-specific-runtime-libs    Specify that runtime libraries should be installed in a compiler-specific directory ],
1921 [case "$enableval" in
1922  yes) version_specific_libs=yes ;;
1923  no)  version_specific_libs=no ;;
1924  *)   AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);;
1925  esac],
1926 version_specific_libs=no)dnl
1927 # Option set, now we can test it.
1928 AC_MSG_RESULT($version_specific_libs)
1929
1930 # Default case for install directory for include files.
1931 if test $version_specific_libs = no && test $gxx_include_dir = no; then
1932   gxx_include_dir='$(prefix)'/include/c++/${gcc_version}
1933 fi
1934
1935 # Version-specific runtime libs processing.
1936 if test $version_specific_libs = yes; then
1937   # Need the gcc compiler version to know where to install libraries
1938   # and header files if --enable-version-specific-runtime-libs option
1939   # is selected.
1940   if test x"$gxx_include_dir" = x"no"; then
1941     gxx_include_dir='$(libdir)/gcc-lib/$(target_alias)/'${gcc_version}/include/c++
1942   fi
1943   glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
1944   glibcpp_toolexeclibdir='$(toolexecdir)/'${gcc_version}'$(MULTISUBDIR)'
1945 fi
1946
1947 # Calculate glibcpp_toolexecdir, glibcpp_toolexeclibdir
1948 # Install a library built with a cross compiler in tooldir, not libdir.
1949 if test x"$glibcpp_toolexecdir" = x"no"; then
1950   if test -n "$with_cross_host" &&
1951      test x"$with_cross_host" != x"no"; then
1952     glibcpp_toolexecdir='$(exec_prefix)/$(target_alias)'
1953     glibcpp_toolexeclibdir='$(toolexecdir)/lib'
1954   else
1955     glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
1956     glibcpp_toolexeclibdir='$(libdir)'
1957   fi
1958   multi_os_directory=`$CC -print-multi-os-directory`
1959   case $multi_os_directory in
1960   .) ;; # Avoid trailing /.
1961   *) glibcpp_toolexeclibdir=$glibcpp_toolexeclibdir/$multi_os_directory ;;
1962   esac
1963 fi
1964
1965 AC_MSG_CHECKING([for install location])
1966 AC_MSG_RESULT($gxx_include_dir)
1967
1968 AC_SUBST(glibcpp_prefixdir)
1969 AC_SUBST(gxx_include_dir)
1970 AC_SUBST(glibcpp_toolexecdir)
1971 AC_SUBST(glibcpp_toolexeclibdir)
1972 ])
1973
1974
1975 # Check for functions in math library.
1976 # Ulrich Drepper <drepper@cygnus.com>, 1998.
1977 #
1978 # This file can be copied and used freely without restrictions.  It can
1979 # be used in projects which are not available under the GNU Public License
1980 # but which still want to provide support for the GNU gettext functionality.
1981 # Please note that the actual code is *not* freely available.
1982
1983 # serial 1
1984
1985 dnl AC_REPLACE_MATHFUNCS(FUNCTION...)
1986 AC_DEFUN(AC_REPLACE_MATHFUNCS,
1987 [AC_CHECK_FUNCS([$1], , [LIBMATHOBJS="$LIBMATHOBJS ${ac_func}.lo"])])
1988
1989
1990 dnl This macro searches for a GNU version of make.  If a match is found, the
1991 dnl makefile variable `ifGNUmake' is set to the empty string, otherwise it is
1992 dnl set to "#". This is useful for  including a special features in a Makefile,
1993 dnl which cannot be handled by other versions of make.  The variable
1994 dnl _cv_gnu_make_command is set to the command to invoke GNU make if it exists,
1995 dnl the empty string otherwise.
1996 dnl
1997 dnl Here is an example of its use:
1998 dnl
1999 dnl Makefile.in might contain:
2000 dnl
2001 dnl     # A failsafe way of putting a dependency rule into a makefile
2002 dnl     $(DEPEND):
2003 dnl             $(CC) -MM $(srcdir)/*.c > $(DEPEND)
2004 dnl
2005 dnl     @ifGNUmake@ ifeq ($(DEPEND),$(wildcard $(DEPEND)))
2006 dnl     @ifGNUmake@ include $(DEPEND)
2007 dnl     @ifGNUmake@ endif
2008 dnl
2009 dnl Then configure.in would normally contain:
2010 dnl
2011 dnl     CHECK_GNU_MAKE()
2012 dnl     AC_OUTPUT(Makefile)
2013 dnl
2014 dnl Then perhaps to cause gnu make to override any other make, we could do
2015 dnl something like this (note that GNU make always looks for GNUmakefile first):
2016 dnl
2017 dnl     if  ! test x$_cv_gnu_make_command = x ; then
2018 dnl             mv Makefile GNUmakefile
2019 dnl             echo .DEFAULT: > Makefile ;
2020 dnl             echo \  $_cv_gnu_make_command \$@ >> Makefile;
2021 dnl     fi
2022 dnl
2023 dnl Then, if any (well almost any) other make is called, and GNU make also
2024 dnl exists, then the other make wraps the GNU make.
2025 dnl
2026 dnl @author John Darrington <j.darrington@elvis.murdoch.edu.au>
2027 dnl @version 1.1 #### replaced Id string now that Id is for lib-v3; pme
2028 dnl
2029 dnl #### Changes for libstdc++-v3:  reformatting and linewrapping; prepending
2030 dnl #### GLIBCPP_ to the macro name; adding the :-make fallback in the
2031 dnl #### conditional's subshell (" --version" is not a command), using a
2032 dnl #### different option to grep(1).
2033 dnl #### -pme
2034 dnl #### Fixed Bourne shell portability bug (use ${MAKE-make}, not
2035 dnl #### ${MAKE:-make}).
2036 dnl #### -msokolov
2037 AC_DEFUN(
2038   GLIBCPP_CHECK_GNU_MAKE, [AC_CACHE_CHECK( for GNU make,_cv_gnu_make_command,
2039           _cv_gnu_make_command='' ;
2040 dnl Search all the common names for GNU make
2041           for a in "${MAKE-make}" make gmake gnumake ; do
2042                   if ( $a --version 2> /dev/null | grep -c GNU > /dev/null )
2043                   then
2044                           _cv_gnu_make_command=$a ;
2045                           break;
2046                   fi
2047           done ;
2048   ) ;
2049 dnl If there was a GNU version, then set @ifGNUmake@ to the empty
2050 dnl string, '#' otherwise
2051   if test  "x$_cv_gnu_make_command" != "x"  ; then
2052           ifGNUmake='' ;
2053   else
2054           ifGNUmake='#' ;
2055   fi
2056   AC_SUBST(ifGNUmake)
2057 ])
2058
2059
2060 dnl Check for headers for, and arguments to, the setrlimit() function.
2061 dnl Used only in testsuite_hooks.h.
2062 AC_DEFUN(GLIBCPP_CHECK_SETRLIMIT_ancilliary, [
2063   AC_TRY_COMPILE([#include <unistd.h>
2064                   #include <sys/time.h>
2065                   #include <sys/resource.h>
2066                  ], [ int f = RLIMIT_$1 ; ],
2067                  [glibcpp_mresult=1], [glibcpp_mresult=0])
2068   AC_DEFINE_UNQUOTED(HAVE_MEMLIMIT_$1, $glibcpp_mresult,
2069                      [Only used in build directory testsuite_hooks.h.])
2070 ])
2071 AC_DEFUN(GLIBCPP_CHECK_SETRLIMIT, [
2072   setrlimit_have_headers=yes
2073   AC_CHECK_HEADERS(unistd.h sys/time.h sys/resource.h,
2074                    [],
2075                    setrlimit_have_headers=no)
2076   # If don't have the headers, then we can't run the tests now, and we
2077   # won't be seeing any of these during testsuite compilation.
2078   if test $setrlimit_have_headers = yes; then
2079     # Can't do these in a loop, else the resulting syntax is wrong.
2080     GLIBCPP_CHECK_SETRLIMIT_ancilliary(DATA)
2081     GLIBCPP_CHECK_SETRLIMIT_ancilliary(RSS)
2082     GLIBCPP_CHECK_SETRLIMIT_ancilliary(VMEM)
2083     GLIBCPP_CHECK_SETRLIMIT_ancilliary(AS)
2084
2085     # Check for rlimit, setrlimit.
2086     AC_CACHE_VAL(ac_setrlimit, [
2087       AC_TRY_COMPILE([#include <unistd.h>
2088                   #include <sys/time.h>
2089                   #include <sys/resource.h>
2090                      ],
2091                      [ struct rlimit r; setrlimit(0, &r);],
2092                      [ac_setrlimit=yes], [ac_setrlimit=no])
2093     ])
2094   fi
2095
2096   AC_MSG_CHECKING([for testsuite memory limit support])
2097   if test $setrlimit_have_headers = yes && test $ac_setrlimit = yes; then
2098     ac_mem_limits=yes
2099     AC_DEFINE(_GLIBCPP_MEM_LIMITS)
2100   else
2101     ac_mem_limits=no
2102   fi
2103   AC_MSG_RESULT($ac_mem_limits)
2104 ])
2105
2106
2107 dnl
2108 dnl Does any necessary configuration of the testsuite directory.  Generates
2109 dnl the testsuite_hooks.h header.
2110 dnl
2111 dnl GLIBCPP_CONFIGURE_TESTSUITE  [no args]
2112 AC_DEFUN(GLIBCPP_CONFIGURE_TESTSUITE, [
2113   GLIBCPP_CHECK_SETRLIMIT
2114
2115   # Look for setenv, so that extended locale tests can be performed.
2116   GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_3(setenv)
2117
2118   # Export file names for ABI checking.
2119   baseline_file="${glibcpp_srcdir}/config/abi/${abi_baseline_triplet}/baseline_symbols.txt"
2120   AC_SUBST(baseline_file)
2121
2122   case "$target" in
2123     *-*-cygwin* ) enable_abi_check=no ;;
2124     * ) enable_abi_check=yes ;;
2125   esac
2126
2127   # Don't do ABI checking unless native.
2128   AM_CONDITIONAL(GLIBCPP_BUILD_ABI_CHECK,
2129                  test x"$build" = x"$host" && test -z "$with_cross_host" \
2130                  && test "$enable_abi_check" = yes )
2131 ])
2132
2133
2134 sinclude(../libtool.m4)
2135 dnl The lines below arrange for aclocal not to bring an installed
2136 dnl libtool.m4 into aclocal.m4, while still arranging for automake to
2137 dnl add a definition of LIBTOOL to Makefile.in.
2138 ifelse(,,,[AC_SUBST(LIBTOOL)
2139 AC_DEFUN([AM_PROG_LIBTOOL])
2140 AC_DEFUN([AC_LIBTOOL_DLOPEN])
2141 AC_DEFUN([AC_PROG_LD])
2142 ])
2143
2144 dnl
2145 dnl Check whether S_ISREG (Posix) or S_IFREG is available in <sys/stat.h>.
2146 dnl
2147
2148 AC_DEFUN(GLIBCPP_CHECK_S_ISREG_OR_S_IFREG, [
2149   AC_CACHE_VAL(glibcpp_cv_S_ISREG, [
2150     AC_TRY_LINK([#include <sys/stat.h>],
2151                 [struct stat buffer; fstat(0, &buffer); S_ISREG(buffer.st_mode); ],
2152                 [glibcpp_cv_S_ISREG=yes],
2153                 [glibcpp_cv_S_ISREG=no])
2154   ])
2155   AC_CACHE_VAL(glibcpp_cv_S_IFREG, [
2156     AC_TRY_LINK([#include <sys/stat.h>],
2157                 [struct stat buffer; fstat(0, &buffer); S_IFREG & buffer.st_mode; ],
2158                 [glibcpp_cv_S_IFREG=yes],
2159                 [glibcpp_cv_S_IFREG=no])
2160   ])
2161   if test x$glibcpp_cv_S_ISREG = xyes; then
2162     AC_DEFINE(HAVE_S_ISREG)
2163   elif test x$glibcpp_cv_S_IFREG = xyes; then
2164     AC_DEFINE(HAVE_S_IFREG)
2165   fi
2166 ])
2167
2168 dnl
2169 dnl Check whether poll is available in <poll.h>.
2170 dnl
2171
2172 AC_DEFUN(GLIBCPP_CHECK_POLL, [
2173   AC_CACHE_VAL(glibcpp_cv_POLL, [
2174     AC_TRY_COMPILE([#include <poll.h>],
2175                 [struct pollfd pfd[1]; pfd[0].events = POLLIN; poll(pfd, 1, 0); ],
2176                 [glibcpp_cv_POLL=yes],
2177                 [glibcpp_cv_POLL=no])
2178   ])
2179   if test x$glibcpp_cv_POLL = xyes; then
2180     AC_DEFINE(HAVE_POLL)
2181   fi
2182 ])
2183
2184 # Check whether LC_MESSAGES is available in <locale.h>.
2185 # Ulrich Drepper <drepper@cygnus.com>, 1995.
2186 #
2187 # This file file be copied and used freely without restrictions.  It can
2188 # be used in projects which are not available under the GNU Public License
2189 # but which still want to provide support for the GNU gettext functionality.
2190 # Please note that the actual code is *not* freely available.
2191
2192 # serial 1
2193
2194 AC_DEFUN(AC_LC_MESSAGES, [
2195   AC_CHECK_HEADER(locale.h, [
2196     AC_CACHE_CHECK([for LC_MESSAGES], ac_cv_val_LC_MESSAGES,
2197       [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
2198        ac_cv_val_LC_MESSAGES=yes, ac_cv_val_LC_MESSAGES=no)])
2199     if test $ac_cv_val_LC_MESSAGES = yes; then
2200       AC_DEFINE(HAVE_LC_MESSAGES)
2201     fi
2202   ])
2203 ])
2204
2205
2206 dnl
2207 dnl Check for whether the Boost-derived checks should be turned on.
2208 dnl
2209 dnl GLIBCPP_ENABLE_CONCEPT_CHECKS
2210 dnl --enable-concept-checks turns them on.
2211 dnl --disable-concept-checks leaves them off.
2212 dnl  +  Usage:  GLIBCPP_ENABLE_CONCEPT_CHECKS[(DEFAULT)]
2213 dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
2214 dnl       defaults to `no'.
2215 AC_DEFUN(GLIBCPP_ENABLE_CONCEPT_CHECKS, [dnl
2216 define([GLIBCPP_ENABLE_CONCEPT_CHECKS_DEFAULT], ifelse($1, yes, yes, no))dnl
2217 AC_ARG_ENABLE(concept-checks,
2218 changequote(<<, >>)dnl
2219 <<  --enable-concept-checks use Boost-derived template checks [default=>>GLIBCPP_ENABLE_CONCEPT_CHECKS_DEFAULT],
2220 changequote([, ])dnl
2221 [case "$enableval" in
2222  yes) enable_concept_checks=yes ;;
2223  no)  enable_concept_checks=no ;;
2224  *)   AC_MSG_ERROR([Unknown argument to enable/disable concept checks]) ;;
2225  esac],
2226 enable_concept_checks=GLIBCPP_ENABLE_CONCEPT_CHECKS_DEFAULT)dnl
2227 dnl Option parsed, now set things appropriately
2228 if test x"$enable_concept_checks" = xyes; then
2229   AC_DEFINE(_GLIBCPP_CONCEPT_CHECKS)
2230 fi
2231 ])
2232
2233
2234 dnl
2235 dnl Add version tags to symbols in shared library (or not), additionally
2236 dnl marking other symbols as private/local (or not).
2237 dnl
2238 dnl GLIBCPP_ENABLE_SYMVERS
2239 dnl --enable-symvers=style adds a version script to the linker call when
2240 dnl       creating the shared library.  The choice of version script is
2241 dnl       controlled by 'style'.
2242 dnl --disable-symvers does not.
2243 dnl  +  Usage:  GLIBCPP_ENABLE_SYMVERS[(DEFAULT)]
2244 dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
2245 dnl       defaults to `no'.  Passing `yes' tries to choose a default style
2246 dnl       based on linker characteristics.  Passing 'no' disables versioning.
2247 AC_DEFUN(GLIBCPP_ENABLE_SYMVERS, [dnl
2248 define([GLIBCPP_ENABLE_SYMVERS_DEFAULT], ifelse($1, yes, yes, no))dnl
2249 AC_ARG_ENABLE(symvers,
2250 changequote(<<, >>)dnl
2251 <<  --enable-symvers=style  enables symbol versioning of the shared library [default=>>GLIBCPP_ENABLE_SYMVERS_DEFAULT],
2252 changequote([, ])dnl
2253 [case "$enableval" in
2254  yes) enable_symvers=yes ;;
2255  no)  enable_symvers=no ;;
2256  # other names here, just as sanity checks
2257  #gnu|sun|etcetera) enable_symvers=$enableval ;;
2258  gnu) enable_symvers=$enableval ;;
2259  *)   AC_MSG_ERROR([Unknown argument to enable/disable symvers]) ;;
2260  esac],
2261 enable_symvers=GLIBCPP_ENABLE_SYMVERS_DEFAULT)dnl
2262
2263 # If we never went through the GLIBCPP_CHECK_LINKER_FEATURES macro, then we
2264 # don't know enough about $LD to do tricks...
2265 if test x$enable_shared = xno ||
2266         test "x$LD" = x ||
2267         test x$glibcpp_gnu_ld_version = x; then
2268   enable_symvers=no
2269 fi
2270
2271 # Check to see if libgcc_s exists, indicating that shared libgcc is possible.
2272 if test $enable_symvers != no; then
2273   AC_MSG_CHECKING([for shared libgcc])
2274   ac_save_CFLAGS="$CFLAGS"
2275   CFLAGS=' -lgcc_s'
2276   AC_TRY_LINK(, [return 0], glibcpp_shared_libgcc=yes, glibcpp_shared_libgcc=no)
2277   CFLAGS="$ac_save_CFLAGS"
2278   AC_MSG_RESULT($glibcpp_shared_libgcc)
2279 fi
2280
2281 # For GNU ld, we need at least this version.  It's 2.12 in the same format
2282 # as the tested-for version.  See GLIBCPP_CHECK_LINKER_FEATURES for more.
2283 glibcpp_min_gnu_ld_version=21200
2284
2285 # Check to see if unspecified "yes" value can win, given results
2286 # above.
2287 if test $enable_symvers = yes ; then
2288   if test $with_gnu_ld = yes &&
2289     test $glibcpp_shared_libgcc = yes ;
2290   then
2291     if test $glibcpp_gnu_ld_version -ge $glibcpp_min_gnu_ld_version ; then
2292         enable_symvers=gnu
2293     else
2294       ac_test_CFLAGS="${CFLAGS+set}"
2295       ac_save_CFLAGS="$CFLAGS"
2296       CFLAGS='-shared -Wl,--version-script,conftest.map'
2297       enable_symvers=no
2298       changequote(,)
2299       echo 'FOO { global: f[a-z]o; local: *; };' > conftest.map
2300       changequote([,])
2301       AC_TRY_LINK([int foo;],, enable_symvers=gnu)
2302       if test "$ac_test_CFLAGS" = set; then
2303         CFLAGS="$ac_save_CFLAGS"
2304       else
2305         # this is the suspicious part
2306         CFLAGS=''
2307       fi
2308       rm -f conftest.map
2309     fi
2310   else
2311     # just fail for now
2312     enable_symvers=no
2313   fi
2314 fi
2315
2316 dnl Everything parsed; figure out what file to use.
2317 case $enable_symvers in
2318   no)
2319       SYMVER_MAP=config/linker-map.dummy
2320       ;;
2321   gnu)
2322       SYMVER_MAP=config/linker-map.gnu
2323       AC_DEFINE(_GLIBCPP_SYMVER)
2324       ;;
2325 esac
2326
2327 AC_SUBST(SYMVER_MAP)
2328 AM_CONDITIONAL(GLIBCPP_BUILD_VERSIONED_SHLIB, test $enable_symvers != no)
2329 AC_MSG_CHECKING([versioning on shared library symbols])
2330 AC_MSG_RESULT($enable_symvers)
2331 ])
2332