OSDN Git Service

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