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