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