OSDN Git Service

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