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