OSDN Git Service

2000-12-05 Benjamin Kosnik <bkoz@haight.redhat.com>
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / aclocal.m4
1 dnl aclocal.m4 generated automatically by aclocal 1.4
2
3 dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
4 dnl This file is free software; the Free Software Foundation
5 dnl gives unlimited permission to copy and/or distribute it,
6 dnl with or without modifications, as long as this notice is preserved.
7
8 dnl This program is distributed in the hope that it will be useful,
9 dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
10 dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
11 dnl PARTICULAR PURPOSE.
12
13 dnl
14 dnl Initialize configure bits.
15 dnl
16 dnl Define OPTLEVEL='-O2' if new inlining code present.
17 dnl
18 dnl GLIBCPP_CONFIGURE
19 AC_DEFUN(GLIBCPP_CONFIGURE, [
20   dnl Default to --enable-multilib
21   AC_ARG_ENABLE(multilib,
22   [  --enable-multilib       build hella library versions (default)],
23   [case "${enableval}" in
24     yes) multilib=yes ;;
25     no)  multilib=no ;;
26     *)   AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
27    esac], [multilib=yes])dnl
28
29   dnl We may get other options which we dont document:
30   dnl --with-target-subdir, --with-multisrctop, --with-multisubdir
31   if test "[$]{srcdir}" = "."; then
32     if test "[$]{with_target_subdir}" != "."; then
33       glibcpp_basedir="[$]{srcdir}/[$]{with_multisrctop}../$1"
34     else
35       glibcpp_basedir="[$]{srcdir}/[$]{with_multisrctop}$1"
36     fi
37   else
38     glibcpp_basedir="[$]{srcdir}/$1"
39   fi
40   AC_SUBST(glibcpp_basedir)
41
42   AM_INIT_AUTOMAKE(libstdc++, 2.90.8)
43
44   # Never versions of autoconf add an underscore to these functions.
45   # Prevent future problems ...
46   ifdef([AC_PROG_CC_G],[],[define([AC_PROG_CC_G],defn([_AC_PROG_CC_G]))])
47   ifdef([AC_PROG_CC_GNU],[],[define([AC_PROG_CC_GNU],defn([_AC_PROG_CC_GNU]))])
48   ifdef([AC_PROG_CXX_G],[],[define([AC_PROG_CXX_G],defn([_AC_PROG_CXX_G]))])
49   ifdef([AC_PROG_CXX_GNU],[],[define([AC_PROG_CXX_GNU],defn([_AC_PROG_CXX_GNU]))])
50
51 #  AC_PROG_CC
52
53 # FIXME: We temporarily define our own version of AC_PROG_CC.  This is
54 # copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS.  We
55 # are probably using a cross compiler, which will not be able to fully
56 # link an executable.  This should really be fixed in autoconf
57 # itself.
58
59 AC_DEFUN(LIB_AC_PROG_CC,
60 [AC_BEFORE([$0], [AC_PROG_CPP])dnl
61 dnl Fool anybody using AC_PROG_CC.
62 AC_PROVIDE([AC_PROG_CC])
63 AC_CHECK_PROG(CC, gcc, gcc)
64 if test -z "$CC"; then
65   AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
66   test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
67 fi
68
69 AC_PROG_CC_GNU
70
71 if test $ac_cv_prog_gcc = yes; then
72   GCC=yes
73 dnl Check whether -g works, even if CFLAGS is set, in case the package
74 dnl plays around with CFLAGS (such as to build both debugging and
75 dnl normal versions of a library), tasteless as that idea is.
76   ac_test_CFLAGS="${CFLAGS+set}"
77   ac_save_CFLAGS="$CFLAGS"
78   CFLAGS=
79   AC_PROG_CC_G
80   if test "$ac_test_CFLAGS" = set; then
81     CFLAGS="$ac_save_CFLAGS"
82   elif test $ac_cv_prog_cc_g = yes; then
83     CFLAGS="-g -O2"
84   else
85     CFLAGS="-O2"
86   fi
87 else
88   GCC=
89   test "${CFLAGS+set}" = set || CFLAGS="-g"
90 fi
91 ])
92
93 LIB_AC_PROG_CC
94
95 # Can't just call these here as g++ requires libstc++ to be built....
96 #  AC_PROG_CXX
97
98 # Likewise for AC_PROG_CXX.
99 AC_DEFUN(LIB_AC_PROG_CXX,
100 [AC_BEFORE([$0], [AC_PROG_CXXCPP])dnl
101 dnl Fool anybody using AC_PROG_CXX.
102 AC_PROVIDE([AC_PROG_CXX])
103 # Use CXX_libstdcxx so that we do not cause CXX to be cached with the
104 # flags that come in CXX while configuring libstdc++.  They're different
105 # from those used for all other target libraries.  If CXX is set in
106 # the environment, respect that here.
107 CXX_libstdcxx=$CXX
108 AC_CHECK_PROGS(CXX_libstdcxx, $CCC c++ g++ gcc CC cxx cc++, gcc)
109 CXX=$CXX_libstdcxx
110 AC_SUBST(CXX)
111 test -z "$CXX" && AC_MSG_ERROR([no acceptable c++ found in \$PATH])
112
113 AC_PROG_CXX_GNU
114
115 if test $ac_cv_prog_gxx = yes; then
116   GXX=yes
117 dnl Check whether -g works, even if CXXFLAGS is set, in case the package
118 dnl plays around with CXXFLAGS (such as to build both debugging and
119 dnl normal versions of a library), tasteless as that idea is.
120   ac_test_CXXFLAGS="${CXXFLAGS+set}"
121   ac_save_CXXFLAGS="$CXXFLAGS"
122   CXXFLAGS=
123   AC_PROG_CXX_G
124   if test "$ac_test_CXXFLAGS" = set; then
125     CXXFLAGS="$ac_save_CXXFLAGS"
126   elif test $ac_cv_prog_cxx_g = yes; then
127     CXXFLAGS="-g -O2"
128   else
129     CXXFLAGS="-O2"
130   fi
131 else
132   GXX=
133   test "${CXXFLAGS+set}" = set || CXXFLAGS="-g"
134 fi
135 ])
136
137 LIB_AC_PROG_CXX
138
139   AC_CHECK_TOOL(AS, as)
140   AC_CHECK_TOOL(AR, ar)
141   AC_CHECK_TOOL(RANLIB, ranlib, :)
142
143   AC_PROG_INSTALL
144
145   AM_MAINTAINER_MODE
146
147   # We need AC_EXEEXT to keep automake happy in cygnus mode.  However,
148   # at least currently, we never actually build a program, so we never
149   # need to use $(EXEEXT).  Moreover, the test for EXEEXT normally
150   # fails, because we are probably configuring with a cross compiler
151   # which cant create executables.  So we include AC_EXEEXT to keep
152   # automake happy, but we dont execute it, since we dont care about
153   # the result.
154   if false; then
155     AC_EXEEXT
156   fi
157
158   # configure.host sets the following important variables
159   #        glibcpp_cflags    - host specific C compiler flags
160   #        glibcpp_cxxflags  - host specific C++ compiler flags
161   glibcpp_cflags=
162   glibcpp_cxxflags=
163
164   . [$]{glibcpp_basedir}/configure.host
165
166   case [$]{glibcpp_basedir} in
167     /* | [A-Za-z]:[/\\]*) libgcj_flagbasedir=[$]{glibcpp_basedir} ;;
168     *) glibcpp_flagbasedir='[$](top_builddir)/'[$]{glibcpp_basedir} ;;
169   esac
170
171   # This does for the target what configure.host does for the host.  In
172   # addition to modifying the same flags, it also sets up symlinks.
173   GLIBCPP_CHECK_TARGET
174
175   GLIBCPP_CFLAGS="[$]{glibcpp_cflags}"
176   GLIBCPP_CXXFLAGS="[$]{glibcpp_cxxflags}"
177   AC_SUBST(GLIBCPP_CFLAGS)
178   AC_SUBST(GLIBCPP_CXXFLAGS)
179 ])
180
181
182 dnl
183 dnl Check to see if g++ can compile this library, and if so, if any version-
184 dnl specific precautions need to be taken. 
185 dnl 
186 dnl GLIBCPP_CHECK_COMPILER_VERSION
187 AC_DEFUN(GLIBCPP_CHECK_COMPILER_VERSION, [
188 if test ! -f stamp-sanity-compiler; then
189   AC_MSG_CHECKING([for g++ that will successfully compile libstdc++-v3])
190   AC_LANG_SAVE
191   AC_LANG_CPLUSPLUS
192   AC_EGREP_CPP(ok, [
193   #if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) 
194     ok
195   #endif
196   ], gpp_satisfactory=yes, AC_MSG_ERROR([please upgrade to gcc-2.95 or above]))
197   AC_LANG_RESTORE
198   AC_MSG_RESULT($gpp_satisfactory)
199   touch stamp-sanity-compiler
200 fi
201 ])
202
203
204 dnl
205 dnl Test for newer compiler features, or features that are present in newer
206 dnl compiler version but not older compiler versions should be placed
207 dnl here.
208 dnl
209 dnl Define WFMT_FLAGS='-fdiagnostics-show-location=once' if possible
210 dnl 
211 dnl Define WERROR='-Werror' if requested and possible; g++'s that lack the
212 dnl new inlining code or the new system_header pragma will die on -Werror.
213 dnl Leave it out by default and use maint-mode to use it.
214 dnl
215 dnl Define SECTION_FLAGS='-ffunction-sections -fdata-sections' if
216 dnl compiler supports it.  
217 dnl GLIBCPP_CHECK_COMPILER_FEATURES
218 AC_DEFUN(GLIBCPP_CHECK_COMPILER_FEATURES, [
219   # All these tests are for C++; save the language and the compiler flags.
220   # The CXXFLAGS thing is suspicious, but based on similar bits 
221   # found in GLIBCPP_CONFIGURE.
222   AC_LANG_SAVE
223   AC_LANG_CPLUSPLUS
224   ac_test_CXXFLAGS="${CXXFLAGS+set}"
225   ac_save_CXXFLAGS="$CXXFLAGS"
226
227   # Check for maintainer-mode bits.
228   if test x"$USE_MAINTAINER_MODE" = xno; then
229     WERROR=''
230   else
231     WERROR='-Werror'
232   fi
233
234   # Check for more sophisticated diagnostic control.
235   AC_MSG_CHECKING([for g++ that supports -fdiagnostics-show-location=once])
236   CXXFLAGS='-Werror -fdiagnostics-show-location=once'
237   AC_TRY_COMPILE(, [int foo;
238   ], [ac_gabydiags=yes], [ac_gabydiags=no])
239   if test "$ac_test_CXXFLAGS" = set; then
240     CXXFLAGS="$ac_save_CXXFLAGS"
241   else
242     # this is the suspicious part
243     CXXFLAGS=''
244   fi
245   if test "$ac_gabydiags" = "yes"; then
246     WFMT_FLAGS='-fdiagnostics-show-location=once'
247   fi
248   AC_MSG_RESULT($ac_gabydiags)
249
250   # Check for -ffunction-sections -fdata-sections
251   AC_MSG_CHECKING([for g++ that supports -ffunction-sections -fdata-sections])
252   CXXFLAGS='-Werror -ffunction-sections -fdata-sections'
253   AC_TRY_COMPILE(, [int foo;
254   ], [ac_fdsections=yes], [ac_fdsections=no])
255   if test "$ac_test_CXXFLAGS" = set; then
256     CXXFLAGS="$ac_save_CXXFLAGS"
257   else
258     # this is the suspicious part
259     CXXFLAGS=''
260   fi
261   if test "$ac_fdsections" = "yes"; then
262     SECTION_FLAGS='-ffunction-sections -fdata-sections'
263   fi
264   AC_MSG_RESULT($ac_fdsections)
265
266   AC_LANG_RESTORE
267   AC_SUBST(WERROR)
268   AC_SUBST(WFMT_FLAGS)
269   AC_SUBST(SECTION_FLAGS)
270 ])
271
272
273 dnl
274 dnl If GNU ld is in use, check to see if tricky linker opts can be used.  If
275 dnl the native linker is in use, all variables will be defined to something
276 dnl safe (like an empty string).
277 dnl
278 dnl Define SECTION_LDFLAGS='-Wl,--gc-sections' if possible.
279 dnl Define OPT_LDFLAGS='-Wl,-O1' if possible.
280 dnl
281 dnl GLIBCPP_CHECK_LINKER_FEATURES
282 AC_DEFUN(GLIBCPP_CHECK_LINKER_FEATURES, [
283   # If we're not using GNU ld, then there's no point in even trying these
284   # tests.  Check for that first.  We should have already tested for gld
285   # by now (in libtool), but require it now just to be safe...
286   SECTION_LDFLAGS=''
287   OPT_LDFLAGS=''
288   AC_REQUIRE([AC_PROG_LD])
289
290   # Set --gc-sections.
291   if test "$ac_cv_prog_gnu_ld" = "notbroken"; then
292     # GNU ld it is!  Joy and bunny rabbits!
293
294     # All these tests are for C++; save the language and the compiler flags.
295     # Need to do this so that g++ won't try to link in libstdc++
296     ac_test_CFLAGS="${CFLAGS+set}"
297     ac_save_CFLAGS="$CFLAGS"
298     CFLAGS='-x c++  -Wl,--gc-sections'
299
300     # Check for -Wl,--gc-sections
301     # XXX This test is broken at the moment, as symbols required for
302     # linking are now in libsupc++ (not built yet.....). In addition, 
303     # this test has cored on solaris in the past. In addition,
304     # --gc-sections doesn't really work at the moment (keeps on discarding
305     # used sections, first .eh_frame and now some of the glibc sections for
306     # iconv). Bzzzzt. Thanks for playing, maybe next time.
307     AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
308     AC_TRY_RUN([
309      int main(void) 
310      {
311        try { throw 1; }
312        catch (...) { };
313        return 0;
314      }
315     ], [ac_sectionLDflags=yes],[ac_sectionLFflags=no], [ac_sectionLDflags=yes])
316     if test "$ac_test_CFLAGS" = set; then
317       CFLAGS="$ac_save_CFLAGS"
318     else
319       # this is the suspicious part
320       CFLAGS=''
321     fi
322     if test "$ac_sectionLDflags" = "yes"; then
323       SECTION_LDFLAGS='-Wl,--gc-sections'
324     fi
325     AC_MSG_RESULT($ac_sectionLDflags)
326   fi
327
328   # Set linker optimization flags.
329   if test "$ac_cv_prog_gnu_ld" = "yes"; then
330     OPT_LDFLAGS='-Wl,-O1'
331   fi
332
333   AC_SUBST(SECTION_LDFLAGS)
334   AC_SUBST(OPT_LDFLAGS)
335 ])
336
337
338 dnl
339 dnl Check to see if the (math function) argument passed is
340 dnl 1) declared when using the c++ compiler
341 dnl 2) has "C" linkage
342 dnl
343 dnl Define HAVE_CARGF etc if "cargf" is declared and links
344 dnl
345 dnl argument 1 is name of function to check
346 dnl
347 dnl ASSUMES argument is a math function with ONE parameter
348 dnl
349 dnl GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1
350 AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1, [
351   AC_MSG_CHECKING([for $1 declaration])
352   AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
353     AC_LANG_SAVE
354     AC_LANG_CPLUSPLUS
355     AC_TRY_COMPILE([#include <math.h>], 
356                    [ $1(0);], 
357                    [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
358     AC_LANG_RESTORE
359   ])
360   AC_MSG_RESULT($glibcpp_cv_func_$1_use)
361   if test x$glibcpp_cv_func_$1_use = x"yes"; then
362     AC_CHECK_FUNCS($1)    
363   fi
364 ])
365
366
367 dnl
368 dnl Check to see if the (math function) argument passed is
369 dnl 1) declared when using the c++ compiler
370 dnl 2) has "C" linkage
371 dnl
372 dnl Define HAVE_CARGF etc if "cargf" is declared and links
373 dnl
374 dnl argument 1 is name of function to check
375 dnl
376 dnl ASSUMES argument is a math function with TWO parameters
377 dnl
378 dnl GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2
379 AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2, [
380   AC_MSG_CHECKING([for $1 declaration])
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                    [ $1(0, 0);], 
386                    [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
387     AC_LANG_RESTORE
388   ])
389   AC_MSG_RESULT($glibcpp_cv_func_$1_use)
390   if test x$glibcpp_cv_func_$1_use = x"yes"; then
391     AC_CHECK_FUNCS($1)    
392   fi
393 ])
394
395
396 dnl
397 dnl Check to see if the (math function) argument passed is
398 dnl 1) declared when using the c++ compiler
399 dnl 2) has "C" linkage
400 dnl
401 dnl Define HAVE_CARGF etc if "cargf" is declared and links
402 dnl
403 dnl argument 1 is name of function to check
404 dnl
405 dnl ASSUMES argument is a math function with THREE parameters
406 dnl
407 dnl GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3
408 AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3, [
409   AC_MSG_CHECKING([for $1 declaration])
410   AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
411     AC_LANG_SAVE
412     AC_LANG_CPLUSPLUS
413     AC_TRY_COMPILE([#include <math.h>], 
414                    [ $1(0, 0, 0);], 
415                    [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
416     AC_LANG_RESTORE
417   ])
418   AC_MSG_RESULT($glibcpp_cv_func_$1_use)
419   if test x$glibcpp_cv_func_$1_use = x"yes"; then
420     AC_CHECK_FUNCS($1)    
421   fi
422 ])
423
424
425 dnl
426 dnl Check to see if the (stdlib function) argument passed is
427 dnl 1) declared when using the c++ compiler
428 dnl 2) has "C" linkage
429 dnl
430 dnl Define HAVE_STRTOLD if "strtold" is declared and links
431 dnl Define HAVE_STRTOF if "strtof" is declared and links
432 dnl
433 dnl argument 1 is name of function to check
434 dnl
435 dnl ASSUMES argument is a math function with TWO parameters
436 dnl
437 dnl GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_2
438 AC_DEFUN(GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_2, [
439   AC_MSG_CHECKING([for $1 declaration])
440   AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
441     AC_LANG_SAVE
442     AC_LANG_CPLUSPLUS
443     AC_TRY_COMPILE([#include <stdlib.h>], 
444                    [ $1(0, 0);], 
445                    [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
446     AC_LANG_RESTORE
447   ])
448   AC_MSG_RESULT($glibcpp_cv_func_$1_use)
449   if test x$glibcpp_cv_func_$1_use = x"yes"; then
450     AC_CHECK_FUNCS($1)    
451   fi
452 ])
453
454
455 dnl
456 dnl Because the builtins are picky picky picky about the arguments they take, 
457 dnl do an explict linkage tests here.
458 dnl Check to see if the (math function) argument passed is
459 dnl 1) declared when using the c++ compiler
460 dnl 2) has "C" linkage
461 dnl
462 dnl Define HAVE_CARGF etc if "cargf" is declared and links
463 dnl
464 dnl argument 1 is name of function to check
465 dnl
466 dnl ASSUMES argument is a math function with ONE parameter
467 dnl
468 dnl GLIBCPP_CHECK_BUILTIN_MATH_DECL_LINKAGE_1
469 AC_DEFUN(GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1, [
470   AC_MSG_CHECKING([for $1 declaration])
471   AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
472     AC_LANG_SAVE
473     AC_LANG_CPLUSPLUS
474     AC_TRY_COMPILE([#include <math.h>], 
475                    [ $1(0);], 
476                    [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
477     AC_LANG_RESTORE
478   ])
479   AC_MSG_RESULT($glibcpp_cv_func_$1_use)
480   if test x$glibcpp_cv_func_$1_use = x"yes"; then
481     AC_MSG_CHECKING([for $1 linkage])
482     AC_CACHE_VAL(glibcpp_cv_func_$1_link, [
483       AC_TRY_LINK([#include <math.h>], 
484                   [ $1(0);], 
485                   [glibcpp_cv_func_$1_link=yes], [glibcpp_cv_func_$1_link=no])
486     ])
487     AC_MSG_RESULT($glibcpp_cv_func_$1_link)
488     if test x$glibcpp_cv_func_$1_link = x"yes"; then
489       ac_tr_func=HAVE_`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
490       AC_DEFINE_UNQUOTED(${ac_tr_func})
491     fi
492   fi
493 ])
494
495
496 dnl
497 dnl Check to see what builtin math functions are supported
498 dnl
499 dnl check for __builtin_abs
500 dnl check for __builtin_fabsf
501 dnl check for __builtin_fabs
502 dnl check for __builtin_fabl
503 dnl check for __builtin_labs
504 dnl check for __builtin_sqrtf
505 dnl check for __builtin_sqrtl
506 dnl check for __builtin_fsqrt
507 dnl check for __builtin_sinf
508 dnl check for __builtin_sin
509 dnl check for __builtin_sinl
510 dnl check for __builtin_cosf
511 dnl check for __builtin_cos
512 dnl check for __builtin_cosl
513 dnl
514 dnl GLIBCPP_CHECK_BUILTIN_MATH_SUPPORT
515 AC_DEFUN(GLIBCPP_CHECK_BUILTIN_MATH_SUPPORT, [
516   dnl Test for builtin math functions.
517   dnl These are made in gcc/c-common.c 
518   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_abs)
519   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabsf)
520   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabs)
521   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabsl)
522   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_labs)
523
524   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrtf)
525   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fsqrt)
526   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrtl)
527
528   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sinf)
529   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sin)
530   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sinl)
531
532   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cosf)
533   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cos)
534   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cosl)
535
536   dnl There is, without a doubt, a more elegant way to have these
537   dnl names exported so that they won't be stripped out of acconfig.h by
538   dnl autoheader. I leave this as an exercise to somebody less frustrated
539   dnl than I.... please email the libstdc++ list if you can figure out a
540   dnl more elegant approach (see autoconf/acgen.m4 and specifically
541   dnl AC_CHECK_FUNC for things to steal.)
542   dummyvar=no
543   if test x$dummyvar = x"yes"; then
544     AC_DEFINE(HAVE___BUILTIN_ABS)
545     AC_DEFINE(HAVE___BUILTIN_LABS)
546     AC_DEFINE(HAVE___BUILTIN_COS)
547     AC_DEFINE(HAVE___BUILTIN_COSF)
548     AC_DEFINE(HAVE___BUILTIN_COSL)
549     AC_DEFINE(HAVE___BUILTIN_FABS)
550     AC_DEFINE(HAVE___BUILTIN_FABSF)
551     AC_DEFINE(HAVE___BUILTIN_FABSL)
552     AC_DEFINE(HAVE___BUILTIN_SIN)
553     AC_DEFINE(HAVE___BUILTIN_SINF)
554     AC_DEFINE(HAVE___BUILTIN_SINL)
555     AC_DEFINE(HAVE___BUILTIN_FSQRT)
556     AC_DEFINE(HAVE___BUILTIN_SQRTF)
557     AC_DEFINE(HAVE___BUILTIN_SQRTL)
558   fi
559 ])
560
561
562 dnl
563 dnl Check to see what the underlying c library 
564 dnl These checks need to do two things: 
565 dnl 1) make sure the name is declared when using the c++ compiler
566 dnl 2) make sure the name has "C" linkage
567 dnl This might seem like overkill but experience has shown that it's not...
568 dnl
569 dnl Define HAVE_STRTOF etc if "strtof" is found.
570 dnl Define HAVE_STRTOLD etc if "strtold" is found.
571 dnl
572 dnl GLIBCPP_CHECK_STDLIB_SUPPORT
573 AC_DEFUN(GLIBCPP_CHECK_STDLIB_SUPPORT, [
574   ac_test_CXXFLAGS="${CXXFLAGS+set}"
575   ac_save_CXXFLAGS="$CXXFLAGS"
576   CXXFLAGS='-fno-builtins -D_GNU_SOURCE'
577
578   AC_CHECK_FUNCS(strtof)
579   GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtold)
580
581   CXXFLAGS="$ac_save_CXXFLAGS"
582 ])
583
584
585 dnl
586 dnl Check to see what the underlying c library or math library is like.
587 dnl These checks need to do two things: 
588 dnl 1) make sure the name is declared when using the c++ compiler
589 dnl 2) make sure the name has "C" linkage
590 dnl This might seem like overkill but experience has shown that it's not...
591 dnl
592 dnl Define HAVE_CARGF etc if "cargf" is found.
593 dnl
594 dnl GLIBCPP_CHECK_MATH_SUPPORT
595 AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
596   ac_test_CXXFLAGS="${CXXFLAGS+set}"
597   ac_save_CXXFLAGS="$CXXFLAGS"
598   CXXFLAGS='-fno-builtins -D_GNU_SOURCE'
599
600   dnl Check libm
601   AC_CHECK_LIB(m, sin, libm="-lm")
602   ac_save_LIBS="$LIBS"
603   LIBS="$LIBS $libm"
604
605   dnl Check to see if certain C math functions exist.
606   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinf)
607   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnan)
608   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finite)
609   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(copysign)
610   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincos)
611   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fpclass)
612   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(qfpclass)
613
614   dnl Check to see if basic C math functions have float versions.
615   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnanf)
616   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinff)
617   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(acosf)
618   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(asinf)
619   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(atanf)
620   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(atan2f)
621   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(ceilf)
622   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(cosf)
623   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(coshf)
624   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(expf)
625   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fabsf)
626   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(floorf)
627   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(fmodf)
628   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(frexpf)
629   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpf)
630   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(logf)
631   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(log10f)
632   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(modff)
633   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(powf)
634   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sinf)
635   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sinhf)
636   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtf)
637   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(tanf)
638   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(tanhf)
639   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincosf)
640   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finitef)
641
642   dnl Check to see if basic C math functions have long double versions.
643   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnanl)
644   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinfl)
645   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(copysignl)
646   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(acosl)
647   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(asinl)
648   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(atanl)
649   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(atan2l)
650   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(ceill)
651   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(cosl)
652   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(coshl)
653   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(expl)
654   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fabsl)
655   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(floorl)
656   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(fmodl)
657   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(frexpl)
658   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpl)
659   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(logl)
660   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(log10l)
661   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(modfl)
662   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(powl)
663   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sinl)
664   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sinhl)
665   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtl)
666   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(tanl)
667   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(tanhl)
668   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincosl)
669   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finitel)
670
671   dnl Some runtimes have these functions with a preceding underscore. Please
672   dnl keep this sync'd with the one above. And if you add any new symbol,
673   dnl please add the corresponding block in the @BOTTOM@ section of acconfig.h.
674   dnl Check to see if certain C math functions exist.
675   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_isinf)
676   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_isnan)
677   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_finite)
678   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_copysign)
679   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(_sincos)
680   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_fpclass)
681   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_qfpclass)
682
683   dnl Check to see if basic C math functions have float versions.
684   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_isnanf)
685   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_isinff)
686   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_acosf)
687   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_asinf)
688   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_atanf)
689   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_atan2f)
690   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_ceilf)
691   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_cosf)
692   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_coshf)
693   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_expf)
694   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_fabsf)
695   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_floorf)
696   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_fmodf)
697   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_frexpf)
698   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_ldexpf)
699   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_logf)
700   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_log10f)
701   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_modff)
702   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_powf)
703   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sinf)
704   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sinhf)
705   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sqrtf)
706   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_tanf)
707   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_tanhf)
708   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(_sincosf)
709   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_finitef)
710
711   dnl Check to see if basic C math functions have long double versions.
712   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_isnanl)
713   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_isinfl)
714   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_copysignl)
715   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_acosl)
716   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_asinl)
717   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_atanl)
718   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_atan2l)
719   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_ceill)
720   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_cosl)
721   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_coshl)
722   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_expl)
723   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_fabsl)
724   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_floorl)
725   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_fmodl)
726   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_frexpl)
727   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_ldexpl)
728   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_logl)
729   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_log10l)
730   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_modfl)
731   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_powl)
732   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sinl)
733   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sinhl)
734   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sqrtl)
735   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_tanl)
736   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_tanhl)
737   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(_sincosl)
738   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_finitel)
739
740   LIBS="$ac_save_LIBS"
741   CXXFLAGS="$ac_save_CXXFLAGS"
742 ])
743
744
745 dnl
746 dnl Check to see if there is native support for complex 
747 dnl
748 dnl Don't compile bits in math/* if native support exits.
749 dnl
750 dnl Define USE_COMPLEX_LONG_DOUBLE etc if "atan2l/copysignl" is found.
751 dnl
752 dnl GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT
753 AC_DEFUN(GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT, [
754   dnl Check for complex versions of math functions of platform.
755   AC_CHECK_HEADERS([complex.h])
756   AC_CHECK_LIB(m, main)
757   AC_REPLACE_MATHFUNCS(ccos ccosf ccosh ccoshf cexp cexpf \
758   csin csinf csinh csinhf csqrt \
759   csqrtf ctan ctanf ctanh ctanhf nan hypot hypotf atan2f expf \
760   copysignf)
761
762   dnl Compile the long double complex functions only if the function 
763   dnl provides the non-complex long double functions that are needed.
764   dnl Currently this includes copysignl and atan2l, which should be
765   dnl cached from the GLIBCPP_CHECK_MATH_SUPPORT macro, above.
766   USE_COMPLEX_LONG_DOUBLE=no
767   if test x$ac_cv_func_atan2l = x"yes" \
768      && test x$ac_cv_func_copysignl = x"yes"; then
769     USE_COMPLEX_LONG_DOUBLE=yes
770     AC_REPLACE_MATHFUNCS(ccoshl ccosl cexpl cpowl csinhl csinl \
771     csqrtl ctanhl ctanl hypotl signbitl clog10l)
772   fi
773
774   AC_SUBST(USE_COMPLEX_LONG_DOUBLE)
775 ])
776
777
778 dnl Check to see what architecture and operating system we are compiling
779 dnl for.  Also, if architecture- or OS-specific flags are required for
780 dnl compilation, pick them up here.
781 dnl 
782 dnl GLIBCPP_CHECK_TARGET
783 AC_DEFUN(GLIBCPP_CHECK_TARGET, [
784     . [$]{glibcpp_basedir}/configure.target
785     AC_MSG_RESULT(CPU config directory is $cpu_include_dir)
786     AC_MSG_RESULT(OS config directory is $os_include_dir)
787     AC_LINK_FILES($os_include_dir/bits/os_defines.h, include/bits/os_defines.h)
788 ])
789
790
791 dnl
792 dnl Check to see what the underlying c library's interface to ctype looks
793 dnl like. Bits of locale rely on things like isspace, toupper, etc. This
794 dnl stuff makes sure the right bits from the clibrary get called.
795 dnl 
796 dnl Depending on what is found, select various configure/*/bits/ctype_base.h 
797 dnl Depending on what is found, select various configure/*/ctype.cc
798 dnl
799 dnl GLIBCPP_CHECK_CTYPE_SUPPORT
800 AC_DEFUN(GLIBCPP_CHECK_CTYPE_SUPPORT, [
801   AC_CHECK_HEADER(ctype.h, [
802     
803     dnl If doesn't match any specified, go with defaults.
804     ctype_default=yes
805
806     dnl Test for <ctype> functionality -- GNU/Linux
807     AC_MSG_CHECKING([<ctype> for GNU/Linux])
808     AC_TRY_COMPILE([#include <ctype.h>],
809     [int
810     foo (int a)
811     { return _ISspace + _ISprint + _IScntrl + _ISupper + _ISlower + _ISalpha \
812         + _ISdigit + _ISpunct + _ISxdigit + _ISalnum + _ISgraph \
813         + __ctype_tolower[a] + __ctype_toupper[a] + __ctype_b[a];}], \
814     ctype_linux=yes, ctype_linux=no)
815     AC_MSG_RESULT($ctype_linux)
816     if test $ctype_linux = "yes"; then
817       ctype_include_dir="config/os/gnu-linux"
818       ctype_default=no
819     fi
820
821     dnl Test for <ctype> functionality -- FreeBSD 4.0
822     if test $ctype_default = "yes"; then
823     AC_MSG_CHECKING([<ctype> for FreeBSD 4.0])
824     AC_TRY_COMPILE([#include <ctype.h>],
825     [int
826     foo (int a)
827     { return _CTYPE_S + _CTYPE_R + _CTYPE_C + _CTYPE_U + _CTYPE_L + _CTYPE_A \
828         + _CTYPE_D + _CTYPE_P + _CTYPE_X + _CTYPE_G ;}], \
829     ctype_bsd=yes, ctype_bsd=no)
830     AC_MSG_RESULT($ctype_bsd)
831     if test $ctype_bsd = "yes"; then
832       ctype_include_dir="config/os/bsd"
833       ctype_default=no
834     fi
835     fi
836
837     dnl Test for <ctype> functionality -- FreeBSD 3.4
838     if test $ctype_default = "yes"; then
839     AC_MSG_CHECKING([<ctype> for FreeBSD 3.4])
840     AC_TRY_COMPILE([#include <ctype.h>],
841     [int
842     foo (int a)
843     { return _S + _R + _C + _U + _L + _A \
844       + _D + _P + _X + _G + __istype (a, 0);}], \
845     ctype_freebsd34=yes, ctype_freebsd34=no)
846     AC_MSG_RESULT($ctype_freebsd34)
847     if test $ctype_freebsd34 = "yes"; then
848       ctype_include_dir="config/os/bsd"
849       ctype_default=no
850     fi
851     fi
852
853     dnl Test for <ctype> functionality -- Solaris 2.6 and up
854     if test $ctype_default = "yes"; then
855     AC_MSG_CHECKING([<ctype> for Solaris 2.6,7,8])
856     AC_TRY_COMPILE([#include <ctype.h>],
857     [int
858     foo (int a)
859     { return _ISSPACE + _ISPRINT + _ISCNTRL + _ISUPPER + _ISLOWER + _ISALPHA \
860         + _ISDIGIT + _ISPUNCT + _ISXDIGIT + _ISALNUM + _ISGRAPH \
861         + __trans_lower[a] + __trans_upper[a] + __ctype_mask[a];}], \
862     ctype_solaris=yes, ctype_solaris=no)
863     AC_MSG_RESULT($ctype_solaris)
864
865     if test $ctype_solaris = "yes"; then
866       AC_MSG_CHECKING([  for version])
867       AC_LANG_CPLUSPLUS 
868       AC_TRY_COMPILE([#include <ctype.h>],
869       [typedef long* __to_type; __to_type const& _M_toupper = __trans_upper;],\
870       ctype_solaris26=yes, ctype_solaris26=no)
871       AC_LANG_C
872       if test $ctype_solaris26 = "yes"; then
873         ctype_include_dir="config/os/solaris/solaris2.6"
874         AC_MSG_RESULT([Solaris 2.6])
875         ctype_default=no
876       else
877         ctype_include_dir="config/os/solaris/solaris2.7"
878         AC_MSG_RESULT([Solaris 7,8])
879         ctype_default=no
880       fi
881     fi
882     fi  
883
884     dnl Test for <ctype> functionality -- Solaris 2.5.1
885     if test $ctype_default = "yes"; then
886     AC_MSG_CHECKING([<ctype> for Solaris 2.5.1])
887     AC_TRY_COMPILE([#include <ctype.h>],
888     [int
889     foo (int a)
890     { return _U + _L + _N + _S + _P + _C + _X + _B \
891         + __ctype[a];}], \
892     ctype_solaris25=yes, ctype_solaris25=no)
893     AC_MSG_RESULT($ctype_solaris25)
894     if test $ctype_solaris25 = "yes"; then
895       ctype_include_dir="config/os/solaris/solaris2.5"
896       ctype_default=no
897     fi
898     fi
899
900     dnl Test for <ctype> functionality -- AIX
901     if test $ctype_default = "yes"; then
902     AC_MSG_CHECKING([<ctype> for AIX])
903     AC_TRY_COMPILE([#include <ctype.h>],
904     [int
905     foo (int a)
906     { return _ISSPACE + _ISPRINT + _ISCNTRL + _ISUPPER + _ISLOWER + _ISALPHA \
907         + _ISDIGIT + _ISPUNCT + _ISXDIGIT + _ISALNUM + _ISGRAPH \
908         + _VALC('a') + _IS('c', 0);}], \
909     ctype_aix=yes, ctype_aix=no)
910     AC_MSG_RESULT($ctype_aix)
911     if test $ctype_aix = "yes"; then
912       ctype_include_dir="config/os/aix"
913       ctype_default=no
914     fi
915     fi
916
917     dnl Test for <ctype> functionality -- IRIX
918     if test $ctype_default = "yes"; then 
919     AC_MSG_CHECKING([<ctype> for IRIX])
920     AC_TRY_COMPILE([#include <ctype.h>],
921     [int
922     foo (int a)
923     { return _U + _L + _N + _S + _P + _C + _B + _X + \
924              _A + _PR + _G + _BL;}], \
925     ctype_irix=yes, ctype_irix=no)
926     AC_MSG_RESULT($ctype_irix)
927     if test $ctype_irix = "yes"; then
928       ctype_include_dir="config/os/irix"
929       ctype_default=no
930     fi
931     fi
932
933     dnl Test for <ctype> functionality -- newlib
934     if test $ctype_default = "yes"; then
935     AC_MSG_CHECKING([<ctype> for newlib])
936     AC_TRY_COMPILE([#include <ctype.h>],
937     [int
938     foo (int a)
939     { return _U + _L + _N + _S + _P + _C + _X + _B \
940         + _ctype_[a];}], \
941     ctype_newlib=yes, ctype_newlib=no)
942     AC_MSG_RESULT($ctype_newlib)
943     if test $ctype_newlib = "yes"; then
944       ctype_include_dir="config/os/newlib"
945       ctype_default=no
946     fi
947     fi
948
949     if test $ctype_default = "yes"; then
950       ctype_include_dir="config/os/generic"
951       AC_MSG_WARN("Using default ctype headers.")
952     fi
953
954     AC_LINK_FILES($ctype_include_dir/bits/ctype_base.h, 
955     include/bits/ctype_base.h)
956     AC_LINK_FILES($ctype_include_dir/bits/ctype_inline.h, 
957     include/bits/ctype_inline.h)
958     AC_LINK_FILES($ctype_include_dir/bits/ctype_noninline.h, \
959     include/bits/ctype_noninline.h)
960   ])
961 ])
962
963
964 dnl
965 dnl Check to see if this target can enable the wchar_t parts of libstdc++.
966 dnl If --disable-c-mbchar was given, no wchar_t stuff is enabled.  (This
967 dnl must have been previously checked.)
968 dnl
969 dnl Define _GLIBCPP_USE_WCHAR_T if all the bits are found 
970 dnl Define _GLIBCPP_NEED_MBSTATE_T if mbstate_t is not in wchar.h
971 dnl
972 dnl GLIBCPP_CHECK_WCHAR_T_SUPPORT
973 AC_DEFUN(GLIBCPP_CHECK_WCHAR_T_SUPPORT, [
974   if test x$enable_c_mbchar != xno; then
975
976     dnl Sanity check for existence of ISO C99 headers for extended encoding.
977     AC_CHECK_HEADER(wchar.h, ac_has_wchar_h=yes, ac_has_wchar_h=no)
978     AC_CHECK_HEADER(wctype.h, ac_has_wctype_h=yes, ac_has_wctype_h=no)
979           
980     dnl Only continue checking if the ISO C99 headers exist.
981     if test x"$ac_has_wchar_h" = xyes && test x"$ac_has_wctype_h" = xyes; then
982   
983       dnl Test wchar.h for mbstate_t, which is needed for char_traits
984       dnl and others.
985       AC_MSG_CHECKING([for mbstate_t])
986       AC_TRY_COMPILE([#include <wchar.h>],
987       [mbstate_t teststate;], 
988       use_native_mbstatet=yes, use_native_mbstatet=no)
989       AC_MSG_RESULT($use_native_mbstatet)
990       if test x"$use_native_mbstatet" = xno; then
991         AC_DEFINE(_GLIBCPP_NEED_MBSTATE_T)
992       fi
993     
994       dnl Test wchar.h for WCHAR_MIN, WCHAR_MAX, which is needed before
995       dnl numeric_limits can instantiate type_traits<wchar_t>
996       AC_MSG_CHECKING([for WCHAR_MIN and WCHAR_MAX])
997       AC_TRY_COMPILE([#include <wchar.h>],
998       [int i = WCHAR_MIN; int j = WCHAR_MAX;], 
999       has_wchar_minmax=yes, has_wchar_minmax=no)
1000       AC_MSG_RESULT($has_wchar_minmax)
1001     
1002       dnl Test wchar.h for WEOF, which is what we use to determine whether
1003       dnl to specialize for char_traits<wchar_t> or not.
1004       AC_MSG_CHECKING([for WEOF])
1005       AC_TRY_COMPILE([
1006         #include <wchar.h>
1007         #include <stddef.h>],
1008       [wint_t i = WEOF;],
1009       has_weof=yes, has_weof=no)
1010       AC_MSG_RESULT($has_weof)
1011   
1012       dnl Tests for wide character functions used in char_traits<wchar_t>.
1013       AC_CHECK_FUNCS(wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset \
1014       wcsrtombs mbsrtowcs, ac_wfuncs=yes, ac_wfuncs=no)
1015   
1016       AC_MSG_CHECKING([for ISO C99 wchar_t support])
1017       if test x"$has_weof" = xyes && test x"$has_wchar_minmax" = xyes \
1018          && test x"$ac_wfuncs" = xyes; then
1019         ac_isoC99_wchar_t=yes
1020       else
1021         ac_isoC99_wchar_t=no
1022       fi
1023       AC_MSG_RESULT($ac_isoC99_wchar_t)
1024   
1025       dnl Use iconv for wchar_t to char conversions. As such, check for 
1026       dnl X/Open Portability Guide, version 2 features (XPG2).
1027       AC_CHECK_HEADER(iconv.h, ac_has_iconv_h=yes, ac_has_iconv_h=no)
1028       AC_CHECK_HEADER(langinfo.h, ac_has_langinfo_h=yes, ac_has_langinfo_h=no)
1029
1030       dnl Check for existence of libiconv.a providing XPG2 wchar_t support.
1031       AC_CHECK_LIB(iconv, iconv, libiconv="-liconv")
1032       ac_save_LIBS="$LIBS"
1033       LIBS="$LIBS $libiconv"
1034
1035       AC_CHECK_FUNCS(iconv_open iconv_close iconv nl_langinfo, \
1036       ac_XPG2funcs=yes, ac_XPG2funcs=no)
1037   
1038       LIBS="$ac_save_LIBS"
1039
1040       AC_MSG_CHECKING([for XPG2 wchar_t support])
1041       if test x"$ac_has_iconv_h" = xyes && test x"$ac_has_langinfo_h" = xyes \
1042          && test x"$ac_XPG2funcs" = xyes; then
1043         ac_XPG2_wchar_t=yes
1044       else
1045         ac_XPG2_wchar_t=no
1046       fi
1047       AC_MSG_RESULT($ac_XPG2_wchar_t)
1048   
1049       dnl At the moment, only enable wchar_t specializations if all the
1050       dnl above support is present.
1051       AC_MSG_CHECKING([for enabled wchar_t specializations])
1052       if test x"$ac_isoC99_wchar_t" = xyes \
1053          && test x"$ac_XPG2_wchar_t" = xyes; then
1054         libinst_wstring_la="libinst-wstring.la"
1055         AC_DEFINE(_GLIBCPP_USE_WCHAR_T)
1056         AC_MSG_RESULT("yes")
1057       else
1058         libinst_wstring_la=""
1059         AC_MSG_RESULT("no")
1060       fi
1061       AC_SUBST(libinst_wstring_la)
1062   
1063     else
1064       AC_MSG_WARN([<wchar.h> not found])
1065       AC_DEFINE(_GLIBCPP_NEED_MBSTATE_T)
1066     fi
1067
1068   else
1069     dnl Wide characters disabled by the user.  Maybe print a warning?
1070     :
1071   fi
1072 ])
1073
1074
1075 dnl
1076 dnl Check to see if this version of GNU C++ is afflicted by bugs in
1077 dnl __complex__ float support.
1078 dnl
1079 dnl Define _GLIBCPP_BUGGY_FLOAT_COMPLEX if buggy.
1080 dnl
1081 dnl Check to see if this version of GNU C++ is afflicted by bugs in 
1082 dnl __complex__ support.Check for buggy __complex__ that will cause ICE in
1083 dnl gcc-2.95.x when using the library, unless we define the default copy
1084 dnl ctor in the specializations of complex<>. 
1085 dnl 
1086 dnl Define _GLIBCPP_BUGGY_COMPLEX if buggy.
1087 dnl GLIBCPP_CHECK_COMPLEX_MATH_COMPILER_SUPPORT
1088 AC_DEFUN(GLIBCPP_CHECK_COMPLEX_MATH_COMPILER_SUPPORT, [
1089   AC_REQUIRE([AC_PROG_CXX])
1090
1091   AC_MSG_CHECKING([for GNU C++ __complex__ support])
1092   AC_CACHE_VAL(glibcpp_cv_complex, [
1093     AC_LANG_SAVE
1094     AC_LANG_CPLUSPLUS
1095     AC_TRY_COMPILE([struct dcomplex { __complex__ double x; }; \
1096                     dcomplex f(const dcomplex& x) { return dcomplex(x); }], \
1097                     [ dcomplex x; f(x); ],
1098       glibcpp_cv_complex=ok,
1099       glibcpp_cv_complex=buggy
1100     )
1101     AC_LANG_RESTORE
1102   ])
1103   AC_MSG_RESULT($glibcpp_cv_complex)
1104   if test $glibcpp_cv_complex = buggy; then
1105     AC_DEFINE(_GLIBCPP_BUGGY_COMPLEX)
1106   fi
1107
1108   AC_MSG_CHECKING([for GNU C++ __complex__ float support])
1109   AC_CACHE_VAL(glibcpp_cv_float_complex, [
1110     AC_LANG_SAVE
1111     AC_LANG_CPLUSPLUS
1112     rm -f conftest.h
1113     cat > conftest.h <<EOB
1114       //
1115       // Check for buggy __complex__ that causes ICE in most versions of egcs
1116       // and gcc-2.95.x on certain platforms (eg., x86-win32).
1117       //
1118       // See http://gcc.gnu.org/ml/gcc-bugs/1999-07n/msg00845.html for
1119       // more info on the bug itself.
1120       //
1121       struct
1122       float_complex
1123       {
1124        __complex__ float m_value;
1125        float_complex (float = 0.0f, float = 0.0f);
1126        float_complex (__complex__ float val) : m_value (val) {}
1127        float_complex foo (const float_complex &val)
1128          { return float_complex (~val.m_value); }
1129       };
1130 EOB
1131     AC_TRY_COMPILE([#include "conftest.h"], ,
1132       glibcpp_cv_float_complex=ok,
1133       glibcpp_cv_float_complex=buggy
1134     )
1135     AC_LANG_RESTORE
1136   ])
1137   AC_MSG_RESULT($glibcpp_cv_float_complex)
1138   if test $glibcpp_cv_float_complex = buggy; then
1139     AC_DEFINE(_GLIBCPP_BUGGY_FLOAT_COMPLEX)
1140   fi
1141 ])
1142
1143
1144 dnl
1145 dnl Check for special debugging mode; not for production use.
1146 dnl
1147 dnl GLIBCPP_ENABLE_DEBUG
1148 dnl --enable-debug sets '-ggdb3 -O0'.
1149 dnl --disable-debug sets '-g' and whatever optimization options the
1150 dnl     compiler can handle.
1151 dnl  +  --enable-maintainer-mode automatically defaults this to on.
1152 dnl  +  Perhaps -D/-U of NDEBUG, DEBUG, DEBUG_ASSERT, ...?
1153 dnl  +  Usage:  GLIBCPP_ENABLE_DEBUG[(DEFAULT)]
1154 dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
1155 dnl       defaults to `no'.
1156 AC_DEFUN(GLIBCPP_ENABLE_DEBUG, [dnl
1157 define([GLIBCPP_ENABLE_DEBUG_DEFAULT], ifelse($1, yes, yes, no))dnl
1158 AC_ARG_ENABLE(debug,
1159 changequote(<<, >>)dnl
1160 <<  --enable-debug          extra debugging, turn off optimization [default=>>GLIBCPP_ENABLE_DEBUG_DEFAULT],
1161 changequote([, ])dnl
1162 [case "${enableval}" in
1163  yes) enable_debug=yes ;;
1164  no)  enable_debug=no ;;
1165  *)   AC_MSG_ERROR([Unknown argument to enable/disable extra debugging]) ;;
1166  esac],
1167 enable_debug=GLIBCPP_ENABLE_DEBUG_DEFAULT)dnl
1168
1169 dnl Option parsed, now set things appropriately
1170 case "${enable_debug}" in
1171     yes) 
1172         DEBUG_FLAGS='-O0 -ggdb3'                        
1173         ;;
1174     no)   
1175         DEBUG_FLAGS='-g'
1176         ;;
1177 esac
1178 AC_SUBST(DEBUG_FLAGS)
1179 ])
1180
1181
1182 dnl
1183 dnl Check for "unusual" flags to pass to the compiler while building.
1184 dnl
1185 dnl GLIBCPP_ENABLE_CXX_FLAGS
1186 dnl --enable-cxx-flags='-foo -bar -baz' is a general method for passing
1187 dnl     experimental flags such as -fhonor-std, -fsquangle, -Dfloat=char, etc.
1188 dnl     Somehow this same set of flags must be passed when [re]building
1189 dnl     libgcc.
1190 dnl --disable-cxx-flags passes nothing.
1191 dnl  +  See http://sourceware.cygnus.com/ml/libstdc++/2000-q2/msg00131.html
1192 dnl         http://sourceware.cygnus.com/ml/libstdc++/2000-q2/msg00284.html
1193 dnl         http://sourceware.cygnus.com/ml/libstdc++/2000-q1/msg00035.html
1194 dnl  +  Usage:  GLIBCPP_ENABLE_CXX_FLAGS(default flags)
1195 dnl       If "default flags" is an empty string (or "none"), the effect is
1196 dnl       the same as --disable or --enable=no.
1197 AC_DEFUN(GLIBCPP_ENABLE_CXX_FLAGS, [dnl
1198 define([GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT], ifelse($1,,, $1))dnl
1199 AC_ARG_ENABLE(cxx-flags,
1200 changequote(<<, >>)dnl
1201 <<  --enable-cxx-flags=FLAGS      pass compiler FLAGS when building library;
1202                                 [default=>>GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT],
1203 changequote([, ])dnl
1204 [case "x$enableval" in
1205  xyes)   
1206         AC_MSG_ERROR([--enable-cxx-flags needs compiler flags as arguments]) ;;
1207  xno|x)  
1208         enable_cxx_flags='' ;;
1209  *)      
1210         enable_cxx_flags="$enableval" ;;
1211  esac],
1212 enable_cxx_flags='GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT')
1213
1214 dnl Thinko on my part during design.  This kludge is the workaround.
1215 if test "$enable_cxx_flags" = "none"; then 
1216   enable_cxx_flags=''; 
1217 fi
1218
1219 dnl Run through flags (either default or command-line) and set anything
1220 dnl extra (e.g., #defines) that must accompany particular g++ options.
1221 if test -n "$enable_cxx_flags"; then
1222     for f in $enable_cxx_flags; do
1223         case "$f" in
1224             -fhonor-std)  ;;
1225             -*)  ;;
1226             *)   # and we're trying to pass /what/ exactly?
1227                  AC_MSG_ERROR([compiler flags start with a -]) ;;
1228         esac
1229     done
1230 fi
1231 EXTRA_CXX_FLAGS="$enable_cxx_flags"
1232 AC_SUBST(EXTRA_CXX_FLAGS)
1233 ])
1234
1235
1236 dnl
1237 dnl Check for which I/O library to use:  libio, or something specific.
1238 dnl
1239 dnl GLIBCPP_ENABLE_CSTDIO
1240 dnl --enable-cstdio=libio sets config/c_io_libio.h and friends
1241 dnl 
1242 dnl default is stdio
1243 dnl
1244 AC_DEFUN(GLIBCPP_ENABLE_CSTDIO, [
1245   AC_MSG_CHECKING([for cstdio to use])
1246   AC_ARG_ENABLE(cstdio,
1247   [  --enable-cstdio        enable stdio for target io package. (default)
1248      --enable-cstdio=LIB    use LIB target-speific io package.], 
1249   if test x$enable_cstdio = xno; then
1250      enable_cstdio=stdio
1251   fi,
1252      enable_cstdio=stdio)
1253
1254   enable_cstdio_flag=$enable_cstdio
1255
1256   dnl Check if a valid I/O package
1257   case x${enable_cstdio_flag} in
1258     xlibio)
1259       CSTDIO_H=config/c_io_libio.h
1260       CSTDIO_CC=config/c_io_libio.cc
1261       AC_MSG_RESULT(libio)
1262
1263       # see if we are on a system with libio native (ie, linux)
1264       AC_CHECK_HEADER(libio.h,  has_libio=yes, has_libio=no)
1265
1266       # Need to check and see what version of glibc is being used. If
1267       # it's not glibc-2.2 or higher, then we'll need to go ahead and 
1268       # compile most of libio for linux systems.
1269       if test x$has_libio = x"yes"; then
1270         case "$target" in
1271           *-*-linux*)
1272               AC_MSG_CHECKING([for glibc version >= 2.2])
1273               AC_EGREP_CPP([ok], [
1274             #include <features.h>
1275               #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) 
1276                     ok
1277               #endif
1278               ], glibc_satisfactory=yes, glibc_satisfactory=no)
1279               AC_MSG_RESULT($glibc_satisfactory)
1280             ;;
1281         esac
1282
1283         # XXX at the moment, admit defeat and force the recompilation
1284         # XXX of glibc even on glibc-2.2 systems, because libio is not synched.
1285         glibc_satisfactory=no        
1286
1287         if test x$glibc_satisfactory = x"yes"; then
1288            need_libio=no
1289            need_wlibio=no        
1290         else
1291            need_libio=yes
1292            # bkoz XXX need to add checks to enable this
1293            # pme XXX here's a first pass at such a check
1294            if test x$enable_c_mbchar != xno; then
1295               need_wlibio=yes
1296            else
1297               need_wlibio=no
1298            fi
1299         fi
1300
1301       else
1302          # Using libio, but <libio.h> doesn't exist on the target system. . .
1303          need_libio=yes
1304          # bkoz XXX need to add checks to enable this
1305          # pme XXX here's a first pass at such a check
1306          if test x$enable_c_mbchar != xno; then
1307              need_wlibio=yes
1308          else
1309              need_wlibio=no
1310          fi
1311       fi
1312       ;;
1313     xstdio | x | xno | xnone | xyes)
1314       # default
1315       CSTDIO_H=config/c_io_stdio.h
1316       CSTDIO_CC=config/c_io_stdio.cc
1317       AC_MSG_RESULT(stdio)
1318
1319       # We're not using stdio.
1320       need_libio=no
1321       need_wlibio=no
1322       # Wide characters are not supported with this package.
1323       enable_c_mbchar=no
1324       ;;
1325     *)
1326       echo "$enable_cstdio is an unknown io package" 1>&2
1327       exit 1
1328       ;;
1329   esac
1330   AC_LINK_FILES($CSTDIO_H, include/bits/c++io.h)
1331   AC_LINK_FILES($CSTDIO_CC, src/c++io.cc)
1332
1333   # 2000-08-04 bkoz hack
1334   CCODECVT_C=config/c_io_libio_codecvt.c
1335   AC_LINK_FILES($CCODECVT_C, libio/c_codecvt.c)
1336   # 2000-08-04 bkoz hack
1337
1338   AM_CONDITIONAL(GLIBCPP_NEED_LIBIO, test "$need_libio" = yes)
1339   AM_CONDITIONAL(GLIBCPP_NEED_WLIBIO, test "$need_wlibio" = yes)
1340   if test "$need_libio" = yes || test "$need_wlibio" = yes; then
1341         libio_la=../libio/libio.la
1342   else
1343         libio_la=
1344   fi
1345   AC_SUBST(libio_la)
1346 ])
1347
1348
1349 dnl
1350 dnl Check for which threading library to use.
1351 dnl
1352 dnl GLIBCPP_ENABLE_THREADS
1353 dnl --enable-threads=posix sets config/threads-posix.h et. al.
1354 dnl 
1355 dnl Default is no threads, which also disables _IO_MTSAFE_IO in
1356 dnl libio.  Any actual thread package will enable it.
1357 dnl
1358 AC_DEFUN(GLIBCPP_ENABLE_THREADS, [
1359   dnl Note this comes from the gcc/config.in and libjava/config.in
1360   dnl Efforts should be made to keep this in sync.
1361   AC_MSG_CHECKING([for threads package to use])
1362   AC_ARG_ENABLE(threads,
1363   [  --enable-threads        enable thread usage for target GCC.
1364      --enable-threads=LIB    use LIB thread package for target GCC.],
1365   if test x$enable_threads = xno; then
1366     enable_threads=''
1367   fi,
1368     enable_threads='')
1369
1370   enable_threads_flag=$enable_threads
1371
1372   dnl Check if a valid thread package
1373   case x${enable_threads_flag} in
1374         x | xno | xnone)
1375                 # No threads
1376                 target_thread_file='single'
1377                 ;;
1378         xyes)
1379                 # default
1380                 target_thread_file='posix'
1381                 ;;
1382         xdecosf1 | xirix | xmach | xos2 | xposix | xpthreads | xsingle | \
1383         xsolaris | xwin32 | xdce | xvxworks)
1384                 target_thread_file=$enable_threads_flag
1385                 ;;
1386         *)
1387                 echo "$enable_threads is an unknown thread package" 1>&2
1388                 exit 1
1389                 ;;
1390   esac
1391
1392   dnl Check for thread package actually supported in libstdc++ 
1393   THREADH=
1394   case "$target_thread_file" in
1395     no | none | single)
1396       THREADH=threads-no.h
1397       ;;
1398     posix | pthreads)
1399       THREADH=threads-posix.h
1400       ;;
1401     decosf1 | irix | mach | os2 | solaris | win32 | dce | vxworks)
1402       AC_MSG_ERROR(thread package $THREADS not yet supported)
1403       ;;
1404     *)
1405       AC_MSG_ERROR($THREADS is an unsupported/unknown thread package)
1406       ;;
1407   esac
1408   AC_MSG_RESULT($THREADH)
1409
1410   AC_LINK_FILES(config/$THREADH, include/bits/c++threads.h)
1411   if test $THREADH != threads-no.h; then
1412     AC_DEFINE(_GLIBCPP_USE_THREADS)
1413   fi
1414 ])
1415
1416
1417 dnl Enable atomic locking
1418 dnl GLIBCPP_ENABLE_ATOMICITY
1419 AC_DEFUN(GLIBCPP_ENABLE_ATOMICITY, [
1420     AC_MSG_CHECKING([for atomicity.h])
1421     # We have ATOMICITY already from GLIBCPP_CONFIGURE
1422     if test "$ATOMICITYH" = "config/cpu/generic"; then
1423       AC_MSG_WARN([No ATOMICITY settings found, using generic atomic ops.])
1424     fi
1425     AC_MSG_RESULT($ATOMICITYH/bits/atomicity.h)
1426     AC_LINK_FILES($ATOMICITYH/bits/atomicity.h, include/bits/atomicity.h)
1427 ])
1428
1429
1430 dnl
1431 dnl Check for template specializations for the 'long long' type extension.
1432 dnl
1433 dnl GLIBCPP_ENABLE_LONG_LONG
1434 dnl --enable-long-long defines _GLIBCPP_USE_LONG_LONG
1435 dnl --disable-long-long leaves _GLIBCPP_USE_LONG_LONG undefined
1436 dnl  +  Usage:  GLIBCPP_ENABLE_LONG_LONG[(DEFAULT)]
1437 dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
1438 dnl       defaults to `no'.
1439 dnl  +  If 'long long' stuff is not available, ignores DEFAULT and sets `no'.
1440 dnl
1441 dnl GLIBCPP_ENABLE_LONG_LONG
1442 AC_DEFUN(GLIBCPP_ENABLE_LONG_LONG, [dnl
1443   define([GLIBCPP_ENABLE_LONG_LONG_DEFAULT], ifelse($1, yes, yes, no))dnl
1444
1445   AC_ARG_ENABLE(long-long,
1446   changequote(<<, >>)dnl
1447   <<--enable-long-long      turns on 'long long' [default=>>GLIBCPP_ENABLE_LONG_LONG_DEFAULT],
1448   changequote([, ])dnl
1449   [case "$enableval" in
1450    yes) enable_long_long=yes ;;
1451    no)  enable_long_long=no ;;
1452    *)   AC_MSG_ERROR([Unknown argument to enable/disable long long]) ;;
1453    esac],
1454   enable_long_long=GLIBCPP_ENABLE_LONG_LONG_DEFAULT)dnl
1455  
1456   # Allow use of os-dependent settings, so that macros that turn on
1457   # C99 capabilities can be defined and used in a consistent way.
1458   OS_INC_PATH=${srcdir}/$os_include_dir
1459   ac_test_CFLAGS="${CFLAGS+set}"
1460   ac_save_CFLAGS="$CFLAGS"
1461   CFLAGS="-I$OS_INC_PATH"
1462
1463   # Check for the existence of functions used if long long is enabled.
1464   AC_CHECK_FUNC(strtoll,,ac_strtoll=no)
1465   AC_CHECK_FUNC(strtoull,,ac_strtoull=no)
1466
1467   # Check for lldiv_t, et. al.
1468   AC_MSG_CHECKING([for lldiv_t declaration])
1469   AC_CACHE_VAL(glibcpp_lldiv_t_use, [
1470   AC_TRY_COMPILE([#include <bits/os_defines.h>
1471                   #include <stdlib.h>], 
1472                    [ lldiv_t mydivt;], 
1473                    [glibcpp_lldiv_t_use=yes], [glibcpp_lldiv_t_use=no])
1474   ])
1475   AC_MSG_RESULT($glibcpp_lldiv_t_use)
1476   if test x$glibcpp_lldiv_t_use = x"yes"; then
1477     AC_DEFINE(_GLIBCPP_HAVE_LLDIV_T)
1478   fi
1479
1480   AC_MSG_CHECKING([for enabled long long])
1481   if test x"$ac_strtoll" = xno || test x"$ac_strtoull" = xno; then 
1482     enable_long_long=no; 
1483   fi; 
1484   AC_MSG_RESULT($enable_long_long)
1485
1486   # Option parsed, now set things appropriately
1487   if test x"$enable_long_long" = xyes; then
1488     AC_DEFINE(_GLIBCPP_USE_LONG_LONG)
1489   fi
1490         
1491   # Reset CFLAGS
1492   CFLAGS="$ac_save_CFLAGS"
1493 ])
1494
1495
1496 dnl
1497 dnl Check for whether or not to do shadowed C headers.
1498 dnl
1499 dnl GLIBCPP_ENABLE_SHADOW
1500 dnl --enable-cshadow-headers [does stuff].
1501 dnl --disable-cshadow-headers [does not do stuff].
1502 dnl  +  This will eventually need to be on by default.
1503 dnl  +  Usage:  GLIBCPP_ENABLE_SHADOW[(DEFAULT)]
1504 dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
1505 dnl       defaults to `no'.
1506 AC_DEFUN(GLIBCPP_ENABLE_SHADOW, [dnl
1507 define([GLIBCPP_ENABLE_SHADOW_DEFAULT], ifelse($1, yes, yes, no))dnl
1508 AC_MSG_CHECKING([for enabled cshadow headers])
1509 AC_ARG_ENABLE(cshadow-headers,
1510 changequote(<<, >>)dnl
1511 <<  --enable-cshadow-headers construct "shadowed" C header files for
1512                            g++ [default=>>GLIBCPP_ENABLE_SHADOW_DEFAULT],
1513 changequote([, ])
1514   [case "$enableval" in
1515    yes) enable_cshadow_headers=yes 
1516         ;;
1517    no)  enable_cshadow_headers=no 
1518         ;;
1519    *)   AC_MSG_ERROR([Unknown argument to enable/disable shadowed C headers]) 
1520         ;;
1521   esac],
1522   enable_cshadow_headers=GLIBCPP_ENABLE_SHADOW_DEFAULT)
1523   AC_MSG_RESULT($enable_cshadow_headers)
1524
1525   dnl Option parsed, now set things appropriately
1526   dnl NB: these things may be duplicated in c++config.h as well.
1527   case "$enable_cshadow_headers" in
1528     yes) 
1529         CSHADOW_FLAGS="-fno-builtin"
1530         C_INCLUDE_DIR='${top_srcdir}/include/c_std'
1531         AC_DEFINE(_GLIBCPP_USE_SHADOW_HEADERS)
1532         ;;
1533     no)   
1534         CSHADOW_FLAGS=""
1535         C_INCLUDE_DIR='${top_srcdir}/include/c'
1536         ;;
1537   esac
1538
1539   AC_SUBST(CSHADOW_FLAGS)
1540   AC_SUBST(C_INCLUDE_DIR)
1541   AM_CONDITIONAL(GLIBCPP_USE_CSHADOW, test "$enable_cshadow_headers" = yes)
1542 ])
1543
1544
1545 dnl
1546 dnl Check for wide character support.  Has the same effect as the option
1547 dnl in gcc's configure, but in a form that autoconf can mess with.
1548 dnl
1549 dnl GLIBCPP_ENABLE_C_MBCHAR
1550 dnl --enable-c-mbchar requests all the wchar_t stuff.
1551 dnl --disable-c-mbchar doesn't.
1552 dnl  +  Usage:  GLIBCPP_ENABLE_C_MBCHAR[(DEFAULT)]
1553 dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
1554 dnl       defaults to `no'.
1555 AC_DEFUN(GLIBCPP_ENABLE_C_MBCHAR, [dnl
1556 define([GLIBCPP_ENABLE_C_MBCHAR_DEFAULT], ifelse($1, yes, yes, no))dnl
1557 AC_ARG_ENABLE(c-mbchar,
1558 changequote(<<, >>)dnl
1559 <<  --enable-c-mbchar       enable multibyte (wide) characters [default=>>GLIBCPP_ENABLE_C_MBCHAR_DEFAULT],
1560 changequote([, ])dnl
1561 [case "$enableval" in
1562  yes) enable_c_mbchar=yes ;;
1563  no)  enable_c_mbchar=no ;;
1564  *)   AC_MSG_ERROR([Unknown argument to enable/disable c-mbchar]) ;;
1565  esac],
1566 enable_c_mbchar=GLIBCPP_ENABLE_C_MBCHAR_DEFAULT)dnl
1567 dnl Option parsed, now other scripts can test enable_c_mbchar for yes/no.
1568 ])
1569
1570
1571 dnl
1572 dnl Set up *_INCLUDES and *_INCLUDE_DIR variables for all sundry Makefile.am's.
1573 dnl
1574 dnl GLIBCPP_INCLUDE_DIR
1575 dnl C_INCLUDE_DIR
1576 dnl TOPLEVEL_INCLUDES
1577 dnl LIBMATH_INCLUDES
1578 dnl LIBSUPCXX_INCLUDES
1579 dnl LIBIO_INCLUDES
1580 dnl CSHADOW_INCLUDES
1581 dnl
1582 dnl GLIBCPP_EXPORT_INCLUDE
1583 AC_DEFUN(GLIBCPP_EXPORT_INCLUDES, [
1584   # Root level of the include sources.
1585   GLIBCPP_INCLUDE_DIR='$(top_srcdir)/include'
1586
1587   # Can either use include/c or include/c_std to grab "C" headers. This
1588   # variable is set to the include directory currently in use.
1589   # set with C_INCLUDE_DIR in GLIBCPP_ENABLE_SHADOW
1590    
1591   # Passed down for canadian crosses.
1592   if  test x"$CANADIAN" = xyes; then
1593     TOPLEVEL_INCLUDES='-I$(includedir)'
1594   fi
1595
1596   LIBMATH_INCLUDES='-I$(top_srcdir)/libmath'
1597
1598   LIBSUPCXX_INCLUDES='-I$(top_srcdir)/libsupc++'
1599
1600   #if GLIBCPP_NEED_LIBIO
1601   LIBIO_INCLUDES='-I$(top_builddir)/libio -I$(top_srcdir)/libio'
1602   #else
1603   #LIBIO_INCLUDES='-I$(top_srcdir)/libio'
1604   #endif
1605
1606   #if GLIBCPP_USE_CSHADOW
1607   #  CSHADOW_INCLUDES='-I$(GLIBCPP_INCLUDE_DIR)/std -I$(C_INCLUDE_DIR) \
1608   #                   -I$(top_blddir)/cshadow'
1609   #else
1610   CSHADOW_INCLUDES='-I$(GLIBCPP_INCLUDE_DIR)/std -I$(C_INCLUDE_DIR)'
1611   #endif
1612
1613   # Now, export this to all the little Makefiles....
1614   AC_SUBST(GLIBCPP_INCLUDE_DIR)
1615   AC_SUBST(TOPLEVEL_INCLUDES)
1616   AC_SUBST(LIBMATH_INCLUDES)
1617   AC_SUBST(LIBSUPCXX_INCLUDES)
1618   AC_SUBST(LIBIO_INCLUDES)
1619   AC_SUBST(CSHADOW_INCLUDES)
1620 ])
1621
1622
1623 dnl
1624 dnl Set up *_FLAGS and *FLAGS variables for all sundry Makefile.am's.
1625 dnl
1626 AC_DEFUN(GLIBCPP_EXPORT_FLAGS, [
1627   # Optimization flags that are probably a good idea for thrill-seekers. Just
1628   # uncomment the lines below and make, everything else is ready to go... 
1629   # OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc 
1630   OPTIMIZE_CXXFLAGS=
1631   AC_SUBST(OPTIMIZE_CXXFLAGS)
1632
1633   WARN_FLAGS='-Wall -Wno-format -W -Wwrite-strings -Winline'
1634   AC_SUBST(WARN_FLAGS)
1635 ])
1636
1637
1638 # Check whether LC_MESSAGES is available in <locale.h>.
1639 # Ulrich Drepper <drepper@cygnus.com>, 1995.
1640 #
1641 # This file file be copied and used freely without restrictions.  It can
1642 # be used in projects which are not available under the GNU Public License
1643 # but which still want to provide support for the GNU gettext functionality.
1644 # Please note that the actual code is *not* freely available.
1645
1646 # serial 1
1647
1648 AC_DEFUN(AC_LC_MESSAGES, [
1649   AC_CHECK_HEADER(locale.h, [
1650     AC_CACHE_CHECK([for LC_MESSAGES], ac_cv_val_LC_MESSAGES,
1651       [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
1652        ac_cv_val_LC_MESSAGES=yes, ac_cv_val_LC_MESSAGES=no)])
1653     if test $ac_cv_val_LC_MESSAGES = yes; then
1654       AC_DEFINE(HAVE_LC_MESSAGES)
1655     fi
1656   ])
1657 ])
1658
1659
1660 # Check for functions in math library.
1661 # Ulrich Drepper <drepper@cygnus.com>, 1998.
1662 #
1663 # This file can be copied and used freely without restrictions.  It can
1664 # be used in projects which are not available under the GNU Public License
1665 # but which still want to provide support for the GNU gettext functionality.
1666 # Please note that the actual code is *not* freely available.
1667
1668 # serial 1
1669
1670 dnl AC_REPLACE_MATHFUNCS(FUNCTION...)
1671 AC_DEFUN(AC_REPLACE_MATHFUNCS,
1672 [AC_CHECK_FUNCS([$1], , [LIBMATHOBJS="$LIBMATHOBJS ${ac_func}.lo"])
1673 AC_SUBST(LIBMATHOBJS)dnl
1674 ])
1675
1676
1677 # Check for string functions.
1678 # Ulrich Drepper <drepper@cygnus.com>, 1998.
1679 #
1680 # This file can be copied and used freely without restrictions.  It can
1681 # be used in projects which are not available under the GNU Public License
1682 # but which still want to provide support for the GNU gettext functionality.
1683 # Please note that the actual code is *not* freely available.
1684
1685 # serial 1
1686
1687 dnl AC_REPLACE_STRINGFUNCS(FUNCTION...)
1688 AC_DEFUN(AC_REPLACE_STRINGFUNCS,
1689 [AC_CHECK_FUNCS([$1], , [LIBSTRINGOBJS="$LIBSTRINGOBJS ${ac_func}.lo"])
1690 AC_SUBST(LIBSTRINGOBJS)dnl
1691 ])
1692
1693
1694 dnl This macro searches for a GNU version of make.  If a match is found, the
1695 dnl makefile variable `ifGNUmake' is set to the empty string, otherwise it is
1696 dnl set to "#". This is useful for  including a special features in a Makefile,
1697 dnl which cannot be handled by other versions of make.  The variable
1698 dnl _cv_gnu_make_command is set to the command to invoke GNU make if it exists,
1699 dnl the empty string otherwise.
1700 dnl
1701 dnl Here is an example of its use:
1702 dnl
1703 dnl Makefile.in might contain:
1704 dnl
1705 dnl     # A failsafe way of putting a dependency rule into a makefile
1706 dnl     $(DEPEND):
1707 dnl             $(CC) -MM $(srcdir)/*.c > $(DEPEND)
1708 dnl
1709 dnl     @ifGNUmake@ ifeq ($(DEPEND),$(wildcard $(DEPEND)))
1710 dnl     @ifGNUmake@ include $(DEPEND)
1711 dnl     @ifGNUmake@ endif
1712 dnl
1713 dnl Then configure.in would normally contain:
1714 dnl
1715 dnl     CHECK_GNU_MAKE()
1716 dnl     AC_OUTPUT(Makefile)
1717 dnl
1718 dnl Then perhaps to cause gnu make to override any other make, we could do
1719 dnl something like this (note that GNU make always looks for GNUmakefile first):
1720 dnl
1721 dnl     if  ! test x$_cv_gnu_make_command = x ; then
1722 dnl             mv Makefile GNUmakefile
1723 dnl             echo .DEFAULT: > Makefile ;
1724 dnl             echo \  $_cv_gnu_make_command \$@ >> Makefile;
1725 dnl     fi
1726 dnl
1727 dnl Then, if any (well almost any) other make is called, and GNU make also
1728 dnl exists, then the other make wraps the GNU make.
1729 dnl
1730 dnl @author John Darrington <j.darrington@elvis.murdoch.edu.au>
1731 dnl @version 1.1 #### replaced Id string now that Id is for lib-v3; pme
1732 dnl
1733 dnl #### Changes for libstdc++-v3:  reformatting and linewrapping; prepending
1734 dnl #### GLIBCPP_ to the macro name; adding the :-make fallback in the
1735 dnl #### conditional's subshell (" --version" is not a command), using a
1736 dnl #### different option to grep(1).
1737 dnl #### -pme
1738 AC_DEFUN(
1739   GLIBCPP_CHECK_GNU_MAKE, [AC_CACHE_CHECK( for GNU make,_cv_gnu_make_command,
1740           _cv_gnu_make_command='' ;
1741 dnl Search all the common names for GNU make
1742           for a in "${MAKE:-make}" make gmake gnumake ; do
1743                   if ( $a --version 2> /dev/null | grep -c GNU > /dev/null )
1744                   then
1745                           _cv_gnu_make_command=$a ;
1746                           break;
1747                   fi
1748           done ;
1749   ) ;
1750 dnl If there was a GNU version, then set @ifGNUmake@ to the empty
1751 dnl string, '#' otherwise
1752   if test  "x$_cv_gnu_make_command" != "x"  ; then
1753           ifGNUmake='' ;
1754   else
1755           ifGNUmake='#' ;
1756   fi
1757   AC_SUBST(ifGNUmake)
1758 ])
1759
1760 sinclude(../libtool.m4)
1761 dnl The lines below arrange for aclocal not to bring an installed
1762 dnl libtool.m4 into aclocal.m4, while still arranging for automake to
1763 dnl add a definition of LIBTOOL to Makefile.in.
1764 ifelse(,,,[AC_SUBST(LIBTOOL)
1765 AC_DEFUN([AM_PROG_LIBTOOL])
1766 AC_DEFUN([AC_LIBTOOL_DLOPEN])
1767 AC_DEFUN([AC_PROG_LD])
1768 ])
1769
1770
1771 # Do all the work for Automake.  This macro actually does too much --
1772 # some checks are only needed if your package does certain things.
1773 # But this isn't really a big deal.
1774
1775 # serial 1
1776
1777 dnl Usage:
1778 dnl AM_INIT_AUTOMAKE(package,version, [no-define])
1779
1780 AC_DEFUN(AM_INIT_AUTOMAKE,
1781 [AC_REQUIRE([AC_PROG_INSTALL])
1782 PACKAGE=[$1]
1783 AC_SUBST(PACKAGE)
1784 VERSION=[$2]
1785 AC_SUBST(VERSION)
1786 dnl test to see if srcdir already configured
1787 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
1788   AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
1789 fi
1790 ifelse([$3],,
1791 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
1792 AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
1793 AC_REQUIRE([AM_SANITY_CHECK])
1794 AC_REQUIRE([AC_ARG_PROGRAM])
1795 dnl FIXME This is truly gross.
1796 missing_dir=`cd $ac_aux_dir && pwd`
1797 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
1798 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
1799 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
1800 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
1801 AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
1802 AC_REQUIRE([AC_PROG_MAKE_SET])])
1803
1804 #
1805 # Check to make sure that the build environment is sane.
1806 #
1807
1808 AC_DEFUN(AM_SANITY_CHECK,
1809 [AC_MSG_CHECKING([whether build environment is sane])
1810 # Just in case
1811 sleep 1
1812 echo timestamp > conftestfile
1813 # Do `set' in a subshell so we don't clobber the current shell's
1814 # arguments.  Must try -L first in case configure is actually a
1815 # symlink; some systems play weird games with the mod time of symlinks
1816 # (eg FreeBSD returns the mod time of the symlink's containing
1817 # directory).
1818 if (
1819    set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
1820    if test "[$]*" = "X"; then
1821       # -L didn't work.
1822       set X `ls -t $srcdir/configure conftestfile`
1823    fi
1824    if test "[$]*" != "X $srcdir/configure conftestfile" \
1825       && test "[$]*" != "X conftestfile $srcdir/configure"; then
1826
1827       # If neither matched, then we have a broken ls.  This can happen
1828       # if, for instance, CONFIG_SHELL is bash and it inherits a
1829       # broken ls alias from the environment.  This has actually
1830       # happened.  Such a system could not be considered "sane".
1831       AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
1832 alias in your environment])
1833    fi
1834
1835    test "[$]2" = conftestfile
1836    )
1837 then
1838    # Ok.
1839    :
1840 else
1841    AC_MSG_ERROR([newly created file is older than distributed files!
1842 Check your system clock])
1843 fi
1844 rm -f conftest*
1845 AC_MSG_RESULT(yes)])
1846
1847 dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
1848 dnl The program must properly implement --version.
1849 AC_DEFUN(AM_MISSING_PROG,
1850 [AC_MSG_CHECKING(for working $2)
1851 # Run test in a subshell; some versions of sh will print an error if
1852 # an executable is not found, even if stderr is redirected.
1853 # Redirect stdin to placate older versions of autoconf.  Sigh.
1854 if ($2 --version) < /dev/null > /dev/null 2>&1; then
1855    $1=$2
1856    AC_MSG_RESULT(found)
1857 else
1858    $1="$3/missing $2"
1859    AC_MSG_RESULT(missing)
1860 fi
1861 AC_SUBST($1)])
1862
1863 # Add --enable-maintainer-mode option to configure.
1864 # From Jim Meyering
1865
1866 # serial 1
1867
1868 AC_DEFUN(AM_MAINTAINER_MODE,
1869 [AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
1870   dnl maintainer-mode is disabled by default
1871   AC_ARG_ENABLE(maintainer-mode,
1872 [  --enable-maintainer-mode enable make rules and dependencies not useful
1873                           (and sometimes confusing) to the casual installer],
1874       USE_MAINTAINER_MODE=$enableval,
1875       USE_MAINTAINER_MODE=no)
1876   AC_MSG_RESULT($USE_MAINTAINER_MODE)
1877   AM_CONDITIONAL(MAINTAINER_MODE, test $USE_MAINTAINER_MODE = yes)
1878   MAINT=$MAINTAINER_MODE_TRUE
1879   AC_SUBST(MAINT)dnl
1880 ]
1881 )
1882
1883 # Define a conditional.
1884
1885 AC_DEFUN(AM_CONDITIONAL,
1886 [AC_SUBST($1_TRUE)
1887 AC_SUBST($1_FALSE)
1888 if $2; then
1889   $1_TRUE=
1890   $1_FALSE='#'
1891 else
1892   $1_TRUE='#'
1893   $1_FALSE=
1894 fi])
1895
1896 # Like AC_CONFIG_HEADER, but automatically create stamp file.
1897
1898 AC_DEFUN(AM_CONFIG_HEADER,
1899 [AC_PREREQ([2.12])
1900 AC_CONFIG_HEADER([$1])
1901 dnl When config.status generates a header, we must update the stamp-h file.
1902 dnl This file resides in the same directory as the config header
1903 dnl that is generated.  We must strip everything past the first ":",
1904 dnl and everything past the last "/".
1905 AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
1906 ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
1907 <<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
1908 <<am_indx=1
1909 for am_file in <<$1>>; do
1910   case " <<$>>CONFIG_HEADERS " in
1911   *" <<$>>am_file "*<<)>>
1912     echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
1913     ;;
1914   esac
1915   am_indx=`expr "<<$>>am_indx" + 1`
1916 done<<>>dnl>>)
1917 changequote([,]))])
1918