OSDN Git Service

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