]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/acinclude.m4
* cppinit.c (cpp_finish): Pop the final buffer without comment.
[thirdparty/gcc.git] / libstdc++-v3 / acinclude.m4
CommitLineData
b9e8095b 1dnl
2dnl Initialize configure bits.
3dnl
b9e8095b 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
c3f3e891 15 glibcpp_basedir=$srcdir/$toprel/$1/libstdc++-v3
b9e8095b 16 AC_SUBST(glibcpp_basedir)
17
4042369a 18 AM_INIT_AUTOMAKE(libstdc++, 3.0.0)
b9e8095b 19
f04d76b5 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]))])
f1f1b9ae 26
27# AC_PROG_CC
28
b9e8095b 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
f1f1b9ae 71# Can't just call these here as g++ requires libstc++ to be built....
72# AC_PROG_CXX
73
b9e8095b 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])
c45e0e39 79# Use glibcpp_CXX so that we do not cause CXX to be cached with the
c2302820 80# flags that come in CXX while configuring libstdc++. They're different
33254cff 81# from those used for all other target libraries. If CXX is set in
82# the environment, respect that here.
c45e0e39 83glibcpp_CXX=$CXX
84AC_CHECK_PROGS(glibcpp_CXX, $CCC c++ g++ gcc CC cxx cc++, gcc)
85AC_SUBST(glibcpp_CXX)
a106f8d6 86CXX=$glibcpp_CXX
c45e0e39 87test -z "$glibcpp_CXX" && AC_MSG_ERROR([no acceptable c++ found in \$PATH])
b9e8095b 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
f1f1b9ae 115 AC_CHECK_TOOL(AS, as)
116 AC_CHECK_TOOL(AR, ar)
c45e0e39 117 AC_CHECK_TOOL(RANLIB, ranlib, ranlib-not-found-in-path-error)
f1f1b9ae 118 AC_PROG_INSTALL
b9e8095b 119
f1f1b9ae 120 AM_MAINTAINER_MODE
b9e8095b 121
f1f1b9ae 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
0a40c6ad 128 # the result.
f1f1b9ae 129 if false; then
cc4069a9 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 :
f1f1b9ae 134 AC_EXEEXT
135 fi
b9e8095b 136
f1f1b9ae 137 . [$]{glibcpp_basedir}/configure.host
138
139 case [$]{glibcpp_basedir} in
557a32f1 140 /* | [A-Za-z]:[\\/]*) libgcj_flagbasedir=[$]{glibcpp_basedir} ;;
f1f1b9ae 141 *) glibcpp_flagbasedir='[$](top_builddir)/'[$]{glibcpp_basedir} ;;
142 esac
b9e8095b 143
1d71fbac 144 # This does for the target what configure.host does for the host. In
5886ba5e 145 # addition to possibly modifying the same flags, it also sets up symlinks.
1d71fbac 146 GLIBCPP_CHECK_TARGET
b9e8095b 147])
148
149
150dnl
9c6a106c 151dnl Check to see if g++ can compile this library, and if so, if any version-
c21bc234 152dnl specific precautions need to be taken.
153dnl
154dnl GLIBCPP_CHECK_COMPILER_VERSION
155AC_DEFUN(GLIBCPP_CHECK_COMPILER_VERSION, [
95925f2c 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
c2f3d0d8 160 AC_TRY_COMPILE(, [
161 #if __GNUC__ < 3
162 not_ok
c21bc234 163 #endif
90d10a87 164 ], gpp_satisfactory=yes, AC_MSG_ERROR([please upgrade to GCC 3.0 or above]))
95925f2c 165 AC_LANG_RESTORE
c21bc234 166 AC_MSG_RESULT($gpp_satisfactory)
95925f2c 167 touch stamp-sanity-compiler
168fi
c21bc234 169])
170
171
172dnl
457683de 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.
b9e8095b 176dnl
211ecbdf 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.
b9e8095b 180dnl
c21bc234 181dnl Define SECTION_FLAGS='-ffunction-sections -fdata-sections' if
b9386e63 182dnl compiler supports it and the user has not requested debug mode.
183dnl
c21bc234 184dnl GLIBCPP_CHECK_COMPILER_FEATURES
185AC_DEFUN(GLIBCPP_CHECK_COMPILER_FEATURES, [
c51c23c3 186 # All these tests are for C++; save the language and the compiler flags.
457683de 187 # The CXXFLAGS thing is suspicious, but based on similar bits previously
c51c23c3 188 # found in GLIBCPP_CONFIGURE.
189 AC_LANG_SAVE
190 AC_LANG_CPLUSPLUS
191 ac_test_CXXFLAGS="${CXXFLAGS+set}"
192 ac_save_CXXFLAGS="$CXXFLAGS"
c51c23c3 193
211ecbdf 194 # Check for maintainer-mode bits.
195 if test x"$USE_MAINTAINER_MODE" = xno; then
196 WERROR=''
9c6a106c 197 else
211ecbdf 198 WERROR='-Werror'
9c6a106c 199 fi
200
c21bc234 201 # Check for -ffunction-sections -fdata-sections
202 AC_MSG_CHECKING([for g++ that supports -ffunction-sections -fdata-sections])
8e34227a 203 CXXFLAGS='-Werror -ffunction-sections -fdata-sections'
c21bc234 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
2475beac 212 if test x"$ac_fdsections" = x"yes" &&
213 test x"$enable_debug" = x"no"; then
c21bc234 214 SECTION_FLAGS='-ffunction-sections -fdata-sections'
215 fi
216 AC_MSG_RESULT($ac_fdsections)
217
c51c23c3 218 AC_LANG_RESTORE
9c6a106c 219 AC_SUBST(WERROR)
c21bc234 220 AC_SUBST(SECTION_FLAGS)
b9e8095b 221])
222
c21bc234 223
224dnl
06f58ac6 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.
c21bc234 231dnl
c21bc234 232dnl GLIBCPP_CHECK_LINKER_FEATURES
233AC_DEFUN(GLIBCPP_CHECK_LINKER_FEATURES, [
06f58ac6 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...
985550e9 237 SECTION_LDFLAGS=''
238 OPT_LDFLAGS=''
06f58ac6 239 AC_REQUIRE([AC_PROG_LD])
445cdc9a 240
241 # Set --gc-sections.
dd76f7b5 242 if test "$ac_cv_prog_gnu_ld" = "notbroken"; then
985550e9 243 # GNU ld it is! Joy and bunny rabbits!
06f58ac6 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"
445cdc9a 249 CFLAGS='-x c++ -Wl,--gc-sections'
06f58ac6 250
251 # Check for -Wl,--gc-sections
71dbcf67 252 # XXX This test is broken at the moment, as symbols required for
253 # linking are now in libsupc++ (not built yet.....). In addition,
985550e9 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.
06f58ac6 258 AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
259 AC_TRY_RUN([
260 int main(void)
261 {
985550e9 262 try { throw 1; }
263 catch (...) { };
06f58ac6 264 return 0;
265 }
71dbcf67 266 ], [ac_sectionLDflags=yes],[ac_sectionLFflags=no], [ac_sectionLDflags=yes])
06f58ac6 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
445cdc9a 274 SECTION_LDFLAGS='-Wl,--gc-sections'
06f58ac6 275 fi
276 AC_MSG_RESULT($ac_sectionLDflags)
445cdc9a 277 fi
985550e9 278
445cdc9a 279 # Set linker optimization flags.
2475beac 280 if test x"$ac_cv_prog_gnu_ld" = x"yes" &&
281 test x"$enable_debug" = x"no"; then
06f58ac6 282 OPT_LDFLAGS='-Wl,-O1'
06f58ac6 283 fi
445cdc9a 284
c21bc234 285 AC_SUBST(SECTION_LDFLAGS)
06f58ac6 286 AC_SUBST(OPT_LDFLAGS)
c21bc234 287])
288
289
b9e8095b 290dnl
04081d71 291dnl Check to see if the (math function) argument passed is
a54b7bcc 292dnl declared when using the c++ compiler
7fdffd07 293dnl ASSUMES argument is a math function with ONE parameter
294dnl
a54b7bcc 295dnl GLIBCPP_CHECK_MATH_DECL_1
296AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_1, [
7fdffd07 297 AC_MSG_CHECKING([for $1 declaration])
41127527 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
d6f87729 302 AC_TRY_COMPILE([#include <math.h>
303 #ifdef HAVE_IEEEFP_H
304 #include <ieeefp.h>
305 #endif
306 ],
41127527 307 [ $1(0);],
308 [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
309 AC_LANG_RESTORE
310 ])
311 fi
06f58ac6 312 AC_MSG_RESULT($glibcpp_cv_func_$1_use)
a54b7bcc 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)
06f58ac6 330 if test x$glibcpp_cv_func_$1_use = x"yes"; then
7fdffd07 331 AC_CHECK_FUNCS($1)
a54b7bcc 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)
2475beac 336 fi
7fdffd07 337 fi
338])
339
a54b7bcc 340
af3ed51d 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
93a3ddb7 344dnl HAVE_XYZ is defined for each of the functions, or for none of them.
af3ed51d 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` ],
93a3ddb7 353 [glibcpp_cv_func_$2_use=yes],
354 [glibcpp_cv_func_$2_use=no])
af3ed51d 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])
7fdffd07 361
362dnl
04081d71 363dnl Check to see if the (math function) argument passed is
a54b7bcc 364dnl declared when using the c++ compiler
457683de 365dnl ASSUMES argument is a math function with TWO parameters
7fdffd07 366dnl
a54b7bcc 367dnl GLIBCPP_CHECK_MATH_DECL_2
368AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_2, [
7fdffd07 369 AC_MSG_CHECKING([for $1 declaration])
41127527 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
06f58ac6 380 AC_MSG_RESULT($glibcpp_cv_func_$1_use)
7fdffd07 381])
382
7fdffd07 383dnl
04081d71 384dnl Check to see if the (math function) argument passed is
7fdffd07 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
a54b7bcc 392dnl ASSUMES argument is a math function with TWO parameters
7fdffd07 393dnl
a54b7bcc 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)
2475beac 403 fi
a54b7bcc 404 fi
405])
406
407
408dnl
409dnl Check to see if the (math function) argument passed is
410dnl declared when using the c++ compiler
457683de 411dnl ASSUMES argument is a math function with THREE parameters
a54b7bcc 412dnl
413dnl GLIBCPP_CHECK_MATH_DECL_3
414AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_3, [
7fdffd07 415 AC_MSG_CHECKING([for $1 declaration])
41127527 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
06f58ac6 426 AC_MSG_RESULT($glibcpp_cv_func_$1_use)
a54b7bcc 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)
06f58ac6 443 if test x$glibcpp_cv_func_$1_use = x"yes"; then
7fdffd07 444 AC_CHECK_FUNCS($1)
a54b7bcc 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)
2475beac 449 fi
7fdffd07 450 fi
451])
452
453
445cdc9a 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
445cdc9a 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])
41127527 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
445cdc9a 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
04081d71 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, [
04081d71 498 AC_MSG_CHECKING([for $1 declaration])
41127527 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
06f58ac6 509 AC_MSG_RESULT($glibcpp_cv_func_$1_use)
510 if test x$glibcpp_cv_func_$1_use = x"yes"; then
04081d71 511 AC_MSG_CHECKING([for $1 linkage])
41127527 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
06f58ac6 519 AC_MSG_RESULT($glibcpp_cv_func_$1_link)
520 if test x$glibcpp_cv_func_$1_link = x"yes"; then
04081d71 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
445cdc9a 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
08078d47 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
445cdc9a 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
445cdc9a 611 GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtold)
08078d47 612 AC_CHECK_FUNCS(drand48)
445cdc9a 613
614 CXXFLAGS="$ac_save_CXXFLAGS"
615])
616
617
b170b427 618dnl
619dnl Check to see what the underlying c library or math library is like.
7fdffd07 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...
b170b427 624dnl
625dnl Define HAVE_CARGF etc if "cargf" is found.
626dnl
627dnl GLIBCPP_CHECK_MATH_SUPPORT
628AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
7fdffd07 629 ac_test_CXXFLAGS="${CXXFLAGS+set}"
630 ac_save_CXXFLAGS="$CXXFLAGS"
76e6433d 631 CXXFLAGS='-fno-builtins -D_GNU_SOURCE'
ef4c833e 632
633 dnl Check libm
b170b427 634 AC_CHECK_LIB(m, sin, libm="-lm")
7fdffd07 635 ac_save_LIBS="$LIBS"
b170b427 636 LIBS="$LIBS $libm"
637
7fdffd07 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)
1e59e631 646 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(hypot)
7fdffd07 647
648 dnl Check to see if basic C math functions have float versions.
af3ed51d 649 GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(float trig,
93a3ddb7 650 float_trig,
651 acosf asinf atanf \
af3ed51d 652 cosf sinf tanf \
93a3ddb7 653 coshf sinhf tanhf)
af3ed51d 654 GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(float round,
93a3ddb7 655 float_round,
af3ed51d 656 ceilf floorf)
7fdffd07 657 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnanf)
658 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinff)
1e59e631 659 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(atan2f)
7fdffd07 660 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fabsf)
7fdffd07 661 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(fmodf)
662 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(frexpf)
1e59e631 663 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(hypotf)
7fdffd07 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)
7fdffd07 669 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtf)
7fdffd07 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.
af3ed51d 674 GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(long double trig,
93a3ddb7 675 long_double_trig,
676 acosl asinl atanl \
af3ed51d 677 cosl sinl tanl \
93a3ddb7 678 coshl sinhl tanhl)
af3ed51d 679 GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(long double round,
93a3ddb7 680 long_double_round,
af3ed51d 681 ceill floorl)
7fdffd07 682 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnanl)
683 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinfl)
04081d71 684 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(copysignl)
7fdffd07 685 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(atan2l)
7fdffd07 686 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(expl)
687 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fabsl)
7fdffd07 688 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(fmodl)
689 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(frexpl)
1e59e631 690 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(hypotl)
7fdffd07 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)
7fdffd07 696 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtl)
7fdffd07 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.
7fdffd07 704
705 dnl Check to see if basic C math functions have float versions.
af3ed51d 706 GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(_float trig,
93a3ddb7 707 _float_trig,
708 _acosf _asinf _atanf \
af3ed51d 709 _cosf _sinf _tanf \
93a3ddb7 710 _coshf _sinhf _tanhf)
af3ed51d 711 GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(_float round,
93a3ddb7 712 _float_round,
af3ed51d 713 _ceilf _floorf)
7fdffd07 714
715 dnl Check to see if basic C math functions have long double versions.
af3ed51d 716 GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(_long double trig,
93a3ddb7 717 _long_double_trig,
718 _acosl _asinl _atanl \
af3ed51d 719 _cosl _sinl _tanl \
93a3ddb7 720 _coshl _sinhl _tanhl)
af3ed51d 721 GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(_long double round,
93a3ddb7 722 _long_double_round,
af3ed51d 723 _ceill _floorl)
7fdffd07 724
725 LIBS="$ac_save_LIBS"
726 CXXFLAGS="$ac_save_CXXFLAGS"
b170b427 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
1e59e631 735dnl Define USE_COMPLEX_LONG_DOUBLE etc if "copysignl" is found.
b170b427 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.
5922e5b5 740 AC_CHECK_LIB(m, main)
1e59e631 741 AC_REPLACE_MATHFUNCS(nan copysignf)
04081d71 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.
1e59e631 745 dnl Currently this includes copysignl, which should be
04081d71 746 dnl cached from the GLIBCPP_CHECK_MATH_SUPPORT macro, above.
747 USE_COMPLEX_LONG_DOUBLE=no
1e59e631 748 if test x$ac_cv_func_copysignl = x"yes"; then
04081d71 749 USE_COMPLEX_LONG_DOUBLE=yes
1e59e631 750 AC_REPLACE_MATHFUNCS(signbitl)
04081d71 751 fi
752
b170b427 753 AC_SUBST(USE_COMPLEX_LONG_DOUBLE)
754])
755
67271580 756
1d71fbac 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.
d481da82 760dnl
1d71fbac 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)
d481da82 766])
767
768
b9e8095b 769dnl
770dnl Check to see if this target can enable the wchar_t parts of libstdc++.
1580b14b 771dnl If --disable-c-mbchar was given, no wchar_t stuff is enabled. (This
772dnl must have been previously checked.)
b9e8095b 773dnl
0a40c6ad 774dnl Define _GLIBCPP_USE_WCHAR_T if all the bits are found
3d1a09b9 775dnl Define HAVE_MBSTATE_T if mbstate_t is not in wchar.h
b9e8095b 776dnl
777dnl GLIBCPP_CHECK_WCHAR_T_SUPPORT
778AC_DEFUN(GLIBCPP_CHECK_WCHAR_T_SUPPORT, [
3d1a09b9 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)
0a40c6ad 794
3d1a09b9 795 dnl Only continue checking if the ISO C99 headers exist and support is on.
2475beac 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
3d1a09b9 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)
1580b14b 807
3d1a09b9 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)
1580b14b 817
3d1a09b9 818 dnl Tests for wide character functions used in char_traits<wchar_t>.
710560e9 819 ac_wfuncs=yes
820 AC_CHECK_FUNCS(wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset,, \
821 ac_wfuncs=no)
1580b14b 822
710560e9 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)
6bb18279 831
3d1a09b9 832 AC_MSG_CHECKING([for ISO C99 wchar_t support])
2475beac 833 if test x"$has_weof" = xyes &&
834 test x"$has_wchar_minmax" = xyes &&
835 test x"$ac_wfuncs" = xyes; then
3d1a09b9 836 ac_isoC99_wchar_t=yes
837 else
838 ac_isoC99_wchar_t=no
839 fi
840 AC_MSG_RESULT($ac_isoC99_wchar_t)
1580b14b 841
3d1a09b9 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)
1580b14b 854
3d1a09b9 855 LIBS="$ac_save_LIBS"
2407da46 856
3d1a09b9 857 AC_MSG_CHECKING([for XPG2 wchar_t support])
2475beac 858 if test x"$ac_has_iconv_h" = xyes &&
859 test x"$ac_has_langinfo_h" = xyes &&
860 test x"$ac_XPG2funcs" = xyes; then
3d1a09b9 861 ac_XPG2_wchar_t=yes
862 else
863 ac_XPG2_wchar_t=no
864 fi
865 AC_MSG_RESULT($ac_XPG2_wchar_t)
0a40c6ad 866
3d1a09b9 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])
2475beac 870 if test x"$ac_isoC99_wchar_t" = xyes &&
871 test x"$ac_XPG2_wchar_t" = xyes; then
3d1a09b9 872 AC_DEFINE(_GLIBCPP_USE_WCHAR_T)
873 AC_MSG_RESULT("yes")
0a40c6ad 874 else
3d1a09b9 875 AC_MSG_RESULT("no")
0a40c6ad 876 fi
0a40c6ad 877 else
3d1a09b9 878 dnl Wide characters disabled by the user.
879 AC_MSG_WARN([wchar_t support disabled.])
b9e8095b 880 fi
b9e8095b 881])
882
883
b9e8095b 884dnl
9c6a106c 885dnl Check for special debugging mode; not for production use.
b9e8095b 886dnl
887dnl GLIBCPP_ENABLE_DEBUG
85e50d7b 888dnl --enable-debug sets '-ggdb3 -O0'.
b9e8095b 889dnl --disable-debug sets '-g' and whatever optimization options the
890dnl compiler can handle.
211ecbdf 891dnl + --enable-maintainer-mode automatically defaults this to on.
b9e8095b 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
f1f1b9ae 902[case "${enableval}" in
b9e8095b 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
f1f1b9ae 908
b9e8095b 909dnl Option parsed, now set things appropriately
f1f1b9ae 910case "${enable_debug}" in
3efdb152 911 yes)
85e50d7b 912 DEBUG_FLAGS='-O0 -ggdb3'
74996138 913 ;;
82a73681 914 no)
1580b14b 915 DEBUG_FLAGS='-g'
82a73681 916 ;;
b9e8095b 917esac
c21bc234 918AC_SUBST(DEBUG_FLAGS)
b9e8095b 919])
920
921
401f263f 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.
7524d23a 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
401f263f 934dnl + Usage: GLIBCPP_ENABLE_CXX_FLAGS(default flags)
acad6b7e 935dnl If "default flags" is an empty string (or "none"), the effect is
936dnl the same as --disable or --enable=no.
401f263f 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
f1f1b9ae 945 xyes)
1580b14b 946 AC_MSG_ERROR([--enable-cxx-flags needs compiler flags as arguments]) ;;
f1f1b9ae 947 xno|x)
1580b14b 948 enable_cxx_flags='' ;;
f1f1b9ae 949 *)
1580b14b 950 enable_cxx_flags="$enableval" ;;
401f263f 951 esac],
f1f1b9ae 952enable_cxx_flags='GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT')
953
acad6b7e 954dnl Thinko on my part during design. This kludge is the workaround.
f1f1b9ae 955if test "$enable_cxx_flags" = "none"; then
956 enable_cxx_flags='';
957fi
958
acad6b7e 959dnl Run through flags (either default or command-line) and set anything
960dnl extra (e.g., #defines) that must accompany particular g++ options.
401f263f 961if test -n "$enable_cxx_flags"; then
962 for f in $enable_cxx_flags; do
963 case "$f" in
67b61273 964 -fhonor-std) ;;
401f263f 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
20752884 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,
780eeb66 988 [ --enable-clocale enable model for target locale package.
989 --enable-clocale=MODEL use MODEL target-speific locale package. [default=generic]
20752884 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
db42028b 1016 AC_SUBST(CLOCALE_H)
20752884 1017 AC_LINK_FILES($CLOCALE_CC, src/c++locale.cc)
1018])
1019
1020
b9e8095b 1021dnl
9c6a106c 1022dnl Check for which I/O library to use: libio, or something specific.
b9e8095b 1023dnl
1024dnl GLIBCPP_ENABLE_CSTDIO
1025dnl --enable-cstdio=libio sets config/c_io_libio.h and friends
1026dnl
e86566c3 1027dnl default is stdio
b9e8095b 1028dnl
1029AC_DEFUN(GLIBCPP_ENABLE_CSTDIO, [
1030 AC_MSG_CHECKING([for cstdio to use])
1031 AC_ARG_ENABLE(cstdio,
780eeb66 1032 [ --enable-cstdio enable stdio for target io package.
1033 --enable-cstdio=LIB use LIB target-speific io package. [default=stdio]
16f434af 1034 ],
b9e8095b 1035 if test x$enable_cstdio = xno; then
e86566c3 1036 enable_cstdio=stdio
b9e8095b 1037 fi,
e86566c3 1038 enable_cstdio=stdio)
b9e8095b 1039
1040 enable_cstdio_flag=$enable_cstdio
1041
1580b14b 1042 dnl Check if a valid I/O package
b9e8095b 1043 case x${enable_cstdio_flag} in
7fdc2989 1044 xlibio)
27f70a82 1045 CSTDIO_H=config/c_io_libio.h
49bf30f4 1046 BASIC_FILE_H=config/basic_file_libio.h
1047 BASIC_FILE_CC=config/basic_file_libio.cc
27f70a82 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*)
1580b14b 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 ;;
27f70a82 1068 esac
1069
1580b14b 1070 # XXX at the moment, admit defeat and force the recompilation
4e0a0803 1071 # XXX of glibc even on glibc-2.2 systems, because libio is not synched.
1580b14b 1072 glibc_satisfactory=no
1073
1074 if test x$glibc_satisfactory = x"yes"; then
1075 need_libio=no
1580b14b 1076 need_wlibio=no
1077 else
1078 need_libio=yes
1580b14b 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
27f70a82 1087
27f70a82 1088 else
445cdc9a 1089 # Using libio, but <libio.h> doesn't exist on the target system. . .
1580b14b 1090 need_libio=yes
1580b14b 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
27f70a82 1098 fi
1099 ;;
7fdc2989 1100 xstdio | x | xno | xnone | xyes)
1101 # default
e7ccf4bf 1102 CSTDIO_H=config/c_io_stdio.h
49bf30f4 1103 BASIC_FILE_H=config/basic_file_stdio.h
1104 BASIC_FILE_CC=config/basic_file_stdio.cc
e7ccf4bf 1105 AC_MSG_RESULT(stdio)
27f70a82 1106
7fdc2989 1107 # We're not using stdio.
27f70a82 1108 need_libio=no
7fdc2989 1109 need_wlibio=no
27f70a82 1110 ;;
1111 *)
1112 echo "$enable_cstdio is an unknown io package" 1>&2
1113 exit 1
1114 ;;
b9e8095b 1115 esac
db42028b 1116 AC_SUBST(CSTDIO_H)
1117 AC_SUBST(BASIC_FILE_H)
49bf30f4 1118 AC_LINK_FILES($BASIC_FILE_CC, src/basic_file.cc)
1ce522f2 1119
1120 # 2000-08-04 bkoz hack
1121 CCODECVT_C=config/c_io_libio_codecvt.c
db42028b 1122 AC_SUBST(CCODECVT_C)
1ce522f2 1123 # 2000-08-04 bkoz hack
1580b14b 1124
02bed483 1125 AM_CONDITIONAL(GLIBCPP_BUILD_LIBIO,
1126 test "$need_libio" = yes || test "$need_wlibio" = yes)
b9e8095b 1127 AM_CONDITIONAL(GLIBCPP_NEED_LIBIO, test "$need_libio" = yes)
12692474 1128 AM_CONDITIONAL(GLIBCPP_NEED_WLIBIO, test "$need_wlibio" = yes)
b9f81c86 1129 if test "$need_libio" = yes || test "$need_wlibio" = yes; then
97d40bd4 1130 libio_la=../libio/libio.la
b9f81c86 1131 else
97d40bd4 1132 libio_la=
b9f81c86 1133 fi
1134 AC_SUBST(libio_la)
b9e8095b 1135])
1136
1137
1138dnl
6e77e323 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
5ece00cf 1147dnl namespace are complex and fragile enough as it is). We must also
1148dnl add a relative path so that -I- is supported properly.
b9e8095b 1149dnl
1150AC_DEFUN(GLIBCPP_ENABLE_THREADS, [
746ba840 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])
b9e8095b 1154
6e77e323 1155 if test $target_thread_file != single; then
1156 AC_DEFINE(HAVE_GTHR_DEFAULT)
1157 AC_DEFINE(_GLIBCPP_SUPPORTS_WEAK, __GXX_WEAK__)
1580b14b 1158 fi
db42028b 1159
1160 glibcpp_thread_h=gthr-$target_thread_file.h
1161 AC_SUBST(glibcpp_thread_h)
b9e8095b 1162])
1163
1164
df4b504c 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,
2475beac 1213 [Define if the compiler is configured for setjmp/longjmp exceptions.])
df4b504c 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
08078d47 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
a31c6285 1239
08078d47 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
a31c6285 1253
08078d47 1254 # Check for the existence of <math.h> functions used if C99 is enabled.
031d710d 1255 ac_c99_math=yes;
c587e7d5 1256 AC_MSG_CHECKING([for ISO C99 support in <math.h>])
08078d47 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])
a106f8d6 1263 AC_TRY_COMPILE([#include <math.h>],[isgreater(0.0,0.0);],, [ac_c99_math=no])
1264 AC_TRY_COMPILE([#include <math.h>],
031d710d 1265 [isgreaterequal(0.0,0.0);],, [ac_c99_math=no])
a106f8d6 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>],
031d710d 1269 [islessgreater(0.0,0.0);],, [ac_c99_math=no])
a106f8d6 1270 AC_TRY_COMPILE([#include <math.h>],
031d710d 1271 [isunordered(0.0,0.0);],, [ac_c99_math=no])
031d710d 1272 AC_MSG_RESULT($ac_c99_math)
08078d47 1273
c872177c 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);}],
2475beac 1284 [],, [ac_c99_stdio=no])
c872177c 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
08078d47 1305 # Check for the existence in <stdlib.h> of lldiv_t, et. al.
031d710d 1306 ac_c99_stdlib=yes;
dd76f7b5 1307 AC_MSG_CHECKING([for lldiv_t declaration])
08078d47 1308 AC_CACHE_VAL(ac_c99_lldiv_t, [
1309 AC_TRY_COMPILE([#include <stdlib.h>],
dd76f7b5 1310 [ lldiv_t mydivt;],
08078d47 1311 [ac_c99_lldiv_t=yes], [ac_c99_lldiv_t=no])
dd76f7b5 1312 ])
08078d47 1313 AC_MSG_RESULT($ac_c99_lldiv_t)
c587e7d5 1314
1315 AC_MSG_CHECKING([for ISO C99 support in <stdlib.h>])
c872177c 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])
c587e7d5 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])
c872177c 1327 AC_TRY_COMPILE([#include <stdlib.h>], [_Exit(0);],, [ac_c99_stdlib=no])
08078d47 1328 if test x"$ac_c99_lldiv_t" = x"no"; then
1329 ac_c99_stdlib=no;
1330 fi;
031d710d 1331 AC_MSG_RESULT($ac_c99_stdlib)
08078d47 1332
1333 # Check for the existence of <wchar.h> functions used if C99 is enabled.
710560e9 1334 # XXX the wchar.h checks should be rolled into the general C99 bits.
031d710d 1335 ac_c99_wchar=yes;
710560e9 1336 AC_MSG_CHECKING([for additional ISO C99 support in <wchar.h>])
031d710d 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])
031d710d 1343 AC_MSG_RESULT($ac_c99_wchar)
dd76f7b5 1344
08078d47 1345 AC_MSG_CHECKING([for enabled ISO C99 support])
2475beac 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
08078d47 1350 enable_c99=no;
ed8078fc 1351 fi;
08078d47 1352 AC_MSG_RESULT($enable_c99)
ed8078fc 1353
dd76f7b5 1354 # Option parsed, now set things appropriately
08078d47 1355 if test x"$enable_c99" = x"yes"; then
1356 AC_DEFINE(_GLIBCPP_USE_C99)
978d7884 1357 fi
97d40bd4 1358
08078d47 1359 AC_LANG_RESTORE
b9e8095b 1360])
1361
1362
6b6f8d4d 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
0e97825d 1406dnl
7fb56759 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,
0e97825d 1420changequote(<<, >>)dnl
780eeb66 1421<< --enable-cheaders construct "C" header files for g++ [default=>>GLIBCPP_ENABLE_CHEADERS_DEFAULT],
f1f1b9ae 1422changequote([, ])
1423 [case "$enableval" in
7fb56759 1424 c)
93a3ddb7 1425 enable_cheaders=c
1580b14b 1426 ;;
7fb56759 1427 c_std)
93a3ddb7 1428 enable_cheaders=c_std
1580b14b 1429 ;;
7fb56759 1430 c_shadow)
93a3ddb7 1431 enable_cheaders=c_shadow
7fb56759 1432 ;;
1433 *) AC_MSG_ERROR([Unknown argument to enable/disable "C" headers])
1580b14b 1434 ;;
f1f1b9ae 1435 esac],
7fb56759 1436 enable_cheaders=GLIBCPP_ENABLE_CHEADERS_DEFAULT)
1437 AC_MSG_RESULT($enable_cheaders)
f1f1b9ae 1438
1439 dnl Option parsed, now set things appropriately
7fb56759 1440 case "$enable_cheaders" in
1441 c_shadow)
1580b14b 1442 CSHADOW_FLAGS="-fno-builtin"
5d2e3b0f 1443 C_INCLUDE_DIR='${glibcpp_srcdir}/include/c_shadow'
8e34227a 1444 AC_DEFINE(_GLIBCPP_USE_SHADOW_HEADERS)
1580b14b 1445 ;;
7fb56759 1446 c_std)
1447 CSHADOW_FLAGS=""
5d2e3b0f 1448 C_INCLUDE_DIR='${glibcpp_srcdir}/include/c_std'
7fb56759 1449 ;;
1450 c)
1580b14b 1451 CSHADOW_FLAGS=""
5d2e3b0f 1452 C_INCLUDE_DIR='${glibcpp_srcdir}/include/c'
0e97825d 1453 ;;
f1f1b9ae 1454 esac
b6fba881 1455
71dbcf67 1456 AC_SUBST(CSHADOW_FLAGS)
1457 AC_SUBST(C_INCLUDE_DIR)
7fb56759 1458 AM_CONDITIONAL(GLIBCPP_USE_CSHADOW, test "$enable_cheaders" = c_shadow)
0e97825d 1459])
b9e8095b 1460
1580b14b 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
71dbcf67 1488dnl
1489dnl Set up *_INCLUDES and *_INCLUDE_DIR variables for all sundry Makefile.am's.
1490dnl
71dbcf67 1491dnl TOPLEVEL_INCLUDES
1492dnl LIBMATH_INCLUDES
1493dnl LIBSUPCXX_INCLUDES
1494dnl LIBIO_INCLUDES
1495dnl CSHADOW_INCLUDES
1496dnl
db42028b 1497dnl GLIBCPP_EXPORT_INCLUDES
71dbcf67 1498AC_DEFUN(GLIBCPP_EXPORT_INCLUDES, [
db42028b 1499 # Root level of the build directory include sources.
1500 GLIBCPP_INCLUDES="-I${glibcpp_builddir}/include/${target_alias} -I${glibcpp_builddir}/include"
71dbcf67 1501
b45d00ae 1502 # Passed down for canadian crosses.
db42028b 1503 if test x"$CANADIAN" = xyes; then
b45d00ae 1504 TOPLEVEL_INCLUDES='-I$(includedir)'
1505 fi
71dbcf67 1506
1507 LIBMATH_INCLUDES='-I$(top_srcdir)/libmath'
1508
1509 LIBSUPCXX_INCLUDES='-I$(top_srcdir)/libsupc++'
1510
db42028b 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
71dbcf67 1515
1516 # Now, export this to all the little Makefiles....
db42028b 1517 AC_SUBST(GLIBCPP_INCLUDES)
71dbcf67 1518 AC_SUBST(TOPLEVEL_INCLUDES)
1519 AC_SUBST(LIBMATH_INCLUDES)
1520 AC_SUBST(LIBSUPCXX_INCLUDES)
71dbcf67 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
6ff3baa3 1538dnl
e3bb8f1a 1539dnl GLIBCPP_EXPORT_INSTALL_INFO
1540dnl calculates gxx_install_dir
6ff3baa3 1541dnl exports glibcpp_toolexecdir
1542dnl exports glibcpp_toolexeclibdir
780eeb66 1543dnl exports glibcpp_builddir
1544dnl exports glibcpp_srcdir
1545dnl exports glibcpp_prefixdir
6ff3baa3 1546dnl
1547dnl Assumes cross_compiling bits already done, and with_cross_host in
1548dnl particular
e3bb8f1a 1549dnl
6ff3baa3 1550dnl GLIBCPP_EXPORT_INSTALL_INFO
e3bb8f1a 1551AC_DEFUN(GLIBCPP_EXPORT_INSTALL_INFO, [
1552
6ff3baa3 1553glibcpp_toolexecdir=no
1554glibcpp_toolexeclibdir=no
1555
5ffc3b87 1556# Export build and source directories.
031d710d 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.
addac27d 1560glibcpp_builddir=`pwd`
031d710d 1561case $srcdir in
1562[\\/$]* | ?:[\\/]*) glibcpp_srcdir=${srcdir} ;;
1563*) glibcpp_srcdir=`cd "$srcdir" && ${PWDCMD-pwd} || echo "$srcdir"` ;;
1564esac
1565glibcpp_prefixdir=${prefix}
5ffc3b87 1566
e3bb8f1a 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,
780eeb66 1574[ --with-gxx-include-dir the installation directory for include files],
e3bb8f1a 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
6ff3baa3 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)'
de3b2568 1603glibcpp_toolexeclibdir='$(toolexecdir)/'${gcc_version}'$(MULTISUBDIR)'
e3bb8f1a 1604changequote([,])dnl
e3bb8f1a 1605],version_specific_libs=no)
1606AC_MSG_RESULT($version_specific_libs)
1607
6ff3baa3 1608# Default case for install directory for include files.
e3bb8f1a 1609if test x"$version_specific_libs" = x"no" \
6ace2bc6 1610 && test x"$gxx_include_dir" = x"no"; then
6ff3baa3 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
2475beac 1617 if test -n "$with_cross_host" &&
1618 test x"$with_cross_host" != x"no"; then
6ff3baa3 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
e3bb8f1a 1625fi
6ff3baa3 1626
1627AC_MSG_CHECKING([for install location])
e3bb8f1a 1628AC_MSG_RESULT($gxx_include_dir)
6ff3baa3 1629
5ffc3b87 1630AC_SUBST(glibcpp_builddir)
1631AC_SUBST(glibcpp_srcdir)
1632AC_SUBST(glibcpp_prefixdir)
e3bb8f1a 1633AC_SUBST(gxx_include_dir)
6ff3baa3 1634AC_SUBST(glibcpp_toolexecdir)
1635AC_SUBST(glibcpp_toolexeclibdir)
e3bb8f1a 1636])
1637
1638
67630a35 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
bb792608 1649AC_DEFUN(AC_LC_MESSAGES, [
1650 AC_CHECK_HEADER(locale.h, [
67630a35 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
bb792608 1657 ])
1658])
67630a35 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])
9de4d810 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
3e36ed98 1697dnl set to "#". This is useful for including a special features in a Makefile,
9de4d810 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>
06f58ac6 1732dnl @version 1.1 #### replaced Id string now that Id is for lib-v3; pme
9de4d810 1733dnl
1734dnl #### Changes for libstdc++-v3: reformatting and linewrapping; prepending
1735dnl #### GLIBCPP_ to the macro name; adding the :-make fallback in the
563ec2b7 1736dnl #### conditional's subshell (" --version" is not a command), using a
1737dnl #### different option to grep(1).
9de4d810 1738dnl #### -pme
ca1093bc 1739dnl #### Fixed Bourne shell portability bug (use ${MAKE-make}, not
1740dnl #### ${MAKE:-make}).
1741dnl #### -msokolov
9de4d810 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
ca1093bc 1746 for a in "${MAKE-make}" make gmake gnumake ; do
feb36525 1747 if ( $a --version 2> /dev/null | grep -c GNU > /dev/null )
563ec2b7 1748 then
9de4d810 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])
c9825695 1763
0194306c 1764
1765dnl Check for headers for, and arguments to, the setrlimit() function.
1766dnl Used only in testsuite_hooks.h.
1767AC_DEFUN(GLIBCPP_CHECK_SETRLIMIT_ancilliary, [
1768 AC_TRY_COMPILE([#include <sys/resource.h>
1769 #include <unistd.h>
1770 ], [ int f = RLIMIT_$1 ; ],
1771 [glibcpp_mresult=1], [glibcpp_mresult=0])
1772 AC_DEFINE_UNQUOTED(HAVE_MEMLIMIT_$1, $glibcpp_mresult,
1773 [Only used in build directory testsuite_hooks.h.])
1774])
1775AC_DEFUN(GLIBCPP_CHECK_SETRLIMIT, [
1776 setrlimit_have_needed_headers=yes
1777 AC_CHECK_HEADERS(sys/resource.h unistd.h,
1778 [],
1779 setrlimit_have_needed_headers=no)
1780 # If don't have the headers, then we can't run the tests now, and we
1781 # won't be seeing any of these during testsuite compilation.
1782 if test $setrlimit_have_needed_headers = yes; then
1783 # Can't do these in a loop, else the resulting syntax is wrong.
1784 GLIBCPP_CHECK_SETRLIMIT_ancilliary(DATA)
1785 GLIBCPP_CHECK_SETRLIMIT_ancilliary(RSS)
1786 GLIBCPP_CHECK_SETRLIMIT_ancilliary(VMEM)
1787 GLIBCPP_CHECK_SETRLIMIT_ancilliary(AS)
1788 fi
1789])
1790
1791
1792dnl
1793dnl Does any necessary configuration of the testsuite directory. Generates
1794dnl the testsuite_hooks.h header.
1795dnl
1796dnl GLIBCPP_CONFIGURE_TESTSUITE [no args]
1797AC_DEFUN(GLIBCPP_CONFIGURE_TESTSUITE, [
1798 GLIBCPP_CHECK_SETRLIMIT
1799])
1800
1801
c9825695 1802sinclude(../libtool.m4)
1803dnl The lines below arrange for aclocal not to bring an installed
1804dnl libtool.m4 into aclocal.m4, while still arranging for automake to
1805dnl add a definition of LIBTOOL to Makefile.in.
1806ifelse(,,,[AC_SUBST(LIBTOOL)
1807AC_DEFUN([AM_PROG_LIBTOOL])
1808AC_DEFUN([AC_LIBTOOL_DLOPEN])
1809AC_DEFUN([AC_PROG_LD])
211ecbdf 1810])
0eab5934 1811
08078d47 1812