OSDN Git Service

* c-pragma.c (init_pragma): Update for parse_in type change.
[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" = "broken"; 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   c_log c_logf clog10 clog10f cpow cpowf csin csinf csinh csinhf csqrt \
759   csqrtf ctan ctanf ctanh ctanhf carg cargf 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 cargl hypotl signbitl c_logl 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   # Check for the existance of functions used if long long is enabled.
1457   AC_CHECK_FUNC(strtoll,,ac_strtoll=no)
1458   AC_CHECK_FUNC(strtoull,,ac_strtoull=no)
1459
1460   AC_MSG_CHECKING([for enabled long long])
1461   if test x"$ac_strtoll" = xno || test x"$ac_strtoull" = xno; then 
1462     enable_long_long=no; 
1463   fi; 
1464   AC_MSG_RESULT($enable_long_long)
1465
1466   dnl Option parsed, now set things appropriately
1467   if test x"$enable_long_long" = xyes; then
1468     AC_DEFINE(_GLIBCPP_USE_LONG_LONG)
1469   fi
1470 ])
1471
1472
1473 dnl
1474 dnl Check for whether or not to do shadowed C headers.
1475 dnl
1476 dnl GLIBCPP_ENABLE_SHADOW
1477 dnl --enable-cshadow-headers [does stuff].
1478 dnl --disable-cshadow-headers [does not do stuff].
1479 dnl  +  This will eventually need to be on by default.
1480 dnl  +  Usage:  GLIBCPP_ENABLE_SHADOW[(DEFAULT)]
1481 dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
1482 dnl       defaults to `no'.
1483 AC_DEFUN(GLIBCPP_ENABLE_SHADOW, [dnl
1484 define([GLIBCPP_ENABLE_SHADOW_DEFAULT], ifelse($1, yes, yes, no))dnl
1485 AC_MSG_CHECKING([for enabled cshadow headers])
1486 AC_ARG_ENABLE(cshadow-headers,
1487 changequote(<<, >>)dnl
1488 <<  --enable-cshadow-headers construct "shadowed" C header files for
1489                            g++ [default=>>GLIBCPP_ENABLE_SHADOW_DEFAULT],
1490 changequote([, ])
1491   [case "$enableval" in
1492    yes) enable_cshadow_headers=yes 
1493         ;;
1494    no)  enable_cshadow_headers=no 
1495         ;;
1496    *)   AC_MSG_ERROR([Unknown argument to enable/disable shadowed C headers]) 
1497         ;;
1498   esac],
1499   enable_cshadow_headers=GLIBCPP_ENABLE_SHADOW_DEFAULT)
1500   AC_MSG_RESULT($enable_cshadow_headers)
1501
1502   dnl Option parsed, now set things appropriately
1503   dnl NB: these things may be duplicated in c++config.h as well.
1504   case "$enable_cshadow_headers" in
1505     yes) 
1506         CSHADOW_FLAGS="-fno-builtin"
1507         C_INCLUDE_DIR='${top_srcdir}/include/c_std'
1508         AC_DEFINE(_GLIBCPP_USE_SHADOW_HEADERS)
1509         ;;
1510     no)   
1511         CSHADOW_FLAGS=""
1512         C_INCLUDE_DIR='${top_srcdir}/include/c'
1513         ;;
1514   esac
1515
1516   AC_SUBST(CSHADOW_FLAGS)
1517   AC_SUBST(C_INCLUDE_DIR)
1518   AM_CONDITIONAL(GLIBCPP_USE_CSHADOW, test "$enable_cshadow_headers" = yes)
1519 ])
1520
1521
1522 dnl
1523 dnl Check for wide character support.  Has the same effect as the option
1524 dnl in gcc's configure, but in a form that autoconf can mess with.
1525 dnl
1526 dnl GLIBCPP_ENABLE_C_MBCHAR
1527 dnl --enable-c-mbchar requests all the wchar_t stuff.
1528 dnl --disable-c-mbchar doesn't.
1529 dnl  +  Usage:  GLIBCPP_ENABLE_C_MBCHAR[(DEFAULT)]
1530 dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
1531 dnl       defaults to `no'.
1532 AC_DEFUN(GLIBCPP_ENABLE_C_MBCHAR, [dnl
1533 define([GLIBCPP_ENABLE_C_MBCHAR_DEFAULT], ifelse($1, yes, yes, no))dnl
1534 AC_ARG_ENABLE(c-mbchar,
1535 changequote(<<, >>)dnl
1536 <<  --enable-c-mbchar       enable multibyte (wide) characters [default=>>GLIBCPP_ENABLE_C_MBCHAR_DEFAULT],
1537 changequote([, ])dnl
1538 [case "$enableval" in
1539  yes) enable_c_mbchar=yes ;;
1540  no)  enable_c_mbchar=no ;;
1541  *)   AC_MSG_ERROR([Unknown argument to enable/disable c-mbchar]) ;;
1542  esac],
1543 enable_c_mbchar=GLIBCPP_ENABLE_C_MBCHAR_DEFAULT)dnl
1544 dnl Option parsed, now other scripts can test enable_c_mbchar for yes/no.
1545 ])
1546
1547
1548 dnl
1549 dnl Set up *_INCLUDES and *_INCLUDE_DIR variables for all sundry Makefile.am's.
1550 dnl
1551 dnl GLIBCPP_INCLUDE_DIR
1552 dnl C_INCLUDE_DIR
1553 dnl TOPLEVEL_INCLUDES
1554 dnl LIBMATH_INCLUDES
1555 dnl LIBSUPCXX_INCLUDES
1556 dnl LIBIO_INCLUDES
1557 dnl CSHADOW_INCLUDES
1558 dnl
1559 dnl GLIBCPP_EXPORT_INCLUDE
1560 AC_DEFUN(GLIBCPP_EXPORT_INCLUDES, [
1561   # Root level of the include sources.
1562   GLIBCPP_INCLUDE_DIR='$(top_srcdir)/include'
1563
1564   # Can either use include/c or include/c_std to grab "C" headers. This
1565   # variable is set to the include directory currently in use.
1566   # set with C_INCLUDE_DIR in GLIBCPP_ENABLE_SHADOW
1567    
1568   # Passed down for canadian crosses.
1569   if  test x"$CANADIAN" = xyes; then
1570     TOPLEVEL_INCLUDES='-I$(includedir)'
1571   fi
1572
1573   LIBMATH_INCLUDES='-I$(top_srcdir)/libmath'
1574
1575   LIBSUPCXX_INCLUDES='-I$(top_srcdir)/libsupc++'
1576
1577   #if GLIBCPP_NEED_LIBIO
1578   LIBIO_INCLUDES='-I$(top_builddir)/libio -I$(top_srcdir)/libio'
1579   #else
1580   #LIBIO_INCLUDES='-I$(top_srcdir)/libio'
1581   #endif
1582
1583   #if GLIBCPP_USE_CSHADOW
1584   #  CSHADOW_INCLUDES='-I$(GLIBCPP_INCLUDE_DIR)/std -I$(C_INCLUDE_DIR) \
1585   #                   -I$(top_blddir)/cshadow'
1586   #else
1587   CSHADOW_INCLUDES='-I$(GLIBCPP_INCLUDE_DIR)/std -I$(C_INCLUDE_DIR)'
1588   #endif
1589
1590   # Now, export this to all the little Makefiles....
1591   AC_SUBST(GLIBCPP_INCLUDE_DIR)
1592   AC_SUBST(TOPLEVEL_INCLUDES)
1593   AC_SUBST(LIBMATH_INCLUDES)
1594   AC_SUBST(LIBSUPCXX_INCLUDES)
1595   AC_SUBST(LIBIO_INCLUDES)
1596   AC_SUBST(CSHADOW_INCLUDES)
1597 ])
1598
1599
1600 dnl
1601 dnl Set up *_FLAGS and *FLAGS variables for all sundry Makefile.am's.
1602 dnl
1603 AC_DEFUN(GLIBCPP_EXPORT_FLAGS, [
1604   # Optimization flags that are probably a good idea for thrill-seekers. Just
1605   # uncomment the lines below and make, everything else is ready to go... 
1606   # OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc 
1607   OPTIMIZE_CXXFLAGS=
1608   AC_SUBST(OPTIMIZE_CXXFLAGS)
1609
1610   WARN_FLAGS='-Wall -Wno-format -W -Wwrite-strings -Winline'
1611   AC_SUBST(WARN_FLAGS)
1612 ])
1613
1614
1615 # Check whether LC_MESSAGES is available in <locale.h>.
1616 # Ulrich Drepper <drepper@cygnus.com>, 1995.
1617 #
1618 # This file file be copied and used freely without restrictions.  It can
1619 # be used in projects which are not available under the GNU Public License
1620 # but which still want to provide support for the GNU gettext functionality.
1621 # Please note that the actual code is *not* freely available.
1622
1623 # serial 1
1624
1625 AC_DEFUN(AC_LC_MESSAGES, [
1626   AC_CHECK_HEADER(locale.h, [
1627     AC_CACHE_CHECK([for LC_MESSAGES], ac_cv_val_LC_MESSAGES,
1628       [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
1629        ac_cv_val_LC_MESSAGES=yes, ac_cv_val_LC_MESSAGES=no)])
1630     if test $ac_cv_val_LC_MESSAGES = yes; then
1631       AC_DEFINE(HAVE_LC_MESSAGES)
1632     fi
1633   ])
1634 ])
1635
1636
1637 # Check for functions in math library.
1638 # Ulrich Drepper <drepper@cygnus.com>, 1998.
1639 #
1640 # This file can be copied and used freely without restrictions.  It can
1641 # be used in projects which are not available under the GNU Public License
1642 # but which still want to provide support for the GNU gettext functionality.
1643 # Please note that the actual code is *not* freely available.
1644
1645 # serial 1
1646
1647 dnl AC_REPLACE_MATHFUNCS(FUNCTION...)
1648 AC_DEFUN(AC_REPLACE_MATHFUNCS,
1649 [AC_CHECK_FUNCS([$1], , [LIBMATHOBJS="$LIBMATHOBJS ${ac_func}.lo"])
1650 AC_SUBST(LIBMATHOBJS)dnl
1651 ])
1652
1653
1654 # Check for string functions.
1655 # Ulrich Drepper <drepper@cygnus.com>, 1998.
1656 #
1657 # This file can be copied and used freely without restrictions.  It can
1658 # be used in projects which are not available under the GNU Public License
1659 # but which still want to provide support for the GNU gettext functionality.
1660 # Please note that the actual code is *not* freely available.
1661
1662 # serial 1
1663
1664 dnl AC_REPLACE_STRINGFUNCS(FUNCTION...)
1665 AC_DEFUN(AC_REPLACE_STRINGFUNCS,
1666 [AC_CHECK_FUNCS([$1], , [LIBSTRINGOBJS="$LIBSTRINGOBJS ${ac_func}.lo"])
1667 AC_SUBST(LIBSTRINGOBJS)dnl
1668 ])
1669
1670
1671 dnl This macro searches for a GNU version of make.  If a match is found, the
1672 dnl makefile variable `ifGNUmake' is set to the empty string, otherwise it is
1673 dnl set to "#". This is useful for  including a special features in a Makefile,
1674 dnl which cannot be handled by other versions of make.  The variable
1675 dnl _cv_gnu_make_command is set to the command to invoke GNU make if it exists,
1676 dnl the empty string otherwise.
1677 dnl
1678 dnl Here is an example of its use:
1679 dnl
1680 dnl Makefile.in might contain:
1681 dnl
1682 dnl     # A failsafe way of putting a dependency rule into a makefile
1683 dnl     $(DEPEND):
1684 dnl             $(CC) -MM $(srcdir)/*.c > $(DEPEND)
1685 dnl
1686 dnl     @ifGNUmake@ ifeq ($(DEPEND),$(wildcard $(DEPEND)))
1687 dnl     @ifGNUmake@ include $(DEPEND)
1688 dnl     @ifGNUmake@ endif
1689 dnl
1690 dnl Then configure.in would normally contain:
1691 dnl
1692 dnl     CHECK_GNU_MAKE()
1693 dnl     AC_OUTPUT(Makefile)
1694 dnl
1695 dnl Then perhaps to cause gnu make to override any other make, we could do
1696 dnl something like this (note that GNU make always looks for GNUmakefile first):
1697 dnl
1698 dnl     if  ! test x$_cv_gnu_make_command = x ; then
1699 dnl             mv Makefile GNUmakefile
1700 dnl             echo .DEFAULT: > Makefile ;
1701 dnl             echo \  $_cv_gnu_make_command \$@ >> Makefile;
1702 dnl     fi
1703 dnl
1704 dnl Then, if any (well almost any) other make is called, and GNU make also
1705 dnl exists, then the other make wraps the GNU make.
1706 dnl
1707 dnl @author John Darrington <j.darrington@elvis.murdoch.edu.au>
1708 dnl @version 1.1 #### replaced Id string now that Id is for lib-v3; pme
1709 dnl
1710 dnl #### Changes for libstdc++-v3:  reformatting and linewrapping; prepending
1711 dnl #### GLIBCPP_ to the macro name; adding the :-make fallback in the
1712 dnl #### conditional's subshell (" --version" is not a command), using a
1713 dnl #### different option to grep(1).
1714 dnl #### -pme
1715 AC_DEFUN(
1716   GLIBCPP_CHECK_GNU_MAKE, [AC_CACHE_CHECK( for GNU make,_cv_gnu_make_command,
1717           _cv_gnu_make_command='' ;
1718 dnl Search all the common names for GNU make
1719           for a in "${MAKE:-make}" make gmake gnumake ; do
1720                   if ( $a --version 2> /dev/null | grep -c GNU > /dev/null )
1721                   then
1722                           _cv_gnu_make_command=$a ;
1723                           break;
1724                   fi
1725           done ;
1726   ) ;
1727 dnl If there was a GNU version, then set @ifGNUmake@ to the empty
1728 dnl string, '#' otherwise
1729   if test  "x$_cv_gnu_make_command" != "x"  ; then
1730           ifGNUmake='' ;
1731   else
1732           ifGNUmake='#' ;
1733   fi
1734   AC_SUBST(ifGNUmake)
1735 ])
1736
1737 sinclude(../libtool.m4)
1738 dnl The lines below arrange for aclocal not to bring an installed
1739 dnl libtool.m4 into aclocal.m4, while still arranging for automake to
1740 dnl add a definition of LIBTOOL to Makefile.in.
1741 ifelse(,,,[AC_SUBST(LIBTOOL)
1742 AC_DEFUN([AM_PROG_LIBTOOL])
1743 AC_DEFUN([AC_LIBTOOL_DLOPEN])
1744 AC_DEFUN([AC_PROG_LD])
1745 ])
1746
1747
1748 # Do all the work for Automake.  This macro actually does too much --
1749 # some checks are only needed if your package does certain things.
1750 # But this isn't really a big deal.
1751
1752 # serial 1
1753
1754 dnl Usage:
1755 dnl AM_INIT_AUTOMAKE(package,version, [no-define])
1756
1757 AC_DEFUN(AM_INIT_AUTOMAKE,
1758 [AC_REQUIRE([AC_PROG_INSTALL])
1759 PACKAGE=[$1]
1760 AC_SUBST(PACKAGE)
1761 VERSION=[$2]
1762 AC_SUBST(VERSION)
1763 dnl test to see if srcdir already configured
1764 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
1765   AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
1766 fi
1767 ifelse([$3],,
1768 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
1769 AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
1770 AC_REQUIRE([AM_SANITY_CHECK])
1771 AC_REQUIRE([AC_ARG_PROGRAM])
1772 dnl FIXME This is truly gross.
1773 missing_dir=`cd $ac_aux_dir && pwd`
1774 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
1775 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
1776 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
1777 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
1778 AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
1779 AC_REQUIRE([AC_PROG_MAKE_SET])])
1780
1781 #
1782 # Check to make sure that the build environment is sane.
1783 #
1784
1785 AC_DEFUN(AM_SANITY_CHECK,
1786 [AC_MSG_CHECKING([whether build environment is sane])
1787 # Just in case
1788 sleep 1
1789 echo timestamp > conftestfile
1790 # Do `set' in a subshell so we don't clobber the current shell's
1791 # arguments.  Must try -L first in case configure is actually a
1792 # symlink; some systems play weird games with the mod time of symlinks
1793 # (eg FreeBSD returns the mod time of the symlink's containing
1794 # directory).
1795 if (
1796    set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
1797    if test "[$]*" = "X"; then
1798       # -L didn't work.
1799       set X `ls -t $srcdir/configure conftestfile`
1800    fi
1801    if test "[$]*" != "X $srcdir/configure conftestfile" \
1802       && test "[$]*" != "X conftestfile $srcdir/configure"; then
1803
1804       # If neither matched, then we have a broken ls.  This can happen
1805       # if, for instance, CONFIG_SHELL is bash and it inherits a
1806       # broken ls alias from the environment.  This has actually
1807       # happened.  Such a system could not be considered "sane".
1808       AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
1809 alias in your environment])
1810    fi
1811
1812    test "[$]2" = conftestfile
1813    )
1814 then
1815    # Ok.
1816    :
1817 else
1818    AC_MSG_ERROR([newly created file is older than distributed files!
1819 Check your system clock])
1820 fi
1821 rm -f conftest*
1822 AC_MSG_RESULT(yes)])
1823
1824 dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
1825 dnl The program must properly implement --version.
1826 AC_DEFUN(AM_MISSING_PROG,
1827 [AC_MSG_CHECKING(for working $2)
1828 # Run test in a subshell; some versions of sh will print an error if
1829 # an executable is not found, even if stderr is redirected.
1830 # Redirect stdin to placate older versions of autoconf.  Sigh.
1831 if ($2 --version) < /dev/null > /dev/null 2>&1; then
1832    $1=$2
1833    AC_MSG_RESULT(found)
1834 else
1835    $1="$3/missing $2"
1836    AC_MSG_RESULT(missing)
1837 fi
1838 AC_SUBST($1)])
1839
1840 # Add --enable-maintainer-mode option to configure.
1841 # From Jim Meyering
1842
1843 # serial 1
1844
1845 AC_DEFUN(AM_MAINTAINER_MODE,
1846 [AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
1847   dnl maintainer-mode is disabled by default
1848   AC_ARG_ENABLE(maintainer-mode,
1849 [  --enable-maintainer-mode enable make rules and dependencies not useful
1850                           (and sometimes confusing) to the casual installer],
1851       USE_MAINTAINER_MODE=$enableval,
1852       USE_MAINTAINER_MODE=no)
1853   AC_MSG_RESULT($USE_MAINTAINER_MODE)
1854   AM_CONDITIONAL(MAINTAINER_MODE, test $USE_MAINTAINER_MODE = yes)
1855   MAINT=$MAINTAINER_MODE_TRUE
1856   AC_SUBST(MAINT)dnl
1857 ]
1858 )
1859
1860 # Define a conditional.
1861
1862 AC_DEFUN(AM_CONDITIONAL,
1863 [AC_SUBST($1_TRUE)
1864 AC_SUBST($1_FALSE)
1865 if $2; then
1866   $1_TRUE=
1867   $1_FALSE='#'
1868 else
1869   $1_TRUE='#'
1870   $1_FALSE=
1871 fi])
1872
1873 # Like AC_CONFIG_HEADER, but automatically create stamp file.
1874
1875 AC_DEFUN(AM_CONFIG_HEADER,
1876 [AC_PREREQ([2.12])
1877 AC_CONFIG_HEADER([$1])
1878 dnl When config.status generates a header, we must update the stamp-h file.
1879 dnl This file resides in the same directory as the config header
1880 dnl that is generated.  We must strip everything past the first ":",
1881 dnl and everything past the last "/".
1882 AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
1883 ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
1884 <<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
1885 <<am_indx=1
1886 for am_file in <<$1>>; do
1887   case " <<$>>CONFIG_HEADERS " in
1888   *" <<$>>am_file "*<<)>>
1889     echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
1890     ;;
1891   esac
1892   am_indx=`expr "<<$>>am_indx" + 1`
1893 done<<>>dnl>>)
1894 changequote([,]))])
1895