OSDN Git Service

d45d6442dbf0d374296c044e949479f21febdb4a
[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   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 -- NetBSD
854     if test $ctype_default = "yes"; then
855     AC_MSG_CHECKING([<ctype> for NetBSD])
856     AC_TRY_COMPILE([#include <ctype.h>],
857     [int
858     foo (int a)
859     { return _S + _C + _U + _L \
860       + _N + _P + _X + _tolower_tab_[a] + _toupper_tab_[a];}], \
861     ctype_netbsd=yes, ctype_netbsd=no)
862     AC_MSG_RESULT($ctype_netbsd)
863     if test $ctype_netbsd = "yes"; then
864       ctype_include_dir="config/os/netbsd"
865       ctype_default=no
866     fi
867     fi
868
869     dnl Test for <ctype> functionality -- Solaris 2.6 and up
870     if test $ctype_default = "yes"; then
871     AC_MSG_CHECKING([<ctype> for Solaris 2.6,7,8])
872     AC_TRY_COMPILE([#include <ctype.h>],
873     [int
874     foo (int a)
875     { return _ISSPACE + _ISPRINT + _ISCNTRL + _ISUPPER + _ISLOWER + _ISALPHA \
876         + _ISDIGIT + _ISPUNCT + _ISXDIGIT + _ISALNUM + _ISGRAPH \
877         + __trans_lower[a] + __trans_upper[a] + __ctype_mask[a];}], \
878     ctype_solaris=yes, ctype_solaris=no)
879     AC_MSG_RESULT($ctype_solaris)
880
881     if test $ctype_solaris = "yes"; then
882       AC_MSG_CHECKING([  for version])
883       AC_LANG_CPLUSPLUS 
884       AC_TRY_COMPILE([#include <ctype.h>],
885       [typedef long* __to_type; __to_type const& _M_toupper = __trans_upper;],\
886       ctype_solaris26=yes, ctype_solaris26=no)
887       AC_LANG_C
888       if test $ctype_solaris26 = "yes"; then
889         ctype_include_dir="config/os/solaris/solaris2.6"
890         AC_MSG_RESULT([Solaris 2.6])
891         ctype_default=no
892       else
893         ctype_include_dir="config/os/solaris/solaris2.7"
894         AC_MSG_RESULT([Solaris 7,8])
895         ctype_default=no
896       fi
897     fi
898     fi  
899
900     dnl Test for <ctype> functionality -- Solaris 2.5.1
901     if test $ctype_default = "yes"; then
902     AC_MSG_CHECKING([<ctype> for Solaris 2.5.1])
903     AC_TRY_COMPILE([#include <ctype.h>],
904     [int
905     foo (int a)
906     { return _U + _L + _N + _S + _P + _C + _X + _B \
907         + __ctype[a];}], \
908     ctype_solaris25=yes, ctype_solaris25=no)
909     AC_MSG_RESULT($ctype_solaris25)
910     if test $ctype_solaris25 = "yes"; then
911       ctype_include_dir="config/os/solaris/solaris2.5"
912       ctype_default=no
913     fi
914     fi
915
916     dnl Test for <ctype> functionality -- AIX
917     if test $ctype_default = "yes"; then
918     AC_MSG_CHECKING([<ctype> for AIX])
919     AC_TRY_COMPILE([#include <ctype.h>],
920     [int
921     foo (int a)
922     { return _ISSPACE + _ISPRINT + _ISCNTRL + _ISUPPER + _ISLOWER + _ISALPHA \
923         + _ISDIGIT + _ISPUNCT + _ISXDIGIT + _ISALNUM + _ISGRAPH \
924         + _VALC('a') + _IS('c', 0);}], \
925     ctype_aix=yes, ctype_aix=no)
926     AC_MSG_RESULT($ctype_aix)
927     if test $ctype_aix = "yes"; then
928       ctype_include_dir="config/os/aix"
929       ctype_default=no
930     fi
931     fi
932
933     dnl Test for <ctype> functionality -- IRIX
934     if test $ctype_default = "yes"; then 
935     AC_MSG_CHECKING([<ctype> for IRIX])
936     AC_TRY_COMPILE([#include <ctype.h>],
937     [int
938     foo (int a)
939     { return _U + _L + _N + _S + _P + _C + _B + _X + \
940              _A + _PR + _G + _BL;}], \
941     ctype_irix=yes, ctype_irix=no)
942     AC_MSG_RESULT($ctype_irix)
943     if test $ctype_irix = "yes"; then
944       ctype_include_dir="config/os/irix"
945       ctype_default=no
946     fi
947     fi
948
949     dnl Test for <ctype> functionality -- newlib
950     if test $ctype_default = "yes"; then
951     AC_MSG_CHECKING([<ctype> for newlib])
952     AC_TRY_COMPILE([#include <ctype.h>],
953     [int
954     foo (int a)
955     { return _U + _L + _N + _S + _P + _C + _X + _B \
956         + _ctype_[a];}], \
957     ctype_newlib=yes, ctype_newlib=no)
958     AC_MSG_RESULT($ctype_newlib)
959     if test $ctype_newlib = "yes"; then
960       ctype_include_dir="config/os/newlib"
961       ctype_default=no
962     fi
963     fi
964
965     if test $ctype_default = "yes"; then
966       ctype_include_dir="config/os/generic"
967       AC_MSG_WARN("Using default ctype headers.")
968     fi
969
970     AC_LINK_FILES($ctype_include_dir/bits/ctype_base.h, 
971     include/bits/ctype_base.h)
972     AC_LINK_FILES($ctype_include_dir/bits/ctype_inline.h, 
973     include/bits/ctype_inline.h)
974     AC_LINK_FILES($ctype_include_dir/bits/ctype_noninline.h, \
975     include/bits/ctype_noninline.h)
976   ])
977 ])
978
979
980 dnl
981 dnl Check to see if this target can enable the wchar_t parts of libstdc++.
982 dnl If --disable-c-mbchar was given, no wchar_t stuff is enabled.  (This
983 dnl must have been previously checked.)
984 dnl
985 dnl Define _GLIBCPP_USE_WCHAR_T if all the bits are found 
986 dnl Define _GLIBCPP_NEED_MBSTATE_T if mbstate_t is not in wchar.h
987 dnl
988 dnl GLIBCPP_CHECK_WCHAR_T_SUPPORT
989 AC_DEFUN(GLIBCPP_CHECK_WCHAR_T_SUPPORT, [
990   if test x$enable_c_mbchar != xno; then
991
992     dnl Sanity check for existence of ISO C99 headers for extended encoding.
993     AC_CHECK_HEADER(wchar.h, ac_has_wchar_h=yes, ac_has_wchar_h=no)
994     AC_CHECK_HEADER(wctype.h, ac_has_wctype_h=yes, ac_has_wctype_h=no)
995           
996     dnl Only continue checking if the ISO C99 headers exist.
997     if test x"$ac_has_wchar_h" = xyes && test x"$ac_has_wctype_h" = xyes; then
998   
999       dnl Test wchar.h for mbstate_t, which is needed for char_traits
1000       dnl and others.
1001       AC_MSG_CHECKING([for mbstate_t])
1002       AC_TRY_COMPILE([#include <wchar.h>],
1003       [mbstate_t teststate;], 
1004       use_native_mbstatet=yes, use_native_mbstatet=no)
1005       AC_MSG_RESULT($use_native_mbstatet)
1006       if test x"$use_native_mbstatet" = xno; then
1007         AC_DEFINE(_GLIBCPP_NEED_MBSTATE_T)
1008       fi
1009     
1010       dnl Test wchar.h for WCHAR_MIN, WCHAR_MAX, which is needed before
1011       dnl numeric_limits can instantiate type_traits<wchar_t>
1012       AC_MSG_CHECKING([for WCHAR_MIN and WCHAR_MAX])
1013       AC_TRY_COMPILE([#include <wchar.h>],
1014       [int i = WCHAR_MIN; int j = WCHAR_MAX;], 
1015       has_wchar_minmax=yes, has_wchar_minmax=no)
1016       AC_MSG_RESULT($has_wchar_minmax)
1017     
1018       dnl Test wchar.h for WEOF, which is what we use to determine whether
1019       dnl to specialize for char_traits<wchar_t> or not.
1020       AC_MSG_CHECKING([for WEOF])
1021       AC_TRY_COMPILE([
1022         #include <wchar.h>
1023         #include <stddef.h>],
1024       [wint_t i = WEOF;],
1025       has_weof=yes, has_weof=no)
1026       AC_MSG_RESULT($has_weof)
1027   
1028       dnl Tests for wide character functions used in char_traits<wchar_t>.
1029       AC_CHECK_FUNCS(wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset \
1030       wcsrtombs mbsrtowcs, ac_wfuncs=yes, ac_wfuncs=no)
1031   
1032       AC_MSG_CHECKING([for ISO C99 wchar_t support])
1033       if test x"$has_weof" = xyes && test x"$has_wchar_minmax" = xyes \
1034          && test x"$ac_wfuncs" = xyes; then
1035         ac_isoC99_wchar_t=yes
1036       else
1037         ac_isoC99_wchar_t=no
1038       fi
1039       AC_MSG_RESULT($ac_isoC99_wchar_t)
1040   
1041       dnl Use iconv for wchar_t to char conversions. As such, check for 
1042       dnl X/Open Portability Guide, version 2 features (XPG2).
1043       AC_CHECK_HEADER(iconv.h, ac_has_iconv_h=yes, ac_has_iconv_h=no)
1044       AC_CHECK_HEADER(langinfo.h, ac_has_langinfo_h=yes, ac_has_langinfo_h=no)
1045
1046       dnl Check for existence of libiconv.a providing XPG2 wchar_t support.
1047       AC_CHECK_LIB(iconv, iconv, libiconv="-liconv")
1048       ac_save_LIBS="$LIBS"
1049       LIBS="$LIBS $libiconv"
1050
1051       AC_CHECK_FUNCS(iconv_open iconv_close iconv nl_langinfo, \
1052       ac_XPG2funcs=yes, ac_XPG2funcs=no)
1053   
1054       LIBS="$ac_save_LIBS"
1055
1056       AC_MSG_CHECKING([for XPG2 wchar_t support])
1057       if test x"$ac_has_iconv_h" = xyes && test x"$ac_has_langinfo_h" = xyes \
1058          && test x"$ac_XPG2funcs" = xyes; then
1059         ac_XPG2_wchar_t=yes
1060       else
1061         ac_XPG2_wchar_t=no
1062       fi
1063       AC_MSG_RESULT($ac_XPG2_wchar_t)
1064   
1065       dnl At the moment, only enable wchar_t specializations if all the
1066       dnl above support is present.
1067       AC_MSG_CHECKING([for enabled wchar_t specializations])
1068       if test x"$ac_isoC99_wchar_t" = xyes \
1069          && test x"$ac_XPG2_wchar_t" = xyes; then
1070         libinst_wstring_la="libinst-wstring.la"
1071         AC_DEFINE(_GLIBCPP_USE_WCHAR_T)
1072         AC_MSG_RESULT("yes")
1073       else
1074         libinst_wstring_la=""
1075         AC_MSG_RESULT("no")
1076       fi
1077       AC_SUBST(libinst_wstring_la)
1078   
1079     else
1080       AC_MSG_WARN([<wchar.h> not found])
1081       AC_DEFINE(_GLIBCPP_NEED_MBSTATE_T)
1082     fi
1083
1084   else
1085     dnl Wide characters disabled by the user.  Maybe print a warning?
1086     :
1087   fi
1088 ])
1089
1090
1091 dnl
1092 dnl Check to see if this version of GNU C++ is afflicted by bugs in
1093 dnl __complex__ float support.
1094 dnl
1095 dnl Define _GLIBCPP_BUGGY_FLOAT_COMPLEX if buggy.
1096 dnl
1097 dnl Check to see if this version of GNU C++ is afflicted by bugs in 
1098 dnl __complex__ support.Check for buggy __complex__ that will cause ICE in
1099 dnl gcc-2.95.x when using the library, unless we define the default copy
1100 dnl ctor in the specializations of complex<>. 
1101 dnl 
1102 dnl Define _GLIBCPP_BUGGY_COMPLEX if buggy.
1103 dnl GLIBCPP_CHECK_COMPLEX_MATH_COMPILER_SUPPORT
1104 AC_DEFUN(GLIBCPP_CHECK_COMPLEX_MATH_COMPILER_SUPPORT, [
1105   AC_REQUIRE([AC_PROG_CXX])
1106
1107   AC_MSG_CHECKING([for GNU C++ __complex__ support])
1108   AC_CACHE_VAL(glibcpp_cv_complex, [
1109     AC_LANG_SAVE
1110     AC_LANG_CPLUSPLUS
1111     AC_TRY_COMPILE([struct dcomplex { __complex__ double x; }; \
1112                     dcomplex f(const dcomplex& x) { return dcomplex(x); }], \
1113                     [ dcomplex x; f(x); ],
1114       glibcpp_cv_complex=ok,
1115       glibcpp_cv_complex=buggy
1116     )
1117     AC_LANG_RESTORE
1118   ])
1119   AC_MSG_RESULT($glibcpp_cv_complex)
1120   if test $glibcpp_cv_complex = buggy; then
1121     AC_DEFINE(_GLIBCPP_BUGGY_COMPLEX)
1122   fi
1123
1124   AC_MSG_CHECKING([for GNU C++ __complex__ float support])
1125   AC_CACHE_VAL(glibcpp_cv_float_complex, [
1126     AC_LANG_SAVE
1127     AC_LANG_CPLUSPLUS
1128     rm -f conftest.h
1129     cat > conftest.h <<EOB
1130       //
1131       // Check for buggy __complex__ that causes ICE in most versions of egcs
1132       // and gcc-2.95.x on certain platforms (eg., x86-win32).
1133       //
1134       // See http://gcc.gnu.org/ml/gcc-bugs/1999-07n/msg00845.html for
1135       // more info on the bug itself.
1136       //
1137       struct
1138       float_complex
1139       {
1140        __complex__ float m_value;
1141        float_complex (float = 0.0f, float = 0.0f);
1142        float_complex (__complex__ float val) : m_value (val) {}
1143        float_complex foo (const float_complex &val)
1144          { return float_complex (~val.m_value); }
1145       };
1146 EOB
1147     AC_TRY_COMPILE([#include "conftest.h"], ,
1148       glibcpp_cv_float_complex=ok,
1149       glibcpp_cv_float_complex=buggy
1150     )
1151     AC_LANG_RESTORE
1152   ])
1153   AC_MSG_RESULT($glibcpp_cv_float_complex)
1154   if test $glibcpp_cv_float_complex = buggy; then
1155     AC_DEFINE(_GLIBCPP_BUGGY_FLOAT_COMPLEX)
1156   fi
1157 ])
1158
1159
1160 dnl
1161 dnl Check for special debugging mode; not for production use.
1162 dnl
1163 dnl GLIBCPP_ENABLE_DEBUG
1164 dnl --enable-debug sets '-ggdb3 -O0'.
1165 dnl --disable-debug sets '-g' and whatever optimization options the
1166 dnl     compiler can handle.
1167 dnl  +  --enable-maintainer-mode automatically defaults this to on.
1168 dnl  +  Perhaps -D/-U of NDEBUG, DEBUG, DEBUG_ASSERT, ...?
1169 dnl  +  Usage:  GLIBCPP_ENABLE_DEBUG[(DEFAULT)]
1170 dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
1171 dnl       defaults to `no'.
1172 AC_DEFUN(GLIBCPP_ENABLE_DEBUG, [dnl
1173 define([GLIBCPP_ENABLE_DEBUG_DEFAULT], ifelse($1, yes, yes, no))dnl
1174 AC_ARG_ENABLE(debug,
1175 changequote(<<, >>)dnl
1176 <<  --enable-debug          extra debugging, turn off optimization [default=>>GLIBCPP_ENABLE_DEBUG_DEFAULT],
1177 changequote([, ])dnl
1178 [case "${enableval}" in
1179  yes) enable_debug=yes ;;
1180  no)  enable_debug=no ;;
1181  *)   AC_MSG_ERROR([Unknown argument to enable/disable extra debugging]) ;;
1182  esac],
1183 enable_debug=GLIBCPP_ENABLE_DEBUG_DEFAULT)dnl
1184
1185 dnl Option parsed, now set things appropriately
1186 case "${enable_debug}" in
1187     yes) 
1188         DEBUG_FLAGS='-O0 -ggdb3'                        
1189         ;;
1190     no)   
1191         DEBUG_FLAGS='-g'
1192         ;;
1193 esac
1194 AC_SUBST(DEBUG_FLAGS)
1195 ])
1196
1197
1198 dnl
1199 dnl Check for "unusual" flags to pass to the compiler while building.
1200 dnl
1201 dnl GLIBCPP_ENABLE_CXX_FLAGS
1202 dnl --enable-cxx-flags='-foo -bar -baz' is a general method for passing
1203 dnl     experimental flags such as -fhonor-std, -fsquangle, -Dfloat=char, etc.
1204 dnl     Somehow this same set of flags must be passed when [re]building
1205 dnl     libgcc.
1206 dnl --disable-cxx-flags passes nothing.
1207 dnl  +  See http://sourceware.cygnus.com/ml/libstdc++/2000-q2/msg00131.html
1208 dnl         http://sourceware.cygnus.com/ml/libstdc++/2000-q2/msg00284.html
1209 dnl         http://sourceware.cygnus.com/ml/libstdc++/2000-q1/msg00035.html
1210 dnl  +  Usage:  GLIBCPP_ENABLE_CXX_FLAGS(default flags)
1211 dnl       If "default flags" is an empty string (or "none"), the effect is
1212 dnl       the same as --disable or --enable=no.
1213 AC_DEFUN(GLIBCPP_ENABLE_CXX_FLAGS, [dnl
1214 define([GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT], ifelse($1,,, $1))dnl
1215 AC_ARG_ENABLE(cxx-flags,
1216 changequote(<<, >>)dnl
1217 <<  --enable-cxx-flags=FLAGS      pass compiler FLAGS when building library;
1218                                 [default=>>GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT],
1219 changequote([, ])dnl
1220 [case "x$enableval" in
1221  xyes)   
1222         AC_MSG_ERROR([--enable-cxx-flags needs compiler flags as arguments]) ;;
1223  xno|x)  
1224         enable_cxx_flags='' ;;
1225  *)      
1226         enable_cxx_flags="$enableval" ;;
1227  esac],
1228 enable_cxx_flags='GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT')
1229
1230 dnl Thinko on my part during design.  This kludge is the workaround.
1231 if test "$enable_cxx_flags" = "none"; then 
1232   enable_cxx_flags=''; 
1233 fi
1234
1235 dnl Run through flags (either default or command-line) and set anything
1236 dnl extra (e.g., #defines) that must accompany particular g++ options.
1237 if test -n "$enable_cxx_flags"; then
1238     for f in $enable_cxx_flags; do
1239         case "$f" in
1240             -fhonor-std)  ;;
1241             -*)  ;;
1242             *)   # and we're trying to pass /what/ exactly?
1243                  AC_MSG_ERROR([compiler flags start with a -]) ;;
1244         esac
1245     done
1246 fi
1247 EXTRA_CXX_FLAGS="$enable_cxx_flags"
1248 AC_SUBST(EXTRA_CXX_FLAGS)
1249 ])
1250
1251
1252 dnl
1253 dnl Check for which I/O library to use:  libio, or something specific.
1254 dnl
1255 dnl GLIBCPP_ENABLE_CSTDIO
1256 dnl --enable-cstdio=libio sets config/c_io_libio.h and friends
1257 dnl 
1258 dnl default is stdio
1259 dnl
1260 AC_DEFUN(GLIBCPP_ENABLE_CSTDIO, [
1261   AC_MSG_CHECKING([for cstdio to use])
1262   AC_ARG_ENABLE(cstdio,
1263   [  --enable-cstdio        enable stdio for target io package. (default)
1264      --enable-cstdio=LIB    use LIB target-speific io package.], 
1265   if test x$enable_cstdio = xno; then
1266      enable_cstdio=stdio
1267   fi,
1268      enable_cstdio=stdio)
1269
1270   enable_cstdio_flag=$enable_cstdio
1271
1272   dnl Check if a valid I/O package
1273   case x${enable_cstdio_flag} in
1274     xlibio)
1275       CSTDIO_H=config/c_io_libio.h
1276       CSTDIO_CC=config/c_io_libio.cc
1277       AC_MSG_RESULT(libio)
1278
1279       # see if we are on a system with libio native (ie, linux)
1280       AC_CHECK_HEADER(libio.h,  has_libio=yes, has_libio=no)
1281
1282       # Need to check and see what version of glibc is being used. If
1283       # it's not glibc-2.2 or higher, then we'll need to go ahead and 
1284       # compile most of libio for linux systems.
1285       if test x$has_libio = x"yes"; then
1286         case "$target" in
1287           *-*-linux*)
1288               AC_MSG_CHECKING([for glibc version >= 2.2])
1289               AC_EGREP_CPP([ok], [
1290             #include <features.h>
1291               #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) 
1292                     ok
1293               #endif
1294               ], glibc_satisfactory=yes, glibc_satisfactory=no)
1295               AC_MSG_RESULT($glibc_satisfactory)
1296             ;;
1297         esac
1298
1299         # XXX at the moment, admit defeat and force the recompilation
1300         # XXX of glibc even on glibc-2.2 systems, because libio is not synched.
1301         glibc_satisfactory=no        
1302
1303         if test x$glibc_satisfactory = x"yes"; then
1304            need_libio=no
1305            need_wlibio=no        
1306         else
1307            need_libio=yes
1308            # bkoz XXX need to add checks to enable this
1309            # pme XXX here's a first pass at such a check
1310            if test x$enable_c_mbchar != xno; then
1311               need_wlibio=yes
1312            else
1313               need_wlibio=no
1314            fi
1315         fi
1316
1317       else
1318          # Using libio, but <libio.h> doesn't exist on the target system. . .
1319          need_libio=yes
1320          # bkoz XXX need to add checks to enable this
1321          # pme XXX here's a first pass at such a check
1322          if test x$enable_c_mbchar != xno; then
1323              need_wlibio=yes
1324          else
1325              need_wlibio=no
1326          fi
1327       fi
1328       ;;
1329     xstdio | x | xno | xnone | xyes)
1330       # default
1331       CSTDIO_H=config/c_io_stdio.h
1332       CSTDIO_CC=config/c_io_stdio.cc
1333       AC_MSG_RESULT(stdio)
1334
1335       # We're not using stdio.
1336       need_libio=no
1337       need_wlibio=no
1338       # Wide characters are not supported with this package.
1339       enable_c_mbchar=no
1340       ;;
1341     *)
1342       echo "$enable_cstdio is an unknown io package" 1>&2
1343       exit 1
1344       ;;
1345   esac
1346   AC_LINK_FILES($CSTDIO_H, include/bits/c++io.h)
1347   AC_LINK_FILES($CSTDIO_CC, src/c++io.cc)
1348
1349   # 2000-08-04 bkoz hack
1350   CCODECVT_C=config/c_io_libio_codecvt.c
1351   AC_LINK_FILES($CCODECVT_C, libio/c_codecvt.c)
1352   # 2000-08-04 bkoz hack
1353
1354   AM_CONDITIONAL(GLIBCPP_NEED_LIBIO, test "$need_libio" = yes)
1355   AM_CONDITIONAL(GLIBCPP_NEED_WLIBIO, test "$need_wlibio" = yes)
1356   if test "$need_libio" = yes || test "$need_wlibio" = yes; then
1357         libio_la=../libio/libio.la
1358   else
1359         libio_la=
1360   fi
1361   AC_SUBST(libio_la)
1362 ])
1363
1364
1365 dnl
1366 dnl Check for which threading library to use.
1367 dnl
1368 dnl GLIBCPP_ENABLE_THREADS
1369 dnl --enable-threads=posix sets config/threads-posix.h et. al.
1370 dnl 
1371 dnl Default is no threads, which also disables _IO_MTSAFE_IO in
1372 dnl libio.  Any actual thread package will enable it.
1373 dnl
1374 AC_DEFUN(GLIBCPP_ENABLE_THREADS, [
1375   dnl Note this comes from the gcc/config.in and libjava/config.in
1376   dnl Efforts should be made to keep this in sync.
1377   AC_MSG_CHECKING([for threads package to use])
1378   AC_ARG_ENABLE(threads,
1379   [  --enable-threads        enable thread usage for target GCC.
1380      --enable-threads=LIB    use LIB thread package for target GCC.],
1381   if test x$enable_threads = xno; then
1382     enable_threads=''
1383   fi,
1384     enable_threads='')
1385
1386   enable_threads_flag=$enable_threads
1387
1388   dnl Check if a valid thread package
1389   case x${enable_threads_flag} in
1390         x | xno | xnone)
1391                 # No threads
1392                 target_thread_file='single'
1393                 ;;
1394         xyes)
1395                 # default
1396                 target_thread_file='posix'
1397                 ;;
1398         xdecosf1 | xirix | xmach | xos2 | xposix | xpthreads | xsingle | \
1399         xsolaris | xwin32 | xdce | xvxworks)
1400                 target_thread_file=$enable_threads_flag
1401                 ;;
1402         *)
1403                 echo "$enable_threads is an unknown thread package" 1>&2
1404                 exit 1
1405                 ;;
1406   esac
1407
1408   dnl Check for thread package actually supported in libstdc++ 
1409   THREADH=
1410   case "$target_thread_file" in
1411     no | none | single)
1412       THREADH=threads-no.h
1413       ;;
1414     posix | pthreads)
1415       THREADH=threads-posix.h
1416       ;;
1417     decosf1 | irix | mach | os2 | solaris | win32 | dce | vxworks)
1418       AC_MSG_ERROR(thread package $THREADS not yet supported)
1419       ;;
1420     *)
1421       AC_MSG_ERROR($THREADS is an unsupported/unknown thread package)
1422       ;;
1423   esac
1424   AC_MSG_RESULT($THREADH)
1425
1426   AC_LINK_FILES(config/$THREADH, include/bits/c++threads.h)
1427   if test $THREADH != threads-no.h; then
1428     AC_DEFINE(_GLIBCPP_USE_THREADS)
1429   fi
1430 ])
1431
1432
1433 dnl Enable atomic locking
1434 dnl GLIBCPP_ENABLE_ATOMICITY
1435 AC_DEFUN(GLIBCPP_ENABLE_ATOMICITY, [
1436     AC_MSG_CHECKING([for atomicity.h])
1437     # We have ATOMICITY already from GLIBCPP_CONFIGURE
1438     if test "$ATOMICITYH" = "config/cpu/generic"; then
1439       AC_MSG_WARN([No ATOMICITY settings found, using generic atomic ops.])
1440     fi
1441     AC_MSG_RESULT($ATOMICITYH/bits/atomicity.h)
1442     AC_LINK_FILES($ATOMICITYH/bits/atomicity.h, include/bits/atomicity.h)
1443 ])
1444
1445
1446 dnl
1447 dnl Check for template specializations for the 'long long' type extension.
1448 dnl
1449 dnl GLIBCPP_ENABLE_LONG_LONG
1450 dnl --enable-long-long defines _GLIBCPP_USE_LONG_LONG
1451 dnl --disable-long-long leaves _GLIBCPP_USE_LONG_LONG undefined
1452 dnl  +  Usage:  GLIBCPP_ENABLE_LONG_LONG[(DEFAULT)]
1453 dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
1454 dnl       defaults to `no'.
1455 dnl  +  If 'long long' stuff is not available, ignores DEFAULT and sets `no'.
1456 dnl
1457 dnl GLIBCPP_ENABLE_LONG_LONG
1458 AC_DEFUN(GLIBCPP_ENABLE_LONG_LONG, [dnl
1459   define([GLIBCPP_ENABLE_LONG_LONG_DEFAULT], ifelse($1, yes, yes, no))dnl
1460
1461   AC_ARG_ENABLE(long-long,
1462   changequote(<<, >>)dnl
1463   <<--enable-long-long      turns on 'long long' [default=>>GLIBCPP_ENABLE_LONG_LONG_DEFAULT],
1464   changequote([, ])dnl
1465   [case "$enableval" in
1466    yes) enable_long_long=yes ;;
1467    no)  enable_long_long=no ;;
1468    *)   AC_MSG_ERROR([Unknown argument to enable/disable long long]) ;;
1469    esac],
1470   enable_long_long=GLIBCPP_ENABLE_LONG_LONG_DEFAULT)dnl
1471
1472   # Check for the existance of functions used if long long is enabled.
1473   AC_CHECK_FUNC(strtoll,,ac_strtoll=no)
1474   AC_CHECK_FUNC(strtoull,,ac_strtoull=no)
1475
1476   AC_MSG_CHECKING([for enabled long long])
1477   if test x"$ac_strtoll" = xno || test x"$ac_strtoull" = xno; then 
1478     enable_long_long=no; 
1479   fi; 
1480   AC_MSG_RESULT($enable_long_long)
1481
1482   dnl Option parsed, now set things appropriately
1483   if test x"$enable_long_long" = xyes; then
1484     AC_DEFINE(_GLIBCPP_USE_LONG_LONG)
1485   fi
1486 ])
1487
1488
1489 dnl
1490 dnl Check for whether or not to do shadowed C headers.
1491 dnl
1492 dnl GLIBCPP_ENABLE_SHADOW
1493 dnl --enable-cshadow-headers [does stuff].
1494 dnl --disable-cshadow-headers [does not do stuff].
1495 dnl  +  This will eventually need to be on by default.
1496 dnl  +  Usage:  GLIBCPP_ENABLE_SHADOW[(DEFAULT)]
1497 dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
1498 dnl       defaults to `no'.
1499 AC_DEFUN(GLIBCPP_ENABLE_SHADOW, [dnl
1500 define([GLIBCPP_ENABLE_SHADOW_DEFAULT], ifelse($1, yes, yes, no))dnl
1501 AC_MSG_CHECKING([for enabled cshadow headers])
1502 AC_ARG_ENABLE(cshadow-headers,
1503 changequote(<<, >>)dnl
1504 <<  --enable-cshadow-headers construct "shadowed" C header files for
1505                            g++ [default=>>GLIBCPP_ENABLE_SHADOW_DEFAULT],
1506 changequote([, ])
1507   [case "$enableval" in
1508    yes) enable_cshadow_headers=yes 
1509         ;;
1510    no)  enable_cshadow_headers=no 
1511         ;;
1512    *)   AC_MSG_ERROR([Unknown argument to enable/disable shadowed C headers]) 
1513         ;;
1514   esac],
1515   enable_cshadow_headers=GLIBCPP_ENABLE_SHADOW_DEFAULT)
1516   AC_MSG_RESULT($enable_cshadow_headers)
1517
1518   dnl Option parsed, now set things appropriately
1519   dnl NB: these things may be duplicated in c++config.h as well.
1520   case "$enable_cshadow_headers" in
1521     yes) 
1522         CSHADOW_FLAGS="-fno-builtin"
1523         C_INCLUDE_DIR='${top_srcdir}/include/c_std'
1524         AC_DEFINE(_GLIBCPP_USE_SHADOW_HEADERS)
1525         ;;
1526     no)   
1527         CSHADOW_FLAGS=""
1528         C_INCLUDE_DIR='${top_srcdir}/include/c'
1529         ;;
1530   esac
1531
1532   AC_SUBST(CSHADOW_FLAGS)
1533   AC_SUBST(C_INCLUDE_DIR)
1534   AM_CONDITIONAL(GLIBCPP_USE_CSHADOW, test "$enable_cshadow_headers" = yes)
1535 ])
1536
1537
1538 dnl
1539 dnl Check for wide character support.  Has the same effect as the option
1540 dnl in gcc's configure, but in a form that autoconf can mess with.
1541 dnl
1542 dnl GLIBCPP_ENABLE_C_MBCHAR
1543 dnl --enable-c-mbchar requests all the wchar_t stuff.
1544 dnl --disable-c-mbchar doesn't.
1545 dnl  +  Usage:  GLIBCPP_ENABLE_C_MBCHAR[(DEFAULT)]
1546 dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
1547 dnl       defaults to `no'.
1548 AC_DEFUN(GLIBCPP_ENABLE_C_MBCHAR, [dnl
1549 define([GLIBCPP_ENABLE_C_MBCHAR_DEFAULT], ifelse($1, yes, yes, no))dnl
1550 AC_ARG_ENABLE(c-mbchar,
1551 changequote(<<, >>)dnl
1552 <<  --enable-c-mbchar       enable multibyte (wide) characters [default=>>GLIBCPP_ENABLE_C_MBCHAR_DEFAULT],
1553 changequote([, ])dnl
1554 [case "$enableval" in
1555  yes) enable_c_mbchar=yes ;;
1556  no)  enable_c_mbchar=no ;;
1557  *)   AC_MSG_ERROR([Unknown argument to enable/disable c-mbchar]) ;;
1558  esac],
1559 enable_c_mbchar=GLIBCPP_ENABLE_C_MBCHAR_DEFAULT)dnl
1560 dnl Option parsed, now other scripts can test enable_c_mbchar for yes/no.
1561 ])
1562
1563
1564 dnl
1565 dnl Set up *_INCLUDES and *_INCLUDE_DIR variables for all sundry Makefile.am's.
1566 dnl
1567 dnl GLIBCPP_INCLUDE_DIR
1568 dnl C_INCLUDE_DIR
1569 dnl TOPLEVEL_INCLUDES
1570 dnl LIBMATH_INCLUDES
1571 dnl LIBSUPCXX_INCLUDES
1572 dnl LIBIO_INCLUDES
1573 dnl CSHADOW_INCLUDES
1574 dnl
1575 dnl GLIBCPP_EXPORT_INCLUDE
1576 AC_DEFUN(GLIBCPP_EXPORT_INCLUDES, [
1577   # Root level of the include sources.
1578   GLIBCPP_INCLUDE_DIR='$(top_srcdir)/include'
1579
1580   # Can either use include/c or include/c_std to grab "C" headers. This
1581   # variable is set to the include directory currently in use.
1582   # set with C_INCLUDE_DIR in GLIBCPP_ENABLE_SHADOW
1583    
1584   # Passed down for canadian crosses.
1585   if  test x"$CANADIAN" = xyes; then
1586     TOPLEVEL_INCLUDES='-I$(includedir)'
1587   fi
1588
1589   LIBMATH_INCLUDES='-I$(top_srcdir)/libmath'
1590
1591   LIBSUPCXX_INCLUDES='-I$(top_srcdir)/libsupc++'
1592
1593   #if GLIBCPP_NEED_LIBIO
1594   LIBIO_INCLUDES='-I$(top_builddir)/libio -I$(top_srcdir)/libio'
1595   #else
1596   #LIBIO_INCLUDES='-I$(top_srcdir)/libio'
1597   #endif
1598
1599   #if GLIBCPP_USE_CSHADOW
1600   #  CSHADOW_INCLUDES='-I$(GLIBCPP_INCLUDE_DIR)/std -I$(C_INCLUDE_DIR) \
1601   #                   -I$(top_blddir)/cshadow'
1602   #else
1603   CSHADOW_INCLUDES='-I$(GLIBCPP_INCLUDE_DIR)/std -I$(C_INCLUDE_DIR)'
1604   #endif
1605
1606   # Now, export this to all the little Makefiles....
1607   AC_SUBST(GLIBCPP_INCLUDE_DIR)
1608   AC_SUBST(TOPLEVEL_INCLUDES)
1609   AC_SUBST(LIBMATH_INCLUDES)
1610   AC_SUBST(LIBSUPCXX_INCLUDES)
1611   AC_SUBST(LIBIO_INCLUDES)
1612   AC_SUBST(CSHADOW_INCLUDES)
1613 ])
1614
1615
1616 dnl
1617 dnl Set up *_FLAGS and *FLAGS variables for all sundry Makefile.am's.
1618 dnl
1619 AC_DEFUN(GLIBCPP_EXPORT_FLAGS, [
1620   # Optimization flags that are probably a good idea for thrill-seekers. Just
1621   # uncomment the lines below and make, everything else is ready to go... 
1622   # OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc 
1623   OPTIMIZE_CXXFLAGS=
1624   AC_SUBST(OPTIMIZE_CXXFLAGS)
1625
1626   WARN_FLAGS='-Wall -Wno-format -W -Wwrite-strings -Winline'
1627   AC_SUBST(WARN_FLAGS)
1628 ])
1629
1630
1631 # Check whether LC_MESSAGES is available in <locale.h>.
1632 # Ulrich Drepper <drepper@cygnus.com>, 1995.
1633 #
1634 # This file file be copied and used freely without restrictions.  It can
1635 # be used in projects which are not available under the GNU Public License
1636 # but which still want to provide support for the GNU gettext functionality.
1637 # Please note that the actual code is *not* freely available.
1638
1639 # serial 1
1640
1641 AC_DEFUN(AC_LC_MESSAGES, [
1642   AC_CHECK_HEADER(locale.h, [
1643     AC_CACHE_CHECK([for LC_MESSAGES], ac_cv_val_LC_MESSAGES,
1644       [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
1645        ac_cv_val_LC_MESSAGES=yes, ac_cv_val_LC_MESSAGES=no)])
1646     if test $ac_cv_val_LC_MESSAGES = yes; then
1647       AC_DEFINE(HAVE_LC_MESSAGES)
1648     fi
1649   ])
1650 ])
1651
1652
1653 # Check for functions in math library.
1654 # Ulrich Drepper <drepper@cygnus.com>, 1998.
1655 #
1656 # This file can be copied and used freely without restrictions.  It can
1657 # be used in projects which are not available under the GNU Public License
1658 # but which still want to provide support for the GNU gettext functionality.
1659 # Please note that the actual code is *not* freely available.
1660
1661 # serial 1
1662
1663 dnl AC_REPLACE_MATHFUNCS(FUNCTION...)
1664 AC_DEFUN(AC_REPLACE_MATHFUNCS,
1665 [AC_CHECK_FUNCS([$1], , [LIBMATHOBJS="$LIBMATHOBJS ${ac_func}.lo"])
1666 AC_SUBST(LIBMATHOBJS)dnl
1667 ])
1668
1669
1670 # Check for string functions.
1671 # Ulrich Drepper <drepper@cygnus.com>, 1998.
1672 #
1673 # This file can be copied and used freely without restrictions.  It can
1674 # be used in projects which are not available under the GNU Public License
1675 # but which still want to provide support for the GNU gettext functionality.
1676 # Please note that the actual code is *not* freely available.
1677
1678 # serial 1
1679
1680 dnl AC_REPLACE_STRINGFUNCS(FUNCTION...)
1681 AC_DEFUN(AC_REPLACE_STRINGFUNCS,
1682 [AC_CHECK_FUNCS([$1], , [LIBSTRINGOBJS="$LIBSTRINGOBJS ${ac_func}.lo"])
1683 AC_SUBST(LIBSTRINGOBJS)dnl
1684 ])
1685
1686
1687 dnl This macro searches for a GNU version of make.  If a match is found, the
1688 dnl makefile variable `ifGNUmake' is set to the empty string, otherwise it is
1689 dnl set to "#". This is useful for  including a special features in a Makefile,
1690 dnl which cannot be handled by other versions of make.  The variable
1691 dnl _cv_gnu_make_command is set to the command to invoke GNU make if it exists,
1692 dnl the empty string otherwise.
1693 dnl
1694 dnl Here is an example of its use:
1695 dnl
1696 dnl Makefile.in might contain:
1697 dnl
1698 dnl     # A failsafe way of putting a dependency rule into a makefile
1699 dnl     $(DEPEND):
1700 dnl             $(CC) -MM $(srcdir)/*.c > $(DEPEND)
1701 dnl
1702 dnl     @ifGNUmake@ ifeq ($(DEPEND),$(wildcard $(DEPEND)))
1703 dnl     @ifGNUmake@ include $(DEPEND)
1704 dnl     @ifGNUmake@ endif
1705 dnl
1706 dnl Then configure.in would normally contain:
1707 dnl
1708 dnl     CHECK_GNU_MAKE()
1709 dnl     AC_OUTPUT(Makefile)
1710 dnl
1711 dnl Then perhaps to cause gnu make to override any other make, we could do
1712 dnl something like this (note that GNU make always looks for GNUmakefile first):
1713 dnl
1714 dnl     if  ! test x$_cv_gnu_make_command = x ; then
1715 dnl             mv Makefile GNUmakefile
1716 dnl             echo .DEFAULT: > Makefile ;
1717 dnl             echo \  $_cv_gnu_make_command \$@ >> Makefile;
1718 dnl     fi
1719 dnl
1720 dnl Then, if any (well almost any) other make is called, and GNU make also
1721 dnl exists, then the other make wraps the GNU make.
1722 dnl
1723 dnl @author John Darrington <j.darrington@elvis.murdoch.edu.au>
1724 dnl @version 1.1 #### replaced Id string now that Id is for lib-v3; pme
1725 dnl
1726 dnl #### Changes for libstdc++-v3:  reformatting and linewrapping; prepending
1727 dnl #### GLIBCPP_ to the macro name; adding the :-make fallback in the
1728 dnl #### conditional's subshell (" --version" is not a command), using a
1729 dnl #### different option to grep(1).
1730 dnl #### -pme
1731 AC_DEFUN(
1732   GLIBCPP_CHECK_GNU_MAKE, [AC_CACHE_CHECK( for GNU make,_cv_gnu_make_command,
1733           _cv_gnu_make_command='' ;
1734 dnl Search all the common names for GNU make
1735           for a in "${MAKE:-make}" make gmake gnumake ; do
1736                   if ( $a --version 2> /dev/null | grep -c GNU > /dev/null )
1737                   then
1738                           _cv_gnu_make_command=$a ;
1739                           break;
1740                   fi
1741           done ;
1742   ) ;
1743 dnl If there was a GNU version, then set @ifGNUmake@ to the empty
1744 dnl string, '#' otherwise
1745   if test  "x$_cv_gnu_make_command" != "x"  ; then
1746           ifGNUmake='' ;
1747   else
1748           ifGNUmake='#' ;
1749   fi
1750   AC_SUBST(ifGNUmake)
1751 ])
1752
1753 sinclude(../libtool.m4)
1754 dnl The lines below arrange for aclocal not to bring an installed
1755 dnl libtool.m4 into aclocal.m4, while still arranging for automake to
1756 dnl add a definition of LIBTOOL to Makefile.in.
1757 ifelse(,,,[AC_SUBST(LIBTOOL)
1758 AC_DEFUN([AM_PROG_LIBTOOL])
1759 AC_DEFUN([AC_LIBTOOL_DLOPEN])
1760 AC_DEFUN([AC_PROG_LD])
1761 ])
1762
1763
1764 # Do all the work for Automake.  This macro actually does too much --
1765 # some checks are only needed if your package does certain things.
1766 # But this isn't really a big deal.
1767
1768 # serial 1
1769
1770 dnl Usage:
1771 dnl AM_INIT_AUTOMAKE(package,version, [no-define])
1772
1773 AC_DEFUN(AM_INIT_AUTOMAKE,
1774 [AC_REQUIRE([AC_PROG_INSTALL])
1775 PACKAGE=[$1]
1776 AC_SUBST(PACKAGE)
1777 VERSION=[$2]
1778 AC_SUBST(VERSION)
1779 dnl test to see if srcdir already configured
1780 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
1781   AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
1782 fi
1783 ifelse([$3],,
1784 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
1785 AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
1786 AC_REQUIRE([AM_SANITY_CHECK])
1787 AC_REQUIRE([AC_ARG_PROGRAM])
1788 dnl FIXME This is truly gross.
1789 missing_dir=`cd $ac_aux_dir && pwd`
1790 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
1791 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
1792 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
1793 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
1794 AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
1795 AC_REQUIRE([AC_PROG_MAKE_SET])])
1796
1797 #
1798 # Check to make sure that the build environment is sane.
1799 #
1800
1801 AC_DEFUN(AM_SANITY_CHECK,
1802 [AC_MSG_CHECKING([whether build environment is sane])
1803 # Just in case
1804 sleep 1
1805 echo timestamp > conftestfile
1806 # Do `set' in a subshell so we don't clobber the current shell's
1807 # arguments.  Must try -L first in case configure is actually a
1808 # symlink; some systems play weird games with the mod time of symlinks
1809 # (eg FreeBSD returns the mod time of the symlink's containing
1810 # directory).
1811 if (
1812    set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
1813    if test "[$]*" = "X"; then
1814       # -L didn't work.
1815       set X `ls -t $srcdir/configure conftestfile`
1816    fi
1817    if test "[$]*" != "X $srcdir/configure conftestfile" \
1818       && test "[$]*" != "X conftestfile $srcdir/configure"; then
1819
1820       # If neither matched, then we have a broken ls.  This can happen
1821       # if, for instance, CONFIG_SHELL is bash and it inherits a
1822       # broken ls alias from the environment.  This has actually
1823       # happened.  Such a system could not be considered "sane".
1824       AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
1825 alias in your environment])
1826    fi
1827
1828    test "[$]2" = conftestfile
1829    )
1830 then
1831    # Ok.
1832    :
1833 else
1834    AC_MSG_ERROR([newly created file is older than distributed files!
1835 Check your system clock])
1836 fi
1837 rm -f conftest*
1838 AC_MSG_RESULT(yes)])
1839
1840 dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
1841 dnl The program must properly implement --version.
1842 AC_DEFUN(AM_MISSING_PROG,
1843 [AC_MSG_CHECKING(for working $2)
1844 # Run test in a subshell; some versions of sh will print an error if
1845 # an executable is not found, even if stderr is redirected.
1846 # Redirect stdin to placate older versions of autoconf.  Sigh.
1847 if ($2 --version) < /dev/null > /dev/null 2>&1; then
1848    $1=$2
1849    AC_MSG_RESULT(found)
1850 else
1851    $1="$3/missing $2"
1852    AC_MSG_RESULT(missing)
1853 fi
1854 AC_SUBST($1)])
1855
1856 # Add --enable-maintainer-mode option to configure.
1857 # From Jim Meyering
1858
1859 # serial 1
1860
1861 AC_DEFUN(AM_MAINTAINER_MODE,
1862 [AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
1863   dnl maintainer-mode is disabled by default
1864   AC_ARG_ENABLE(maintainer-mode,
1865 [  --enable-maintainer-mode enable make rules and dependencies not useful
1866                           (and sometimes confusing) to the casual installer],
1867       USE_MAINTAINER_MODE=$enableval,
1868       USE_MAINTAINER_MODE=no)
1869   AC_MSG_RESULT($USE_MAINTAINER_MODE)
1870   AM_CONDITIONAL(MAINTAINER_MODE, test $USE_MAINTAINER_MODE = yes)
1871   MAINT=$MAINTAINER_MODE_TRUE
1872   AC_SUBST(MAINT)dnl
1873 ]
1874 )
1875
1876 # Define a conditional.
1877
1878 AC_DEFUN(AM_CONDITIONAL,
1879 [AC_SUBST($1_TRUE)
1880 AC_SUBST($1_FALSE)
1881 if $2; then
1882   $1_TRUE=
1883   $1_FALSE='#'
1884 else
1885   $1_TRUE='#'
1886   $1_FALSE=
1887 fi])
1888
1889 # Like AC_CONFIG_HEADER, but automatically create stamp file.
1890
1891 AC_DEFUN(AM_CONFIG_HEADER,
1892 [AC_PREREQ([2.12])
1893 AC_CONFIG_HEADER([$1])
1894 dnl When config.status generates a header, we must update the stamp-h file.
1895 dnl This file resides in the same directory as the config header
1896 dnl that is generated.  We must strip everything past the first ":",
1897 dnl and everything past the last "/".
1898 AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
1899 ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
1900 <<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
1901 <<am_indx=1
1902 for am_file in <<$1>>; do
1903   case " <<$>>CONFIG_HEADERS " in
1904   *" <<$>>am_file "*<<)>>
1905     echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
1906     ;;
1907   esac
1908   am_indx=`expr "<<$>>am_indx" + 1`
1909 done<<>>dnl>>)
1910 changequote([,]))])
1911