OSDN Git Service

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