OSDN Git Service

2001-07-13 Stephen M. Webb <stephen@bregmasoft.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 GLIBCPP_CONFIGURE
17 AC_DEFUN(GLIBCPP_CONFIGURE, [
18   dnl Default to --enable-multilib
19   AC_ARG_ENABLE(multilib,
20   [  --enable-multilib       build hella library versions (default)],
21   [case "${enableval}" in
22     yes) multilib=yes ;;
23     no)  multilib=no ;;
24     *)   AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
25    esac], [multilib=yes])dnl
26
27   glibcpp_basedir=$srcdir/$toprel/$1/libstdc++-v3
28   AC_SUBST(glibcpp_basedir)
29
30   AM_INIT_AUTOMAKE(libstdc++, 3.0.0)
31
32   # Never versions of autoconf add an underscore to these functions.
33   # Prevent future problems ...
34   ifdef([AC_PROG_CC_G],[],[define([AC_PROG_CC_G],defn([_AC_PROG_CC_G]))])
35   ifdef([AC_PROG_CC_GNU],[],[define([AC_PROG_CC_GNU],defn([_AC_PROG_CC_GNU]))])
36   ifdef([AC_PROG_CXX_G],[],[define([AC_PROG_CXX_G],defn([_AC_PROG_CXX_G]))])
37   ifdef([AC_PROG_CXX_GNU],[],[define([AC_PROG_CXX_GNU],defn([_AC_PROG_CXX_GNU]))])
38
39 #  AC_PROG_CC
40
41 # FIXME: We temporarily define our own version of AC_PROG_CC.  This is
42 # copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS.  We
43 # are probably using a cross compiler, which will not be able to fully
44 # link an executable.  This should really be fixed in autoconf
45 # itself.
46
47 AC_DEFUN(LIB_AC_PROG_CC,
48 [AC_BEFORE([$0], [AC_PROG_CPP])dnl
49 dnl Fool anybody using AC_PROG_CC.
50 AC_PROVIDE([AC_PROG_CC])
51 AC_CHECK_PROG(CC, gcc, gcc)
52 if test -z "$CC"; then
53   AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
54   test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
55 fi
56
57 AC_PROG_CC_GNU
58
59 if test $ac_cv_prog_gcc = yes; then
60   GCC=yes
61 dnl Check whether -g works, even if CFLAGS is set, in case the package
62 dnl plays around with CFLAGS (such as to build both debugging and
63 dnl normal versions of a library), tasteless as that idea is.
64   ac_test_CFLAGS="${CFLAGS+set}"
65   ac_save_CFLAGS="$CFLAGS"
66   CFLAGS=
67   AC_PROG_CC_G
68   if test "$ac_test_CFLAGS" = set; then
69     CFLAGS="$ac_save_CFLAGS"
70   elif test $ac_cv_prog_cc_g = yes; then
71     CFLAGS="-g -O2"
72   else
73     CFLAGS="-O2"
74   fi
75 else
76   GCC=
77   test "${CFLAGS+set}" = set || CFLAGS="-g"
78 fi
79 ])
80
81 LIB_AC_PROG_CC
82
83 # Can't just call these here as g++ requires libstc++ to be built....
84 #  AC_PROG_CXX
85
86 # Likewise for AC_PROG_CXX.
87 AC_DEFUN(LIB_AC_PROG_CXX,
88 [AC_BEFORE([$0], [AC_PROG_CXXCPP])dnl
89 dnl Fool anybody using AC_PROG_CXX.
90 AC_PROVIDE([AC_PROG_CXX])
91 # Use glibcpp_CXX so that we do not cause CXX to be cached with the
92 # flags that come in CXX while configuring libstdc++.  They're different
93 # from those used for all other target libraries.  If CXX is set in
94 # the environment, respect that here.
95 glibcpp_CXX=$CXX
96 AC_CHECK_PROGS(glibcpp_CXX, $CCC c++ g++ gcc CC cxx cc++, gcc)
97 AC_SUBST(glibcpp_CXX)
98 CXX=$glibcpp_CXX
99 test -z "$glibcpp_CXX" && AC_MSG_ERROR([no acceptable c++ found in \$PATH])
100
101 AC_PROG_CXX_GNU
102
103 if test $ac_cv_prog_gxx = yes; then
104   GXX=yes
105 dnl Check whether -g works, even if CXXFLAGS is set, in case the package
106 dnl plays around with CXXFLAGS (such as to build both debugging and
107 dnl normal versions of a library), tasteless as that idea is.
108   ac_test_CXXFLAGS="${CXXFLAGS+set}"
109   ac_save_CXXFLAGS="$CXXFLAGS"
110   CXXFLAGS=
111   AC_PROG_CXX_G
112   if test "$ac_test_CXXFLAGS" = set; then
113     CXXFLAGS="$ac_save_CXXFLAGS"
114   elif test $ac_cv_prog_cxx_g = yes; then
115     CXXFLAGS="-g -O2"
116   else
117     CXXFLAGS="-O2"
118   fi
119 else
120   GXX=
121   test "${CXXFLAGS+set}" = set || CXXFLAGS="-g"
122 fi
123 ])
124
125 LIB_AC_PROG_CXX
126
127   AC_CHECK_TOOL(AS, as)
128   AC_CHECK_TOOL(AR, ar)
129   AC_CHECK_TOOL(RANLIB, ranlib, ranlib-not-found-in-path-error)
130   AC_PROG_INSTALL
131
132   AM_MAINTAINER_MODE
133
134   # We need AC_EXEEXT to keep automake happy in cygnus mode.  However,
135   # at least currently, we never actually build a program, so we never
136   # need to use $(EXEEXT).  Moreover, the test for EXEEXT normally
137   # fails, because we are probably configuring with a cross compiler
138   # which cant create executables.  So we include AC_EXEEXT to keep
139   # automake happy, but we dont execute it, since we dont care about
140   # the result.
141   if false; then
142     # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands
143     # to nothing, so nothing would remain between `then' and `fi' if it
144     # were not for the `:' below.
145     :
146     AC_EXEEXT
147   fi
148
149   . [$]{glibcpp_basedir}/configure.host
150
151   case [$]{glibcpp_basedir} in
152     /* | [A-Za-z]:[\\/]*) libgcj_flagbasedir=[$]{glibcpp_basedir} ;;
153     *) glibcpp_flagbasedir='[$](top_builddir)/'[$]{glibcpp_basedir} ;;
154   esac
155
156   # This does for the target what configure.host does for the host.  In
157   # addition to possibly modifying the same flags, it also sets up symlinks.
158   GLIBCPP_CHECK_TARGET
159 ])
160
161
162 dnl
163 dnl Check to see if g++ can compile this library, and if so, if any version-
164 dnl specific precautions need to be taken. 
165 dnl 
166 dnl GLIBCPP_CHECK_COMPILER_VERSION
167 AC_DEFUN(GLIBCPP_CHECK_COMPILER_VERSION, [
168 if test ! -f stamp-sanity-compiler; then
169   AC_MSG_CHECKING([for g++ that will successfully compile libstdc++-v3])
170   AC_LANG_SAVE
171   AC_LANG_CPLUSPLUS
172   AC_TRY_COMPILE(, [
173   #if __GNUC__ < 3
174     not_ok
175   #endif
176   ], gpp_satisfactory=yes, AC_MSG_ERROR([please upgrade to GCC 3.0 or above]))
177   AC_LANG_RESTORE
178   AC_MSG_RESULT($gpp_satisfactory)
179   touch stamp-sanity-compiler
180 fi
181 ])
182
183
184 dnl
185 dnl Tests for newer compiler features, or features that are present in newer
186 dnl compiler versions but not older compiler versions still in use, should
187 dnl be placed here.
188 dnl
189 dnl Define WERROR='-Werror' if requested and possible; g++'s that lack the
190 dnl new inlining code or the new system_header pragma will die on -Werror.
191 dnl Leave it out by default and use maint-mode to use it.
192 dnl
193 dnl Define SECTION_FLAGS='-ffunction-sections -fdata-sections' if
194 dnl compiler supports it and the user has not requested debug mode.
195 dnl
196 dnl GLIBCPP_CHECK_COMPILER_FEATURES
197 AC_DEFUN(GLIBCPP_CHECK_COMPILER_FEATURES, [
198   # All these tests are for C++; save the language and the compiler flags.
199   # The CXXFLAGS thing is suspicious, but based on similar bits previously
200   # found in GLIBCPP_CONFIGURE.
201   AC_LANG_SAVE
202   AC_LANG_CPLUSPLUS
203   ac_test_CXXFLAGS="${CXXFLAGS+set}"
204   ac_save_CXXFLAGS="$CXXFLAGS"
205
206   # Check for maintainer-mode bits.
207   if test x"$USE_MAINTAINER_MODE" = xno; then
208     WERROR=''
209   else
210     WERROR='-Werror'
211   fi
212
213   # Check for -ffunction-sections -fdata-sections
214   AC_MSG_CHECKING([for g++ that supports -ffunction-sections -fdata-sections])
215   CXXFLAGS='-Werror -ffunction-sections -fdata-sections'
216   AC_TRY_COMPILE(, [int foo;
217   ], [ac_fdsections=yes], [ac_fdsections=no])
218   if test "$ac_test_CXXFLAGS" = set; then
219     CXXFLAGS="$ac_save_CXXFLAGS"
220   else
221     # this is the suspicious part
222     CXXFLAGS=''
223   fi
224   if test x"$ac_fdsections" = x"yes" &&
225      test x"$enable_debug" = x"no"; then
226     SECTION_FLAGS='-ffunction-sections -fdata-sections'
227   fi
228   AC_MSG_RESULT($ac_fdsections)
229
230   AC_LANG_RESTORE
231   AC_SUBST(WERROR)
232   AC_SUBST(SECTION_FLAGS)
233 ])
234
235
236 dnl
237 dnl If GNU ld is in use, check to see if tricky linker opts can be used.  If
238 dnl the native linker is in use, all variables will be defined to something
239 dnl safe (like an empty string).
240 dnl
241 dnl Define SECTION_LDFLAGS='-Wl,--gc-sections' if possible.
242 dnl Define OPT_LDFLAGS='-Wl,-O1' if possible.
243 dnl
244 dnl GLIBCPP_CHECK_LINKER_FEATURES
245 AC_DEFUN(GLIBCPP_CHECK_LINKER_FEATURES, [
246   # If we're not using GNU ld, then there's no point in even trying these
247   # tests.  Check for that first.  We should have already tested for gld
248   # by now (in libtool), but require it now just to be safe...
249   SECTION_LDFLAGS=''
250   OPT_LDFLAGS=''
251   AC_REQUIRE([AC_PROG_LD])
252
253   # Set --gc-sections.
254   if test "$ac_cv_prog_gnu_ld" = "notbroken"; then
255     # GNU ld it is!  Joy and bunny rabbits!
256
257     # All these tests are for C++; save the language and the compiler flags.
258     # Need to do this so that g++ won't try to link in libstdc++
259     ac_test_CFLAGS="${CFLAGS+set}"
260     ac_save_CFLAGS="$CFLAGS"
261     CFLAGS='-x c++  -Wl,--gc-sections'
262
263     # Check for -Wl,--gc-sections
264     # XXX This test is broken at the moment, as symbols required for
265     # linking are now in libsupc++ (not built yet.....). In addition, 
266     # this test has cored on solaris in the past. In addition,
267     # --gc-sections doesn't really work at the moment (keeps on discarding
268     # used sections, first .eh_frame and now some of the glibc sections for
269     # iconv). Bzzzzt. Thanks for playing, maybe next time.
270     AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
271     AC_TRY_RUN([
272      int main(void) 
273      {
274        try { throw 1; }
275        catch (...) { };
276        return 0;
277      }
278     ], [ac_sectionLDflags=yes],[ac_sectionLFflags=no], [ac_sectionLDflags=yes])
279     if test "$ac_test_CFLAGS" = set; then
280       CFLAGS="$ac_save_CFLAGS"
281     else
282       # this is the suspicious part
283       CFLAGS=''
284     fi
285     if test "$ac_sectionLDflags" = "yes"; then
286       SECTION_LDFLAGS='-Wl,--gc-sections'
287     fi
288     AC_MSG_RESULT($ac_sectionLDflags)
289   fi
290
291   # Set linker optimization flags.
292   if test x"$ac_cv_prog_gnu_ld" = x"yes" &&
293      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 TWO parameters
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 THREE parameters
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 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 ])
776
777
778 dnl
779 dnl Check to see if this target can enable the wchar_t parts of libstdc++.
780 dnl If --disable-c-mbchar was given, no wchar_t stuff is enabled.  (This
781 dnl must have been previously checked.)
782 dnl
783 dnl Define _GLIBCPP_USE_WCHAR_T if all the bits are found 
784 dnl Define HAVE_MBSTATE_T if mbstate_t is not in wchar.h
785 dnl
786 dnl GLIBCPP_CHECK_WCHAR_T_SUPPORT
787 AC_DEFUN(GLIBCPP_CHECK_WCHAR_T_SUPPORT, [
788
789   dnl Test wchar.h for mbstate_t, which is needed for char_traits and
790   dnl others even if wchar_t support is not on.
791   AC_MSG_CHECKING([for mbstate_t])
792   AC_TRY_COMPILE([#include <wchar.h>],
793   [mbstate_t teststate;], 
794   have_mbstate_t=yes, have_mbstate_t=no)
795   AC_MSG_RESULT($have_mbstate_t)
796   if test x"$have_mbstate_t" = xyes; then
797     AC_DEFINE(HAVE_MBSTATE_T)
798   fi
799
800   dnl Sanity check for existence of ISO C99 headers for extended encoding.
801   AC_CHECK_HEADERS(wchar.h, ac_has_wchar_h=yes, ac_has_wchar_h=no)
802   AC_CHECK_HEADER(wctype.h, ac_has_wctype_h=yes, ac_has_wctype_h=no)
803   
804   dnl Only continue checking if the ISO C99 headers exist and support is on.
805   if test x"$ac_has_wchar_h" = xyes &&
806      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_wfuncs=yes
829     AC_CHECK_FUNCS(wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset,, \
830     ac_wfuncs=no)
831   
832     dnl Checks for names injected into std:: by the c_std headers.
833     AC_CHECK_FUNCS(btowc wctob fgetwc fgetwc fgetws fputwc fputws fwide \
834     fwprintf fwscanf swprintf swscanf vfwprintf vfwscanf vswprintf vswscanf \
835     vwprintf vwscanf wprintf wscanf getwc getwchar mbsinit mbrlen mbrtowc \
836     mbsrtowcs wcsrtombs putwc putwchar ungetwc wcrtomb wcstod wcstof wcstol \
837     wcstoul wcscpy wcsncpy wcscat wcsncat wcscmp wcscoll wcsncmp wcsxfrm \
838     wcscspn wcsspn wcstok wcsftime wcschr wcspbrk wcsrchr wcsstr,, \
839     ac_wfuncs=no)
840
841     AC_MSG_CHECKING([for ISO C99 wchar_t support])
842     if test x"$has_weof" = xyes &&
843        test x"$has_wchar_minmax" = xyes &&
844        test x"$ac_wfuncs" = xyes; then
845       ac_isoC99_wchar_t=yes
846     else
847       ac_isoC99_wchar_t=no
848     fi
849     AC_MSG_RESULT($ac_isoC99_wchar_t)
850   
851     dnl Use iconv for wchar_t to char conversions. As such, check for 
852     dnl X/Open Portability Guide, version 2 features (XPG2).
853     AC_CHECK_HEADER(iconv.h, ac_has_iconv_h=yes, ac_has_iconv_h=no)
854     AC_CHECK_HEADER(langinfo.h, ac_has_langinfo_h=yes, ac_has_langinfo_h=no)
855
856     dnl Check for existence of libiconv.a providing XPG2 wchar_t support.
857     AC_CHECK_LIB(iconv, iconv, libiconv="-liconv")
858     ac_save_LIBS="$LIBS"
859     LIBS="$LIBS $libiconv"
860
861     AC_CHECK_FUNCS(iconv_open iconv_close iconv nl_langinfo, \
862     ac_XPG2funcs=yes, ac_XPG2funcs=no)
863   
864     LIBS="$ac_save_LIBS"
865
866     AC_MSG_CHECKING([for XPG2 wchar_t support])
867     if test x"$ac_has_iconv_h" = xyes &&
868        test x"$ac_has_langinfo_h" = xyes &&
869        test x"$ac_XPG2funcs" = xyes; then
870       ac_XPG2_wchar_t=yes
871     else
872       ac_XPG2_wchar_t=no
873     fi
874     AC_MSG_RESULT($ac_XPG2_wchar_t)
875   
876     dnl At the moment, only enable wchar_t specializations if all the
877     dnl above support is present.
878     AC_MSG_CHECKING([for enabled wchar_t specializations])
879     if test x"$ac_isoC99_wchar_t" = xyes &&
880        test x"$ac_XPG2_wchar_t" = xyes; then
881       AC_DEFINE(_GLIBCPP_USE_WCHAR_T)
882       AC_MSG_RESULT("yes")
883     else
884       AC_MSG_RESULT("no")
885     fi
886   else
887     dnl Wide characters disabled by the user. 
888     AC_MSG_WARN([wchar_t support disabled.])
889   fi
890 ])
891
892
893 dnl
894 dnl Check for special debugging mode; not for production use.
895 dnl
896 dnl GLIBCPP_ENABLE_DEBUG
897 dnl --enable-debug sets '-ggdb3 -O0'.
898 dnl --disable-debug sets '-g' and whatever optimization options the
899 dnl     compiler can handle.
900 dnl  +  --enable-maintainer-mode automatically defaults this to on.
901 dnl  +  Perhaps -D/-U of NDEBUG, DEBUG, DEBUG_ASSERT, ...?
902 dnl  +  Usage:  GLIBCPP_ENABLE_DEBUG[(DEFAULT)]
903 dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
904 dnl       defaults to `no'.
905 AC_DEFUN(GLIBCPP_ENABLE_DEBUG, [dnl
906 define([GLIBCPP_ENABLE_DEBUG_DEFAULT], ifelse($1, yes, yes, no))dnl
907 AC_ARG_ENABLE(debug,
908 changequote(<<, >>)dnl
909 <<  --enable-debug          extra debugging, turn off optimization [default=>>GLIBCPP_ENABLE_DEBUG_DEFAULT],
910 changequote([, ])dnl
911 [case "${enableval}" in
912  yes) enable_debug=yes ;;
913  no)  enable_debug=no ;;
914  *)   AC_MSG_ERROR([Unknown argument to enable/disable extra debugging]) ;;
915  esac],
916 enable_debug=GLIBCPP_ENABLE_DEBUG_DEFAULT)dnl
917
918 dnl Option parsed, now set things appropriately
919 case "${enable_debug}" in
920     yes) 
921         DEBUG_FLAGS='-O0 -ggdb3'                        
922         ;; 
923     no)   
924         DEBUG_FLAGS='-g'
925         ;;
926 esac
927 AC_SUBST(DEBUG_FLAGS)
928 ])
929
930
931 dnl
932 dnl Check for "unusual" flags to pass to the compiler while building.
933 dnl
934 dnl GLIBCPP_ENABLE_CXX_FLAGS
935 dnl --enable-cxx-flags='-foo -bar -baz' is a general method for passing
936 dnl     experimental flags such as -fhonor-std, -fsquangle, -Dfloat=char, etc.
937 dnl     Somehow this same set of flags must be passed when [re]building
938 dnl     libgcc.
939 dnl --disable-cxx-flags passes nothing.
940 dnl  +  See http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00131.html
941 dnl         http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00284.html
942 dnl         http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00035.html
943 dnl  +  Usage:  GLIBCPP_ENABLE_CXX_FLAGS(default flags)
944 dnl       If "default flags" is an empty string (or "none"), the effect is
945 dnl       the same as --disable or --enable=no.
946 AC_DEFUN(GLIBCPP_ENABLE_CXX_FLAGS, [dnl
947 define([GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT], ifelse($1,,, $1))dnl
948 AC_ARG_ENABLE(cxx-flags,
949 changequote(<<, >>)dnl
950 <<  --enable-cxx-flags=FLAGS      pass compiler FLAGS when building library;
951                                 [default=>>GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT],
952 changequote([, ])dnl
953 [case "x$enableval" in
954  xyes)   
955         AC_MSG_ERROR([--enable-cxx-flags needs compiler flags as arguments]) ;;
956  xno|x)  
957         enable_cxx_flags='' ;;
958  *)      
959         enable_cxx_flags="$enableval" ;;
960  esac],
961 enable_cxx_flags='GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT')
962
963 dnl Thinko on my part during design.  This kludge is the workaround.
964 if test "$enable_cxx_flags" = "none"; then 
965   enable_cxx_flags=''; 
966 fi
967
968 dnl Run through flags (either default or command-line) and set anything
969 dnl extra (e.g., #defines) that must accompany particular g++ options.
970 if test -n "$enable_cxx_flags"; then
971     for f in $enable_cxx_flags; do
972         case "$f" in
973             -fhonor-std)  ;;
974             -*)  ;;
975             *)   # and we're trying to pass /what/ exactly?
976                  AC_MSG_ERROR([compiler flags start with a -]) ;;
977         esac
978     done
979 fi
980 EXTRA_CXX_FLAGS="$enable_cxx_flags"
981 AC_SUBST(EXTRA_CXX_FLAGS)
982 ])
983
984
985 dnl
986 dnl Check for which locale library to use:  gnu or generic.
987 dnl
988 dnl GLIBCPP_ENABLE_CLOCALE
989 dnl --enable-clocale=gnu sets config/c_locale_gnu.cc and friends
990 dnl --enable-clocale=generic sets config/c_locale_generic.cc and friends
991 dnl 
992 dnl default is generic
993 dnl
994 AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [
995   AC_MSG_CHECKING([for clocale to use])
996   AC_ARG_ENABLE(clocale,
997   [  --enable-clocale        enable model for target locale package. 
998   --enable-clocale=MODEL  use MODEL target-speific locale package. [default=generic]
999   ], 
1000   if test x$enable_clocale = xno; then
1001      enable_clocale=generic
1002   fi,
1003      enable_clocale=generic)
1004
1005   enable_clocale_flag=$enable_clocale
1006
1007   dnl Check if a valid locale package
1008   case x${enable_clocale_flag} in
1009     xgnu)
1010       CLOCALE_H=config/c_locale_gnu.h
1011       CLOCALE_CC=config/c_locale_gnu.cc
1012       AC_MSG_RESULT(gnu)
1013       ;;
1014     xgeneric)
1015       CLOCALE_H=config/c_locale_generic.h
1016       CLOCALE_CC=config/c_locale_generic.cc
1017       AC_MSG_RESULT(generic)
1018       ;;
1019     *)
1020       echo "$enable_clocale is an unknown locale package" 1>&2
1021       exit 1
1022       ;;
1023   esac
1024
1025   AC_SUBST(CLOCALE_H)
1026   AC_LINK_FILES($CLOCALE_CC, src/c++locale.cc)
1027 ])
1028
1029
1030 dnl
1031 dnl Check for which I/O library to use:  libio, or something specific.
1032 dnl
1033 dnl GLIBCPP_ENABLE_CSTDIO
1034 dnl --enable-cstdio=libio sets config/c_io_libio.h and friends
1035 dnl 
1036 dnl default is stdio
1037 dnl
1038 AC_DEFUN(GLIBCPP_ENABLE_CSTDIO, [
1039   AC_MSG_CHECKING([for cstdio to use])
1040   AC_ARG_ENABLE(cstdio,
1041   [  --enable-cstdio         enable stdio for target io package. 
1042   --enable-cstdio=LIB     use LIB target-speific io package. [default=stdio]
1043   ], 
1044   if test x$enable_cstdio = xno; then
1045      enable_cstdio=stdio
1046   fi,
1047      enable_cstdio=stdio)
1048
1049   enable_cstdio_flag=$enable_cstdio
1050
1051   dnl Check if a valid I/O package
1052   case x${enable_cstdio_flag} in
1053     xlibio)
1054       CSTDIO_H=config/c_io_libio.h
1055       BASIC_FILE_H=config/basic_file_libio.h
1056       BASIC_FILE_CC=config/basic_file_libio.cc
1057       AC_MSG_RESULT(libio)
1058
1059       # see if we are on a system with libio native (ie, linux)
1060       AC_CHECK_HEADER(libio.h,  has_libio=yes, has_libio=no)
1061
1062       # Need to check and see what version of glibc is being used. If
1063       # it's not glibc-2.2 or higher, then we'll need to go ahead and 
1064       # compile most of libio for linux systems.
1065       if test x$has_libio = x"yes"; then
1066         case "$target" in
1067           *-*-linux*)
1068               AC_MSG_CHECKING([for glibc version >= 2.2])
1069               AC_EGREP_CPP([ok], [
1070             #include <features.h>
1071               #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) 
1072                     ok
1073               #endif
1074               ], glibc_satisfactory=yes, glibc_satisfactory=no)
1075               AC_MSG_RESULT($glibc_satisfactory)
1076             ;;
1077         esac
1078
1079         # XXX at the moment, admit defeat and force the recompilation
1080         # XXX of glibc even on glibc-2.2 systems, because libio is not synched.
1081         glibc_satisfactory=no        
1082
1083         if test x$glibc_satisfactory = x"yes"; then
1084            need_libio=no
1085            need_wlibio=no        
1086         else
1087            need_libio=yes
1088            # bkoz XXX need to add checks to enable this
1089            # pme XXX here's a first pass at such a check
1090            if test x$enable_c_mbchar != xno; then
1091               need_wlibio=yes
1092            else
1093               need_wlibio=no
1094            fi
1095         fi
1096
1097       else
1098          # Using libio, but <libio.h> doesn't exist on the target system. . .
1099          need_libio=yes
1100          # bkoz XXX need to add checks to enable this
1101          # pme XXX here's a first pass at such a check
1102          if test x$enable_c_mbchar != xno; then
1103              need_wlibio=yes
1104          else
1105              need_wlibio=no
1106          fi
1107       fi
1108       ;;
1109     xstdio | x | xno | xnone | xyes)
1110       # default
1111       CSTDIO_H=config/c_io_stdio.h
1112       BASIC_FILE_H=config/basic_file_stdio.h
1113       BASIC_FILE_CC=config/basic_file_stdio.cc
1114       AC_MSG_RESULT(stdio)
1115
1116       # We're not using stdio.
1117       need_libio=no
1118       need_wlibio=no
1119       ;;
1120     *)
1121       echo "$enable_cstdio is an unknown io package" 1>&2
1122       exit 1
1123       ;;
1124   esac
1125   AC_SUBST(CSTDIO_H)
1126   AC_SUBST(BASIC_FILE_H)
1127   AC_LINK_FILES($BASIC_FILE_CC, src/basic_file.cc)
1128
1129   # 2000-08-04 bkoz hack
1130   CCODECVT_C=config/c_io_libio_codecvt.c
1131   AC_SUBST(CCODECVT_C)
1132   # 2000-08-04 bkoz hack
1133
1134   AM_CONDITIONAL(GLIBCPP_BUILD_LIBIO,
1135                  test "$need_libio" = yes || test "$need_wlibio" = yes)
1136   AM_CONDITIONAL(GLIBCPP_NEED_LIBIO, test "$need_libio" = yes)
1137   AM_CONDITIONAL(GLIBCPP_NEED_WLIBIO, test "$need_wlibio" = yes)
1138   if test "$need_libio" = yes || test "$need_wlibio" = yes; then
1139     libio_la=../libio/libio.la
1140   else
1141     libio_la=
1142   fi
1143   AC_SUBST(libio_la)
1144 ])
1145
1146
1147 dnl
1148 dnl Setup to use the gcc gthr.h thread-specific memory and mutex model.
1149 dnl We must stage the required headers so that they will be installed
1150 dnl with the library (unlike libgcc, the STL implementation is provided
1151 dnl solely within headers).  Since we must not inject random user-space
1152 dnl macro names into user-provided C++ code, we first stage into <file>-in
1153 dnl and process to <file> with an output command.  The reason for a two-
1154 dnl stage process here is to correctly handle $srcdir!=$objdir without
1155 dnl having to write complex code (the sed commands to clean the macro
1156 dnl namespace are complex and fragile enough as it is).  We must also
1157 dnl add a relative path so that -I- is supported properly.
1158 dnl
1159 AC_DEFUN(GLIBCPP_ENABLE_THREADS, [
1160   AC_MSG_CHECKING([for thread model used by GCC])
1161   target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
1162   AC_MSG_RESULT([$target_thread_file])
1163
1164   if test $target_thread_file != single; then
1165     AC_DEFINE(HAVE_GTHR_DEFAULT)
1166     AC_DEFINE(_GLIBCPP_SUPPORTS_WEAK, __GXX_WEAK__)
1167   fi
1168
1169   glibcpp_thread_h=gthr-$target_thread_file.h
1170   AC_SUBST(glibcpp_thread_h)
1171 ])
1172
1173
1174 dnl
1175 dnl Check for exception handling support.  If an explicit enable/disable
1176 dnl sjlj exceptions is given, we don't have to detect.  Otherwise the
1177 dnl target may or may not support call frame exceptions.
1178 dnl
1179 dnl GLIBCPP_ENABLE_SJLJ_EXCEPTIONS
1180 dnl --enable-sjlj-exceptions forces the use of builtin setjmp.
1181 dnl --disable-sjlj-exceptions forces the use of call frame unwinding.
1182 dnl
1183 dnl Define _GLIBCPP_SJLJ_EXCEPTIONS if the compiler is configured for it.
1184 dnl
1185 AC_DEFUN(GLIBCPP_ENABLE_SJLJ_EXCEPTIONS, [
1186   AC_MSG_CHECKING([for exception model to use])
1187   AC_LANG_SAVE
1188   AC_LANG_CPLUSPLUS
1189   AC_ARG_ENABLE(sjlj-exceptions,
1190   [  --enable-sjlj-exceptions  force use of builtin_setjmp for exceptions],
1191   [:],
1192   [dnl Botheration.  Now we've got to detect the exception model.
1193    dnl Link tests against libgcc.a are problematic since -- at least
1194    dnl as of this writing -- we've not been given proper -L bits for
1195    dnl single-tree newlib and libgloss.
1196    dnl
1197    dnl This is what AC_TRY_COMPILE would do if it didn't delete the
1198    dnl conftest files before we got a change to grep them first.
1199    cat > conftest.$ac_ext << EOF
1200 [#]line __oline__ "configure"
1201 struct S { ~S(); };
1202 void bar();
1203 void foo()
1204 {
1205   S s;
1206   bar();
1207 }
1208 EOF
1209    old_CXXFLAGS="$CXXFLAGS"  
1210    CXXFLAGS=-S
1211    if AC_TRY_EVAL(ac_compile); then
1212      if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
1213        enable_sjlj_exceptions=yes
1214      elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then
1215        enable_sjlj_exceptions=no
1216      fi
1217    fi
1218    CXXFLAGS="$old_CXXFLAGS"
1219    rm -f conftest*])
1220    if test x$enable_sjlj_exceptions = xyes; then
1221      AC_DEFINE(_GLIBCPP_SJLJ_EXCEPTIONS, 1,
1222         [Define if the compiler is configured for setjmp/longjmp exceptions.])
1223      ac_exception_model_name=sjlj
1224    elif test x$enable_sjlj_exceptions = xno; then
1225      ac_exception_model_name="call frame"
1226    else
1227      AC_MSG_ERROR([unable to detect exception model])
1228    fi
1229    AC_LANG_RESTORE
1230    AC_MSG_RESULT($ac_exception_model_name)
1231 ])
1232
1233
1234 dnl
1235 dnl Check for ISO/IEC 9899:1999 "C99" support.
1236 dnl
1237 dnl GLIBCPP_ENABLE_C99
1238 dnl --enable-c99 defines _GLIBCPP_USE_C99
1239 dnl --disable-c99 leaves _GLIBCPP_USE_C99 undefined
1240 dnl  +  Usage:  GLIBCPP_ENABLE_C99[(DEFAULT)]
1241 dnl       Where DEFAULT is either `yes' or `no'.  If omitted, it
1242 dnl       defaults to `no'.
1243 dnl  +  If 'C99' stuff is not available, ignores DEFAULT and sets `no'.
1244 dnl
1245 dnl GLIBCPP_ENABLE_C99
1246 AC_DEFUN(GLIBCPP_ENABLE_C99, [dnl
1247   define([GLIBCPP_ENABLE_C99_DEFAULT], ifelse($1, yes, yes, no))dnl
1248
1249   AC_ARG_ENABLE(c99,
1250   changequote(<<, >>)dnl
1251   <<--enable-c99      turns on 'ISO/IEC 9899:1999 support' [default=>>GLIBCPP_ENABLE_C99_DEFAULT],
1252   changequote([, ])dnl
1253   [case "$enableval" in
1254    yes) enable_c99=yes ;;
1255    no)  enable_c99=no ;;
1256    *)   AC_MSG_ERROR([Unknown argument to enable/disable C99]) ;;
1257    esac],
1258   enable_c99=GLIBCPP_ENABLE_C99_DEFAULT)dnl
1259  
1260   AC_LANG_SAVE
1261   AC_LANG_CPLUSPLUS
1262
1263   # Check for the existence of <math.h> functions used if C99 is enabled.
1264   ac_c99_math=yes;
1265   AC_MSG_CHECKING([for ISO C99 support in <math.h>])
1266   AC_TRY_COMPILE([#include <math.h>],[fpclassify(0.0);],, [ac_c99_math=no])
1267   AC_TRY_COMPILE([#include <math.h>],[isfinite(0.0);],, [ac_c99_math=no])
1268   AC_TRY_COMPILE([#include <math.h>],[isinf(0.0);],, [ac_c99_math=no])
1269   AC_TRY_COMPILE([#include <math.h>],[isnan(0.0);],, [ac_c99_math=no])
1270   AC_TRY_COMPILE([#include <math.h>],[isnormal(0.0);],, [ac_c99_math=no])
1271   AC_TRY_COMPILE([#include <math.h>],[signbit(0.0);],, [ac_c99_math=no])
1272   AC_TRY_COMPILE([#include <math.h>],[isgreater(0.0,0.0);],, [ac_c99_math=no])
1273   AC_TRY_COMPILE([#include <math.h>],
1274                  [isgreaterequal(0.0,0.0);],, [ac_c99_math=no])
1275   AC_TRY_COMPILE([#include <math.h>],[isless(0.0,0.0);],, [ac_c99_math=no])
1276   AC_TRY_COMPILE([#include <math.h>],[islessequal(0.0,0.0);],,[ac_c99_math=no])
1277   AC_TRY_COMPILE([#include <math.h>],
1278                  [islessgreater(0.0,0.0);],, [ac_c99_math=no])
1279   AC_TRY_COMPILE([#include <math.h>],
1280                  [isunordered(0.0,0.0);],, [ac_c99_math=no])
1281   AC_MSG_RESULT($ac_c99_math)
1282
1283   # Check for the existence in <stdio.h> of vscanf, et. al.
1284   ac_c99_stdio=yes;
1285   AC_MSG_CHECKING([for ISO C99 support in <stdio.h>])
1286   AC_TRY_COMPILE([#include <stdio.h>],
1287                  [snprintf("12", 0, "%i");],, [ac_c99_stdio=no])
1288   AC_TRY_COMPILE([#include <stdio.h>
1289                   #include <stdarg.h>
1290                   void foo(char* fmt, ...)
1291                   {va_list args; va_start(args, fmt);
1292                   vfscanf(stderr, "%i", args);}],
1293                   [],, [ac_c99_stdio=no])
1294   AC_TRY_COMPILE([#include <stdio.h>
1295                   #include <stdarg.h>
1296                   void foo(char* fmt, ...)
1297                   {va_list args; va_start(args, fmt);
1298                   vscanf("%i", args);}],
1299                   [],, [ac_c99_stdio=no])
1300   AC_TRY_COMPILE([#include <stdio.h>
1301                   #include <stdarg.h>
1302                   void foo(char* fmt, ...)
1303                   {va_list args; va_start(args, fmt);
1304                   vsnprintf(fmt, 0, "%i", args);}],
1305                   [],, [ac_c99_stdio=no])
1306   AC_TRY_COMPILE([#include <stdio.h>
1307                   #include <stdarg.h>
1308                   void foo(char* fmt, ...)
1309                   {va_list args; va_start(args, fmt);
1310                   vsscanf(fmt, "%i", args);}],
1311                   [],, [ac_c99_stdio=no])
1312   AC_MSG_RESULT($ac_c99_stdio)
1313
1314   # Check for the existence in <stdlib.h> of lldiv_t, et. al.
1315   ac_c99_stdlib=yes;
1316   AC_MSG_CHECKING([for lldiv_t declaration])
1317   AC_CACHE_VAL(ac_c99_lldiv_t, [
1318   AC_TRY_COMPILE([#include <stdlib.h>], 
1319                    [ lldiv_t mydivt;], 
1320                    [ac_c99_lldiv_t=yes], [ac_c99_lldiv_t=no])
1321   ])
1322   AC_MSG_RESULT($ac_c99_lldiv_t)
1323
1324   AC_MSG_CHECKING([for ISO C99 support in <stdlib.h>])
1325   AC_TRY_COMPILE([#include <stdlib.h>],
1326                  [char* tmp; strtof("gnu", &tmp);],, [ac_c99_stdlib=no])
1327   AC_TRY_COMPILE([#include <stdlib.h>],
1328                  [char* tmp; strtold("gnu", &tmp);],, [ac_c99_stdlib=no])
1329   AC_TRY_COMPILE([#include <stdlib.h>],
1330                  [char* tmp; strtoll("gnu", &tmp, 10);],, [ac_c99_stdlib=no])
1331   AC_TRY_COMPILE([#include <stdlib.h>],
1332                  [char* tmp; strtoull("gnu", &tmp, 10);],, [ac_c99_stdlib=no])
1333   AC_TRY_COMPILE([#include <stdlib.h>], [llabs(10);],, [ac_c99_stdlib=no])
1334   AC_TRY_COMPILE([#include <stdlib.h>], [lldiv(10,1);],, [ac_c99_stdlib=no])
1335   AC_TRY_COMPILE([#include <stdlib.h>], [atoll("10");],, [ac_c99_stdlib=no])
1336   AC_TRY_COMPILE([#include <stdlib.h>], [_Exit(0);],, [ac_c99_stdlib=no])
1337   if test x"$ac_c99_lldiv_t" = x"no"; then
1338     ac_c99_stdlib=no; 
1339   fi; 
1340   AC_MSG_RESULT($ac_c99_stdlib)
1341
1342   # Check for the existence of <wchar.h> functions used if C99 is enabled.
1343   # XXX the wchar.h checks should be rolled into the general C99 bits.
1344   ac_c99_wchar=yes;
1345   AC_MSG_CHECKING([for additional ISO C99 support in <wchar.h>])
1346   AC_TRY_COMPILE([#include <wchar.h>], 
1347                  [wcstold(L"10.0", NULL);],, [ac_c99_wchar=no])
1348   AC_TRY_COMPILE([#include <wchar.h>], 
1349                  [wcstoll(L"10", NULL, 10);],, [ac_c99_wchar=no])
1350   AC_TRY_COMPILE([#include <wchar.h>], 
1351                  [wcstoull(L"10", NULL, 10);],, [ac_c99_wchar=no])
1352   AC_MSG_RESULT($ac_c99_wchar)
1353
1354   AC_MSG_CHECKING([for enabled ISO C99 support])
1355   if test x"$ac_c99_math" = x"no" ||
1356      test x"$ac_c99_stdio" = x"no" ||
1357      test x"$ac_c99_stdlib" = x"no" ||
1358      test x"$ac_c99_wchar" = x"no"; then
1359     enable_c99=no; 
1360   fi; 
1361   AC_MSG_RESULT($enable_c99)
1362
1363   # Option parsed, now set things appropriately
1364   if test x"$enable_c99" = x"yes"; then
1365     AC_DEFINE(_GLIBCPP_USE_C99)
1366   fi
1367
1368   AC_LANG_RESTORE
1369 ])
1370
1371
1372 dnl
1373 dnl Check for template specializations for the 'long long' type extension.
1374 dnl NB: Must check for C99 support before calling _GLIBCPP_ENABLE_LONG_LONG
1375 dnl
1376 dnl GLIBCPP_ENABLE_LONG_LONG
1377 dnl --enable-long-long defines _GLIBCPP_USE_LONG_LONG
1378 dnl --disable-long-long leaves _GLIBCPP_USE_LONG_LONG undefined
1379 dnl  +  Usage:  GLIBCPP_ENABLE_LONG_LONG[(DEFAULT)]
1380 dnl       Where DEFAULT is either `yes' or `no'.  If omitted, it
1381 dnl       defaults to `no'.
1382 dnl  +  If 'long long' stuff is not available, ignores DEFAULT and sets `no'.
1383 dnl
1384 dnl GLIBCPP_ENABLE_LONG_LONG
1385 AC_DEFUN(GLIBCPP_ENABLE_LONG_LONG, [dnl
1386   define([GLIBCPP_ENABLE_LONG_LONG_DEFAULT], ifelse($1, yes, yes, no))dnl
1387
1388   AC_ARG_ENABLE(long-long,
1389   changequote(<<, >>)dnl
1390   <<--enable-long-long      turns on 'long long' [default=>>GLIBCPP_ENABLE_LONG_LONG_DEFAULT],
1391   changequote([, ])dnl
1392   [case "$enableval" in
1393    yes) enable_long_long=yes ;;
1394    no)  enable_long_long=no ;;
1395    *)   AC_MSG_ERROR([Unknown argument to enable/disable long long]) ;;
1396    esac],
1397   enable_long_long=GLIBCPP_ENABLE_LONG_LONG_DEFAULT)dnl
1398
1399   # iostreams require strtoll, strtoull to compile. If the
1400   # GLIBCPP_ENABLE_C99 tests found these, and if C99 support is enabled,
1401   # go ahead and allow long long to be used.
1402   if test x"$enable_c99" = x"no"; then
1403     enable_long_long=no; 
1404   fi
1405
1406   # Option parsed, now set things appropriately
1407   AC_MSG_CHECKING([for enabled long long support])
1408   if test x"$enable_long_long" = xyes; then
1409     AC_DEFINE(_GLIBCPP_USE_LONG_LONG)
1410   fi
1411   AC_MSG_RESULT($enable_long_long)
1412 ])
1413
1414
1415 dnl
1416 dnl Check for what kind of C headers to use.
1417 dnl
1418 dnl GLIBCPP_ENABLE_CHEADERS
1419 dnl --enable-cheaders= [does stuff].
1420 dnl --disable-cheaders [does not do anything, really].
1421 dnl  +  This will eventually need to be 'c_shadow' by default.
1422 dnl  +  Usage:  GLIBCPP_ENABLE_CHEADERS[(DEFAULT)]
1423 dnl       Where DEFAULT is either `c' or `c_std' or 'c_shadow'.  
1424 dnl       If ommitted, it defaults to `c_std'.
1425 AC_DEFUN(GLIBCPP_ENABLE_CHEADERS, [dnl
1426 define([GLIBCPP_ENABLE_CHEADERS_DEFAULT], ifelse($1, c_std, c_std, c_std))dnl
1427 AC_MSG_CHECKING([for c header strategy to use])
1428 AC_ARG_ENABLE(cheaders,
1429 changequote(<<, >>)dnl
1430 <<  --enable-cheaders       construct "C" header files for g++ [default=>>GLIBCPP_ENABLE_CHEADERS_DEFAULT],
1431 changequote([, ])
1432   [case "$enableval" in
1433    c) 
1434         enable_cheaders=c 
1435         ;;
1436    c_std)  
1437         enable_cheaders=c_std 
1438         ;;
1439    c_shadow)  
1440         enable_cheaders=c_shadow 
1441         ;;
1442    *)   AC_MSG_ERROR([Unknown argument to enable/disable "C" headers]) 
1443         ;;
1444   esac],
1445   enable_cheaders=GLIBCPP_ENABLE_CHEADERS_DEFAULT)
1446   AC_MSG_RESULT($enable_cheaders)
1447
1448   dnl Option parsed, now set things appropriately
1449   case "$enable_cheaders" in
1450     c_shadow) 
1451         CSHADOW_FLAGS="-fno-builtin"
1452         C_INCLUDE_DIR='${top_srcdir}/include/c_shadow'
1453         AC_DEFINE(_GLIBCPP_USE_SHADOW_HEADERS)
1454         ;;
1455     c_std)   
1456         CSHADOW_FLAGS=""
1457         C_INCLUDE_DIR='${top_srcdir}/include/c_std'
1458         ;;
1459     c)   
1460         CSHADOW_FLAGS=""
1461         C_INCLUDE_DIR='${top_srcdir}/include/c'
1462         ;;
1463   esac
1464
1465   AC_SUBST(CSHADOW_FLAGS)
1466   AC_SUBST(C_INCLUDE_DIR)
1467   AM_CONDITIONAL(GLIBCPP_USE_CSHADOW, test "$enable_cheaders" = c_shadow)
1468 ])
1469
1470
1471 dnl
1472 dnl Check for wide character support.  Has the same effect as the option
1473 dnl in gcc's configure, but in a form that autoconf can mess with.
1474 dnl
1475 dnl GLIBCPP_ENABLE_C_MBCHAR
1476 dnl --enable-c-mbchar requests all the wchar_t stuff.
1477 dnl --disable-c-mbchar doesn't.
1478 dnl  +  Usage:  GLIBCPP_ENABLE_C_MBCHAR[(DEFAULT)]
1479 dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
1480 dnl       defaults to `no'.
1481 AC_DEFUN(GLIBCPP_ENABLE_C_MBCHAR, [dnl
1482 define([GLIBCPP_ENABLE_C_MBCHAR_DEFAULT], ifelse($1, yes, yes, no))dnl
1483 AC_ARG_ENABLE(c-mbchar,
1484 changequote(<<, >>)dnl
1485 <<  --enable-c-mbchar       enable multibyte (wide) characters [default=>>GLIBCPP_ENABLE_C_MBCHAR_DEFAULT],
1486 changequote([, ])dnl
1487 [case "$enableval" in
1488  yes) enable_c_mbchar=yes ;;
1489  no)  enable_c_mbchar=no ;;
1490  *)   AC_MSG_ERROR([Unknown argument to enable/disable c-mbchar]) ;;
1491  esac],
1492 enable_c_mbchar=GLIBCPP_ENABLE_C_MBCHAR_DEFAULT)dnl
1493 dnl Option parsed, now other scripts can test enable_c_mbchar for yes/no.
1494 ])
1495
1496
1497 dnl
1498 dnl Set up *_INCLUDES and *_INCLUDE_DIR variables for all sundry Makefile.am's.
1499 dnl
1500 dnl TOPLEVEL_INCLUDES
1501 dnl LIBMATH_INCLUDES
1502 dnl LIBSUPCXX_INCLUDES
1503 dnl LIBIO_INCLUDES
1504 dnl CSHADOW_INCLUDES
1505 dnl
1506 dnl GLIBCPP_EXPORT_INCLUDES
1507 AC_DEFUN(GLIBCPP_EXPORT_INCLUDES, [
1508   # Root level of the build directory include sources.
1509   GLIBCPP_INCLUDES="-I${glibcpp_builddir}/include/${target_alias} -I${glibcpp_builddir}/include"
1510
1511   # Passed down for canadian crosses.
1512   if test x"$CANADIAN" = xyes; then
1513     TOPLEVEL_INCLUDES='-I$(includedir)'
1514   fi
1515
1516   LIBMATH_INCLUDES='-I$(top_srcdir)/libmath'
1517
1518   LIBSUPCXX_INCLUDES='-I$(top_srcdir)/libsupc++'
1519
1520   if test x"$need_libio" = xyes; then
1521     LIBIO_INCLUDES='-I$(top_builddir)/libio -I$(top_srcdir)/libio'
1522     AC_SUBST(LIBIO_INCLUDES)
1523   fi
1524
1525   # Now, export this to all the little Makefiles....
1526   AC_SUBST(GLIBCPP_INCLUDES)
1527   AC_SUBST(TOPLEVEL_INCLUDES)
1528   AC_SUBST(LIBMATH_INCLUDES)
1529   AC_SUBST(LIBSUPCXX_INCLUDES)
1530 ])
1531
1532
1533 dnl
1534 dnl Set up *_FLAGS and *FLAGS variables for all sundry Makefile.am's.
1535 dnl
1536 AC_DEFUN(GLIBCPP_EXPORT_FLAGS, [
1537   # Optimization flags that are probably a good idea for thrill-seekers. Just
1538   # uncomment the lines below and make, everything else is ready to go... 
1539   # OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc 
1540   OPTIMIZE_CXXFLAGS=
1541   AC_SUBST(OPTIMIZE_CXXFLAGS)
1542
1543   WARN_FLAGS='-Wall -Wno-format -W -Wwrite-strings -Winline'
1544   AC_SUBST(WARN_FLAGS)
1545 ])
1546
1547 dnl
1548 dnl  GLIBCPP_EXPORT_INSTALL_INFO
1549 dnl  calculates gxx_install_dir
1550 dnl  exports glibcpp_toolexecdir
1551 dnl  exports glibcpp_toolexeclibdir
1552 dnl  exports glibcpp_builddir
1553 dnl  exports glibcpp_srcdir
1554 dnl  exports glibcpp_prefixdir
1555 dnl
1556 dnl Assumes cross_compiling bits already done, and with_cross_host in
1557 dnl particular
1558 dnl
1559 dnl GLIBCPP_EXPORT_INSTALL_INFO
1560 AC_DEFUN(GLIBCPP_EXPORT_INSTALL_INFO, [
1561
1562 glibcpp_toolexecdir=no
1563 glibcpp_toolexeclibdir=no
1564
1565 # Export build and source directories.
1566 # These need to be absolute paths, yet at the same time need to
1567 # canonicalize only relative paths, because then amd will not unmount
1568 # drives. Thus the use of PWDCMD: set it to 'pawd' or 'amq -w' if using amd.
1569 glibcpp_builddir=`pwd`
1570 case $srcdir in
1571 [\\/$]* | ?:[\\/]*) glibcpp_srcdir=${srcdir} ;;
1572 *) glibcpp_srcdir=`cd "$srcdir" && ${PWDCMD-pwd} || echo "$srcdir"` ;;
1573 esac
1574 glibcpp_prefixdir=${prefix}
1575
1576 AC_MSG_CHECKING([for interface version number])
1577 libstdcxx_interface=$INTERFACE
1578 AC_MSG_RESULT($libstdcxx_interface)
1579
1580 # Process the option --with-gxx-include-dir=<path to include-files directory>
1581 AC_MSG_CHECKING([for --with-gxx-include-dir])
1582 AC_ARG_WITH(gxx-include-dir,
1583 [  --with-gxx-include-dir  the installation directory for include files],
1584 [case "${withval}" in
1585   yes)
1586     AC_MSG_ERROR(Missing directory for --with-gxx-include-dir)
1587     gxx_include_dir=no
1588     ;;
1589   no)
1590     gxx_include_dir=no
1591     ;;
1592   *)
1593     gxx_include_dir=${withval}
1594     ;;
1595 esac], [gxx_include_dir=no])
1596 AC_MSG_RESULT($gxx_include_dir)
1597
1598 # Process the option "--enable-version-specific-runtime-libs"
1599 AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
1600 AC_ARG_ENABLE(version-specific-runtime-libs,
1601 [  --enable-version-specific-runtime-libs    Specify that runtime libraries should be installed in a compiler-specific directory ],
1602 [  version_specific_libs=yes
1603 # Need the gcc compiler version to know where to install libraries
1604 # and header files if --enable-version-specific-runtime-libs option
1605 # is selected.
1606 changequote(,)dnl
1607 gcc_version_trigger=${srcdir}/../gcc/version.c
1608 gcc_version_full=`grep version_string ${gcc_version_trigger} | sed -e 's/.*\"\([^\"]*\)\".*/\1/'`
1609 gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'`
1610 gxx_include_dir='$(libdir)/gcc-lib/$(target_alias)/'${gcc_version}/include/g++
1611 glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
1612 glibcpp_toolexeclibdir='$(toolexecdir)/'${gcc_version}'$(MULTISUBDIR)'
1613 changequote([,])dnl
1614 ],version_specific_libs=no)
1615 AC_MSG_RESULT($version_specific_libs)
1616
1617 # Default case for install directory for include files.
1618 if test x"$version_specific_libs" = x"no" \
1619    && test x"$gxx_include_dir" = x"no"; then
1620   gxx_include_dir='$(prefix)'/include/g++-${libstdcxx_interface}
1621 fi
1622
1623 # Calculate glibcpp_toolexecdir, glibcpp_toolexeclibdir
1624 # Install a library built with a cross compiler in tooldir, not libdir.
1625 if test x"$glibcpp_toolexecdir" = x"no"; then 
1626   if test -n "$with_cross_host" &&
1627      test x"$with_cross_host" != x"no"; then
1628     glibcpp_toolexecdir='$(exec_prefix)/$(target_alias)'
1629     glibcpp_toolexeclibdir='$(toolexecdir)/lib$(MULTISUBDIR)'
1630   else
1631     glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
1632     glibcpp_toolexeclibdir='$(libdir)$(MULTISUBDIR)'
1633   fi
1634 fi
1635
1636 AC_MSG_CHECKING([for install location])
1637 AC_MSG_RESULT($gxx_include_dir)
1638
1639 AC_SUBST(glibcpp_builddir)
1640 AC_SUBST(glibcpp_srcdir)
1641 AC_SUBST(glibcpp_prefixdir)
1642 AC_SUBST(gxx_include_dir)
1643 AC_SUBST(glibcpp_toolexecdir)
1644 AC_SUBST(glibcpp_toolexeclibdir)
1645 ])
1646
1647
1648 # Check whether LC_MESSAGES is available in <locale.h>.
1649 # Ulrich Drepper <drepper@cygnus.com>, 1995.
1650 #
1651 # This file file be copied and used freely without restrictions.  It can
1652 # be used in projects which are not available under the GNU Public License
1653 # but which still want to provide support for the GNU gettext functionality.
1654 # Please note that the actual code is *not* freely available.
1655
1656 # serial 1
1657
1658 AC_DEFUN(AC_LC_MESSAGES, [
1659   AC_CHECK_HEADER(locale.h, [
1660     AC_CACHE_CHECK([for LC_MESSAGES], ac_cv_val_LC_MESSAGES,
1661       [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
1662        ac_cv_val_LC_MESSAGES=yes, ac_cv_val_LC_MESSAGES=no)])
1663     if test $ac_cv_val_LC_MESSAGES = yes; then
1664       AC_DEFINE(HAVE_LC_MESSAGES)
1665     fi
1666   ])
1667 ])
1668
1669
1670 # Check for functions in math library.
1671 # Ulrich Drepper <drepper@cygnus.com>, 1998.
1672 #
1673 # This file can be copied and used freely without restrictions.  It can
1674 # be used in projects which are not available under the GNU Public License
1675 # but which still want to provide support for the GNU gettext functionality.
1676 # Please note that the actual code is *not* freely available.
1677
1678 # serial 1
1679
1680 dnl AC_REPLACE_MATHFUNCS(FUNCTION...)
1681 AC_DEFUN(AC_REPLACE_MATHFUNCS,
1682 [AC_CHECK_FUNCS([$1], , [LIBMATHOBJS="$LIBMATHOBJS ${ac_func}.lo"])
1683 AC_SUBST(LIBMATHOBJS)dnl
1684 ])
1685
1686
1687 # Check for string functions.
1688 # Ulrich Drepper <drepper@cygnus.com>, 1998.
1689 #
1690 # This file can be copied and used freely without restrictions.  It can
1691 # be used in projects which are not available under the GNU Public License
1692 # but which still want to provide support for the GNU gettext functionality.
1693 # Please note that the actual code is *not* freely available.
1694
1695 # serial 1
1696
1697 dnl AC_REPLACE_STRINGFUNCS(FUNCTION...)
1698 AC_DEFUN(AC_REPLACE_STRINGFUNCS,
1699 [AC_CHECK_FUNCS([$1], , [LIBSTRINGOBJS="$LIBSTRINGOBJS ${ac_func}.lo"])
1700 AC_SUBST(LIBSTRINGOBJS)dnl
1701 ])
1702
1703
1704 dnl This macro searches for a GNU version of make.  If a match is found, the
1705 dnl makefile variable `ifGNUmake' is set to the empty string, otherwise it is
1706 dnl set to "#". This is useful for  including a special features in a Makefile,
1707 dnl which cannot be handled by other versions of make.  The variable
1708 dnl _cv_gnu_make_command is set to the command to invoke GNU make if it exists,
1709 dnl the empty string otherwise.
1710 dnl
1711 dnl Here is an example of its use:
1712 dnl
1713 dnl Makefile.in might contain:
1714 dnl
1715 dnl     # A failsafe way of putting a dependency rule into a makefile
1716 dnl     $(DEPEND):
1717 dnl             $(CC) -MM $(srcdir)/*.c > $(DEPEND)
1718 dnl
1719 dnl     @ifGNUmake@ ifeq ($(DEPEND),$(wildcard $(DEPEND)))
1720 dnl     @ifGNUmake@ include $(DEPEND)
1721 dnl     @ifGNUmake@ endif
1722 dnl
1723 dnl Then configure.in would normally contain:
1724 dnl
1725 dnl     CHECK_GNU_MAKE()
1726 dnl     AC_OUTPUT(Makefile)
1727 dnl
1728 dnl Then perhaps to cause gnu make to override any other make, we could do
1729 dnl something like this (note that GNU make always looks for GNUmakefile first):
1730 dnl
1731 dnl     if  ! test x$_cv_gnu_make_command = x ; then
1732 dnl             mv Makefile GNUmakefile
1733 dnl             echo .DEFAULT: > Makefile ;
1734 dnl             echo \  $_cv_gnu_make_command \$@ >> Makefile;
1735 dnl     fi
1736 dnl
1737 dnl Then, if any (well almost any) other make is called, and GNU make also
1738 dnl exists, then the other make wraps the GNU make.
1739 dnl
1740 dnl @author John Darrington <j.darrington@elvis.murdoch.edu.au>
1741 dnl @version 1.1 #### replaced Id string now that Id is for lib-v3; pme
1742 dnl
1743 dnl #### Changes for libstdc++-v3:  reformatting and linewrapping; prepending
1744 dnl #### GLIBCPP_ to the macro name; adding the :-make fallback in the
1745 dnl #### conditional's subshell (" --version" is not a command), using a
1746 dnl #### different option to grep(1).
1747 dnl #### -pme
1748 dnl #### Fixed Bourne shell portability bug (use ${MAKE-make}, not
1749 dnl #### ${MAKE:-make}).
1750 dnl #### -msokolov
1751 AC_DEFUN(
1752   GLIBCPP_CHECK_GNU_MAKE, [AC_CACHE_CHECK( for GNU make,_cv_gnu_make_command,
1753           _cv_gnu_make_command='' ;
1754 dnl Search all the common names for GNU make
1755           for a in "${MAKE-make}" make gmake gnumake ; do
1756                   if ( $a --version 2> /dev/null | grep -c GNU > /dev/null )
1757                   then
1758                           _cv_gnu_make_command=$a ;
1759                           break;
1760                   fi
1761           done ;
1762   ) ;
1763 dnl If there was a GNU version, then set @ifGNUmake@ to the empty
1764 dnl string, '#' otherwise
1765   if test  "x$_cv_gnu_make_command" != "x"  ; then
1766           ifGNUmake='' ;
1767   else
1768           ifGNUmake='#' ;
1769   fi
1770   AC_SUBST(ifGNUmake)
1771 ])
1772
1773 sinclude(../libtool.m4)
1774 dnl The lines below arrange for aclocal not to bring an installed
1775 dnl libtool.m4 into aclocal.m4, while still arranging for automake to
1776 dnl add a definition of LIBTOOL to Makefile.in.
1777 ifelse(,,,[AC_SUBST(LIBTOOL)
1778 AC_DEFUN([AM_PROG_LIBTOOL])
1779 AC_DEFUN([AC_LIBTOOL_DLOPEN])
1780 AC_DEFUN([AC_PROG_LD])
1781 ])
1782
1783
1784
1785 # Do all the work for Automake.  This macro actually does too much --
1786 # some checks are only needed if your package does certain things.
1787 # But this isn't really a big deal.
1788
1789 # serial 1
1790
1791 dnl Usage:
1792 dnl AM_INIT_AUTOMAKE(package,version, [no-define])
1793
1794 AC_DEFUN(AM_INIT_AUTOMAKE,
1795 [AC_REQUIRE([AC_PROG_INSTALL])
1796 PACKAGE=[$1]
1797 AC_SUBST(PACKAGE)
1798 VERSION=[$2]
1799 AC_SUBST(VERSION)
1800 dnl test to see if srcdir already configured
1801 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
1802   AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
1803 fi
1804 ifelse([$3],,
1805 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
1806 AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
1807 AC_REQUIRE([AM_SANITY_CHECK])
1808 AC_REQUIRE([AC_ARG_PROGRAM])
1809 dnl FIXME This is truly gross.
1810 missing_dir=`cd $ac_aux_dir && pwd`
1811 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
1812 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
1813 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
1814 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
1815 AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
1816 AC_REQUIRE([AC_PROG_MAKE_SET])])
1817
1818 #
1819 # Check to make sure that the build environment is sane.
1820 #
1821
1822 AC_DEFUN(AM_SANITY_CHECK,
1823 [AC_MSG_CHECKING([whether build environment is sane])
1824 # Just in case
1825 sleep 1
1826 echo timestamp > conftestfile
1827 # Do `set' in a subshell so we don't clobber the current shell's
1828 # arguments.  Must try -L first in case configure is actually a
1829 # symlink; some systems play weird games with the mod time of symlinks
1830 # (eg FreeBSD returns the mod time of the symlink's containing
1831 # directory).
1832 if (
1833    set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
1834    if test "[$]*" = "X"; then
1835       # -L didn't work.
1836       set X `ls -t $srcdir/configure conftestfile`
1837    fi
1838    if test "[$]*" != "X $srcdir/configure conftestfile" \
1839       && test "[$]*" != "X conftestfile $srcdir/configure"; then
1840
1841       # If neither matched, then we have a broken ls.  This can happen
1842       # if, for instance, CONFIG_SHELL is bash and it inherits a
1843       # broken ls alias from the environment.  This has actually
1844       # happened.  Such a system could not be considered "sane".
1845       AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
1846 alias in your environment])
1847    fi
1848
1849    test "[$]2" = conftestfile
1850    )
1851 then
1852    # Ok.
1853    :
1854 else
1855    AC_MSG_ERROR([newly created file is older than distributed files!
1856 Check your system clock])
1857 fi
1858 rm -f conftest*
1859 AC_MSG_RESULT(yes)])
1860
1861 dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
1862 dnl The program must properly implement --version.
1863 AC_DEFUN(AM_MISSING_PROG,
1864 [AC_MSG_CHECKING(for working $2)
1865 # Run test in a subshell; some versions of sh will print an error if
1866 # an executable is not found, even if stderr is redirected.
1867 # Redirect stdin to placate older versions of autoconf.  Sigh.
1868 if ($2 --version) < /dev/null > /dev/null 2>&1; then
1869    $1=$2
1870    AC_MSG_RESULT(found)
1871 else
1872    $1="$3/missing $2"
1873    AC_MSG_RESULT(missing)
1874 fi
1875 AC_SUBST($1)])
1876
1877 # Add --enable-maintainer-mode option to configure.
1878 # From Jim Meyering
1879
1880 # serial 1
1881
1882 AC_DEFUN(AM_MAINTAINER_MODE,
1883 [AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
1884   dnl maintainer-mode is disabled by default
1885   AC_ARG_ENABLE(maintainer-mode,
1886 [  --enable-maintainer-mode enable make rules and dependencies not useful
1887                           (and sometimes confusing) to the casual installer],
1888       USE_MAINTAINER_MODE=$enableval,
1889       USE_MAINTAINER_MODE=no)
1890   AC_MSG_RESULT($USE_MAINTAINER_MODE)
1891   AM_CONDITIONAL(MAINTAINER_MODE, test $USE_MAINTAINER_MODE = yes)
1892   MAINT=$MAINTAINER_MODE_TRUE
1893   AC_SUBST(MAINT)dnl
1894 ]
1895 )
1896
1897 # Define a conditional.
1898
1899 AC_DEFUN(AM_CONDITIONAL,
1900 [AC_SUBST($1_TRUE)
1901 AC_SUBST($1_FALSE)
1902 if $2; then
1903   $1_TRUE=
1904   $1_FALSE='#'
1905 else
1906   $1_TRUE='#'
1907   $1_FALSE=
1908 fi])
1909
1910 # Like AC_CONFIG_HEADER, but automatically create stamp file.
1911
1912 AC_DEFUN(AM_CONFIG_HEADER,
1913 [AC_PREREQ([2.12])
1914 AC_CONFIG_HEADER([$1])
1915 dnl When config.status generates a header, we must update the stamp-h file.
1916 dnl This file resides in the same directory as the config header
1917 dnl that is generated.  We must strip everything past the first ":",
1918 dnl and everything past the last "/".
1919 AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
1920 ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
1921 <<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
1922 <<am_indx=1
1923 for am_file in <<$1>>; do
1924   case " <<$>>CONFIG_HEADERS " in
1925   *" <<$>>am_file "*<<)>>
1926     echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
1927     ;;
1928   esac
1929   am_indx=`expr "<<$>>am_indx" + 1`
1930 done<<>>dnl>>)
1931 changequote([,]))])
1932