OSDN Git Service

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