OSDN Git Service

2001-06-10 Benjamin Kosnik <bkoz@redhat.com>
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / aclocal.m4
1 dnl aclocal.m4 generated automatically by aclocal 1.4
2
3 dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
4 dnl This file is free software; the Free Software Foundation
5 dnl gives unlimited permission to copy and/or distribute it,
6 dnl with or without modifications, as long as this notice is preserved.
7
8 dnl This program is distributed in the hope that it will be useful,
9 dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
10 dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
11 dnl PARTICULAR PURPOSE.
12
13 dnl
14 dnl Initialize configure bits.
15 dnl
16 dnl Define OPTLEVEL='-O2' if new inlining code present.
17 dnl
18 dnl GLIBCPP_CONFIGURE
19 AC_DEFUN(GLIBCPP_CONFIGURE, [
20   dnl Default to --enable-multilib
21   AC_ARG_ENABLE(multilib,
22   [  --enable-multilib       build hella library versions (default)],
23   [case "${enableval}" in
24     yes) multilib=yes ;;
25     no)  multilib=no ;;
26     *)   AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
27    esac], [multilib=yes])dnl
28
29   glibcpp_basedir=$auxdir/$1/libstdc++-v3
30   AC_SUBST(glibcpp_basedir)
31
32   AM_INIT_AUTOMAKE(libstdc++, 2.92)
33
34   # Never versions of autoconf add an underscore to these functions.
35   # Prevent future problems ...
36   ifdef([AC_PROG_CC_G],[],[define([AC_PROG_CC_G],defn([_AC_PROG_CC_G]))])
37   ifdef([AC_PROG_CC_GNU],[],[define([AC_PROG_CC_GNU],defn([_AC_PROG_CC_GNU]))])
38   ifdef([AC_PROG_CXX_G],[],[define([AC_PROG_CXX_G],defn([_AC_PROG_CXX_G]))])
39   ifdef([AC_PROG_CXX_GNU],[],[define([AC_PROG_CXX_GNU],defn([_AC_PROG_CXX_GNU]))])
40
41 #  AC_PROG_CC
42
43 # FIXME: We temporarily define our own version of AC_PROG_CC.  This is
44 # copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS.  We
45 # are probably using a cross compiler, which will not be able to fully
46 # link an executable.  This should really be fixed in autoconf
47 # itself.
48
49 AC_DEFUN(LIB_AC_PROG_CC,
50 [AC_BEFORE([$0], [AC_PROG_CPP])dnl
51 dnl Fool anybody using AC_PROG_CC.
52 AC_PROVIDE([AC_PROG_CC])
53 AC_CHECK_PROG(CC, gcc, gcc)
54 if test -z "$CC"; then
55   AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
56   test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
57 fi
58
59 AC_PROG_CC_GNU
60
61 if test $ac_cv_prog_gcc = yes; then
62   GCC=yes
63 dnl Check whether -g works, even if CFLAGS is set, in case the package
64 dnl plays around with CFLAGS (such as to build both debugging and
65 dnl normal versions of a library), tasteless as that idea is.
66   ac_test_CFLAGS="${CFLAGS+set}"
67   ac_save_CFLAGS="$CFLAGS"
68   CFLAGS=
69   AC_PROG_CC_G
70   if test "$ac_test_CFLAGS" = set; then
71     CFLAGS="$ac_save_CFLAGS"
72   elif test $ac_cv_prog_cc_g = yes; then
73     CFLAGS="-g -O2"
74   else
75     CFLAGS="-O2"
76   fi
77 else
78   GCC=
79   test "${CFLAGS+set}" = set || CFLAGS="-g"
80 fi
81 ])
82
83 LIB_AC_PROG_CC
84
85 # Can't just call these here as g++ requires libstc++ to be built....
86 #  AC_PROG_CXX
87
88 # Likewise for AC_PROG_CXX.
89 AC_DEFUN(LIB_AC_PROG_CXX,
90 [AC_BEFORE([$0], [AC_PROG_CXXCPP])dnl
91 dnl Fool anybody using AC_PROG_CXX.
92 AC_PROVIDE([AC_PROG_CXX])
93 # Use glibcpp_CXX so that we do not cause CXX to be cached with the
94 # flags that come in CXX while configuring libstdc++.  They're different
95 # from those used for all other target libraries.  If CXX is set in
96 # the environment, respect that here.
97 glibcpp_CXX=$CXX
98 AC_CHECK_PROGS(glibcpp_CXX, $CCC c++ g++ gcc CC cxx cc++, gcc)
99 AC_SUBST(glibcpp_CXX)
100 CXX=$glibcpp_CXX
101 test -z "$glibcpp_CXX" && AC_MSG_ERROR([no acceptable c++ found in \$PATH])
102
103 AC_PROG_CXX_GNU
104
105 if test $ac_cv_prog_gxx = yes; then
106   GXX=yes
107 dnl Check whether -g works, even if CXXFLAGS is set, in case the package
108 dnl plays around with CXXFLAGS (such as to build both debugging and
109 dnl normal versions of a library), tasteless as that idea is.
110   ac_test_CXXFLAGS="${CXXFLAGS+set}"
111   ac_save_CXXFLAGS="$CXXFLAGS"
112   CXXFLAGS=
113   AC_PROG_CXX_G
114   if test "$ac_test_CXXFLAGS" = set; then
115     CXXFLAGS="$ac_save_CXXFLAGS"
116   elif test $ac_cv_prog_cxx_g = yes; then
117     CXXFLAGS="-g -O2"
118   else
119     CXXFLAGS="-O2"
120   fi
121 else
122   GXX=
123   test "${CXXFLAGS+set}" = set || CXXFLAGS="-g"
124 fi
125 ])
126
127 LIB_AC_PROG_CXX
128
129   AC_CHECK_TOOL(AS, as)
130   AC_CHECK_TOOL(AR, ar)
131   AC_CHECK_TOOL(RANLIB, ranlib, ranlib-not-found-in-path-error)
132   AC_PROG_INSTALL
133
134   AM_MAINTAINER_MODE
135
136   # We need AC_EXEEXT to keep automake happy in cygnus mode.  However,
137   # at least currently, we never actually build a program, so we never
138   # need to use $(EXEEXT).  Moreover, the test for EXEEXT normally
139   # fails, because we are probably configuring with a cross compiler
140   # which cant create executables.  So we include AC_EXEEXT to keep
141   # automake happy, but we dont execute it, since we dont care about
142   # the result.
143   if false; then
144     # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands
145     # to nothing, so nothing would remain between `then' and `fi' if it
146     # were not for the `:' below.
147     :
148     AC_EXEEXT
149   fi
150
151   . [$]{glibcpp_basedir}/configure.host
152
153   case [$]{glibcpp_basedir} in
154     /* | [A-Za-z]:[\\/]*) libgcj_flagbasedir=[$]{glibcpp_basedir} ;;
155     *) glibcpp_flagbasedir='[$](top_builddir)/'[$]{glibcpp_basedir} ;;
156   esac
157
158   # This does for the target what configure.host does for the host.  In
159   # addition to possibly modifying the same flags, it also sets up symlinks.
160   GLIBCPP_CHECK_TARGET
161 ])
162
163
164 dnl
165 dnl Check to see if g++ can compile this library, and if so, if any version-
166 dnl specific precautions need to be taken. 
167 dnl 
168 dnl GLIBCPP_CHECK_COMPILER_VERSION
169 AC_DEFUN(GLIBCPP_CHECK_COMPILER_VERSION, [
170 if test ! -f stamp-sanity-compiler; then
171   AC_MSG_CHECKING([for g++ that will successfully compile libstdc++-v3])
172   AC_LANG_SAVE
173   AC_LANG_CPLUSPLUS
174   AC_EGREP_CPP(ok, [
175   #if __GNUC__ >= 3
176     ok
177   #endif
178   ], gpp_satisfactory=yes, AC_MSG_ERROR([please upgrade to GCC 3.0 or above]))
179   AC_LANG_RESTORE
180   AC_MSG_RESULT($gpp_satisfactory)
181   touch stamp-sanity-compiler
182 fi
183 ])
184
185
186 dnl
187 dnl Test for newer compiler features, or features that are present in newer
188 dnl compiler version but not older compiler versions should be placed
189 dnl here.
190 dnl
191 dnl Define WERROR='-Werror' if requested and possible; g++'s that lack the
192 dnl new inlining code or the new system_header pragma will die on -Werror.
193 dnl Leave it out by default and use maint-mode to use it.
194 dnl
195 dnl Define SECTION_FLAGS='-ffunction-sections -fdata-sections' if
196 dnl compiler supports it and the user has not requested debug mode.
197 dnl
198 dnl GLIBCPP_CHECK_COMPILER_FEATURES
199 AC_DEFUN(GLIBCPP_CHECK_COMPILER_FEATURES, [
200   # All these tests are for C++; save the language and the compiler flags.
201   # The CXXFLAGS thing is suspicious, but based on similar bits 
202   # found in GLIBCPP_CONFIGURE.
203   AC_LANG_SAVE
204   AC_LANG_CPLUSPLUS
205   ac_test_CXXFLAGS="${CXXFLAGS+set}"
206   ac_save_CXXFLAGS="$CXXFLAGS"
207
208   # Check for maintainer-mode bits.
209   if test x"$USE_MAINTAINER_MODE" = xno; then
210     WERROR=''
211   else
212     WERROR='-Werror'
213   fi
214
215   # Check for -ffunction-sections -fdata-sections
216   AC_MSG_CHECKING([for g++ that supports -ffunction-sections -fdata-sections])
217   CXXFLAGS='-Werror -ffunction-sections -fdata-sections'
218   AC_TRY_COMPILE(, [int foo;
219   ], [ac_fdsections=yes], [ac_fdsections=no])
220   if test "$ac_test_CXXFLAGS" = set; then
221     CXXFLAGS="$ac_save_CXXFLAGS"
222   else
223     # this is the suspicious part
224     CXXFLAGS=''
225   fi
226   if test x"$ac_fdsections" = x"yes" && test x"$enable_debug" = x"no"; then
227     SECTION_FLAGS='-ffunction-sections -fdata-sections'
228   fi
229   AC_MSG_RESULT($ac_fdsections)
230
231   AC_LANG_RESTORE
232   AC_SUBST(WERROR)
233   AC_SUBST(SECTION_FLAGS)
234 ])
235
236
237 dnl
238 dnl If GNU ld is in use, check to see if tricky linker opts can be used.  If
239 dnl the native linker is in use, all variables will be defined to something
240 dnl safe (like an empty string).
241 dnl
242 dnl Define SECTION_LDFLAGS='-Wl,--gc-sections' if possible.
243 dnl Define OPT_LDFLAGS='-Wl,-O1' if possible.
244 dnl
245 dnl GLIBCPP_CHECK_LINKER_FEATURES
246 AC_DEFUN(GLIBCPP_CHECK_LINKER_FEATURES, [
247   # If we're not using GNU ld, then there's no point in even trying these
248   # tests.  Check for that first.  We should have already tested for gld
249   # by now (in libtool), but require it now just to be safe...
250   SECTION_LDFLAGS=''
251   OPT_LDFLAGS=''
252   AC_REQUIRE([AC_PROG_LD])
253
254   # Set --gc-sections.
255   if test "$ac_cv_prog_gnu_ld" = "notbroken"; then
256     # GNU ld it is!  Joy and bunny rabbits!
257
258     # All these tests are for C++; save the language and the compiler flags.
259     # Need to do this so that g++ won't try to link in libstdc++
260     ac_test_CFLAGS="${CFLAGS+set}"
261     ac_save_CFLAGS="$CFLAGS"
262     CFLAGS='-x c++  -Wl,--gc-sections'
263
264     # Check for -Wl,--gc-sections
265     # XXX This test is broken at the moment, as symbols required for
266     # linking are now in libsupc++ (not built yet.....). In addition, 
267     # this test has cored on solaris in the past. In addition,
268     # --gc-sections doesn't really work at the moment (keeps on discarding
269     # used sections, first .eh_frame and now some of the glibc sections for
270     # iconv). Bzzzzt. Thanks for playing, maybe next time.
271     AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
272     AC_TRY_RUN([
273      int main(void) 
274      {
275        try { throw 1; }
276        catch (...) { };
277        return 0;
278      }
279     ], [ac_sectionLDflags=yes],[ac_sectionLFflags=no], [ac_sectionLDflags=yes])
280     if test "$ac_test_CFLAGS" = set; then
281       CFLAGS="$ac_save_CFLAGS"
282     else
283       # this is the suspicious part
284       CFLAGS=''
285     fi
286     if test "$ac_sectionLDflags" = "yes"; then
287       SECTION_LDFLAGS='-Wl,--gc-sections'
288     fi
289     AC_MSG_RESULT($ac_sectionLDflags)
290   fi
291
292   # Set linker optimization flags.
293   if test x"$ac_cv_prog_gnu_ld" = x"yes" && test x"$enable_debug" = x"no"; then
294     OPT_LDFLAGS='-Wl,-O1'
295   fi
296
297   AC_SUBST(SECTION_LDFLAGS)
298   AC_SUBST(OPT_LDFLAGS)
299 ])
300
301
302 dnl
303 dnl Check to see if the (math function) argument passed is
304 dnl declared when using the c++ compiler
305 dnl ASSUMES argument is a math function with ONE parameter
306 dnl
307 dnl GLIBCPP_CHECK_MATH_DECL_1
308 AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_1, [
309   AC_MSG_CHECKING([for $1 declaration])
310   if test x${glibcpp_cv_func_$1_use+set} != xset; then
311     AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
312       AC_LANG_SAVE
313       AC_LANG_CPLUSPLUS
314       AC_TRY_COMPILE([#include <math.h>
315                       #ifdef HAVE_IEEEFP_H
316                       #include <ieeefp.h>
317                       #endif
318                      ], 
319                      [ $1(0);], 
320                      [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
321       AC_LANG_RESTORE
322     ])
323   fi
324   AC_MSG_RESULT($glibcpp_cv_func_$1_use)
325 ])
326
327 dnl
328 dnl Check to see if the (math function) argument passed is
329 dnl 1) declared when using the c++ compiler
330 dnl 2) has "C" linkage
331 dnl 3) if not, see if 1) and 2) for argument prepended with '_'
332 dnl
333 dnl Define HAVE_CARGF etc if "cargf" is declared and links
334 dnl
335 dnl argument 1 is name of function to check
336 dnl
337 dnl ASSUMES argument is a math function with ONE parameter
338 dnl
339 dnl GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1
340 AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1, [
341   GLIBCPP_CHECK_MATH_DECL_1($1)
342   if test x$glibcpp_cv_func_$1_use = x"yes"; then
343     AC_CHECK_FUNCS($1)    
344   else
345     GLIBCPP_CHECK_MATH_DECL_1(_$1)
346     if test x$glibcpp_cv_func__$1_use = x"yes"; then
347       AC_CHECK_FUNCS(_$1)    
348     fi  
349   fi
350 ])
351
352
353 dnl
354 dnl Like GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1, but does a bunch of
355 dnl of functions at once.  It's an all-or-nothing check -- either 
356 dnl HAVE_XYZ is defined for each of the functions, or for none of them.
357 dnl Doing it this way saves significant configure time.
358 AC_DEFUN(GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1, [
359   AC_MSG_CHECKING([for $1 functions])
360   AC_CACHE_VAL(glibcpp_cv_func_$2_use, [
361     AC_LANG_SAVE
362     AC_LANG_CPLUSPLUS
363     AC_TRY_COMPILE([#include <math.h>],
364                    [ `for x in $3; do echo "$x (0);"; done` ],
365                    [glibcpp_cv_func_$2_use=yes],
366                    [glibcpp_cv_func_$2_use=no])
367     AC_LANG_RESTORE])
368   AC_MSG_RESULT($glibcpp_cv_func_$2_use)
369   if test x$glibcpp_cv_func_$2_use = x"yes"; then
370     AC_CHECK_FUNCS($3)
371   fi
372 ])
373
374 dnl
375 dnl Check to see if the (math function) argument passed is
376 dnl declared when using the c++ compiler
377 dnl ASSUMES argument is a math function with ONE parameter
378 dnl
379 dnl GLIBCPP_CHECK_MATH_DECL_2
380 AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_2, [
381   AC_MSG_CHECKING([for $1 declaration])
382   if test x${glibcpp_cv_func_$1_use+set} != xset; then
383     AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
384       AC_LANG_SAVE
385       AC_LANG_CPLUSPLUS
386       AC_TRY_COMPILE([#include <math.h>], 
387                      [ $1(0, 0);], 
388                      [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
389       AC_LANG_RESTORE
390     ])
391   fi
392   AC_MSG_RESULT($glibcpp_cv_func_$1_use)
393 ])
394
395 dnl
396 dnl Check to see if the (math function) argument passed is
397 dnl 1) declared when using the c++ compiler
398 dnl 2) has "C" linkage
399 dnl
400 dnl Define HAVE_CARGF etc if "cargf" is declared and links
401 dnl
402 dnl argument 1 is name of function to check
403 dnl
404 dnl ASSUMES argument is a math function with TWO parameters
405 dnl
406 dnl GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2
407 AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2, [
408   GLIBCPP_CHECK_MATH_DECL_2($1)
409   if test x$glibcpp_cv_func_$1_use = x"yes"; then
410     AC_CHECK_FUNCS($1)    
411   else
412     GLIBCPP_CHECK_MATH_DECL_2(_$1)
413     if test x$glibcpp_cv_func__$1_use = x"yes"; then
414       AC_CHECK_FUNCS(_$1)    
415     fi  
416   fi
417 ])
418
419
420 dnl
421 dnl Check to see if the (math function) argument passed is
422 dnl declared when using the c++ compiler
423 dnl ASSUMES argument is a math function with ONE parameter
424 dnl
425 dnl GLIBCPP_CHECK_MATH_DECL_3
426 AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_3, [
427   AC_MSG_CHECKING([for $1 declaration])
428   if test x${glibcpp_cv_func_$1_use+set} != xset; then
429     AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
430       AC_LANG_SAVE
431       AC_LANG_CPLUSPLUS
432       AC_TRY_COMPILE([#include <math.h>], 
433                      [ $1(0, 0, 0);], 
434                      [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
435       AC_LANG_RESTORE
436     ])
437   fi
438   AC_MSG_RESULT($glibcpp_cv_func_$1_use)
439 ])
440
441 dnl
442 dnl Check to see if the (math function) argument passed is
443 dnl 1) declared when using the c++ compiler
444 dnl 2) has "C" linkage
445 dnl
446 dnl Define HAVE_CARGF etc if "cargf" is declared and links
447 dnl
448 dnl argument 1 is name of function to check
449 dnl
450 dnl ASSUMES argument is a math function with THREE parameters
451 dnl
452 dnl GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3
453 AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3, [
454   GLIBCPP_CHECK_MATH_DECL_3($1)
455   if test x$glibcpp_cv_func_$1_use = x"yes"; then
456     AC_CHECK_FUNCS($1)    
457   else
458     GLIBCPP_CHECK_MATH_DECL_3(_$1)
459     if test x$glibcpp_cv_func__$1_use = x"yes"; then
460       AC_CHECK_FUNCS(_$1)    
461     fi  
462   fi
463 ])
464
465
466 dnl
467 dnl Check to see if the (stdlib function) argument passed is
468 dnl 1) declared when using the c++ compiler
469 dnl 2) has "C" linkage
470 dnl
471 dnl argument 1 is name of function to check
472 dnl
473 dnl ASSUMES argument is a math function with TWO parameters
474 dnl
475 dnl GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_2
476 AC_DEFUN(GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_2, [
477   AC_MSG_CHECKING([for $1 declaration])
478   if test x${glibcpp_cv_func_$1_use+set} != xset; then
479     AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
480       AC_LANG_SAVE
481       AC_LANG_CPLUSPLUS
482       AC_TRY_COMPILE([#include <stdlib.h>], 
483                      [ $1(0, 0);], 
484                      [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
485       AC_LANG_RESTORE
486     ])
487   fi
488   AC_MSG_RESULT($glibcpp_cv_func_$1_use)
489   if test x$glibcpp_cv_func_$1_use = x"yes"; then
490     AC_CHECK_FUNCS($1)    
491   fi
492 ])
493
494
495 dnl
496 dnl Because the builtins are picky picky picky about the arguments they take, 
497 dnl do an explict linkage tests here.
498 dnl Check to see if the (math function) argument passed is
499 dnl 1) declared when using the c++ compiler
500 dnl 2) has "C" linkage
501 dnl
502 dnl Define HAVE_CARGF etc if "cargf" is declared and links
503 dnl
504 dnl argument 1 is name of function to check
505 dnl
506 dnl ASSUMES argument is a math function with ONE parameter
507 dnl
508 dnl GLIBCPP_CHECK_BUILTIN_MATH_DECL_LINKAGE_1
509 AC_DEFUN(GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1, [
510   AC_MSG_CHECKING([for $1 declaration])
511   if test x${glibcpp_cv_func_$1_use+set} != xset; then
512     AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
513       AC_LANG_SAVE
514       AC_LANG_CPLUSPLUS
515       AC_TRY_COMPILE([#include <math.h>], 
516                      [ $1(0);], 
517                      [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
518       AC_LANG_RESTORE
519     ])
520   fi
521   AC_MSG_RESULT($glibcpp_cv_func_$1_use)
522   if test x$glibcpp_cv_func_$1_use = x"yes"; then
523     AC_MSG_CHECKING([for $1 linkage])
524     if test x${glibcpp_cv_func_$1_link+set} != xset; then
525       AC_CACHE_VAL(glibcpp_cv_func_$1_link, [
526         AC_TRY_LINK([#include <math.h>], 
527                     [ $1(0);], 
528                     [glibcpp_cv_func_$1_link=yes], [glibcpp_cv_func_$1_link=no])
529       ])
530     fi
531     AC_MSG_RESULT($glibcpp_cv_func_$1_link)
532     if test x$glibcpp_cv_func_$1_link = x"yes"; then
533       ac_tr_func=HAVE_`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
534       AC_DEFINE_UNQUOTED(${ac_tr_func})
535     fi
536   fi
537 ])
538
539
540 dnl
541 dnl Check to see what builtin math functions are supported
542 dnl
543 dnl check for __builtin_abs
544 dnl check for __builtin_fabsf
545 dnl check for __builtin_fabs
546 dnl check for __builtin_fabl
547 dnl check for __builtin_labs
548 dnl check for __builtin_sqrtf
549 dnl check for __builtin_sqrtl
550 dnl check for __builtin_fsqrt
551 dnl check for __builtin_sinf
552 dnl check for __builtin_sin
553 dnl check for __builtin_sinl
554 dnl check for __builtin_cosf
555 dnl check for __builtin_cos
556 dnl check for __builtin_cosl
557 dnl
558 dnl GLIBCPP_CHECK_BUILTIN_MATH_SUPPORT
559 AC_DEFUN(GLIBCPP_CHECK_BUILTIN_MATH_SUPPORT, [
560   dnl Test for builtin math functions.
561   dnl These are made in gcc/c-common.c 
562   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_abs)
563   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabsf)
564   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabs)
565   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabsl)
566   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_labs)
567
568   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrtf)
569   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fsqrt)
570   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrtl)
571
572   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sinf)
573   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sin)
574   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sinl)
575
576   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cosf)
577   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cos)
578   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cosl)
579
580   dnl There is, without a doubt, a more elegant way to have these
581   dnl names exported so that they won't be stripped out of acconfig.h by
582   dnl autoheader. I leave this as an exercise to somebody less frustrated
583   dnl than I.... please email the libstdc++ list if you can figure out a
584   dnl more elegant approach (see autoconf/acgen.m4 and specifically
585   dnl AC_CHECK_FUNC for things to steal.)
586   dummyvar=no
587   if test x$dummyvar = x"yes"; then
588     AC_DEFINE(HAVE___BUILTIN_ABS)
589     AC_DEFINE(HAVE___BUILTIN_LABS)
590     AC_DEFINE(HAVE___BUILTIN_COS)
591     AC_DEFINE(HAVE___BUILTIN_COSF)
592     AC_DEFINE(HAVE___BUILTIN_COSL)
593     AC_DEFINE(HAVE___BUILTIN_FABS)
594     AC_DEFINE(HAVE___BUILTIN_FABSF)
595     AC_DEFINE(HAVE___BUILTIN_FABSL)
596     AC_DEFINE(HAVE___BUILTIN_SIN)
597     AC_DEFINE(HAVE___BUILTIN_SINF)
598     AC_DEFINE(HAVE___BUILTIN_SINL)
599     AC_DEFINE(HAVE___BUILTIN_FSQRT)
600     AC_DEFINE(HAVE___BUILTIN_SQRTF)
601     AC_DEFINE(HAVE___BUILTIN_SQRTL)
602   fi
603 ])
604
605
606 dnl
607 dnl Check to see what the underlying c library 
608 dnl These checks need to do two things: 
609 dnl 1) make sure the name is declared when using the c++ compiler
610 dnl 2) make sure the name has "C" linkage
611 dnl This might seem like overkill but experience has shown that it's not...
612 dnl
613 dnl Define HAVE_STRTOLD if "strtold" is declared and links
614 dnl Define HAVE_STRTOF if "strtof" is declared and links
615 dnl Define HAVE_DRAND48 if "drand48" is declared and links
616 dnl
617 dnl GLIBCPP_CHECK_STDLIB_SUPPORT
618 AC_DEFUN(GLIBCPP_CHECK_STDLIB_SUPPORT, [
619   ac_test_CXXFLAGS="${CXXFLAGS+set}"
620   ac_save_CXXFLAGS="$CXXFLAGS"
621   CXXFLAGS='-fno-builtins -D_GNU_SOURCE'
622
623   GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtold)
624   AC_CHECK_FUNCS(drand48)
625
626   CXXFLAGS="$ac_save_CXXFLAGS"
627 ])
628
629
630 dnl
631 dnl Check to see what the underlying c library or math library is like.
632 dnl These checks need to do two things: 
633 dnl 1) make sure the name is declared when using the c++ compiler
634 dnl 2) make sure the name has "C" linkage
635 dnl This might seem like overkill but experience has shown that it's not...
636 dnl
637 dnl Define HAVE_CARGF etc if "cargf" is found.
638 dnl
639 dnl GLIBCPP_CHECK_MATH_SUPPORT
640 AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
641   ac_test_CXXFLAGS="${CXXFLAGS+set}"
642   ac_save_CXXFLAGS="$CXXFLAGS"
643   CXXFLAGS='-fno-builtins -D_GNU_SOURCE'
644
645   dnl Check libm
646   AC_CHECK_LIB(m, sin, libm="-lm")
647   ac_save_LIBS="$LIBS"
648   LIBS="$LIBS $libm"
649
650   dnl Check to see if certain C math functions exist.
651   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinf)
652   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnan)
653   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finite)
654   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(copysign)
655   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincos)
656   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fpclass)
657   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(qfpclass)
658
659   dnl Check to see if basic C math functions have float versions.
660   GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(float trig,
661                                           float_trig,
662                                           acosf asinf atanf \
663                                           cosf sinf tanf \
664                                           coshf sinhf tanhf)
665   GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(float round,
666                                           float_round,
667                                           ceilf floorf)
668   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnanf)
669   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinff)
670   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fabsf)
671   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(fmodf)
672   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(frexpf)
673   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpf)
674   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(logf)
675   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(log10f)
676   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(modff)
677   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(powf)
678   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtf)
679   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincosf)
680   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finitef)
681
682   dnl Check to see if basic C math functions have long double versions.
683   GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(long double trig,
684                                           long_double_trig,
685                                           acosl asinl atanl \
686                                           cosl sinl tanl \
687                                           coshl sinhl tanhl)
688   GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(long double round,
689                                           long_double_round,
690                                           ceill floorl)
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_2(atan2l)
695   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(expl)
696   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fabsl)
697   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(fmodl)
698   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(frexpl)
699   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpl)
700   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(logl)
701   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(log10l)
702   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(modfl)
703   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(powl)
704   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtl)
705   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincosl)
706   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finitel)
707
708   dnl Some runtimes have these functions with a preceding underscore. Please
709   dnl keep this sync'd with the one above. And if you add any new symbol,
710   dnl please add the corresponding block in the @BOTTOM@ section of acconfig.h.
711   dnl Check to see if certain C math functions exist.
712
713   dnl Check to see if basic C math functions have float versions.
714   GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(_float trig,
715                                           _float_trig,
716                                           _acosf _asinf _atanf \
717                                           _cosf _sinf _tanf \
718                                           _coshf _sinhf _tanhf)
719   GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(_float round,
720                                           _float_round,
721                                           _ceilf _floorf)
722
723   dnl Check to see if basic C math functions have long double versions.
724   GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(_long double trig,
725                                           _long_double_trig,
726                                           _acosl _asinl _atanl \
727                                           _cosl _sinl _tanl \
728                                           _coshl _sinhl _tanhl)
729   GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(_long double round,
730                                           _long_double_round,
731                                           _ceill _floorl)
732
733   LIBS="$ac_save_LIBS"
734   CXXFLAGS="$ac_save_CXXFLAGS"
735 ])
736
737
738 dnl
739 dnl Check to see if there is native support for complex 
740 dnl
741 dnl Don't compile bits in math/* if native support exits.
742 dnl
743 dnl Define USE_COMPLEX_LONG_DOUBLE etc if "atan2l/copysignl" is found.
744 dnl
745 dnl GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT
746 AC_DEFUN(GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT, [
747   dnl Check for complex versions of math functions of platform.
748   AC_CHECK_LIB(m, main)
749   AC_REPLACE_MATHFUNCS(nan hypot hypotf atan2f expf copysignf)
750
751   dnl Compile the long double complex functions only if the function 
752   dnl provides the non-complex long double functions that are needed.
753   dnl Currently this includes copysignl and atan2l, which should be
754   dnl cached from the GLIBCPP_CHECK_MATH_SUPPORT macro, above.
755   USE_COMPLEX_LONG_DOUBLE=no
756   if test x$ac_cv_func_atan2l = x"yes" \
757      && test x$ac_cv_func_copysignl = x"yes"; then
758     USE_COMPLEX_LONG_DOUBLE=yes
759     AC_REPLACE_MATHFUNCS(hypotl signbitl)
760   fi
761
762   AC_SUBST(USE_COMPLEX_LONG_DOUBLE)
763 ])
764
765
766 dnl Check to see what architecture and operating system we are compiling
767 dnl for.  Also, if architecture- or OS-specific flags are required for
768 dnl compilation, pick them up here.
769 dnl 
770 dnl GLIBCPP_CHECK_TARGET
771 AC_DEFUN(GLIBCPP_CHECK_TARGET, [
772     . [$]{glibcpp_basedir}/configure.target
773     AC_MSG_RESULT(CPU config directory is $cpu_include_dir)
774     AC_MSG_RESULT(OS config directory is $os_include_dir)
775     AC_LINK_FILES($os_include_dir/bits/os_defines.h, include/bits/os_defines.h)
776 ])
777
778
779 dnl
780 dnl Check to see if this target can enable the wchar_t parts of libstdc++.
781 dnl If --disable-c-mbchar was given, no wchar_t stuff is enabled.  (This
782 dnl must have been previously checked.)
783 dnl
784 dnl Define _GLIBCPP_USE_WCHAR_T if all the bits are found 
785 dnl Define HAVE_MBSTATE_T if mbstate_t is not in wchar.h
786 dnl
787 dnl GLIBCPP_CHECK_WCHAR_T_SUPPORT
788 AC_DEFUN(GLIBCPP_CHECK_WCHAR_T_SUPPORT, [
789
790   dnl Test wchar.h for mbstate_t, which is needed for char_traits and
791   dnl others even if wchar_t support is not on.
792   AC_MSG_CHECKING([for mbstate_t])
793   AC_TRY_COMPILE([#include <wchar.h>],
794   [mbstate_t teststate;], 
795   have_mbstate_t=yes, have_mbstate_t=no)
796   AC_MSG_RESULT($have_mbstate_t)
797   if test x"$have_mbstate_t" = xyes; then
798     AC_DEFINE(HAVE_MBSTATE_T)
799   fi
800
801   dnl Sanity check for existence of ISO C99 headers for extended encoding.
802   AC_CHECK_HEADERS(wchar.h, ac_has_wchar_h=yes, ac_has_wchar_h=no)
803   AC_CHECK_HEADER(wctype.h, ac_has_wctype_h=yes, ac_has_wctype_h=no)
804   
805   dnl Only continue checking if the ISO C99 headers exist and support is on.
806   if test x"$ac_has_wchar_h" = xyes && test x"$ac_has_wctype_h" = xyes \
807      && test x"$enable_c_mbchar" != xno; then
808       
809     dnl Test wchar.h for WCHAR_MIN, WCHAR_MAX, which is needed before
810     dnl numeric_limits can instantiate type_traits<wchar_t>
811     AC_MSG_CHECKING([for WCHAR_MIN and WCHAR_MAX])
812     AC_TRY_COMPILE([#include <wchar.h>],
813     [int i = WCHAR_MIN; int j = WCHAR_MAX;], 
814     has_wchar_minmax=yes, has_wchar_minmax=no)
815     AC_MSG_RESULT($has_wchar_minmax)
816     
817     dnl Test wchar.h for WEOF, which is what we use to determine whether
818     dnl to specialize for char_traits<wchar_t> or not.
819     AC_MSG_CHECKING([for WEOF])
820     AC_TRY_COMPILE([
821       #include <wchar.h>
822       #include <stddef.h>],
823     [wint_t i = WEOF;],
824     has_weof=yes, has_weof=no)
825     AC_MSG_RESULT($has_weof)
826   
827     dnl Tests for wide character functions used in char_traits<wchar_t>.
828     AC_CHECK_FUNCS(wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset \
829     wcsrtombs mbsrtowcs, ac_wfuncs=yes, ac_wfuncs=no)
830   
831     dnl Do quick checks for things injected into std:: by the c_std headers.
832     AC_CHECK_FUNCS(fgetwc, fgetws)
833
834     AC_MSG_CHECKING([for ISO C99 wchar_t support])
835     if test x"$has_weof" = xyes && test x"$has_wchar_minmax" = xyes \
836        && test x"$ac_wfuncs" = xyes; then
837       ac_isoC99_wchar_t=yes
838     else
839       ac_isoC99_wchar_t=no
840     fi
841     AC_MSG_RESULT($ac_isoC99_wchar_t)
842   
843     dnl Use iconv for wchar_t to char conversions. As such, check for 
844     dnl X/Open Portability Guide, version 2 features (XPG2).
845     AC_CHECK_HEADER(iconv.h, ac_has_iconv_h=yes, ac_has_iconv_h=no)
846     AC_CHECK_HEADER(langinfo.h, ac_has_langinfo_h=yes, ac_has_langinfo_h=no)
847
848     dnl Check for existence of libiconv.a providing XPG2 wchar_t support.
849     AC_CHECK_LIB(iconv, iconv, libiconv="-liconv")
850     ac_save_LIBS="$LIBS"
851     LIBS="$LIBS $libiconv"
852
853     AC_CHECK_FUNCS(iconv_open iconv_close iconv nl_langinfo, \
854     ac_XPG2funcs=yes, ac_XPG2funcs=no)
855   
856     LIBS="$ac_save_LIBS"
857
858     AC_MSG_CHECKING([for XPG2 wchar_t support])
859     if test x"$ac_has_iconv_h" = xyes && test x"$ac_has_langinfo_h" = xyes \
860        && test x"$ac_XPG2funcs" = xyes; then
861       ac_XPG2_wchar_t=yes
862     else
863       ac_XPG2_wchar_t=no
864     fi
865     AC_MSG_RESULT($ac_XPG2_wchar_t)
866   
867     dnl At the moment, only enable wchar_t specializations if all the
868     dnl above support is present.
869     AC_MSG_CHECKING([for enabled wchar_t specializations])
870     if test x"$ac_isoC99_wchar_t" = xyes \
871        && test x"$ac_XPG2_wchar_t" = xyes; then
872       AC_DEFINE(_GLIBCPP_USE_WCHAR_T)
873       AC_MSG_RESULT("yes")
874     else
875       AC_MSG_RESULT("no")
876     fi
877   else
878     dnl Wide characters disabled by the user. 
879     AC_MSG_WARN([wchar_t support disabled.])
880   fi
881 ])
882
883
884 dnl
885 dnl Check for special debugging mode; not for production use.
886 dnl
887 dnl GLIBCPP_ENABLE_DEBUG
888 dnl --enable-debug sets '-ggdb3 -O0'.
889 dnl --disable-debug sets '-g' and whatever optimization options the
890 dnl     compiler can handle.
891 dnl  +  --enable-maintainer-mode automatically defaults this to on.
892 dnl  +  Perhaps -D/-U of NDEBUG, DEBUG, DEBUG_ASSERT, ...?
893 dnl  +  Usage:  GLIBCPP_ENABLE_DEBUG[(DEFAULT)]
894 dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
895 dnl       defaults to `no'.
896 AC_DEFUN(GLIBCPP_ENABLE_DEBUG, [dnl
897 define([GLIBCPP_ENABLE_DEBUG_DEFAULT], ifelse($1, yes, yes, no))dnl
898 AC_ARG_ENABLE(debug,
899 changequote(<<, >>)dnl
900 <<  --enable-debug          extra debugging, turn off optimization [default=>>GLIBCPP_ENABLE_DEBUG_DEFAULT],
901 changequote([, ])dnl
902 [case "${enableval}" in
903  yes) enable_debug=yes ;;
904  no)  enable_debug=no ;;
905  *)   AC_MSG_ERROR([Unknown argument to enable/disable extra debugging]) ;;
906  esac],
907 enable_debug=GLIBCPP_ENABLE_DEBUG_DEFAULT)dnl
908
909 dnl Option parsed, now set things appropriately
910 case "${enable_debug}" in
911     yes) 
912         DEBUG_FLAGS='-O0 -ggdb3'                        
913         ;; 
914     no)   
915         DEBUG_FLAGS='-g'
916         ;;
917 esac
918 AC_SUBST(DEBUG_FLAGS)
919 ])
920
921
922 dnl
923 dnl Check for "unusual" flags to pass to the compiler while building.
924 dnl
925 dnl GLIBCPP_ENABLE_CXX_FLAGS
926 dnl --enable-cxx-flags='-foo -bar -baz' is a general method for passing
927 dnl     experimental flags such as -fhonor-std, -fsquangle, -Dfloat=char, etc.
928 dnl     Somehow this same set of flags must be passed when [re]building
929 dnl     libgcc.
930 dnl --disable-cxx-flags passes nothing.
931 dnl  +  See http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00131.html
932 dnl         http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00284.html
933 dnl         http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00035.html
934 dnl  +  Usage:  GLIBCPP_ENABLE_CXX_FLAGS(default flags)
935 dnl       If "default flags" is an empty string (or "none"), the effect is
936 dnl       the same as --disable or --enable=no.
937 AC_DEFUN(GLIBCPP_ENABLE_CXX_FLAGS, [dnl
938 define([GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT], ifelse($1,,, $1))dnl
939 AC_ARG_ENABLE(cxx-flags,
940 changequote(<<, >>)dnl
941 <<  --enable-cxx-flags=FLAGS      pass compiler FLAGS when building library;
942                                 [default=>>GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT],
943 changequote([, ])dnl
944 [case "x$enableval" in
945  xyes)   
946         AC_MSG_ERROR([--enable-cxx-flags needs compiler flags as arguments]) ;;
947  xno|x)  
948         enable_cxx_flags='' ;;
949  *)      
950         enable_cxx_flags="$enableval" ;;
951  esac],
952 enable_cxx_flags='GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT')
953
954 dnl Thinko on my part during design.  This kludge is the workaround.
955 if test "$enable_cxx_flags" = "none"; then 
956   enable_cxx_flags=''; 
957 fi
958
959 dnl Run through flags (either default or command-line) and set anything
960 dnl extra (e.g., #defines) that must accompany particular g++ options.
961 if test -n "$enable_cxx_flags"; then
962     for f in $enable_cxx_flags; do
963         case "$f" in
964             -fhonor-std)  ;;
965             -*)  ;;
966             *)   # and we're trying to pass /what/ exactly?
967                  AC_MSG_ERROR([compiler flags start with a -]) ;;
968         esac
969     done
970 fi
971 EXTRA_CXX_FLAGS="$enable_cxx_flags"
972 AC_SUBST(EXTRA_CXX_FLAGS)
973 ])
974
975
976 dnl
977 dnl Check for which locale library to use:  gnu or generic.
978 dnl
979 dnl GLIBCPP_ENABLE_CLOCALE
980 dnl --enable-clocale=gnu sets config/c_locale_gnu.cc and friends
981 dnl --enable-clocale=generic sets config/c_locale_generic.cc and friends
982 dnl 
983 dnl default is generic
984 dnl
985 AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [
986   AC_MSG_CHECKING([for clocale to use])
987   AC_ARG_ENABLE(clocale,
988   [  --enable-clocale        enable model for target locale package. 
989   --enable-clocale=MODEL  use MODEL target-speific locale package. [default=generic]
990   ], 
991   if test x$enable_clocale = xno; then
992      enable_clocale=generic
993   fi,
994      enable_clocale=generic)
995
996   enable_clocale_flag=$enable_clocale
997
998   dnl Check if a valid locale package
999   case x${enable_clocale_flag} in
1000     xgnu)
1001       CLOCALE_H=config/c_locale_gnu.h
1002       CLOCALE_CC=config/c_locale_gnu.cc
1003       AC_MSG_RESULT(gnu)
1004       ;;
1005     xgeneric)
1006       CLOCALE_H=config/c_locale_generic.h
1007       CLOCALE_CC=config/c_locale_generic.cc
1008       AC_MSG_RESULT(generic)
1009       ;;
1010     *)
1011       echo "$enable_clocale is an unknown locale package" 1>&2
1012       exit 1
1013       ;;
1014   esac
1015
1016   AC_LINK_FILES($CLOCALE_H, include/bits/c++locale.h)
1017   AC_LINK_FILES($CLOCALE_CC, src/c++locale.cc)
1018 ])
1019
1020
1021 dnl
1022 dnl Check for which I/O library to use:  libio, or something specific.
1023 dnl
1024 dnl GLIBCPP_ENABLE_CSTDIO
1025 dnl --enable-cstdio=libio sets config/c_io_libio.h and friends
1026 dnl 
1027 dnl default is stdio
1028 dnl
1029 AC_DEFUN(GLIBCPP_ENABLE_CSTDIO, [
1030   AC_MSG_CHECKING([for cstdio to use])
1031   AC_ARG_ENABLE(cstdio,
1032   [  --enable-cstdio         enable stdio for target io package. 
1033   --enable-cstdio=LIB     use LIB target-speific io package. [default=stdio]
1034   ], 
1035   if test x$enable_cstdio = xno; then
1036      enable_cstdio=stdio
1037   fi,
1038      enable_cstdio=stdio)
1039
1040   enable_cstdio_flag=$enable_cstdio
1041
1042   dnl Check if a valid I/O package
1043   case x${enable_cstdio_flag} in
1044     xlibio)
1045       CSTDIO_H=config/c_io_libio.h
1046       BASIC_FILE_H=config/basic_file_libio.h
1047       BASIC_FILE_CC=config/basic_file_libio.cc
1048       AC_MSG_RESULT(libio)
1049
1050       # see if we are on a system with libio native (ie, linux)
1051       AC_CHECK_HEADER(libio.h,  has_libio=yes, has_libio=no)
1052
1053       # Need to check and see what version of glibc is being used. If
1054       # it's not glibc-2.2 or higher, then we'll need to go ahead and 
1055       # compile most of libio for linux systems.
1056       if test x$has_libio = x"yes"; then
1057         case "$target" in
1058           *-*-linux*)
1059               AC_MSG_CHECKING([for glibc version >= 2.2])
1060               AC_EGREP_CPP([ok], [
1061             #include <features.h>
1062               #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) 
1063                     ok
1064               #endif
1065               ], glibc_satisfactory=yes, glibc_satisfactory=no)
1066               AC_MSG_RESULT($glibc_satisfactory)
1067             ;;
1068         esac
1069
1070         # XXX at the moment, admit defeat and force the recompilation
1071         # XXX of glibc even on glibc-2.2 systems, because libio is not synched.
1072         glibc_satisfactory=no        
1073
1074         if test x$glibc_satisfactory = x"yes"; then
1075            need_libio=no
1076            need_wlibio=no        
1077         else
1078            need_libio=yes
1079            # bkoz XXX need to add checks to enable this
1080            # pme XXX here's a first pass at such a check
1081            if test x$enable_c_mbchar != xno; then
1082               need_wlibio=yes
1083            else
1084               need_wlibio=no
1085            fi
1086         fi
1087
1088       else
1089          # Using libio, but <libio.h> doesn't exist on the target system. . .
1090          need_libio=yes
1091          # bkoz XXX need to add checks to enable this
1092          # pme XXX here's a first pass at such a check
1093          if test x$enable_c_mbchar != xno; then
1094              need_wlibio=yes
1095          else
1096              need_wlibio=no
1097          fi
1098       fi
1099       ;;
1100     xstdio | x | xno | xnone | xyes)
1101       # default
1102       CSTDIO_H=config/c_io_stdio.h
1103       BASIC_FILE_H=config/basic_file_stdio.h
1104       BASIC_FILE_CC=config/basic_file_stdio.cc
1105       AC_MSG_RESULT(stdio)
1106
1107       # We're not using stdio.
1108       need_libio=no
1109       need_wlibio=no
1110       ;;
1111     *)
1112       echo "$enable_cstdio is an unknown io package" 1>&2
1113       exit 1
1114       ;;
1115   esac
1116   AC_LINK_FILES($CSTDIO_H, include/bits/c++io.h)
1117   AC_LINK_FILES($BASIC_FILE_H, include/bits/basic_file_model.h)
1118   AC_LINK_FILES($BASIC_FILE_CC, src/basic_file.cc)
1119
1120   # 2000-08-04 bkoz hack
1121   CCODECVT_C=config/c_io_libio_codecvt.c
1122   AC_LINK_FILES($CCODECVT_C, libio/c_codecvt.c)
1123   # 2000-08-04 bkoz hack
1124
1125   AM_CONDITIONAL(GLIBCPP_BUILD_LIBIO,
1126                  test "$need_libio" = yes || test "$need_wlibio" = yes)
1127   AM_CONDITIONAL(GLIBCPP_NEED_LIBIO, test "$need_libio" = yes)
1128   AM_CONDITIONAL(GLIBCPP_NEED_WLIBIO, test "$need_wlibio" = yes)
1129   if test "$need_libio" = yes || test "$need_wlibio" = yes; then
1130     libio_la=../libio/libio.la
1131   else
1132     libio_la=
1133   fi
1134   AC_SUBST(libio_la)
1135 ])
1136
1137
1138 dnl
1139 dnl Setup to use the gcc gthr.h thread-specific memory and mutex model.
1140 dnl We must stage the required headers so that they will be installed
1141 dnl with the library (unlike libgcc, the STL implementation is provided
1142 dnl solely within headers).  Since we must not inject random user-space
1143 dnl macro names into user-provided C++ code, we first stage into <file>-in
1144 dnl and process to <file> with an output command.  The reason for a two-
1145 dnl stage process here is to correctly handle $srcdir!=$objdir without
1146 dnl having to write complex code (the sed commands to clean the macro
1147 dnl namespace are complex and fragile enough as it is).
1148 dnl
1149 AC_DEFUN(GLIBCPP_ENABLE_THREADS, [
1150   AC_MSG_CHECKING([for thread model used by GCC])
1151   target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
1152   AC_MSG_RESULT([$target_thread_file])
1153
1154   AC_LINK_FILES(../gcc/gthr.h, include/bits/gthr.h-in)
1155   AC_LINK_FILES(../gcc/gthr-single.h, include/bits/gthr-single.h-in)
1156   AC_LINK_FILES(../gcc/gthr-$target_thread_file.h,
1157                 include/bits/gthr-default.h-in)
1158   if test $target_thread_file != single; then
1159     AC_DEFINE(HAVE_GTHR_DEFAULT)
1160     AC_DEFINE(_GLIBCPP_SUPPORTS_WEAK, __GXX_WEAK__)
1161   fi
1162   AC_OUTPUT_COMMANDS([d=include/bits
1163     rm -f $d/gthr.h $d/gthr-single.h $d/gthr-default.h
1164     sed '/^#/s/\([A-Z_][A-Z_]*\)/_GLIBCPP_\1/g' <$d/gthr.h-in >$d/gthr.h
1165     sed 's/\(UNUSED\)/_GLIBCPP_\1/g' <$d/gthr-single.h-in \
1166       | sed 's/\(GCC[A-Z_]*_H\)/_GLIBCPP_\1/g' >$d/gthr-single.h
1167     sed 's/\(UNUSED\)/_GLIBCPP_\1/g' <$d/gthr-default.h-in \
1168       | sed 's/\(GCC[A-Z_]*_H\)/_GLIBCPP_\1/g' \
1169       | sed 's/\([A-Z_]*WEAK\)/_GLIBCPP_\1/g' >$d/gthr-default.h])
1170 ])
1171
1172
1173 dnl
1174 dnl Check for exception handling support.  If an explicit enable/disable
1175 dnl sjlj exceptions is given, we don't have to detect.  Otherwise the
1176 dnl target may or may not support call frame exceptions.
1177 dnl
1178 dnl GLIBCPP_ENABLE_SJLJ_EXCEPTIONS
1179 dnl --enable-sjlj-exceptions forces the use of builtin setjmp.
1180 dnl --disable-sjlj-exceptions forces the use of call frame unwinding.
1181 dnl
1182 dnl Define _GLIBCPP_SJLJ_EXCEPTIONS if the compiler is configured for it.
1183 dnl
1184 AC_DEFUN(GLIBCPP_ENABLE_SJLJ_EXCEPTIONS, [
1185   AC_MSG_CHECKING([for exception model to use])
1186   AC_LANG_SAVE
1187   AC_LANG_CPLUSPLUS
1188   AC_ARG_ENABLE(sjlj-exceptions,
1189   [  --enable-sjlj-exceptions  force use of builtin_setjmp for exceptions],
1190   [:],
1191   [dnl Botheration.  Now we've got to detect the exception model.
1192    dnl Link tests against libgcc.a are problematic since -- at least
1193    dnl as of this writing -- we've not been given proper -L bits for
1194    dnl single-tree newlib and libgloss.
1195    dnl
1196    dnl This is what AC_TRY_COMPILE would do if it didn't delete the
1197    dnl conftest files before we got a change to grep them first.
1198    cat > conftest.$ac_ext << EOF
1199 [#]line __oline__ "configure"
1200 struct S { ~S(); };
1201 void bar();
1202 void foo()
1203 {
1204   S s;
1205   bar();
1206 }
1207 EOF
1208    old_CXXFLAGS="$CXXFLAGS"  
1209    CXXFLAGS=-S
1210    if AC_TRY_EVAL(ac_compile); then
1211      if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
1212        enable_sjlj_exceptions=yes
1213      elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then
1214        enable_sjlj_exceptions=no
1215      fi
1216    fi
1217    CXXFLAGS="$old_CXXFLAGS"
1218    rm -f conftest*])
1219    if test x$enable_sjlj_exceptions = xyes; then
1220      AC_DEFINE(_GLIBCPP_SJLJ_EXCEPTIONS, 1,
1221         [Define if the compiler is configured for setjmp/longjmp exceptions.])
1222      ac_exception_model_name=sjlj
1223    elif test x$enable_sjlj_exceptions = xno; then
1224      ac_exception_model_name="call frame"
1225    else
1226      AC_MSG_ERROR([unable to detect exception model])
1227    fi
1228    AC_LANG_RESTORE
1229    AC_MSG_RESULT($ac_exception_model_name)
1230 ])
1231
1232
1233 dnl
1234 dnl Check for ISO/IEC 9899:1999 "C99" support.
1235 dnl
1236 dnl GLIBCPP_ENABLE_C99
1237 dnl --enable-c99 defines _GLIBCPP_USE_C99
1238 dnl --disable-c99 leaves _GLIBCPP_USE_C99 undefined
1239 dnl  +  Usage:  GLIBCPP_ENABLE_C99[(DEFAULT)]
1240 dnl       Where DEFAULT is either `yes' or `no'.  If omitted, it
1241 dnl       defaults to `no'.
1242 dnl  +  If 'C99' stuff is not available, ignores DEFAULT and sets `no'.
1243 dnl
1244 dnl GLIBCPP_ENABLE_C99
1245 AC_DEFUN(GLIBCPP_ENABLE_C99, [dnl
1246   define([GLIBCPP_ENABLE_C99_DEFAULT], ifelse($1, yes, yes, no))dnl
1247
1248   AC_ARG_ENABLE(c99,
1249   changequote(<<, >>)dnl
1250   <<--enable-c99      turns on 'ISO/IEC 9899:1999 support' [default=>>GLIBCPP_ENABLE_C99_DEFAULT],
1251   changequote([, ])dnl
1252   [case "$enableval" in
1253    yes) enable_c99=yes ;;
1254    no)  enable_c99=no ;;
1255    *)   AC_MSG_ERROR([Unknown argument to enable/disable C99]) ;;
1256    esac],
1257   enable_c99=GLIBCPP_ENABLE_C99_DEFAULT)dnl
1258  
1259   AC_LANG_SAVE
1260   AC_LANG_CPLUSPLUS
1261
1262   # Check for the existence of <math.h> functions used if C99 is enabled.
1263   ac_c99_math=yes;
1264   AC_MSG_CHECKING([for ISO C99 support in <math.h>])
1265   AC_TRY_COMPILE([#include <math.h>],[fpclassify(0.0);],, [ac_c99_math=no])
1266   AC_TRY_COMPILE([#include <math.h>],[isfinite(0.0);],, [ac_c99_math=no])
1267   AC_TRY_COMPILE([#include <math.h>],[isinf(0.0);],, [ac_c99_math=no])
1268   AC_TRY_COMPILE([#include <math.h>],[isnan(0.0);],, [ac_c99_math=no])
1269   AC_TRY_COMPILE([#include <math.h>],[isnormal(0.0);],, [ac_c99_math=no])
1270   AC_TRY_COMPILE([#include <math.h>],[signbit(0.0);],, [ac_c99_math=no])
1271   AC_TRY_COMPILE([#include <math.h>],[isgreater(0.0,0.0);],, [ac_c99_math=no])
1272   AC_TRY_COMPILE([#include <math.h>],
1273                  [isgreaterequal(0.0,0.0);],, [ac_c99_math=no])
1274   AC_TRY_COMPILE([#include <math.h>],[isless(0.0,0.0);],, [ac_c99_math=no])
1275   AC_TRY_COMPILE([#include <math.h>],[islessequal(0.0,0.0);],,[ac_c99_math=no])
1276   AC_TRY_COMPILE([#include <math.h>],
1277                  [islessgreater(0.0,0.0);],, [ac_c99_math=no])
1278   AC_TRY_COMPILE([#include <math.h>],
1279                  [isunordered(0.0,0.0);],, [ac_c99_math=no])
1280   AC_MSG_RESULT($ac_c99_math)
1281
1282   # Check for the existence in <stdio.h> of vscanf, et. al.
1283   ac_c99_stdio=yes;
1284   AC_MSG_CHECKING([for ISO C99 support in <stdio.h>])
1285   AC_TRY_COMPILE([#include <stdio.h>],
1286                  [snprintf("12", 0, "%i");],, [ac_c99_stdio=no])
1287   AC_TRY_COMPILE([#include <stdio.h>
1288                   #include <stdarg.h>
1289                   void foo(char* fmt, ...)
1290                   {va_list args; va_start(args, fmt);
1291                   vfscanf(stderr, "%i", args);}],
1292                   [],, [ac_c99_stdio=no])       
1293   AC_TRY_COMPILE([#include <stdio.h>
1294                   #include <stdarg.h>
1295                   void foo(char* fmt, ...)
1296                   {va_list args; va_start(args, fmt);
1297                   vscanf("%i", args);}],
1298                   [],, [ac_c99_stdio=no])
1299   AC_TRY_COMPILE([#include <stdio.h>
1300                   #include <stdarg.h>
1301                   void foo(char* fmt, ...)
1302                   {va_list args; va_start(args, fmt);
1303                   vsnprintf(fmt, 0, "%i", args);}],
1304                   [],, [ac_c99_stdio=no])
1305   AC_TRY_COMPILE([#include <stdio.h>
1306                   #include <stdarg.h>
1307                   void foo(char* fmt, ...)
1308                   {va_list args; va_start(args, fmt);
1309                   vsscanf(fmt, "%i", args);}],
1310                   [],, [ac_c99_stdio=no])
1311   AC_MSG_RESULT($ac_c99_stdio)
1312
1313   # Check for the existence in <stdlib.h> of lldiv_t, et. al.
1314   ac_c99_stdlib=yes;
1315   AC_MSG_CHECKING([for lldiv_t declaration])
1316   AC_CACHE_VAL(ac_c99_lldiv_t, [
1317   AC_TRY_COMPILE([#include <stdlib.h>], 
1318                    [ lldiv_t mydivt;], 
1319                    [ac_c99_lldiv_t=yes], [ac_c99_lldiv_t=no])
1320   ])
1321   AC_MSG_RESULT($ac_c99_lldiv_t)
1322
1323   AC_MSG_CHECKING([for ISO C99 support in <stdlib.h>])
1324   AC_TRY_COMPILE([#include <stdlib.h>],
1325                  [char* tmp; strtof("gnu", &tmp);],, [ac_c99_stdlib=no])
1326   AC_TRY_COMPILE([#include <stdlib.h>],
1327                  [char* tmp; strtold("gnu", &tmp);],, [ac_c99_stdlib=no])
1328   AC_TRY_COMPILE([#include <stdlib.h>],
1329                  [char* tmp; strtoll("gnu", &tmp, 10);],, [ac_c99_stdlib=no])
1330   AC_TRY_COMPILE([#include <stdlib.h>],
1331                  [char* tmp; strtoull("gnu", &tmp, 10);],, [ac_c99_stdlib=no])
1332   AC_TRY_COMPILE([#include <stdlib.h>], [llabs(10);],, [ac_c99_stdlib=no])
1333   AC_TRY_COMPILE([#include <stdlib.h>], [lldiv(10,1);],, [ac_c99_stdlib=no])
1334   AC_TRY_COMPILE([#include <stdlib.h>], [atoll("10");],, [ac_c99_stdlib=no])
1335   AC_TRY_COMPILE([#include <stdlib.h>], [_Exit(0);],, [ac_c99_stdlib=no])
1336   if test x"$ac_c99_lldiv_t" = x"no"; then
1337     ac_c99_stdlib=no; 
1338   fi; 
1339   AC_MSG_RESULT($ac_c99_stdlib)
1340
1341   # Check for the existence of <wchar.h> functions used if C99 is enabled.
1342   ac_c99_wchar=yes;
1343   AC_MSG_CHECKING([for ISO C99 support in <wchar.h>])
1344   AC_TRY_COMPILE([#include <wchar.h>], 
1345                  [wcstold(L"10.0", NULL);],, [ac_c99_wchar=no])
1346   AC_TRY_COMPILE([#include <wchar.h>], 
1347                  [wcstoll(L"10", NULL, 10);],, [ac_c99_wchar=no])
1348   AC_TRY_COMPILE([#include <wchar.h>], 
1349                  [wcstoull(L"10", NULL, 10);],, [ac_c99_wchar=no])
1350   AC_MSG_RESULT($ac_c99_wchar)
1351
1352   AC_MSG_CHECKING([for enabled ISO C99 support])
1353   if test x"$ac_c99_math" = x"no" || test x"$ac_c99_stdio" = x"no" \
1354         || test x"$ac_c99_stdlib" = x"no" \
1355         || test x"$ac_c99_wchar" = x"no"; then
1356     enable_c99=no; 
1357   fi; 
1358   AC_MSG_RESULT($enable_c99)
1359
1360   # Option parsed, now set things appropriately
1361   if test x"$enable_c99" = x"yes"; then
1362     AC_DEFINE(_GLIBCPP_USE_C99)
1363   fi
1364
1365   AC_LANG_RESTORE
1366 ])
1367
1368
1369 dnl
1370 dnl Check for template specializations for the 'long long' type extension.
1371 dnl NB: Must check for C99 support before calling _GLIBCPP_ENABLE_LONG_LONG
1372 dnl
1373 dnl GLIBCPP_ENABLE_LONG_LONG
1374 dnl --enable-long-long defines _GLIBCPP_USE_LONG_LONG
1375 dnl --disable-long-long leaves _GLIBCPP_USE_LONG_LONG undefined
1376 dnl  +  Usage:  GLIBCPP_ENABLE_LONG_LONG[(DEFAULT)]
1377 dnl       Where DEFAULT is either `yes' or `no'.  If omitted, it
1378 dnl       defaults to `no'.
1379 dnl  +  If 'long long' stuff is not available, ignores DEFAULT and sets `no'.
1380 dnl
1381 dnl GLIBCPP_ENABLE_LONG_LONG
1382 AC_DEFUN(GLIBCPP_ENABLE_LONG_LONG, [dnl
1383   define([GLIBCPP_ENABLE_LONG_LONG_DEFAULT], ifelse($1, yes, yes, no))dnl
1384
1385   AC_ARG_ENABLE(long-long,
1386   changequote(<<, >>)dnl
1387   <<--enable-long-long      turns on 'long long' [default=>>GLIBCPP_ENABLE_LONG_LONG_DEFAULT],
1388   changequote([, ])dnl
1389   [case "$enableval" in
1390    yes) enable_long_long=yes ;;
1391    no)  enable_long_long=no ;;
1392    *)   AC_MSG_ERROR([Unknown argument to enable/disable long long]) ;;
1393    esac],
1394   enable_long_long=GLIBCPP_ENABLE_LONG_LONG_DEFAULT)dnl
1395
1396   # iostreams require strtoll, strtoull to compile. If the
1397   # GLIBCPP_ENABLE_C99 tests found these, and if C99 support is enabled,
1398   # go ahead and allow long long to be used.
1399   if test x"$enable_c99" = x"no"; then
1400     enable_long_long=no; 
1401   fi
1402
1403   # Option parsed, now set things appropriately
1404   AC_MSG_CHECKING([for enabled long long support])
1405   if test x"$enable_long_long" = xyes; then
1406     AC_DEFINE(_GLIBCPP_USE_LONG_LONG)
1407   fi
1408   AC_MSG_RESULT($enable_long_long)
1409 ])
1410
1411
1412 dnl
1413 dnl Check for what kind of C headers to use.
1414 dnl
1415 dnl GLIBCPP_ENABLE_CHEADERS
1416 dnl --enable-cheaders= [does stuff].
1417 dnl --disable-cheaders [does not do anything, really].
1418 dnl  +  This will eventually need to be 'c_shadow' by default.
1419 dnl  +  Usage:  GLIBCPP_ENABLE_CHEADERS[(DEFAULT)]
1420 dnl       Where DEFAULT is either `c' or `c_std' or 'c_shadow'.  
1421 dnl       If ommitted, it defaults to `c_std'.
1422 AC_DEFUN(GLIBCPP_ENABLE_CHEADERS, [dnl
1423 define([GLIBCPP_ENABLE_CHEADERS_DEFAULT], ifelse($1, c_std, c_std, c_std))dnl
1424 AC_MSG_CHECKING([for c header strategy to use])
1425 AC_ARG_ENABLE(cheaders,
1426 changequote(<<, >>)dnl
1427 <<  --enable-cheaders       construct "C" header files for g++ [default=>>GLIBCPP_ENABLE_CHEADERS_DEFAULT],
1428 changequote([, ])
1429   [case "$enableval" in
1430    c) 
1431         enable_cheaders=c 
1432         ;;
1433    c_std)  
1434         enable_cheaders=c_std 
1435         ;;
1436    c_shadow)  
1437         enable_cheaders=c_shadow 
1438         ;;
1439    *)   AC_MSG_ERROR([Unknown argument to enable/disable "C" headers]) 
1440         ;;
1441   esac],
1442   enable_cheaders=GLIBCPP_ENABLE_CHEADERS_DEFAULT)
1443   AC_MSG_RESULT($enable_cheaders)
1444
1445   dnl Option parsed, now set things appropriately
1446   case "$enable_cheaders" in
1447     c_shadow) 
1448         CSHADOW_FLAGS="-fno-builtin"
1449         C_INCLUDE_DIR='${top_srcdir}/include/c_shadow'
1450         AC_DEFINE(_GLIBCPP_USE_SHADOW_HEADERS)
1451         ;;
1452     c_std)   
1453         CSHADOW_FLAGS=""
1454         C_INCLUDE_DIR='${top_srcdir}/include/c_std'
1455         ;;
1456     c)   
1457         CSHADOW_FLAGS=""
1458         C_INCLUDE_DIR='${top_srcdir}/include/c'
1459         ;;
1460   esac
1461
1462   AC_SUBST(CSHADOW_FLAGS)
1463   AC_SUBST(C_INCLUDE_DIR)
1464   AM_CONDITIONAL(GLIBCPP_USE_CSHADOW, test "$enable_cheaders" = c_shadow)
1465 ])
1466
1467
1468 dnl
1469 dnl Check for wide character support.  Has the same effect as the option
1470 dnl in gcc's configure, but in a form that autoconf can mess with.
1471 dnl
1472 dnl GLIBCPP_ENABLE_C_MBCHAR
1473 dnl --enable-c-mbchar requests all the wchar_t stuff.
1474 dnl --disable-c-mbchar doesn't.
1475 dnl  +  Usage:  GLIBCPP_ENABLE_C_MBCHAR[(DEFAULT)]
1476 dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
1477 dnl       defaults to `no'.
1478 AC_DEFUN(GLIBCPP_ENABLE_C_MBCHAR, [dnl
1479 define([GLIBCPP_ENABLE_C_MBCHAR_DEFAULT], ifelse($1, yes, yes, no))dnl
1480 AC_ARG_ENABLE(c-mbchar,
1481 changequote(<<, >>)dnl
1482 <<  --enable-c-mbchar       enable multibyte (wide) characters [default=>>GLIBCPP_ENABLE_C_MBCHAR_DEFAULT],
1483 changequote([, ])dnl
1484 [case "$enableval" in
1485  yes) enable_c_mbchar=yes ;;
1486  no)  enable_c_mbchar=no ;;
1487  *)   AC_MSG_ERROR([Unknown argument to enable/disable c-mbchar]) ;;
1488  esac],
1489 enable_c_mbchar=GLIBCPP_ENABLE_C_MBCHAR_DEFAULT)dnl
1490 dnl Option parsed, now other scripts can test enable_c_mbchar for yes/no.
1491 ])
1492
1493
1494 dnl
1495 dnl Set up *_INCLUDES and *_INCLUDE_DIR variables for all sundry Makefile.am's.
1496 dnl
1497 dnl GLIBCPP_INCLUDE_DIR
1498 dnl C_INCLUDE_DIR
1499 dnl TOPLEVEL_INCLUDES
1500 dnl LIBMATH_INCLUDES
1501 dnl LIBSUPCXX_INCLUDES
1502 dnl LIBIO_INCLUDES
1503 dnl CSHADOW_INCLUDES
1504 dnl
1505 dnl GLIBCPP_EXPORT_INCLUDE
1506 AC_DEFUN(GLIBCPP_EXPORT_INCLUDES, [
1507   # Root level of the include sources.
1508   GLIBCPP_INCLUDE_DIR='$(top_srcdir)/include'
1509
1510   # Can either use include/c or include/c_std to grab "C" headers. This
1511   # variable is set to the include directory currently in use.
1512   # set with C_INCLUDE_DIR in GLIBCPP_ENABLE_CHEADERS
1513    
1514   # Passed down for canadian crosses.
1515   if  test x"$CANADIAN" = xyes; then
1516     TOPLEVEL_INCLUDES='-I$(includedir)'
1517   fi
1518
1519   LIBMATH_INCLUDES='-I$(top_srcdir)/libmath'
1520
1521   LIBSUPCXX_INCLUDES='-I$(top_srcdir)/libsupc++'
1522
1523   #if GLIBCPP_NEED_LIBIO
1524   LIBIO_INCLUDES='-I$(top_builddir)/libio -I$(top_srcdir)/libio'
1525   #else
1526   #LIBIO_INCLUDES='-I$(top_srcdir)/libio'
1527   #endif
1528
1529   #if GLIBCPP_USE_CSHADOW
1530   #  CSHADOW_INCLUDES='-I$(GLIBCPP_INCLUDE_DIR)/std -I$(C_INCLUDE_DIR) \
1531   #                   -I$(top_blddir)/cshadow'
1532   #else
1533   CSTD_INCLUDES='-I$(GLIBCPP_INCLUDE_DIR)/std -I$(C_INCLUDE_DIR)'
1534   #endif
1535
1536   # Now, export this to all the little Makefiles....
1537   AC_SUBST(GLIBCPP_INCLUDE_DIR)
1538   AC_SUBST(TOPLEVEL_INCLUDES)
1539   AC_SUBST(LIBMATH_INCLUDES)
1540   AC_SUBST(LIBSUPCXX_INCLUDES)
1541   AC_SUBST(LIBIO_INCLUDES)
1542   AC_SUBST(CSTD_INCLUDES)
1543 ])
1544
1545
1546 dnl
1547 dnl Set up *_FLAGS and *FLAGS variables for all sundry Makefile.am's.
1548 dnl
1549 AC_DEFUN(GLIBCPP_EXPORT_FLAGS, [
1550   # Optimization flags that are probably a good idea for thrill-seekers. Just
1551   # uncomment the lines below and make, everything else is ready to go... 
1552   # OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc 
1553   OPTIMIZE_CXXFLAGS=
1554   AC_SUBST(OPTIMIZE_CXXFLAGS)
1555
1556   WARN_FLAGS='-Wall -Wno-format -W -Wwrite-strings -Winline'
1557   AC_SUBST(WARN_FLAGS)
1558 ])
1559
1560 dnl
1561 dnl  GLIBCPP_EXPORT_INSTALL_INFO
1562 dnl  calculates gxx_install_dir
1563 dnl  exports glibcpp_toolexecdir
1564 dnl  exports glibcpp_toolexeclibdir
1565 dnl  exports glibcpp_builddir
1566 dnl  exports glibcpp_srcdir
1567 dnl  exports glibcpp_prefixdir
1568 dnl
1569 dnl Assumes cross_compiling bits already done, and with_cross_host in
1570 dnl particular
1571 dnl
1572 dnl GLIBCPP_EXPORT_INSTALL_INFO
1573 AC_DEFUN(GLIBCPP_EXPORT_INSTALL_INFO, [
1574
1575 glibcpp_toolexecdir=no
1576 glibcpp_toolexeclibdir=no
1577
1578 # Export build and source directories.
1579 # These need to be absolute paths, yet at the same time need to
1580 # canonicalize only relative paths, because then amd will not unmount
1581 # drives. Thus the use of PWDCMD: set it to 'pawd' or 'amq -w' if using amd.
1582 glibcpp_builddir=`pwd`
1583 case $srcdir in
1584 [\\/$]* | ?:[\\/]*) glibcpp_srcdir=${srcdir} ;;
1585 *) glibcpp_srcdir=`cd "$srcdir" && ${PWDCMD-pwd} || echo "$srcdir"` ;;
1586 esac
1587 glibcpp_prefixdir=${prefix}
1588
1589 AC_MSG_CHECKING([for interface version number])
1590 libstdcxx_interface=$INTERFACE
1591 AC_MSG_RESULT($libstdcxx_interface)
1592
1593 # Process the option --with-gxx-include-dir=<path to include-files directory>
1594 AC_MSG_CHECKING([for --with-gxx-include-dir])
1595 AC_ARG_WITH(gxx-include-dir,
1596 [  --with-gxx-include-dir  the installation directory for include files],
1597 [case "${withval}" in
1598   yes)
1599     AC_MSG_ERROR(Missing directory for --with-gxx-include-dir)
1600     gxx_include_dir=no
1601     ;;
1602   no)
1603     gxx_include_dir=no
1604     ;;
1605   *)
1606     gxx_include_dir=${withval}
1607     ;;
1608 esac], [gxx_include_dir=no])
1609 AC_MSG_RESULT($gxx_include_dir)
1610
1611 # Process the option "--enable-version-specific-runtime-libs"
1612 AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
1613 AC_ARG_ENABLE(version-specific-runtime-libs,
1614 [  --enable-version-specific-runtime-libs    Specify that runtime libraries should be installed in a compiler-specific directory ],
1615 [  version_specific_libs=yes
1616 # Need the gcc compiler version to know where to install libraries
1617 # and header files if --enable-version-specific-runtime-libs option
1618 # is selected.
1619 changequote(,)dnl
1620 gcc_version_trigger=${srcdir}/../gcc/version.c
1621 gcc_version_full=`grep version_string ${gcc_version_trigger} | sed -e 's/.*\"\([^\"]*\)\".*/\1/'`
1622 gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'`
1623 gxx_include_dir='$(libdir)/gcc-lib/$(target_alias)/'${gcc_version}/include/g++
1624 glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
1625 glibcpp_toolexeclibdir='$(toolexecdir)/'${gcc_version}
1626 changequote([,])dnl
1627 ],version_specific_libs=no)
1628 AC_MSG_RESULT($version_specific_libs)
1629
1630 # Default case for install directory for include files.
1631 if test x"$version_specific_libs" = x"no" \
1632    && test x"$gxx_include_dir" = x"no"; then
1633   gxx_include_dir='$(prefix)'/include/g++-${libstdcxx_interface}
1634 fi
1635
1636 # Calculate glibcpp_toolexecdir, glibcpp_toolexeclibdir
1637 # Install a library built with a cross compiler in tooldir, not libdir.
1638 if test x"$glibcpp_toolexecdir" = x"no"; then 
1639   if test -n "$with_cross_host" && test x"$with_cross_host" != x"no"; then
1640     glibcpp_toolexecdir='$(exec_prefix)/$(target_alias)'
1641     glibcpp_toolexeclibdir='$(toolexecdir)/lib$(MULTISUBDIR)'
1642   else
1643     glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
1644     glibcpp_toolexeclibdir='$(libdir)$(MULTISUBDIR)'
1645   fi
1646 fi
1647
1648 AC_MSG_CHECKING([for install location])
1649 AC_MSG_RESULT($gxx_include_dir)
1650
1651 AC_SUBST(glibcpp_builddir)
1652 AC_SUBST(glibcpp_srcdir)
1653 AC_SUBST(glibcpp_prefixdir)
1654 AC_SUBST(gxx_include_dir)
1655 AC_SUBST(glibcpp_toolexecdir)
1656 AC_SUBST(glibcpp_toolexeclibdir)
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   AC_CHECK_HEADER(locale.h, [
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   ])
1679 ])
1680
1681
1682 # Check for functions in math library.
1683 # Ulrich Drepper <drepper@cygnus.com>, 1998.
1684 #
1685 # This file can be copied and used freely without restrictions.  It can
1686 # be used in projects which are not available under the GNU Public License
1687 # but which still want to provide support for the GNU gettext functionality.
1688 # Please note that the actual code is *not* freely available.
1689
1690 # serial 1
1691
1692 dnl AC_REPLACE_MATHFUNCS(FUNCTION...)
1693 AC_DEFUN(AC_REPLACE_MATHFUNCS,
1694 [AC_CHECK_FUNCS([$1], , [LIBMATHOBJS="$LIBMATHOBJS ${ac_func}.lo"])
1695 AC_SUBST(LIBMATHOBJS)dnl
1696 ])
1697
1698
1699 # Check for string functions.
1700 # Ulrich Drepper <drepper@cygnus.com>, 1998.
1701 #
1702 # This file can be copied and used freely without restrictions.  It can
1703 # be used in projects which are not available under the GNU Public License
1704 # but which still want to provide support for the GNU gettext functionality.
1705 # Please note that the actual code is *not* freely available.
1706
1707 # serial 1
1708
1709 dnl AC_REPLACE_STRINGFUNCS(FUNCTION...)
1710 AC_DEFUN(AC_REPLACE_STRINGFUNCS,
1711 [AC_CHECK_FUNCS([$1], , [LIBSTRINGOBJS="$LIBSTRINGOBJS ${ac_func}.lo"])
1712 AC_SUBST(LIBSTRINGOBJS)dnl
1713 ])
1714
1715
1716 dnl This macro searches for a GNU version of make.  If a match is found, the
1717 dnl makefile variable `ifGNUmake' is set to the empty string, otherwise it is
1718 dnl set to "#". This is useful for  including a special features in a Makefile,
1719 dnl which cannot be handled by other versions of make.  The variable
1720 dnl _cv_gnu_make_command is set to the command to invoke GNU make if it exists,
1721 dnl the empty string otherwise.
1722 dnl
1723 dnl Here is an example of its use:
1724 dnl
1725 dnl Makefile.in might contain:
1726 dnl
1727 dnl     # A failsafe way of putting a dependency rule into a makefile
1728 dnl     $(DEPEND):
1729 dnl             $(CC) -MM $(srcdir)/*.c > $(DEPEND)
1730 dnl
1731 dnl     @ifGNUmake@ ifeq ($(DEPEND),$(wildcard $(DEPEND)))
1732 dnl     @ifGNUmake@ include $(DEPEND)
1733 dnl     @ifGNUmake@ endif
1734 dnl
1735 dnl Then configure.in would normally contain:
1736 dnl
1737 dnl     CHECK_GNU_MAKE()
1738 dnl     AC_OUTPUT(Makefile)
1739 dnl
1740 dnl Then perhaps to cause gnu make to override any other make, we could do
1741 dnl something like this (note that GNU make always looks for GNUmakefile first):
1742 dnl
1743 dnl     if  ! test x$_cv_gnu_make_command = x ; then
1744 dnl             mv Makefile GNUmakefile
1745 dnl             echo .DEFAULT: > Makefile ;
1746 dnl             echo \  $_cv_gnu_make_command \$@ >> Makefile;
1747 dnl     fi
1748 dnl
1749 dnl Then, if any (well almost any) other make is called, and GNU make also
1750 dnl exists, then the other make wraps the GNU make.
1751 dnl
1752 dnl @author John Darrington <j.darrington@elvis.murdoch.edu.au>
1753 dnl @version 1.1 #### replaced Id string now that Id is for lib-v3; pme
1754 dnl
1755 dnl #### Changes for libstdc++-v3:  reformatting and linewrapping; prepending
1756 dnl #### GLIBCPP_ to the macro name; adding the :-make fallback in the
1757 dnl #### conditional's subshell (" --version" is not a command), using a
1758 dnl #### different option to grep(1).
1759 dnl #### -pme
1760 dnl #### Fixed Bourne shell portability bug (use ${MAKE-make}, not
1761 dnl #### ${MAKE:-make}).
1762 dnl #### -msokolov
1763 AC_DEFUN(
1764   GLIBCPP_CHECK_GNU_MAKE, [AC_CACHE_CHECK( for GNU make,_cv_gnu_make_command,
1765           _cv_gnu_make_command='' ;
1766 dnl Search all the common names for GNU make
1767           for a in "${MAKE-make}" make gmake gnumake ; do
1768                   if ( $a --version 2> /dev/null | grep -c GNU > /dev/null )
1769                   then
1770                           _cv_gnu_make_command=$a ;
1771                           break;
1772                   fi
1773           done ;
1774   ) ;
1775 dnl If there was a GNU version, then set @ifGNUmake@ to the empty
1776 dnl string, '#' otherwise
1777   if test  "x$_cv_gnu_make_command" != "x"  ; then
1778           ifGNUmake='' ;
1779   else
1780           ifGNUmake='#' ;
1781   fi
1782   AC_SUBST(ifGNUmake)
1783 ])
1784
1785 sinclude(../libtool.m4)
1786 dnl The lines below arrange for aclocal not to bring an installed
1787 dnl libtool.m4 into aclocal.m4, while still arranging for automake to
1788 dnl add a definition of LIBTOOL to Makefile.in.
1789 ifelse(,,,[AC_SUBST(LIBTOOL)
1790 AC_DEFUN([AM_PROG_LIBTOOL])
1791 AC_DEFUN([AC_LIBTOOL_DLOPEN])
1792 AC_DEFUN([AC_PROG_LD])
1793 ])
1794
1795
1796
1797 # Do all the work for Automake.  This macro actually does too much --
1798 # some checks are only needed if your package does certain things.
1799 # But this isn't really a big deal.
1800
1801 # serial 1
1802
1803 dnl Usage:
1804 dnl AM_INIT_AUTOMAKE(package,version, [no-define])
1805
1806 AC_DEFUN(AM_INIT_AUTOMAKE,
1807 [AC_REQUIRE([AC_PROG_INSTALL])
1808 PACKAGE=[$1]
1809 AC_SUBST(PACKAGE)
1810 VERSION=[$2]
1811 AC_SUBST(VERSION)
1812 dnl test to see if srcdir already configured
1813 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
1814   AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
1815 fi
1816 ifelse([$3],,
1817 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
1818 AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
1819 AC_REQUIRE([AM_SANITY_CHECK])
1820 AC_REQUIRE([AC_ARG_PROGRAM])
1821 dnl FIXME This is truly gross.
1822 missing_dir=`cd $ac_aux_dir && pwd`
1823 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
1824 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
1825 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
1826 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
1827 AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
1828 AC_REQUIRE([AC_PROG_MAKE_SET])])
1829
1830 #
1831 # Check to make sure that the build environment is sane.
1832 #
1833
1834 AC_DEFUN(AM_SANITY_CHECK,
1835 [AC_MSG_CHECKING([whether build environment is sane])
1836 # Just in case
1837 sleep 1
1838 echo timestamp > conftestfile
1839 # Do `set' in a subshell so we don't clobber the current shell's
1840 # arguments.  Must try -L first in case configure is actually a
1841 # symlink; some systems play weird games with the mod time of symlinks
1842 # (eg FreeBSD returns the mod time of the symlink's containing
1843 # directory).
1844 if (
1845    set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
1846    if test "[$]*" = "X"; then
1847       # -L didn't work.
1848       set X `ls -t $srcdir/configure conftestfile`
1849    fi
1850    if test "[$]*" != "X $srcdir/configure conftestfile" \
1851       && test "[$]*" != "X conftestfile $srcdir/configure"; then
1852
1853       # If neither matched, then we have a broken ls.  This can happen
1854       # if, for instance, CONFIG_SHELL is bash and it inherits a
1855       # broken ls alias from the environment.  This has actually
1856       # happened.  Such a system could not be considered "sane".
1857       AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
1858 alias in your environment])
1859    fi
1860
1861    test "[$]2" = conftestfile
1862    )
1863 then
1864    # Ok.
1865    :
1866 else
1867    AC_MSG_ERROR([newly created file is older than distributed files!
1868 Check your system clock])
1869 fi
1870 rm -f conftest*
1871 AC_MSG_RESULT(yes)])
1872
1873 dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
1874 dnl The program must properly implement --version.
1875 AC_DEFUN(AM_MISSING_PROG,
1876 [AC_MSG_CHECKING(for working $2)
1877 # Run test in a subshell; some versions of sh will print an error if
1878 # an executable is not found, even if stderr is redirected.
1879 # Redirect stdin to placate older versions of autoconf.  Sigh.
1880 if ($2 --version) < /dev/null > /dev/null 2>&1; then
1881    $1=$2
1882    AC_MSG_RESULT(found)
1883 else
1884    $1="$3/missing $2"
1885    AC_MSG_RESULT(missing)
1886 fi
1887 AC_SUBST($1)])
1888
1889 # Add --enable-maintainer-mode option to configure.
1890 # From Jim Meyering
1891
1892 # serial 1
1893
1894 AC_DEFUN(AM_MAINTAINER_MODE,
1895 [AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
1896   dnl maintainer-mode is disabled by default
1897   AC_ARG_ENABLE(maintainer-mode,
1898 [  --enable-maintainer-mode enable make rules and dependencies not useful
1899                           (and sometimes confusing) to the casual installer],
1900       USE_MAINTAINER_MODE=$enableval,
1901       USE_MAINTAINER_MODE=no)
1902   AC_MSG_RESULT($USE_MAINTAINER_MODE)
1903   AM_CONDITIONAL(MAINTAINER_MODE, test $USE_MAINTAINER_MODE = yes)
1904   MAINT=$MAINTAINER_MODE_TRUE
1905   AC_SUBST(MAINT)dnl
1906 ]
1907 )
1908
1909 # Define a conditional.
1910
1911 AC_DEFUN(AM_CONDITIONAL,
1912 [AC_SUBST($1_TRUE)
1913 AC_SUBST($1_FALSE)
1914 if $2; then
1915   $1_TRUE=
1916   $1_FALSE='#'
1917 else
1918   $1_TRUE='#'
1919   $1_FALSE=
1920 fi])
1921
1922 # Like AC_CONFIG_HEADER, but automatically create stamp file.
1923
1924 AC_DEFUN(AM_CONFIG_HEADER,
1925 [AC_PREREQ([2.12])
1926 AC_CONFIG_HEADER([$1])
1927 dnl When config.status generates a header, we must update the stamp-h file.
1928 dnl This file resides in the same directory as the config header
1929 dnl that is generated.  We must strip everything past the first ":",
1930 dnl and everything past the last "/".
1931 AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
1932 ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
1933 <<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
1934 <<am_indx=1
1935 for am_file in <<$1>>; do
1936   case " <<$>>CONFIG_HEADERS " in
1937   *" <<$>>am_file "*<<)>>
1938     echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
1939     ;;
1940   esac
1941   am_indx=`expr "<<$>>am_indx" + 1`
1942 done<<>>dnl>>)
1943 changequote([,]))])
1944