]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/acinclude.m4
c-typeck.c (lookup_field): If -fplan9-extensions, permit referring to a field using...
[thirdparty/gcc.git] / libstdc++-v3 / acinclude.m4
CommitLineData
ff66d28f 1
92eabea2
PE
2dnl
3dnl GLIBCXX_CONDITIONAL (NAME, SHELL-TEST)
4dnl
5dnl Exactly like AM_CONDITIONAL, but delays evaluation of the test until the
6dnl end of configure. This lets tested variables be reassigned, and the
7dnl conditional will depend on the final state of the variable. For a simple
8dnl example of why this is needed, see GLIBCXX_ENABLE_HOSTED.
9dnl
10m4_define([_m4_divert(glibcxx_diversion)], 8000)dnl
f214923c 11AC_DEFUN([GLIBCXX_CONDITIONAL], [dnl
92eabea2
PE
12 m4_divert_text([glibcxx_diversion],dnl
13 AM_CONDITIONAL([$1],[$2])
14 )dnl
15])dnl
f214923c 16AC_DEFUN([GLIBCXX_EVALUATE_CONDITIONALS], [m4_undivert([glibcxx_diversion])])dnl
92eabea2
PE
17
18
ff66d28f
PE
19dnl
20dnl Check to see what architecture and operating system we are compiling
21dnl for. Also, if architecture- or OS-specific flags are required for
22dnl compilation, pick them up here.
23dnl
f214923c 24AC_DEFUN([GLIBCXX_CHECK_HOST], [
ff66d28f 25 . $glibcxx_srcdir/configure.host
f214923c
BK
26 AC_MSG_NOTICE([CPU config directory is $cpu_include_dir])
27 AC_MSG_NOTICE([OS config directory is $os_include_dir])
ff66d28f
PE
28])
29
ff66d28f
PE
30dnl
31dnl Initialize the rest of the library configury. At this point we have
32dnl variables like $host.
aebb8c22 33dnl
ff66d28f 34dnl Sets:
82ba99d5 35dnl SUBDIRS
ff66d28f
PE
36dnl Substs:
37dnl glibcxx_builddir (absolute path)
38dnl glibcxx_srcdir (absolute path)
39dnl toplevel_srcdir (absolute path)
40dnl with_cross_host
41dnl with_newlib
42dnl with_target_subdir
43dnl plus
44dnl - the variables in GLIBCXX_CHECK_HOST / configure.host
45dnl - default settings for all AM_CONFITIONAL test variables
46dnl - lots of tools, like CC and CXX
aebb8c22 47dnl
f214923c 48AC_DEFUN([GLIBCXX_CONFIGURE], [
82ba99d5
PE
49 # Keep these sync'd with the list in Makefile.am. The first provides an
50 # expandable list at autoconf time; the second provides an expandable list
51 # (i.e., shell variable) at configure time.
41850419 52 m4_define([glibcxx_SUBDIRS],[include libsupc++ python src doc po testsuite])
82ba99d5
PE
53 SUBDIRS='glibcxx_SUBDIRS'
54
d2caef2e
PE
55 # These need to be absolute paths, yet at the same time need to
56 # canonicalize only relative paths, because then amd will not unmount
57 # drives. Thus the use of PWDCMD: set it to 'pawd' or 'amq -w' if using amd.
3d7c150e 58 glibcxx_builddir=`${PWDCMD-pwd}`
d2caef2e 59 case $srcdir in
ff66d28f
PE
60 [\\/$]* | ?:[\\/]*) glibcxx_srcdir=${srcdir} ;;
61 *) glibcxx_srcdir=`cd "$srcdir" && ${PWDCMD-pwd} || echo "$srcdir"` ;;
d2caef2e 62 esac
ff66d28f 63 toplevel_srcdir=${glibcxx_srcdir}/..
3d7c150e
BK
64 AC_SUBST(glibcxx_builddir)
65 AC_SUBST(glibcxx_srcdir)
ff66d28f 66 AC_SUBST(toplevel_srcdir)
d2caef2e 67
ff66d28f
PE
68 # We use these options to decide which functions to include. They are
69 # set from the top level.
70 AC_ARG_WITH([target-subdir],
71 AC_HELP_STRING([--with-target-subdir=SUBDIR],
72 [configuring in a subdirectory]))
73
74 AC_ARG_WITH([cross-host],
75 AC_HELP_STRING([--with-cross-host=HOST],
76 [configuring with a cross compiler]))
77
78 AC_ARG_WITH([newlib],
79 AC_HELP_STRING([--with-newlib],
80 [assume newlib as a system C library]))
81
ff66d28f
PE
82 # Will set LN_S to either 'ln -s', 'ln', or 'cp -p' (if linking isn't
83 # available). Uncomment the next line to force a particular method.
84 AC_PROG_LN_S
85 #LN_S='cp -p'
86
5780a46b
BK
87 AC_CHECK_TOOL(AS, as)
88 AC_CHECK_TOOL(AR, ar)
46840bcd 89 AC_CHECK_TOOL(RANLIB, ranlib, ranlib-not-found-in-path-error)
b2dad0e3 90
5780a46b 91 AM_MAINTAINER_MODE
b2dad0e3 92
92eabea2
PE
93 # Set up safe default values for all subsequent AM_CONDITIONAL tests
94 # which are themselves conditionally expanded.
95 ## (Right now, this only matters for enable_wchar_t, but nothing prevents
96 ## other macros from doing the same. This should be automated.) -pme
16da539b 97
aa6a73b9 98 # Check for C library flavor since Linux platforms use different configuration
464aea98
JM
99 # directories depending on the C library in use.
100 AC_EGREP_CPP([_using_uclibc], [
101 #include <stdio.h>
102 #if __UCLIBC__
103 _using_uclibc
104 #endif
105 ], uclibc=yes, uclibc=no)
106
aa6a73b9
MK
107 AC_EGREP_CPP([_using_bionic], [
108 #include <stdio.h>
109 #if __BIONIC__
110 _using_bionic
111 #endif
112 ], bionic=yes, bionic=no)
113
ff66d28f
PE
114 # Find platform-specific directories containing configuration info.
115 # Also possibly modify flags used elsewhere, as needed by the platform.
3d7c150e 116 GLIBCXX_CHECK_HOST
b2dad0e3
BK
117])
118
119
c470c17d 120dnl
52b55e7d
PE
121dnl Tests for newer compiler features, or features that are present in newer
122dnl compiler versions but not older compiler versions still in use, should
123dnl be placed here.
b2dad0e3 124dnl
ff66d28f
PE
125dnl Defines:
126dnl WERROR='-Werror' if requested and possible; g++'s that lack the
127dnl new inlining code or the new system_header pragma will die on -Werror.
128dnl Leave it out by default and use maint-mode to use it.
129dnl SECTION_FLAGS='-ffunction-sections -fdata-sections' if
130dnl compiler supports it and the user has not requested debug mode.
c21b6f87 131dnl
f214923c 132AC_DEFUN([GLIBCXX_CHECK_COMPILER_FEATURES], [
a4e99046 133 # All these tests are for C++; save the language and the compiler flags.
52b55e7d 134 # The CXXFLAGS thing is suspicious, but based on similar bits previously
3d7c150e 135 # found in GLIBCXX_CONFIGURE.
a4e99046
PE
136 AC_LANG_SAVE
137 AC_LANG_CPLUSPLUS
138 ac_test_CXXFLAGS="${CXXFLAGS+set}"
139 ac_save_CXXFLAGS="$CXXFLAGS"
a4e99046 140
7f586614
BK
141 # Check for maintainer-mode bits.
142 if test x"$USE_MAINTAINER_MODE" = xno; then
143 WERROR=''
8bd636c5 144 else
7f586614 145 WERROR='-Werror'
8bd636c5
PE
146 fi
147
c470c17d
BK
148 # Check for -ffunction-sections -fdata-sections
149 AC_MSG_CHECKING([for g++ that supports -ffunction-sections -fdata-sections])
85ee35ca
BK
150 CXXFLAGS='-g -Werror -ffunction-sections -fdata-sections'
151 AC_TRY_COMPILE([int foo; void bar() { };],, [ac_fdsections=yes], [ac_fdsections=no])
c470c17d
BK
152 if test "$ac_test_CXXFLAGS" = set; then
153 CXXFLAGS="$ac_save_CXXFLAGS"
154 else
155 # this is the suspicious part
156 CXXFLAGS=''
157 fi
6aa43d99 158 if test x"$ac_fdsections" = x"yes"; then
c470c17d
BK
159 SECTION_FLAGS='-ffunction-sections -fdata-sections'
160 fi
161 AC_MSG_RESULT($ac_fdsections)
162
a4e99046 163 AC_LANG_RESTORE
8bd636c5 164 AC_SUBST(WERROR)
c470c17d 165 AC_SUBST(SECTION_FLAGS)
b2dad0e3
BK
166])
167
c470c17d
BK
168
169dnl
421173e6
PE
170dnl If GNU ld is in use, check to see if tricky linker opts can be used. If
171dnl the native linker is in use, all variables will be defined to something
172dnl safe (like an empty string).
173dnl
ff66d28f
PE
174dnl Defines:
175dnl SECTION_LDFLAGS='-Wl,--gc-sections' if possible
a429affe 176dnl OPT_LDFLAGS='-Wl,-O1' and '-z,relro' if possible
ff66d28f
PE
177dnl LD (as a side effect of testing)
178dnl Sets:
179dnl with_gnu_ld
d60a2d4d 180dnl glibcxx_ld_is_gold (set to "no" or "yes")
ff66d28f
PE
181dnl glibcxx_gnu_ld_version (possibly)
182dnl
183dnl The last will be a single integer, e.g., version 1.23.45.0.67.89 will
184dnl set glibcxx_gnu_ld_version to 12345. Zeros cause problems.
c470c17d 185dnl
f214923c 186AC_DEFUN([GLIBCXX_CHECK_LINKER_FEATURES], [
421173e6
PE
187 # If we're not using GNU ld, then there's no point in even trying these
188 # tests. Check for that first. We should have already tested for gld
189 # by now (in libtool), but require it now just to be safe...
654421eb
DE
190 test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS=''
191 test -z "$OPT_LDFLAGS" && OPT_LDFLAGS=''
421173e6 192 AC_REQUIRE([AC_PROG_LD])
ff66d28f 193 AC_REQUIRE([AC_PROG_AWK])
5bd17d39 194
c98b201b
PE
195 # The name set by libtool depends on the version of libtool. Shame on us
196 # for depending on an impl detail, but c'est la vie. Older versions used
197 # ac_cv_prog_gnu_ld, but now it's lt_cv_prog_gnu_ld, and is copied back on
198 # top of with_gnu_ld (which is also set by --with-gnu-ld, so that actually
199 # makes sense). We'll test with_gnu_ld everywhere else, so if that isn't
200 # set (hence we're using an older libtool), then set it.
201 if test x${with_gnu_ld+set} != xset; then
202 if test x${ac_cv_prog_gnu_ld+set} != xset; then
203 # We got through "ac_require(ac_prog_ld)" and still not set? Huh?
204 with_gnu_ld=no
205 else
206 with_gnu_ld=$ac_cv_prog_gnu_ld
207 fi
208 fi
209
210 # Start by getting the version number. I think the libtool test already
211 # does some of this, but throws away the result.
d60a2d4d 212 glibcxx_ld_is_gold=no
e2c104d8
BK
213 if test x"$with_gnu_ld" = x"yes"; then
214 AC_MSG_CHECKING([for ld version])
215 changequote(,)
d60a2d4d
ILT
216 if $LD --version 2>/dev/null | grep 'GNU gold' >/dev/null 2>&1; then
217 glibcxx_ld_is_gold=yes
218 fi
c82852f7 219 ldver=`$LD --version 2>/dev/null |
89c74f4a 220 sed -e 's/GNU gold /GNU ld /;s/GNU ld version /GNU ld /;s/GNU ld ([^)]*) /GNU ld /;s/GNU ld \([0-9.][0-9.]*\).*/\1/; q'`
e2c104d8
BK
221 changequote([,])
222 glibcxx_gnu_ld_version=`echo $ldver | \
223 $AWK -F. '{ if (NF<3) [$]3=0; print ([$]1*100+[$]2)*100+[$]3 }'`
224 AC_MSG_RESULT($glibcxx_gnu_ld_version)
225 fi
c98b201b 226
5bd17d39 227 # Set --gc-sections.
d60a2d4d
ILT
228 glibcxx_have_gc_sections=no
229 if test "$glibcxx_ld_is_gold" = "yes"; then
230 if $LD --help 2>/dev/null | grep gc-sections >/dev/null 2>&1; then
231 glibcxx_have_gc_sections=yes
232 fi
233 else
234 glibcxx_gcsections_min_ld=21602
235 if test x"$with_gnu_ld" = x"yes" &&
ac2b2479 236 test $glibcxx_gnu_ld_version -gt $glibcxx_gcsections_min_ld ; then
d60a2d4d
ILT
237 glibcxx_have_gc_sections=yes
238 fi
239 fi
240 if test "$glibcxx_have_gc_sections" = "yes"; then
ac2b2479
BK
241 # Sufficiently young GNU ld it is! Joy and bunny rabbits!
242 # NB: This flag only works reliably after 2.16.1. Configure tests
243 # for this are difficult, so hard wire a value that should work.
421173e6 244
421173e6
PE
245 ac_test_CFLAGS="${CFLAGS+set}"
246 ac_save_CFLAGS="$CFLAGS"
2a0ab51c 247 CFLAGS='-Wl,--gc-sections'
421173e6
PE
248
249 # Check for -Wl,--gc-sections
250 AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
acb6e9be
BK
251 AC_TRY_LINK([ int one(void) { return 1; }
252 int two(void) { return 2; }
253 ], [ two(); ] , [ac_gcsections=yes], [ac_gcsections=no])
360e8759
L
254 if test "$ac_gcsections" = "yes"; then
255 rm -f conftest.c
256 touch conftest.c
257 if $CC -c conftest.c; then
258 if $LD --gc-sections -o conftest conftest.o 2>&1 | \
259 grep "Warning: gc-sections option ignored" > /dev/null; then
260 ac_gcsections=no
261 fi
262 fi
263 rm -f conftest.c conftest.o conftest
264 fi
acb6e9be
BK
265 if test "$ac_gcsections" = "yes"; then
266 SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
267 fi
268 AC_MSG_RESULT($ac_gcsections)
269
421173e6
PE
270 if test "$ac_test_CFLAGS" = set; then
271 CFLAGS="$ac_save_CFLAGS"
272 else
273 # this is the suspicious part
274 CFLAGS=''
275 fi
5bd17d39 276 fi
a9117427 277
a429affe 278 # Set -z,relro.
952c7b74 279 # Note this is only for shared objects.
a429affe
BK
280 ac_ld_relro=no
281 if test x"$with_gnu_ld" = x"yes"; then
282 AC_MSG_CHECKING([for ld that supports -Wl,-z,relro])
283 cxx_z_relo=`$LD -v --help 2>/dev/null | grep "z relro"`
284 if test -n "$cxx_z_relo"; then
285 OPT_LDFLAGS="-Wl,-z,relro"
286 ac_ld_relro=yes
287 fi
288 AC_MSG_RESULT($ac_ld_relro)
289 fi
290
5bd17d39 291 # Set linker optimization flags.
6aa43d99 292 if test x"$with_gnu_ld" = x"yes"; then
654421eb 293 OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
421173e6 294 fi
5bd17d39 295
c470c17d 296 AC_SUBST(SECTION_LDFLAGS)
421173e6 297 AC_SUBST(OPT_LDFLAGS)
c470c17d
BK
298])
299
300
b2dad0e3 301dnl
ff66d28f
PE
302dnl Check for headers for, and arguments to, the setrlimit() function.
303dnl Used only in testsuite_hooks.h. Called from GLIBCXX_CONFIGURE_TESTSUITE.
6aa43d99 304dnl
ff66d28f 305dnl Defines:
2ae6e982
PC
306dnl _GLIBCXX_RES_LIMITS if we can set artificial resource limits
307dnl various HAVE_LIMIT_* for individual limit names
6aa43d99 308dnl
f214923c 309AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT_ancilliary], [
e0103440 310 AC_MSG_CHECKING([for RLIMIT_$1])
ff66d28f
PE
311 AC_TRY_COMPILE(
312 [#include <unistd.h>
313 #include <sys/time.h>
314 #include <sys/resource.h>
315 ],
316 [ int f = RLIMIT_$1 ; ],
317 [glibcxx_mresult=1], [glibcxx_mresult=0])
2ae6e982 318 AC_DEFINE_UNQUOTED(HAVE_LIMIT_$1, $glibcxx_mresult,
ff66d28f 319 [Only used in build directory testsuite_hooks.h.])
e0103440
GK
320 if test $glibcxx_mresult = 1 ; then res=yes ; else res=no ; fi
321 AC_MSG_RESULT($res)
ff66d28f
PE
322])
323
f214923c 324AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT], [
ff66d28f
PE
325 setrlimit_have_headers=yes
326 AC_CHECK_HEADERS(unistd.h sys/time.h sys/resource.h,
327 [],
328 [setrlimit_have_headers=no])
329 # If don't have the headers, then we can't run the tests now, and we
330 # won't be seeing any of these during testsuite compilation.
331 if test $setrlimit_have_headers = yes; then
332 # Can't do these in a loop, else the resulting syntax is wrong.
333 GLIBCXX_CHECK_SETRLIMIT_ancilliary(DATA)
334 GLIBCXX_CHECK_SETRLIMIT_ancilliary(RSS)
335 GLIBCXX_CHECK_SETRLIMIT_ancilliary(VMEM)
336 GLIBCXX_CHECK_SETRLIMIT_ancilliary(AS)
2ae6e982 337 GLIBCXX_CHECK_SETRLIMIT_ancilliary(FSIZE)
ff66d28f
PE
338
339 # Check for rlimit, setrlimit.
6d26724a 340 AC_CACHE_VAL(glibcxx_cv_setrlimit, [
ff66d28f
PE
341 AC_TRY_COMPILE(
342 [#include <unistd.h>
343 #include <sys/time.h>
344 #include <sys/resource.h>
345 ],
346 [struct rlimit r;
347 setrlimit(0, &r);],
6d26724a 348 [glibcxx_cv_setrlimit=yes], [glibcxx_cv_setrlimit=no])
ff66d28f
PE
349 ])
350 fi
351
2ae6e982 352 AC_MSG_CHECKING([for testsuite resource limits support])
6d26724a 353 if test $setrlimit_have_headers = yes && test $glibcxx_cv_setrlimit = yes; then
2ae6e982 354 ac_res_limits=yes
4651e622
KC
355 AC_DEFINE(_GLIBCXX_RES_LIMITS, 1,
356 [Define if using setrlimit to set resource limits during
357 "make check"])
ff66d28f 358 else
2ae6e982 359 ac_res_limits=no
ff66d28f 360 fi
2ae6e982 361 AC_MSG_RESULT($ac_res_limits)
6aa43d99
BK
362])
363
364
6aa43d99 365dnl
ff66d28f
PE
366dnl Check whether S_ISREG (Posix) or S_IFREG is available in <sys/stat.h>.
367dnl Define HAVE_S_ISREG / HAVE_S_IFREG appropriately.
6aa43d99 368dnl
f214923c 369AC_DEFUN([GLIBCXX_CHECK_S_ISREG_OR_S_IFREG], [
74745ec5
PC
370
371 AC_LANG_SAVE
372 AC_LANG_CPLUSPLUS
373 ac_save_CXXFLAGS="$CXXFLAGS"
374 CXXFLAGS="$CXXFLAGS -fno-exceptions"
375
e0103440 376 AC_MSG_CHECKING([for S_ISREG or S_IFREG])
ff66d28f 377 AC_CACHE_VAL(glibcxx_cv_S_ISREG, [
74745ec5 378 GCC_TRY_COMPILE_OR_LINK(
ff66d28f
PE
379 [#include <sys/stat.h>],
380 [struct stat buffer;
381 fstat(0, &buffer);
382 S_ISREG(buffer.st_mode);],
383 [glibcxx_cv_S_ISREG=yes],
384 [glibcxx_cv_S_ISREG=no])
385 ])
386 AC_CACHE_VAL(glibcxx_cv_S_IFREG, [
74745ec5 387 GCC_TRY_COMPILE_OR_LINK(
ff66d28f
PE
388 [#include <sys/stat.h>],
389 [struct stat buffer;
390 fstat(0, &buffer);
391 S_IFREG & buffer.st_mode;],
392 [glibcxx_cv_S_IFREG=yes],
393 [glibcxx_cv_S_IFREG=no])
394 ])
e0103440 395 res=no
ff66d28f 396 if test $glibcxx_cv_S_ISREG = yes; then
4651e622
KC
397 AC_DEFINE(HAVE_S_ISREG, 1,
398 [Define if S_IFREG is available in <sys/stat.h>.])
e0103440 399 res=S_ISREG
ff66d28f 400 elif test $glibcxx_cv_S_IFREG = yes; then
4651e622
KC
401 AC_DEFINE(HAVE_S_IFREG, 1,
402 [Define if S_IFREG is available in <sys/stat.h>.])
e0103440 403 res=S_IFREG
ff66d28f 404 fi
e0103440 405 AC_MSG_RESULT($res)
74745ec5
PC
406
407 CXXFLAGS="$ac_save_CXXFLAGS"
408 AC_LANG_RESTORE
b2dad0e3
BK
409])
410
411
dcfa0bc8 412dnl
ff66d28f 413dnl Check whether poll is available in <poll.h>, and define HAVE_POLL.
dcfa0bc8 414dnl
f214923c 415AC_DEFUN([GLIBCXX_CHECK_POLL], [
74745ec5
PC
416
417 AC_LANG_SAVE
418 AC_LANG_CPLUSPLUS
419 ac_save_CXXFLAGS="$CXXFLAGS"
420 CXXFLAGS="$CXXFLAGS -fno-exceptions"
421
e0103440 422 AC_MSG_CHECKING([for poll])
ff66d28f 423 AC_CACHE_VAL(glibcxx_cv_POLL, [
74745ec5 424 GCC_TRY_COMPILE_OR_LINK(
ff66d28f
PE
425 [#include <poll.h>],
426 [struct pollfd pfd[1];
427 pfd[0].events = POLLIN;
428 poll(pfd, 1, 0);],
429 [glibcxx_cv_POLL=yes],
430 [glibcxx_cv_POLL=no])
431 ])
432 if test $glibcxx_cv_POLL = yes; then
4651e622 433 AC_DEFINE(HAVE_POLL, 1, [Define if poll is available in <poll.h>.])
ff66d28f 434 fi
e0103440 435 AC_MSG_RESULT($glibcxx_cv_POLL)
74745ec5
PC
436
437 CXXFLAGS="$ac_save_CXXFLAGS"
438 AC_LANG_RESTORE
ff66d28f
PE
439])
440
441
442dnl
443dnl Check whether writev is available in <sys/uio.h>, and define HAVE_WRITEV.
444dnl
f214923c 445AC_DEFUN([GLIBCXX_CHECK_WRITEV], [
74745ec5
PC
446
447 AC_LANG_SAVE
448 AC_LANG_CPLUSPLUS
449 ac_save_CXXFLAGS="$CXXFLAGS"
450 CXXFLAGS="$CXXFLAGS -fno-exceptions"
451
e0103440 452 AC_MSG_CHECKING([for writev])
ff66d28f 453 AC_CACHE_VAL(glibcxx_cv_WRITEV, [
74745ec5 454 GCC_TRY_COMPILE_OR_LINK(
ff66d28f
PE
455 [#include <sys/uio.h>],
456 [struct iovec iov[2];
457 writev(0, iov, 0);],
458 [glibcxx_cv_WRITEV=yes],
459 [glibcxx_cv_WRITEV=no])
460 ])
461 if test $glibcxx_cv_WRITEV = yes; then
4651e622 462 AC_DEFINE(HAVE_WRITEV, 1, [Define if writev is available in <sys/uio.h>.])
ff66d28f 463 fi
e0103440 464 AC_MSG_RESULT($glibcxx_cv_WRITEV)
74745ec5
PC
465
466 CXXFLAGS="$ac_save_CXXFLAGS"
467 AC_LANG_RESTORE
ff66d28f
PE
468])
469
470
3d05b345
PC
471dnl
472dnl Check whether int64_t is available in <stdint.h>, and define HAVE_INT64_T.
fc9ab7b4 473dnl Also check whether int64_t is actually a typedef to long or long long.
3d05b345 474dnl
f214923c 475AC_DEFUN([GLIBCXX_CHECK_INT64_T], [
fc9ab7b4
PC
476
477 AC_LANG_SAVE
478 AC_LANG_CPLUSPLUS
479
e0103440 480 AC_MSG_CHECKING([for int64_t])
3d05b345
PC
481 AC_CACHE_VAL(glibcxx_cv_INT64_T, [
482 AC_TRY_COMPILE(
483 [#include <stdint.h>],
484 [int64_t var;],
485 [glibcxx_cv_INT64_T=yes],
486 [glibcxx_cv_INT64_T=no])
487 ])
fc9ab7b4 488
3d05b345 489 if test $glibcxx_cv_INT64_T = yes; then
4651e622 490 AC_DEFINE(HAVE_INT64_T, 1, [Define if int64_t is available in <stdint.h>.])
fc9ab7b4
PC
491 AC_MSG_RESULT($glibcxx_cv_INT64_T)
492
493 AC_MSG_CHECKING([for int64_t as long])
494 AC_CACHE_VAL(glibcxx_cv_int64_t_long, [
495 AC_TRY_COMPILE(
496 [#include <stdint.h>
497 template<typename, typename> struct same { enum { value = -1 }; };
498 template<typename Tp> struct same<Tp, Tp> { enum { value = 1 }; };
499 int array[same<int64_t, long>::value];], [],
500 [glibcxx_cv_int64_t_long=yes], [glibcxx_cv_int64_t_long=no])
501 ])
502
503 if test $glibcxx_cv_int64_t_long = yes; then
504 AC_DEFINE(HAVE_INT64_T_LONG, 1, [Define if int64_t is a long.])
505 AC_MSG_RESULT($glibcxx_cv_int64_t_long)
506 fi
507
508 AC_MSG_CHECKING([for int64_t as long long])
509 AC_CACHE_VAL(glibcxx_cv_int64_t_long_long, [
510 AC_TRY_COMPILE(
511 [#include <stdint.h>
512 template<typename, typename> struct same { enum { value = -1 }; };
513 template<typename Tp> struct same<Tp, Tp> { enum { value = 1 }; };
514 int array[same<int64_t, long long>::value];], [],
515 [glibcxx_cv_int64_t_long_long=yes], [glibcxx_cv_int64_t_long_long=no])
516 ])
517
518 if test $glibcxx_cv_int64_t_long_long = yes; then
519 AC_DEFINE(HAVE_INT64_T_LONG_LONG, 1, [Define if int64_t is a long long.])
520 AC_MSG_RESULT($glibcxx_cv_int64_t_long_long)
521 fi
3d05b345 522 fi
fc9ab7b4
PC
523
524 AC_LANG_RESTORE
3d05b345
PC
525])
526
527
528dnl
529dnl Check whether LFS support is available.
530dnl
f214923c 531AC_DEFUN([GLIBCXX_CHECK_LFS], [
0c6b814a 532 AC_LANG_SAVE
9d47bc51
PC
533 AC_LANG_CPLUSPLUS
534 ac_save_CXXFLAGS="$CXXFLAGS"
535 CXXFLAGS="$CXXFLAGS -fno-exceptions"
e0103440 536 AC_MSG_CHECKING([for LFS support])
3d05b345 537 AC_CACHE_VAL(glibcxx_cv_LFS, [
74745ec5 538 GCC_TRY_COMPILE_OR_LINK(
0c6b814a
PC
539 [#include <unistd.h>
540 #include <stdio.h>
dd5d134b 541 #include <sys/stat.h>
0c6b814a 542 ],
5c89246d
PC
543 [FILE* fp;
544 fopen64("t", "w");
545 fseeko64(fp, 0, SEEK_CUR);
546 ftello64(fp);
dd5d134b
PC
547 lseek64(1, 0, SEEK_CUR);
548 struct stat64 buf;
549 fstat64(1, &buf);],
3d05b345
PC
550 [glibcxx_cv_LFS=yes],
551 [glibcxx_cv_LFS=no])
552 ])
553 if test $glibcxx_cv_LFS = yes; then
4651e622 554 AC_DEFINE(_GLIBCXX_USE_LFS, 1, [Define if LFS support is available.])
3d05b345 555 fi
e0103440 556 AC_MSG_RESULT($glibcxx_cv_LFS)
9d47bc51
PC
557 CXXFLAGS="$ac_save_CXXFLAGS"
558 AC_LANG_RESTORE
3d05b345
PC
559])
560
561
1165dc50
PC
562dnl
563dnl Check for whether a fully dynamic basic_string implementation should
564dnl be turned on, that does not put empty objects in per-process static
565dnl memory (mostly useful together with shared memory allocators, see PR
566dnl libstdc++/16612 for details).
567dnl
568dnl --enable-fully-dynamic-string defines _GLIBCXX_FULLY_DYNAMIC_STRING
569dnl --disable-fully-dynamic-string leaves _GLIBCXX_FULLY_DYNAMIC_STRING undefined
570dnl + Usage: GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING[(DEFAULT)]
571dnl Where DEFAULT is either `yes' or `no'.
572dnl
573AC_DEFUN([GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING], [
574 GLIBCXX_ENABLE(fully-dynamic-string,$1,,[do not put empty strings in per-process static memory])
575 if test $enable_fully_dynamic_string = yes; then
4651e622
KC
576 AC_DEFINE(_GLIBCXX_FULLY_DYNAMIC_STRING, 1,
577 [Define if a fully dynamic basic_string is wanted.])
1165dc50
PC
578 fi
579])
580
581
ff66d28f
PE
582dnl
583dnl Does any necessary configuration of the testsuite directory. Generates
584dnl the testsuite_hooks.h header.
585dnl
586dnl GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE must be done before this.
587dnl
588dnl Sets:
84946e72 589dnl enable_abi_check
e3f78d9b
BK
590dnl GLIBCXX_TEST_WCHAR_T
591dnl GLIBCXX_TEST_THREAD
ff66d28f
PE
592dnl Substs:
593dnl baseline_dir
594dnl
f214923c 595AC_DEFUN([GLIBCXX_CONFIGURE_TESTSUITE], [
0646b059 596 if $GLIBCXX_IS_NATIVE ; then
2ae6e982 597 # Do checks for resource limit functions.
ff66d28f
PE
598 GLIBCXX_CHECK_SETRLIMIT
599
600 # Look for setenv, so that extended locale tests can be performed.
601 GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3(setenv)
0646b059 602 fi
dbc66058 603
0646b059
GK
604 if $GLIBCXX_IS_NATIVE && test $is_hosted = yes &&
605 test $enable_symvers != no; then
606 case "$host" in
607 *-*-cygwin*)
608 enable_abi_check=no ;;
609 *)
610 enable_abi_check=yes ;;
611 esac
dbc66058
DJ
612 else
613 # Only build this as native, since automake does not understand
614 # CXX_FOR_BUILD.
615 enable_abi_check=no
ff66d28f 616 fi
84946e72 617
ff66d28f 618 # Export file names for ABI checking.
68c512f6 619 baseline_dir="$glibcxx_srcdir/config/abi/post/${abi_baseline_pair}"
ff66d28f 620 AC_SUBST(baseline_dir)
ff66d28f
PE
621])
622
623
624dnl
625dnl Set up *_INCLUDES variables for all sundry Makefile.am's.
626dnl
627dnl Substs:
628dnl GLIBCXX_INCLUDES
629dnl TOPLEVEL_INCLUDES
ff66d28f 630dnl
f214923c 631AC_DEFUN([GLIBCXX_EXPORT_INCLUDES], [
0df3f383
PE
632 # Used for every C++ compile we perform.
633 GLIBCXX_INCLUDES="\
634-I$glibcxx_builddir/include/$host_alias \
635-I$glibcxx_builddir/include \
636-I$glibcxx_srcdir/libsupc++"
ff66d28f 637
0df3f383 638 # For Canadian crosses, pick this up too.
ff66d28f 639 if test $CANADIAN = yes; then
37e0ff11 640 GLIBCXX_INCLUDES="$GLIBCXX_INCLUDES -I\${includedir}"
ff66d28f
PE
641 fi
642
0df3f383
PE
643 # Stuff in the actual top level. Currently only used by libsupc++ to
644 # get unwind* headers from the gcc dir.
645 #TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/gcc -I$(toplevel_srcdir)/include'
646 TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/gcc'
ff66d28f
PE
647
648 # Now, export this to all the little Makefiles....
649 AC_SUBST(GLIBCXX_INCLUDES)
650 AC_SUBST(TOPLEVEL_INCLUDES)
ff66d28f
PE
651])
652
653
654dnl
655dnl Set up *_FLAGS and *FLAGS variables for all sundry Makefile.am's.
656dnl (SECTION_FLAGS is done under CHECK_COMPILER_FEATURES.)
657dnl
658dnl Substs:
659dnl OPTIMIZE_CXXFLAGS
660dnl WARN_FLAGS
661dnl
f214923c 662AC_DEFUN([GLIBCXX_EXPORT_FLAGS], [
ff66d28f
PE
663 # Optimization flags that are probably a good idea for thrill-seekers. Just
664 # uncomment the lines below and make, everything else is ready to go...
62801a96 665 # Alternatively OPTIMIZE_CXXFLAGS can be set in configure.host.
ff66d28f 666 # OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc
ff66d28f
PE
667 AC_SUBST(OPTIMIZE_CXXFLAGS)
668
dc7c62ae 669 WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual'
ff66d28f
PE
670 AC_SUBST(WARN_FLAGS)
671])
672
673
674dnl
675dnl All installation directory information is determined here.
676dnl
677dnl Substs:
678dnl gxx_install_dir
679dnl glibcxx_prefixdir
680dnl glibcxx_toolexecdir
681dnl glibcxx_toolexeclibdir
682dnl
683dnl Assumes cross_compiling bits already done, and with_cross_host in
684dnl particular.
685dnl
0f57bf40 686dnl This logic must match gcc/configure.ac's setting of gcc_gxx_include_dir.
505692b0 687dnl config/gxx-include-dir.m4 must be kept consistant with this as well.
f214923c 688AC_DEFUN([GLIBCXX_EXPORT_INSTALL_INFO], [
ff66d28f
PE
689 glibcxx_toolexecdir=no
690 glibcxx_toolexeclibdir=no
691 glibcxx_prefixdir=$prefix
692
693 AC_MSG_CHECKING([for gxx-include-dir])
694 AC_ARG_WITH([gxx-include-dir],
695 AC_HELP_STRING([--with-gxx-include-dir=DIR],
696 [installation directory for include files]),
697 [case "$withval" in
698 yes) AC_MSG_ERROR([Missing directory for --with-gxx-include-dir]) ;;
699 no) gxx_include_dir=no ;;
700 *) gxx_include_dir=$withval ;;
701 esac],
702 [gxx_include_dir=no])
703 AC_MSG_RESULT($gxx_include_dir)
704
705 AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
706 AC_ARG_ENABLE([version-specific-runtime-libs],
707 AC_HELP_STRING([--enable-version-specific-runtime-libs],
708 [Specify that runtime libraries should be installed in a compiler-specific directory]),
709 [case "$enableval" in
710 yes) version_specific_libs=yes ;;
711 no) version_specific_libs=no ;;
712 *) AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);;
713 esac],
714 [version_specific_libs=no])
715 AC_MSG_RESULT($version_specific_libs)
716
717 # Default case for install directory for include files.
718 if test $version_specific_libs = no && test $gxx_include_dir = no; then
0f57bf40
MM
719 gxx_include_dir='include/c++/${gcc_version}'
720 if test -n "$with_cross_host" &&
721 test x"$with_cross_host" != x"no"; then
722 gxx_include_dir='${prefix}/${target_alias}/'"$gxx_include_dir"
723 else
724 gxx_include_dir='${prefix}/'"$gxx_include_dir"
725 fi
ff66d28f
PE
726 fi
727
728 # Version-specific runtime libs processing.
729 if test $version_specific_libs = yes; then
730 # Need the gcc compiler version to know where to install libraries
731 # and header files if --enable-version-specific-runtime-libs option
0314451d
GK
732 # is selected. FIXME: these variables are misnamed, there are
733 # no executables installed in _toolexecdir or _toolexeclibdir.
ff66d28f 734 if test x"$gxx_include_dir" = x"no"; then
47194af4 735 gxx_include_dir='${libdir}/gcc/${host_alias}/${gcc_version}/include/c++'
ff66d28f 736 fi
0314451d 737 glibcxx_toolexecdir='${libdir}/gcc/${host_alias}'
47194af4 738 glibcxx_toolexeclibdir='${toolexecdir}/${gcc_version}$(MULTISUBDIR)'
ff66d28f
PE
739 fi
740
741 # Calculate glibcxx_toolexecdir, glibcxx_toolexeclibdir
742 # Install a library built with a cross compiler in tooldir, not libdir.
743 if test x"$glibcxx_toolexecdir" = x"no"; then
744 if test -n "$with_cross_host" &&
745 test x"$with_cross_host" != x"no"; then
fbe057bb
PE
746 glibcxx_toolexecdir='${exec_prefix}/${host_alias}'
747 glibcxx_toolexeclibdir='${toolexecdir}/lib'
ff66d28f 748 else
0314451d 749 glibcxx_toolexecdir='${libdir}/gcc/${host_alias}'
fbe057bb 750 glibcxx_toolexeclibdir='${libdir}'
ff66d28f 751 fi
fbe057bb 752 multi_os_directory=`$CXX -print-multi-os-directory`
ff66d28f
PE
753 case $multi_os_directory in
754 .) ;; # Avoid trailing /.
755 *) glibcxx_toolexeclibdir=$glibcxx_toolexeclibdir/$multi_os_directory ;;
756 esac
757 fi
758
759 AC_MSG_CHECKING([for install location])
760 AC_MSG_RESULT($gxx_include_dir)
761
762 AC_SUBST(glibcxx_prefixdir)
763 AC_SUBST(gxx_include_dir)
764 AC_SUBST(glibcxx_toolexecdir)
765 AC_SUBST(glibcxx_toolexeclibdir)
766])
767
768
769dnl
770dnl GLIBCXX_ENABLE
771dnl (FEATURE, DEFAULT, HELP-ARG, HELP-STRING)
772dnl (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, permit a|b|c)
773dnl (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, SHELL-CODE-HANDLER)
774dnl
775dnl See docs/html/17_intro/configury.html#enable for documentation.
776dnl
777m4_define([GLIBCXX_ENABLE],[dnl
778m4_define([_g_switch],[--enable-$1])dnl
779m4_define([_g_help],[AC_HELP_STRING(_g_switch$3,[$4 @<:@default=$2@:>@])])dnl
780 AC_ARG_ENABLE($1,_g_help,
781 m4_bmatch([$5],
782 [^permit ],
783 [[
784 case "$enableval" in
785 m4_bpatsubst([$5],[permit ])) ;;
786 *) AC_MSG_ERROR(Unknown argument to enable/disable $1) ;;
787 dnl Idea for future: generate a URL pointing to
788 dnl "onlinedocs/configopts.html#whatever"
789 esac
790 ]],
791 [^$],
792 [[
793 case "$enableval" in
794 yes|no) ;;
795 *) AC_MSG_ERROR(Argument to enable/disable $1 must be yes or no) ;;
796 esac
797 ]],
798 [[$5]]),
799 [enable_]m4_bpatsubst([$1],-,_)[=][$2])
800m4_undefine([_g_switch])dnl
801m4_undefine([_g_help])dnl
802])
803
804
805dnl
806dnl Check for ISO/IEC 9899:1999 "C99" support.
807dnl
808dnl --enable-c99 defines _GLIBCXX_USE_C99
809dnl --disable-c99 leaves _GLIBCXX_USE_C99 undefined
810dnl + Usage: GLIBCXX_ENABLE_C99[(DEFAULT)]
811dnl Where DEFAULT is either `yes' or `no'.
812dnl + If 'C99' stuff is not available, ignores DEFAULT and sets `no'.
813dnl
f214923c 814AC_DEFUN([GLIBCXX_ENABLE_C99], [
ff66d28f
PE
815 GLIBCXX_ENABLE(c99,$1,,[turns on ISO/IEC 9899:1999 support])
816
347669a0
BK
817 if test x"$enable_c99" = x"yes"; then
818
ff66d28f
PE
819 AC_LANG_SAVE
820 AC_LANG_CPLUSPLUS
821
18f310b7
PC
822 # Use -std=c++98 because the default (-std=gnu++98) leaves __STRICT_ANSI__
823 # undefined and fake C99 facilities - like pre-standard snprintf - may be
824 # spuriously enabled.
825 # Long term, -std=c++0x could be even better, could manage to explicitely
826 # request C99 facilities to the underlying C headers.
b6f914f6 827 ac_save_CXXFLAGS="$CXXFLAGS"
18f310b7 828 CXXFLAGS="$CXXFLAGS -std=c++98"
b6f914f6
RS
829 ac_save_LIBS="$LIBS"
830 ac_save_gcc_no_link="$gcc_no_link"
831
832 if test x$gcc_no_link != xyes; then
833 # Use -fno-exceptions to that the C driver can link these tests without
834 # hitting undefined references to personality routines.
835 CXXFLAGS="$CXXFLAGS -fno-exceptions"
836 AC_CHECK_LIB(m, sin, [
837 LIBS="$LIBS -lm"
838 ], [
839 # Use the default compile-only tests in GCC_TRY_COMPILE_OR_LINK
840 gcc_no_link=yes
841 ])
842 fi
843
ff66d28f 844 # Check for the existence of <math.h> functions used if C99 is enabled.
ff66d28f 845 AC_MSG_CHECKING([for ISO C99 support in <math.h>])
6d26724a 846 AC_CACHE_VAL(glibcxx_cv_c99_math, [
b6f914f6
RS
847 GCC_TRY_COMPILE_OR_LINK(
848 [#include <math.h>
849 volatile double d1, d2;
850 volatile int i;],
851 [i = fpclassify(d1);
852 i = isfinite(d1);
853 i = isinf(d1);
854 i = isnan(d1);
855 i = isnormal(d1);
856 i = signbit(d1);
857 i = isgreater(d1, d2);
858 i = isgreaterequal(d1, d2);
859 i = isless(d1, d2);
860 i = islessequal(d1, d2);
861 i = islessgreater(d1, d2);
862 i = islessgreater(d1, d2);
863 i = isunordered(d1, d2);
6d26724a 864 ],[glibcxx_cv_c99_math=yes], [glibcxx_cv_c99_math=no])
347669a0 865 ])
6d26724a
RW
866 AC_MSG_RESULT($glibcxx_cv_c99_math)
867 if test x"$glibcxx_cv_c99_math" = x"yes"; then
4651e622
KC
868 AC_DEFINE(_GLIBCXX_USE_C99_MATH, 1,
869 [Define if C99 functions or macros in <math.h> should be imported
870 in <cmath> in namespace std.])
517da0ce
MM
871 fi
872
225962a0 873 # Check for the existence of <complex.h> complex math functions.
52e6723c
BK
874 # This is necessary even though libstdc++ uses the builtin versions
875 # of these functions, because if the builtin cannot be used, a reference
876 # to the library function is emitted.
5ad2f32d 877 AC_CHECK_HEADERS(tgmath.h, ac_has_tgmath_h=yes, ac_has_tgmath_h=no)
52e6723c 878 AC_CHECK_HEADERS(complex.h, ac_has_complex_h=yes, ac_has_complex_h=no)
6d26724a 879 glibcxx_cv_c99_complex=no;
52e6723c 880 if test x"$ac_has_complex_h" = x"yes"; then
52e6723c 881 AC_MSG_CHECKING([for ISO C99 support in <complex.h>])
b6f914f6
RS
882 GCC_TRY_COMPILE_OR_LINK(
883 [#include <complex.h>
884 typedef __complex__ float float_type;
885 typedef __complex__ double double_type;
886 typedef __complex__ long double ld_type;
887 volatile float_type tmpf;
888 volatile double_type tmpd;
889 volatile ld_type tmpld;
890 volatile float f;
891 volatile double d;
892 volatile long double ld;],
893 [f = cabsf(tmpf);
894 f = cargf(tmpf);
895 tmpf = ccosf(tmpf);
896 tmpf = ccoshf(tmpf);
897 tmpf = cexpf(tmpf);
898 tmpf = clogf(tmpf);
899 tmpf = csinf(tmpf);
900 tmpf = csinhf(tmpf);
901 tmpf = csqrtf(tmpf);
902 tmpf = ctanf(tmpf);
903 tmpf = ctanhf(tmpf);
904 tmpf = cpowf(tmpf, tmpf);
3cd54fc9 905 tmpf = cprojf(tmpf);
b6f914f6
RS
906 d = cabs(tmpd);
907 d = carg(tmpd);
908 tmpd = ccos(tmpd);
909 tmpd = ccosh(tmpd);
910 tmpd = cexp(tmpd);
911 tmpd = clog(tmpd);
912 tmpd = csin(tmpd);
913 tmpd = csinh(tmpd);
914 tmpd = csqrt(tmpd);
915 tmpd = ctan(tmpd);
916 tmpd = ctanh(tmpd);
917 tmpd = cpow(tmpd, tmpd);
3cd54fc9 918 tmpd = cproj(tmpd);
b6f914f6
RS
919 ld = cabsl(tmpld);
920 ld = cargl(tmpld);
921 tmpld = ccosl(tmpld);
922 tmpld = ccoshl(tmpld);
923 tmpld = cexpl(tmpld);
924 tmpld = clogl(tmpld);
925 tmpld = csinl(tmpld);
926 tmpld = csinhl(tmpld);
927 tmpld = csqrtl(tmpld);
928 tmpld = ctanl(tmpld);
929 tmpld = ctanhl(tmpld);
930 tmpld = cpowl(tmpld, tmpld);
3cd54fc9 931 tmpld = cprojl(tmpld);
6d26724a 932 ],[glibcxx_cv_c99_complex=yes], [glibcxx_cv_c99_complex=no])
52e6723c 933 fi
6d26724a
RW
934 AC_MSG_RESULT($glibcxx_cv_c99_complex)
935 if test x"$glibcxx_cv_c99_complex" = x"yes"; then
4651e622
KC
936 AC_DEFINE(_GLIBCXX_USE_C99_COMPLEX, 1,
937 [Define if C99 functions in <complex.h> should be used in
938 <complex>. Using compiler builtins for these functions requires
939 corresponding C99 library functions to be present.])
52e6723c
BK
940 fi
941
ff66d28f 942 # Check for the existence in <stdio.h> of vscanf, et. al.
ff66d28f 943 AC_MSG_CHECKING([for ISO C99 support in <stdio.h>])
6d26724a 944 AC_CACHE_VAL(glibcxx_cv_c99_stdio, [
b6f914f6
RS
945 GCC_TRY_COMPILE_OR_LINK(
946 [#include <stdio.h>
947 #include <stdarg.h>
948 void foo(char* fmt, ...)
949 {
950 va_list args; va_start(args, fmt);
951 vfscanf(stderr, "%i", args);
952 vscanf("%i", args);
953 vsnprintf(fmt, 0, "%i", args);
954 vsscanf(fmt, "%i", args);
955 }],
956 [snprintf("12", 0, "%i");],
6d26724a 957 [glibcxx_cv_c99_stdio=yes], [glibcxx_cv_c99_stdio=no])
347669a0 958 ])
6d26724a 959 AC_MSG_RESULT($glibcxx_cv_c99_stdio)
ff66d28f
PE
960
961 # Check for the existence in <stdlib.h> of lldiv_t, et. al.
ff66d28f 962 AC_MSG_CHECKING([for ISO C99 support in <stdlib.h>])
6d26724a 963 AC_CACHE_VAL(glibcxx_cv_c99_stdlib, [
b6f914f6
RS
964 GCC_TRY_COMPILE_OR_LINK(
965 [#include <stdlib.h>
966 volatile float f;
967 volatile long double ld;
968 volatile unsigned long long ll;
969 lldiv_t mydivt;],
970 [char* tmp;
971 f = strtof("gnu", &tmp);
972 ld = strtold("gnu", &tmp);
973 ll = strtoll("gnu", &tmp, 10);
974 ll = strtoull("gnu", &tmp, 10);
975 ll = llabs(10);
976 mydivt = lldiv(10,1);
977 ll = mydivt.quot;
978 ll = mydivt.rem;
979 ll = atoll("10");
980 _Exit(0);
6d26724a 981 ],[glibcxx_cv_c99_stdlib=yes], [glibcxx_cv_c99_stdlib=no])
347669a0 982 ])
6d26724a 983 AC_MSG_RESULT($glibcxx_cv_c99_stdlib)
ff66d28f 984
8a9b2875 985 # Check for the existence in <wchar.h> of wcstold, etc.
6d26724a 986 glibcxx_cv_c99_wchar=no;
347669a0
BK
987 if test x"$ac_has_wchar_h" = xyes &&
988 test x"$ac_has_wctype_h" = xyes; then
8a9b2875 989 AC_MSG_CHECKING([for ISO C99 support in <wchar.h>])
347669a0 990 AC_TRY_COMPILE([#include <wchar.h>
347669a0
BK
991 namespace test
992 {
347669a0
BK
993 using ::wcstold;
994 using ::wcstoll;
347669a0 995 using ::wcstoull;
347669a0 996 }
6d26724a 997 ],[],[glibcxx_cv_c99_wchar=yes], [glibcxx_cv_c99_wchar=no])
347669a0
BK
998
999 # Checks for wide character functions that may not be present.
1000 # Injection of these is wrapped with guard macros.
1001 # NB: only put functions here, instead of immediately above, if
1002 # absolutely necessary.
1003 AC_TRY_COMPILE([#include <wchar.h>
1004 namespace test { using ::vfwscanf; } ], [],
1005 [AC_DEFINE(HAVE_VFWSCANF,1,
1006 [Defined if vfwscanf exists.])],[])
1007
1008 AC_TRY_COMPILE([#include <wchar.h>
1009 namespace test { using ::vswscanf; } ], [],
1010 [AC_DEFINE(HAVE_VSWSCANF,1,
1011 [Defined if vswscanf exists.])],[])
1012
1013 AC_TRY_COMPILE([#include <wchar.h>
1014 namespace test { using ::vwscanf; } ], [],
1015 [AC_DEFINE(HAVE_VWSCANF,1,[Defined if vwscanf exists.])],[])
1016
1017 AC_TRY_COMPILE([#include <wchar.h>
1018 namespace test { using ::wcstof; } ], [],
1019 [AC_DEFINE(HAVE_WCSTOF,1,[Defined if wcstof exists.])],[])
1020
1021 AC_TRY_COMPILE([#include <wctype.h>],
1022 [ wint_t t; int i = iswblank(t);],
1023 [AC_DEFINE(HAVE_ISWBLANK,1,
1024 [Defined if iswblank exists.])],[])
1025
6d26724a 1026 AC_MSG_RESULT($glibcxx_cv_c99_wchar)
347669a0 1027 fi
ff66d28f 1028
347669a0 1029 # Option parsed, now set things appropriately.
6d26724a
RW
1030 if test x"$glibcxx_cv_c99_math" = x"no" ||
1031 test x"$glibcxx_cv_c99_complex" = x"no" ||
1032 test x"$glibcxx_cv_c99_stdio" = x"no" ||
1033 test x"$glibcxx_cv_c99_stdlib" = x"no" ||
1034 test x"$glibcxx_cv_c99_wchar" = x"no"; then
ff66d28f 1035 enable_c99=no;
347669a0 1036 else
4651e622
KC
1037 AC_DEFINE(_GLIBCXX_USE_C99, 1,
1038 [Define if C99 functions or macros from <wchar.h>, <math.h>,
1039 <complex.h>, <stdio.h>, and <stdlib.h> can be used or exposed.])
ff66d28f
PE
1040 fi
1041
b6f914f6
RS
1042 gcc_no_link="$ac_save_gcc_no_link"
1043 LIBS="$ac_save_LIBS"
1044 CXXFLAGS="$ac_save_CXXFLAGS"
ff66d28f 1045 AC_LANG_RESTORE
347669a0
BK
1046 fi
1047
1048 AC_MSG_CHECKING([for fully enabled ISO C99 support])
1049 AC_MSG_RESULT($enable_c99)
dcfa0bc8
PE
1050])
1051
1052
15e38d0d 1053dnl
959d14e1
CF
1054dnl Check for clock_gettime, nanosleep and sched_yield, used in the
1055dnl implementation of 20.8.5 [time.clock], and 30.2.2 [thread.thread.this]
1056dnl in the current C++0x working draft.
15e38d0d 1057dnl
959d14e1
CF
1058dnl --enable-libstdcxx-time
1059dnl --enable-libstdcxx-time=yes
1060dnl checks for the availability of monotonic and realtime clocks,
1061dnl nanosleep and sched_yield in libc and libposix4 and, in case, links
1062dnl the latter
1063dnl --enable-libstdcxx-time=rt
6c3385c1 1064dnl also searches (and, in case, links) librt. Note that this is
610870b2 1065dnl not always desirable because, in glibc, for example, in turn it
6c3385c1
PC
1066dnl triggers the linking of libpthread too, which activates locking,
1067dnl a large overhead for single-thread programs.
959d14e1
CF
1068dnl --enable-libstdcxx-time=no
1069dnl --disable-libstdcxx-time
610870b2
PC
1070dnl disables the checks completely
1071dnl
959d14e1 1072AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME], [
610870b2 1073
959d14e1
CF
1074 AC_MSG_CHECKING([for clock_gettime, nanosleep and sched_yield])
1075 GLIBCXX_ENABLE(libstdcxx-time,$1,[=KIND],
610870b2
PC
1076 [use KIND for check type],
1077 [permit yes|no|rt])
15e38d0d
CF
1078
1079 AC_LANG_SAVE
1080 AC_LANG_CPLUSPLUS
1081 ac_save_CXXFLAGS="$CXXFLAGS"
1082 CXXFLAGS="$CXXFLAGS -fno-exceptions"
ec6fa56a
PB
1083 ac_save_LIBS="$LIBS"
1084
1ac5e52c
MK
1085 ac_has_clock_monotonic=no
1086 ac_has_clock_realtime=no
1087 AC_MSG_RESULT($enable_libstdcxx_time)
ec6fa56a 1088
959d14e1 1089 if test x"$enable_libstdcxx_time" != x"no"; then
ec6fa56a 1090
959d14e1 1091 if test x"$enable_libstdcxx_time" = x"rt"; then
610870b2 1092 AC_SEARCH_LIBS(clock_gettime, [rt posix4])
959d14e1 1093 AC_SEARCH_LIBS(nanosleep, [rt posix4])
610870b2
PC
1094 else
1095 AC_SEARCH_LIBS(clock_gettime, [posix4])
959d14e1 1096 AC_SEARCH_LIBS(nanosleep, [posix4])
610870b2
PC
1097 fi
1098
1099 case "$ac_cv_search_clock_gettime" in
1100 -l*) GLIBCXX_LIBS=$ac_cv_search_clock_gettime
959d14e1
CF
1101 ;;
1102 esac
1103 case "$ac_cv_search_nanosleep" in
1104 -l*) GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_nanosleep"
1105 ;;
1106 esac
1107
1108 AC_SEARCH_LIBS(sched_yield, [rt posix4])
1109
1110 case "$ac_cv_search_sched_yield" in
1111 -lposix4*)
1112 GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_sched_yield"
1113 AC_DEFINE(_GLIBCXX_USE_SCHED_YIELD, 1,
1114 [ Defined if sched_yield is available. ])
1115 ;;
1116 -lrt*)
1117 if test x"$enable_libstdcxx_time" = x"rt"; then
1118 GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_sched_yield"
1119 AC_DEFINE(_GLIBCXX_USE_SCHED_YIELD, 1,
1120 [ Defined if sched_yield is available. ])
1121 fi
1122 ;;
1123 *)
1124 AC_DEFINE(_GLIBCXX_USE_SCHED_YIELD, 1,
1125 [ Defined if sched_yield is available. ])
1126 ;;
610870b2
PC
1127 esac
1128
1129 AC_CHECK_HEADERS(unistd.h, ac_has_unistd_h=yes, ac_has_unistd_h=no)
1130
1131 if test x"$ac_has_unistd_h" = x"yes"; then
1132 AC_MSG_CHECKING([for monotonic clock])
1133 AC_TRY_LINK(
1134 [#include <unistd.h>
1135 #include <time.h>
1136 ],
1137 [#if _POSIX_TIMERS > 0 && defined(_POSIX_MONOTONIC_CLOCK)
1138 timespec tp;
1139 #endif
1140 clock_gettime(CLOCK_MONOTONIC, &tp);
1141 ], [ac_has_clock_monotonic=yes], [ac_has_clock_monotonic=no])
1142
1143 AC_MSG_RESULT($ac_has_clock_monotonic)
15e38d0d 1144
610870b2
PC
1145 AC_MSG_CHECKING([for realtime clock])
1146 AC_TRY_LINK(
1147 [#include <unistd.h>
1148 #include <time.h>
1149 ],
1150 [#if _POSIX_TIMERS > 0
1151 timespec tp;
1152 #endif
1153 clock_gettime(CLOCK_REALTIME, &tp);
1154 ], [ac_has_clock_realtime=yes], [ac_has_clock_realtime=no])
1155
1156 AC_MSG_RESULT($ac_has_clock_realtime)
610870b2 1157
959d14e1
CF
1158 AC_MSG_CHECKING([for nanosleep])
1159 AC_TRY_LINK(
1160 [#include <unistd.h>
1161 #include <time.h>
1162 ],
1163 [#if _POSIX_TIMERS > 0
1164 timespec tp;
1165 #endif
1166 nanosleep(&tp, 0);
1167 ], [ac_has_nanosleep=yes], [ac_has_nanosleep=no])
1168
1169 AC_MSG_RESULT($ac_has_nanosleep)
1170 fi
610870b2
PC
1171 fi
1172
15e38d0d
CF
1173 if test x"$ac_has_clock_monotonic" = x"yes"; then
1174 AC_DEFINE(_GLIBCXX_USE_CLOCK_MONOTONIC, 1,
1175 [ Defined if clock_gettime has monotonic clock support. ])
1176 fi
ec6fa56a 1177
15e38d0d
CF
1178 if test x"$ac_has_clock_realtime" = x"yes"; then
1179 AC_DEFINE(_GLIBCXX_USE_CLOCK_REALTIME, 1,
1180 [ Defined if clock_gettime has realtime clock support. ])
1181 fi
ec6fa56a 1182
959d14e1
CF
1183 if test x"$ac_has_nanosleep" = x"yes"; then
1184 AC_DEFINE(_GLIBCXX_USE_NANOSLEEP, 1,
1185 [ Defined if nanosleep is available. ])
1186 fi
1187
ec6fa56a
PB
1188 AC_SUBST(GLIBCXX_LIBS)
1189
15e38d0d 1190 CXXFLAGS="$ac_save_CXXFLAGS"
ec6fa56a 1191 LIBS="$ac_save_LIBS"
15e38d0d
CF
1192 AC_LANG_RESTORE
1193])
1194
1195dnl
610870b2
PC
1196dnl Check for gettimeofday, used in the implementation of 20.8.5
1197dnl [time.clock] in the current C++0x working draft.
15e38d0d
CF
1198dnl
1199AC_DEFUN([GLIBCXX_CHECK_GETTIMEOFDAY], [
1200
610870b2
PC
1201 AC_MSG_CHECKING([for gettimeofday])
1202
15e38d0d
CF
1203 AC_LANG_SAVE
1204 AC_LANG_CPLUSPLUS
1205 ac_save_CXXFLAGS="$CXXFLAGS"
1206 CXXFLAGS="$CXXFLAGS -fno-exceptions"
1207
1208 ac_has_gettimeofday=no;
1209 AC_CHECK_HEADERS(sys/time.h, ac_has_sys_time_h=yes, ac_has_sys_time_h=no)
1210 if test x"$ac_has_sys_time_h" = x"yes"; then
1211 AC_MSG_CHECKING([for gettimeofday])
610870b2 1212 GCC_TRY_COMPILE_OR_LINK([#include <sys/time.h>],
15e38d0d
CF
1213 [timeval tv; gettimeofday(&tv, 0);],
1214 [ac_has_gettimeofday=yes], [ac_has_gettimeofday=no])
1215
1216 AC_MSG_RESULT($ac_has_gettimeofday)
1217 fi
1218
1219 if test x"$ac_has_gettimeofday" = x"yes"; then
1220 AC_DEFINE(_GLIBCXX_USE_GETTIMEOFDAY, 1,
1221 [ Defined if gettimeofday is available. ])
1222 fi
1223
1224 CXXFLAGS="$ac_save_CXXFLAGS"
1225 AC_LANG_RESTORE
1226])
1227
bd2bb1ea
PC
1228dnl
1229dnl Check for ISO/IEC 9899:1999 "C99" support to ISO/IEC DTR 19768 "TR1"
1230dnl facilities in Chapter 8, "C compatibility".
1231dnl
1232AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [
1233
1234 AC_LANG_SAVE
1235 AC_LANG_CPLUSPLUS
1236
18f310b7
PC
1237 # Use -std=c++98 because the default (-std=gnu++98) leaves __STRICT_ANSI__
1238 # undefined and fake C99 facilities may be spuriously enabled.
1239 ac_save_CXXFLAGS="$CXXFLAGS"
1240 CXXFLAGS="$CXXFLAGS -std=c++98"
1241
bd2bb1ea
PC
1242 # Check for the existence of <complex.h> complex math functions used
1243 # by tr1/complex.
1244 AC_CHECK_HEADERS(complex.h, ac_has_complex_h=yes, ac_has_complex_h=no)
1245 ac_c99_complex_tr1=no;
1246 if test x"$ac_has_complex_h" = x"yes"; then
1247 AC_MSG_CHECKING([for ISO C99 support to TR1 in <complex.h>])
1248 AC_TRY_COMPILE([#include <complex.h>],
1249 [typedef __complex__ float float_type; float_type tmpf;
1250 cacosf(tmpf);
1251 casinf(tmpf);
1252 catanf(tmpf);
1253 cacoshf(tmpf);
1254 casinhf(tmpf);
1255 catanhf(tmpf);
1256 typedef __complex__ double double_type; double_type tmpd;
1257 cacos(tmpd);
1258 casin(tmpd);
1259 catan(tmpd);
1260 cacosh(tmpd);
1261 casinh(tmpd);
1262 catanh(tmpd);
1263 typedef __complex__ long double ld_type; ld_type tmpld;
1264 cacosl(tmpld);
1265 casinl(tmpld);
1266 catanl(tmpld);
1267 cacoshl(tmpld);
1268 casinhl(tmpld);
1269 catanhl(tmpld);
1270 ],[ac_c99_complex_tr1=yes], [ac_c99_complex_tr1=no])
1271 fi
1272 AC_MSG_RESULT($ac_c99_complex_tr1)
1273 if test x"$ac_c99_complex_tr1" = x"yes"; then
1274 AC_DEFINE(_GLIBCXX_USE_C99_COMPLEX_TR1, 1,
1275 [Define if C99 functions in <complex.h> should be used in
1276 <tr1/complex>. Using compiler builtins for these functions
1277 requires corresponding C99 library functions to be present.])
1278 fi
1279
1280 # Check for the existence of <ctype.h> functions.
1281 AC_MSG_CHECKING([for ISO C99 support to TR1 in <ctype.h>])
6d26724a 1282 AC_CACHE_VAL(glibcxx_cv_c99_ctype_tr1, [
bd2bb1ea 1283 AC_TRY_COMPILE([#include <ctype.h>],
20921e53 1284 [int ch;
98fb1d29
PC
1285 int ret;
1286 ret = isblank(ch);
0f24e8de
PC
1287 ],[glibcxx_cv_c99_ctype_tr1=yes],
1288 [glibcxx_cv_c99_ctype_tr1=no])
bd2bb1ea 1289 ])
6d26724a
RW
1290 AC_MSG_RESULT($glibcxx_cv_c99_ctype_tr1)
1291 if test x"$glibcxx_cv_c99_ctype_tr1" = x"yes"; then
bd2bb1ea
PC
1292 AC_DEFINE(_GLIBCXX_USE_C99_CTYPE_TR1, 1,
1293 [Define if C99 functions in <ctype.h> should be imported in
1294 <tr1/cctype> in namespace std::tr1.])
1295 fi
1296
20921e53
PC
1297 # Check for the existence of <fenv.h> functions.
1298 AC_CHECK_HEADERS(fenv.h, ac_has_fenv_h=yes, ac_has_fenv_h=no)
1299 ac_c99_fenv_tr1=no;
1300 if test x"$ac_has_fenv_h" = x"yes"; then
1301 AC_MSG_CHECKING([for ISO C99 support to TR1 in <fenv.h>])
1302 AC_TRY_COMPILE([#include <fenv.h>],
1303 [int except, mode;
1304 fexcept_t* pflag;
1305 fenv_t* penv;
98fb1d29
PC
1306 int ret;
1307 ret = feclearexcept(except);
1308 ret = fegetexceptflag(pflag, except);
1309 ret = feraiseexcept(except);
1310 ret = fesetexceptflag(pflag, except);
1311 ret = fetestexcept(except);
1312 ret = fegetround();
1313 ret = fesetround(mode);
1314 ret = fegetenv(penv);
1315 ret = feholdexcept(penv);
1316 ret = fesetenv(penv);
1317 ret = feupdateenv(penv);
20921e53
PC
1318 ],[ac_c99_fenv_tr1=yes], [ac_c99_fenv_tr1=no])
1319 fi
1320 AC_MSG_RESULT($ac_c99_fenv_tr1)
1321 if test x"$ac_c99_fenv_tr1" = x"yes"; then
1322 AC_DEFINE(_GLIBCXX_USE_C99_FENV_TR1, 1,
1323 [Define if C99 functions in <fenv.h> should be imported in
1324 <tr1/cfenv> in namespace std::tr1.])
1325 fi
1326
2a1d6346
PC
1327 # Check for the existence of <stdint.h> types.
1328 AC_MSG_CHECKING([for ISO C99 support to TR1 in <stdint.h>])
6d26724a 1329 AC_CACHE_VAL(glibcxx_cv_c99_stdint_tr1, [
5289e808
PC
1330 AC_TRY_COMPILE([#define __STDC_LIMIT_MACROS
1331 #define __STDC_CONSTANT_MACROS
1332 #include <stdint.h>],
2a1d6346 1333 [typedef int8_t my_int8_t;
5289e808
PC
1334 my_int8_t i8 = INT8_MIN;
1335 i8 = INT8_MAX;
2a1d6346 1336 typedef int16_t my_int16_t;
5289e808
PC
1337 my_int16_t i16 = INT16_MIN;
1338 i16 = INT16_MAX;
2a1d6346 1339 typedef int32_t my_int32_t;
5289e808
PC
1340 my_int32_t i32 = INT32_MIN;
1341 i32 = INT32_MAX;
2a1d6346 1342 typedef int64_t my_int64_t;
5289e808
PC
1343 my_int64_t i64 = INT64_MIN;
1344 i64 = INT64_MAX;
2a1d6346 1345 typedef int_fast8_t my_int_fast8_t;
5289e808
PC
1346 my_int_fast8_t if8 = INT_FAST8_MIN;
1347 if8 = INT_FAST8_MAX;
2a1d6346 1348 typedef int_fast16_t my_int_fast16_t;
5289e808
PC
1349 my_int_fast16_t if16 = INT_FAST16_MIN;
1350 if16 = INT_FAST16_MAX;
2a1d6346 1351 typedef int_fast32_t my_int_fast32_t;
5289e808
PC
1352 my_int_fast32_t if32 = INT_FAST32_MIN;
1353 if32 = INT_FAST32_MAX;
1354 typedef int_fast64_t my_int_fast64_t;
1355 my_int_fast64_t if64 = INT_FAST64_MIN;
1356 if64 = INT_FAST64_MAX;
2a1d6346 1357 typedef int_least8_t my_int_least8_t;
5289e808
PC
1358 my_int_least8_t il8 = INT_LEAST8_MIN;
1359 il8 = INT_LEAST8_MAX;
2a1d6346 1360 typedef int_least16_t my_int_least16_t;
5289e808
PC
1361 my_int_least16_t il16 = INT_LEAST16_MIN;
1362 il16 = INT_LEAST16_MAX;
2a1d6346 1363 typedef int_least32_t my_int_least32_t;
5289e808
PC
1364 my_int_least32_t il32 = INT_LEAST32_MIN;
1365 il32 = INT_LEAST32_MAX;
2a1d6346 1366 typedef int_least64_t my_int_least64_t;
5289e808
PC
1367 my_int_least64_t il64 = INT_LEAST64_MIN;
1368 il64 = INT_LEAST64_MAX;
2a1d6346 1369 typedef intmax_t my_intmax_t;
5289e808
PC
1370 my_intmax_t im = INTMAX_MAX;
1371 im = INTMAX_MIN;
2a1d6346 1372 typedef intptr_t my_intptr_t;
5289e808
PC
1373 my_intptr_t ip = INTPTR_MAX;
1374 ip = INTPTR_MIN;
2a1d6346 1375 typedef uint8_t my_uint8_t;
5289e808
PC
1376 my_uint8_t ui8 = UINT8_MAX;
1377 ui8 = UINT8_MAX;
2a1d6346 1378 typedef uint16_t my_uint16_t;
5289e808
PC
1379 my_uint16_t ui16 = UINT16_MAX;
1380 ui16 = UINT16_MAX;
2a1d6346 1381 typedef uint32_t my_uint32_t;
5289e808
PC
1382 my_uint32_t ui32 = UINT32_MAX;
1383 ui32 = UINT32_MAX;
2a1d6346 1384 typedef uint64_t my_uint64_t;
5289e808
PC
1385 my_uint64_t ui64 = UINT64_MAX;
1386 ui64 = UINT64_MAX;
2a1d6346 1387 typedef uint_fast8_t my_uint_fast8_t;
5289e808
PC
1388 my_uint_fast8_t uif8 = UINT_FAST8_MAX;
1389 uif8 = UINT_FAST8_MAX;
2a1d6346 1390 typedef uint_fast16_t my_uint_fast16_t;
5289e808
PC
1391 my_uint_fast16_t uif16 = UINT_FAST16_MAX;
1392 uif16 = UINT_FAST16_MAX;
2a1d6346 1393 typedef uint_fast32_t my_uint_fast32_t;
5289e808
PC
1394 my_uint_fast32_t uif32 = UINT_FAST32_MAX;
1395 uif32 = UINT_FAST32_MAX;
1396 typedef uint_fast64_t my_uint_fast64_t;
1397 my_uint_fast64_t uif64 = UINT_FAST64_MAX;
1398 uif64 = UINT_FAST64_MAX;
2a1d6346 1399 typedef uint_least8_t my_uint_least8_t;
5289e808
PC
1400 my_uint_least8_t uil8 = UINT_LEAST8_MAX;
1401 uil8 = UINT_LEAST8_MAX;
2a1d6346 1402 typedef uint_least16_t my_uint_least16_t;
5289e808
PC
1403 my_uint_least16_t uil16 = UINT_LEAST16_MAX;
1404 uil16 = UINT_LEAST16_MAX;
2a1d6346 1405 typedef uint_least32_t my_uint_least32_t;
5289e808
PC
1406 my_uint_least32_t uil32 = UINT_LEAST32_MAX;
1407 uil32 = UINT_LEAST32_MAX;
2a1d6346 1408 typedef uint_least64_t my_uint_least64_t;
5289e808
PC
1409 my_uint_least64_t uil64 = UINT_LEAST64_MAX;
1410 uil64 = UINT_LEAST64_MAX;
2a1d6346 1411 typedef uintmax_t my_uintmax_t;
5289e808
PC
1412 my_uintmax_t uim = UINTMAX_MAX;
1413 uim = UINTMAX_MAX;
2a1d6346 1414 typedef uintptr_t my_uintptr_t;
5289e808
PC
1415 my_uintptr_t uip = UINTPTR_MAX;
1416 uip = UINTPTR_MAX;
0f24e8de
PC
1417 ],[glibcxx_cv_c99_stdint_tr1=yes],
1418 [glibcxx_cv_c99_stdint_tr1=no])
2a1d6346 1419 ])
6d26724a
RW
1420 AC_MSG_RESULT($glibcxx_cv_c99_stdint_tr1)
1421 if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
2a1d6346
PC
1422 AC_DEFINE(_GLIBCXX_USE_C99_STDINT_TR1, 1,
1423 [Define if C99 types in <stdint.h> should be imported in
1424 <tr1/cstdint> in namespace std::tr1.])
1425 fi
1426
4f0de5dd
PC
1427 # Check for the existence of <math.h> functions.
1428 AC_MSG_CHECKING([for ISO C99 support to TR1 in <math.h>])
6d26724a 1429 AC_CACHE_VAL(glibcxx_cv_c99_math_tr1, [
4f0de5dd 1430 AC_TRY_COMPILE([#include <math.h>],
9a7ab578
PC
1431 [typedef double_t my_double_t;
1432 typedef float_t my_float_t;
1433 acosh(0.0);
4f0de5dd
PC
1434 acoshf(0.0f);
1435 acoshl(0.0l);
1436 asinh(0.0);
1437 asinhf(0.0f);
1438 asinhl(0.0l);
1439 atanh(0.0);
1440 atanhf(0.0f);
1441 atanhl(0.0l);
1442 cbrt(0.0);
1443 cbrtf(0.0f);
1444 cbrtl(0.0l);
1445 copysign(0.0, 0.0);
1446 copysignf(0.0f, 0.0f);
1447 copysignl(0.0l, 0.0l);
1448 erf(0.0);
1449 erff(0.0f);
1450 erfl(0.0l);
1451 erfc(0.0);
1452 erfcf(0.0f);
1453 erfcl(0.0l);
1454 exp2(0.0);
1455 exp2f(0.0f);
1456 exp2l(0.0l);
1457 expm1(0.0);
1458 expm1f(0.0f);
1459 expm1l(0.0l);
1460 fdim(0.0, 0.0);
1461 fdimf(0.0f, 0.0f);
1462 fdiml(0.0l, 0.0l);
1463 fma(0.0, 0.0, 0.0);
1464 fmaf(0.0f, 0.0f, 0.0f);
1465 fmal(0.0l, 0.0l, 0.0l);
1466 fmax(0.0, 0.0);
1467 fmaxf(0.0f, 0.0f);
1468 fmaxl(0.0l, 0.0l);
1469 fmin(0.0, 0.0);
1470 fminf(0.0f, 0.0f);
1471 fminl(0.0l, 0.0l);
1472 hypot(0.0, 0.0);
1473 hypotf(0.0f, 0.0f);
1474 hypotl(0.0l, 0.0l);
1475 ilogb(0.0);
1476 ilogbf(0.0f);
1477 ilogbl(0.0l);
1478 lgamma(0.0);
1479 lgammaf(0.0f);
1480 lgammal(0.0l);
1481 llrint(0.0);
1482 llrintf(0.0f);
1483 llrintl(0.0l);
1484 llround(0.0);
1485 llroundf(0.0f);
1486 llroundl(0.0l);
1487 log1p(0.0);
1488 log1pf(0.0f);
1489 log1pl(0.0l);
1490 log2(0.0);
1491 log2f(0.0f);
1492 log2l(0.0l);
1493 logb(0.0);
1494 logbf(0.0f);
1495 logbl(0.0l);
1496 lrint(0.0);
1497 lrintf(0.0f);
1498 lrintl(0.0l);
1499 lround(0.0);
1500 lroundf(0.0f);
1501 lroundl(0.0l);
1502 nan(0);
1503 nanf(0);
1504 nanl(0);
1505 nearbyint(0.0);
1506 nearbyintf(0.0f);
1507 nearbyintl(0.0l);
1508 nextafter(0.0, 0.0);
1509 nextafterf(0.0f, 0.0f);
1510 nextafterl(0.0l, 0.0l);
1511 nexttoward(0.0, 0.0);
1512 nexttowardf(0.0f, 0.0f);
1513 nexttowardl(0.0l, 0.0l);
1514 remainder(0.0, 0.0);
1515 remainderf(0.0f, 0.0f);
1516 remainderl(0.0l, 0.0l);
1517 remquo(0.0, 0.0, 0);
a5d137be
PC
1518 remquof(0.0f, 0.0f, 0);
1519 remquol(0.0l, 0.0l, 0);
4f0de5dd
PC
1520 rint(0.0);
1521 rintf(0.0f);
1522 rintl(0.0l);
1523 round(0.0);
1524 roundf(0.0f);
1525 roundl(0.0l);
1526 scalbln(0.0, 0l);
1527 scalblnf(0.0f, 0l);
1528 scalblnl(0.0l, 0l);
1529 scalbn(0.0, 0);
1530 scalbnf(0.0f, 0);
1531 scalbnl(0.0l, 0);
1532 tgamma(0.0);
1533 tgammaf(0.0f);
1534 tgammal(0.0l);
1535 trunc(0.0);
1536 truncf(0.0f);
1537 truncl(0.0l);
6d26724a 1538 ],[glibcxx_cv_c99_math_tr1=yes], [glibcxx_cv_c99_math_tr1=no])
4f0de5dd 1539 ])
6d26724a
RW
1540 AC_MSG_RESULT($glibcxx_cv_c99_math_tr1)
1541 if test x"$glibcxx_cv_c99_math_tr1" = x"yes"; then
4f0de5dd
PC
1542 AC_DEFINE(_GLIBCXX_USE_C99_MATH_TR1, 1,
1543 [Define if C99 functions or macros in <math.h> should be imported
1544 in <tr1/cmath> in namespace std::tr1.])
1545 fi
1546
03bf3bc1 1547 # Check for the existence of <inttypes.h> functions (NB: doesn't make
a834e097 1548 # sense if the glibcxx_cv_c99_stdint_tr1 check fails, per C99, 7.8/1).
03bf3bc1 1549 ac_c99_inttypes_tr1=no;
6d26724a 1550 if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
03bf3bc1
PC
1551 AC_MSG_CHECKING([for ISO C99 support to TR1 in <inttypes.h>])
1552 AC_TRY_COMPILE([#include <inttypes.h>],
1553 [intmax_t i, numer, denom, base;
1554 const char* s;
1555 char** endptr;
af66a43e
PC
1556 intmax_t ret = imaxabs(i);
1557 imaxdiv_t dret = imaxdiv(numer, denom);
03bf3bc1 1558 ret = strtoimax(s, endptr, base);
af66a43e 1559 uintmax_t uret = strtoumax(s, endptr, base);
03bf3bc1
PC
1560 ],[ac_c99_inttypes_tr1=yes], [ac_c99_inttypes_tr1=no])
1561 fi
52a64bd3
PC
1562 AC_MSG_RESULT($ac_c99_inttypes_tr1)
1563 if test x"$ac_c99_inttypes_tr1" = x"yes"; then
1564 AC_DEFINE(_GLIBCXX_USE_C99_INTTYPES_TR1, 1,
1565 [Define if C99 functions in <inttypes.h> should be imported in
03bf3bc1 1566 <tr1/cinttypes> in namespace std::tr1.])
52a64bd3
PC
1567 fi
1568
a834e097
PC
1569 # Check for the existence of whcar_t <inttypes.h> functions (NB: doesn't
1570 # make sense if the glibcxx_cv_c99_stdint_tr1 check fails, per C99, 7.8/1).
1571 ac_c99_inttypes_wchar_t_tr1=no;
1572 if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
1573 AC_MSG_CHECKING([for wchar_t ISO C99 support to TR1 in <inttypes.h>])
1574 AC_TRY_COMPILE([#include <inttypes.h>],
1575 [intmax_t base;
1576 const wchar_t* s;
1577 wchar_t** endptr;
1578 intmax_t ret = wcstoimax(s, endptr, base);
1579 uintmax_t uret = wcstoumax(s, endptr, base);
1580 ],[ac_c99_inttypes_wchar_t_tr1=yes],
1581 [ac_c99_inttypes_wchar_t_tr1=no])
1582 fi
1583 AC_MSG_RESULT($ac_c99_inttypes_wchar_t_tr1)
1584 if test x"$ac_c99_inttypes_wchar_t_tr1" = x"yes"; then
1585 AC_DEFINE(_GLIBCXX_USE_C99_INTTYPES_WCHAR_T_TR1, 1,
1586 [Define if wchar_t C99 functions in <inttypes.h> should be
1587 imported in <tr1/cinttypes> in namespace std::tr1.])
1588 fi
1589
1e41a98c
PC
1590 # Check for the existence of the <stdbool.h> header.
1591 AC_CHECK_HEADERS(stdbool.h)
1592
18f310b7 1593 CXXFLAGS="$ac_save_CXXFLAGS"
bd2bb1ea
PC
1594 AC_LANG_RESTORE
1595])
1596
d8bc9819 1597dnl
9ce0a22e 1598dnl Check whether "/dev/random" and "/dev/urandom" are available for the
d8bc9819
PC
1599dnl random_device of "TR1" (Chapter 5.1, "Random number generation").
1600dnl
1601AC_DEFUN([GLIBCXX_CHECK_RANDOM_TR1], [
1602
9ce0a22e 1603 AC_MSG_CHECKING([for "/dev/random" and "/dev/urandom" for TR1 random_device])
6d26724a 1604 AC_CACHE_VAL(glibcxx_cv_random_tr1, [
9ce0a22e
PC
1605 if test -r /dev/random && test -r /dev/urandom; then
1606 glibcxx_cv_random_tr1=yes;
1607 else
1608 glibcxx_cv_random_tr1=no;
1609 fi
d8bc9819 1610 ])
6d26724a 1611 AC_MSG_RESULT($glibcxx_cv_random_tr1)
9ce0a22e 1612
6d26724a 1613 if test x"$glibcxx_cv_random_tr1" = x"yes"; then
d8bc9819 1614 AC_DEFINE(_GLIBCXX_USE_RANDOM_TR1, 1,
9ce0a22e 1615 [Define if /dev/random and /dev/urandom are available for
d8bc9819
PC
1616 the random_device of TR1 (Chapter 5.1).])
1617 fi
1618
1619])
bd2bb1ea 1620
1814157e 1621dnl
ddc9c40d
PC
1622dnl Compute the EOF, SEEK_CUR, and SEEK_END integer constants.
1623dnl
1624AC_DEFUN([GLIBCXX_COMPUTE_STDIO_INTEGER_CONSTANTS], [
1625
9b04fa91 1626 AC_CACHE_CHECK([for the value of EOF], glibcxx_cv_stdio_eof, [
ddc9c40d
PC
1627 AC_COMPUTE_INT([glibcxx_cv_stdio_eof], [[EOF]],
1628 [#include <stdio.h>],
1629 [AC_MSG_ERROR([computing EOF failed])])
1630 ])
ddc9c40d
PC
1631 AC_DEFINE_UNQUOTED(_GLIBCXX_STDIO_EOF, $glibcxx_cv_stdio_eof,
1632 [Define to the value of the EOF integer constant.])
1633
9b04fa91 1634 AC_CACHE_CHECK([for the value of SEEK_CUR], glibcxx_cv_stdio_seek_cur, [
ddc9c40d
PC
1635 AC_COMPUTE_INT([glibcxx_cv_stdio_seek_cur], [[SEEK_CUR]],
1636 [#include <stdio.h>],
1637 [AC_MSG_ERROR([computing SEEK_CUR failed])])
1638 ])
ddc9c40d
PC
1639 AC_DEFINE_UNQUOTED(_GLIBCXX_STDIO_SEEK_CUR, $glibcxx_cv_stdio_seek_cur,
1640 [Define to the value of the SEEK_CUR integer constant.])
1641
9b04fa91 1642 AC_CACHE_CHECK([for the value of SEEK_END], glibcxx_cv_stdio_seek_end, [
ddc9c40d
PC
1643 AC_COMPUTE_INT([glibcxx_cv_stdio_seek_end], [[SEEK_END]],
1644 [#include <stdio.h>],
1645 [AC_MSG_ERROR([computing SEEK_END failed])])
1646 ])
ddc9c40d
PC
1647 AC_DEFINE_UNQUOTED(_GLIBCXX_STDIO_SEEK_END, $glibcxx_cv_stdio_seek_end,
1648 [Define to the value of the SEEK_END integer constant.])
1814157e
PC
1649])
1650
0646d8a3
BK
1651dnl
1652dnl Check whether macros, etc are present for <system_error>
1653dnl
1654AC_DEFUN([GLIBCXX_CHECK_SYSTEM_ERROR], [
1655
6d26724a
RW
1656m4_pushdef([n_syserr], [1])dnl
1657m4_foreach([syserr], [EOWNERDEAD, ENOTRECOVERABLE, ENOLINK, EPROTO, ENODATA,
70593ad2 1658 ENOSR, ENOSTR, ETIME, EBADMSG, ECANCELED,
6d26724a
RW
1659 EOVERFLOW, ENOTSUP, EIDRM, ETXTBSY],
1660[m4_pushdef([SYSERR], m4_toupper(syserr))dnl
1661AC_MSG_CHECKING([for syserr])
1662AC_CACHE_VAL([glibcxx_cv_system_error[]n_syserr], [
1663AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <errno.h>]],
1664 [int i = syserr;])],
1665 [glibcxx_cv_system_error[]n_syserr=yes],
1666 [glibcxx_cv_system_error[]n_syserr=no])
1667])
1668AC_MSG_RESULT([$glibcxx_cv_system_error[]n_syserr])
1669if test x"$glibcxx_cv_system_error[]n_syserr" = x"yes"; then
1670 AC_DEFINE([HAVE_]SYSERR, 1, [Define if ]syserr[ exists.])
1671fi
1672m4_define([n_syserr], m4_incr(n_syserr))dnl
1673m4_popdef([SYSERR])dnl
1674])
1675m4_popdef([n_syserr])dnl
0646d8a3
BK
1676])
1677
0214010c 1678dnl
ff66d28f
PE
1679dnl Check for what type of C headers to use.
1680dnl
1681dnl --enable-cheaders= [does stuff].
1682dnl --disable-cheaders [does not do anything, really].
1683dnl + Usage: GLIBCXX_ENABLE_CHEADERS[(DEFAULT)]
af13a7a6 1684dnl Where DEFAULT is either 'c' or 'c_std' or 'c_global'.
ff66d28f 1685dnl
f214923c 1686AC_DEFUN([GLIBCXX_ENABLE_CHEADERS], [
ff66d28f 1687 GLIBCXX_ENABLE(cheaders,$1,[=KIND],
af13a7a6 1688 [construct "C" headers for g++], [permit c|c_std|c_global])
ff66d28f
PE
1689 AC_MSG_NOTICE("C" header strategy set to $enable_cheaders)
1690
1691 C_INCLUDE_DIR='${glibcxx_srcdir}/include/'$enable_cheaders
1692
af13a7a6
BK
1693 # Allow overrides to configure.host here.
1694 if test $enable_cheaders = c_global; then
1695 c_compatibility=yes
1696 fi
1697
ff66d28f 1698 AC_SUBST(C_INCLUDE_DIR)
92eabea2
PE
1699 GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C, test $enable_cheaders = c)
1700 GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C_STD, test $enable_cheaders = c_std)
af13a7a6 1701 GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C_GLOBAL, test $enable_cheaders = c_global)
92eabea2 1702 GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_COMPATIBILITY, test $c_compatibility = yes)
ff66d28f
PE
1703])
1704
1705
0214010c 1706dnl
ff66d28f
PE
1707dnl Check for which locale library to use. The choice is mapped to
1708dnl a subdirectory of config/locale.
37bc6ca2 1709dnl
ff66d28f 1710dnl Default is generic.
0214010c 1711dnl
f214923c 1712AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
ff66d28f
PE
1713 GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@],
1714 [use MODEL for target locale package],
1715 [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
0258dc3a
BK
1716
1717 # Deal with gettext issues. Default to not using it (=no) until we detect
1718 # support for it later. Let the user turn it off via --e/d, but let that
1719 # default to on for easier handling.
1720 USE_NLS=no
1721 AC_ARG_ENABLE(nls,
1722 AC_HELP_STRING([--enable-nls],[use Native Language Support (default)]),
1723 [],
1724 [enable_nls=yes])
ff66d28f 1725
0258dc3a 1726 # Either a known packaage, or "auto"
ff66d28f
PE
1727 if test $enable_clocale = no || test $enable_clocale = yes; then
1728 enable_clocale=auto
1729 fi
0214010c
BK
1730 enable_clocale_flag=$enable_clocale
1731
0258dc3a 1732 # Probe for locale model to use if none specified.
ff66d28f
PE
1733 # Default to "generic".
1734 if test $enable_clocale_flag = auto; then
7d3998a4
PE
1735 case ${target_os} in
1736 linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
0258dc3a 1737 enable_clocale_flag=gnu
56deb74c 1738 ;;
a7f7b334 1739 darwin* | freebsd*)
f9686024
GK
1740 enable_clocale_flag=darwin
1741 ;;
56deb74c 1742 *)
ff66d28f
PE
1743 enable_clocale_flag=generic
1744 ;;
56deb74c
BK
1745 esac
1746 fi
1747
0258dc3a
BK
1748 # Sanity check model, and test for special functionality.
1749 if test $enable_clocale_flag = gnu; then
1750 AC_EGREP_CPP([_GLIBCXX_ok], [
1751 #include <features.h>
22b36782 1752 #if (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined(__UCLIBC__)
0258dc3a
BK
1753 _GLIBCXX_ok
1754 #endif
1755 ], enable_clocale_flag=gnu, enable_clocale_flag=generic)
1756
0258dc3a
BK
1757 # Set it to scream when it hurts.
1758 ac_save_CFLAGS="$CFLAGS"
1759 CFLAGS="-Wimplicit-function-declaration -Werror"
1760
1761 # Use strxfrm_l if available.
1762 AC_TRY_COMPILE([#define _GNU_SOURCE 1
1763 #include <string.h>
1764 #include <locale.h>],
1765 [char s[128]; __locale_t loc; strxfrm_l(s, "C", 5, loc);],
1766 AC_DEFINE(HAVE_STRXFRM_L, 1,
1767 [Define if strxfrm_l is available in <string.h>.]),)
1768
1769 # Use strerror_l if available.
1770 AC_TRY_COMPILE([#define _GNU_SOURCE 1
1771 #include <string.h>
1772 #include <locale.h>],
1773 [__locale_t loc; strerror_l(5, loc);],
1774 AC_DEFINE(HAVE_STRERROR_L, 1,
1775 [Define if strerror_l is available in <string.h>.]),)
1776
1777 CFLAGS="$ac_save_CFLAGS"
1778 fi
1779
1780 # Perhaps use strerror_r if available, and strerror_l isn't.
1781 ac_save_CFLAGS="$CFLAGS"
1782 CFLAGS="-Wimplicit-function-declaration -Werror"
1783 AC_TRY_COMPILE([#define _GNU_SOURCE 1
1784 #include <string.h>
1785 #include <locale.h>],
1786 [char s[128]; strerror_r(5, s, 128);],
1787 AC_DEFINE(HAVE_STRERROR_R, 1,
1788 [Define if strerror_r is available in <string.h>.]),)
1789 CFLAGS="$ac_save_CFLAGS"
501e321e 1790
ff66d28f 1791 # Set configure bits for specified locale package
0258dc3a 1792 AC_MSG_CHECKING([for C locale to use])
ff66d28f
PE
1793 case ${enable_clocale_flag} in
1794 generic)
33590f13
BK
1795 AC_MSG_RESULT(generic)
1796
1fa4bed7
BK
1797 CLOCALE_H=config/locale/generic/c_locale.h
1798 CLOCALE_CC=config/locale/generic/c_locale.cc
38cca750 1799 CCODECVT_CC=config/locale/generic/codecvt_members.cc
1fa4bed7
BK
1800 CCOLLATE_CC=config/locale/generic/collate_members.cc
1801 CCTYPE_CC=config/locale/generic/ctype_members.cc
1802 CMESSAGES_H=config/locale/generic/messages_members.h
1803 CMESSAGES_CC=config/locale/generic/messages_members.cc
1804 CMONEY_CC=config/locale/generic/monetary_members.cc
1805 CNUMERIC_CC=config/locale/generic/numeric_members.cc
1c26d8fd 1806 CTIME_H=config/locale/generic/time_members.h
1fa4bed7 1807 CTIME_CC=config/locale/generic/time_members.cc
89671b70 1808 CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
33590f13 1809 ;;
f9686024 1810 darwin)
a7f7b334 1811 AC_MSG_RESULT(darwin or freebsd)
f9686024
GK
1812
1813 CLOCALE_H=config/locale/generic/c_locale.h
1814 CLOCALE_CC=config/locale/generic/c_locale.cc
f9686024
GK
1815 CCODECVT_CC=config/locale/generic/codecvt_members.cc
1816 CCOLLATE_CC=config/locale/generic/collate_members.cc
1817 CCTYPE_CC=config/locale/darwin/ctype_members.cc
1818 CMESSAGES_H=config/locale/generic/messages_members.h
1819 CMESSAGES_CC=config/locale/generic/messages_members.cc
1820 CMONEY_CC=config/locale/generic/monetary_members.cc
1821 CNUMERIC_CC=config/locale/generic/numeric_members.cc
1822 CTIME_H=config/locale/generic/time_members.h
1823 CTIME_CC=config/locale/generic/time_members.cc
1824 CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
1825 ;;
1826
ff66d28f 1827 gnu)
0214010c 1828 AC_MSG_RESULT(gnu)
33590f13
BK
1829
1830 # Declare intention to use gettext, and add support for specific
1831 # languages.
248a9163 1832 # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
33590f13 1833 ALL_LINGUAS="de fr"
501e321e 1834
248a9163 1835 # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
501e321e
BK
1836 AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
1837 if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
ff66d28f 1838 USE_NLS=yes
501e321e 1839 fi
33590f13
BK
1840 # Export the build objects.
1841 for ling in $ALL_LINGUAS; do \
3d7c150e
BK
1842 glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
1843 glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
33590f13 1844 done
3d7c150e
BK
1845 AC_SUBST(glibcxx_MOFILES)
1846 AC_SUBST(glibcxx_POFILES)
33590f13 1847
1fa4bed7
BK
1848 CLOCALE_H=config/locale/gnu/c_locale.h
1849 CLOCALE_CC=config/locale/gnu/c_locale.cc
38cca750 1850 CCODECVT_CC=config/locale/gnu/codecvt_members.cc
1fa4bed7
BK
1851 CCOLLATE_CC=config/locale/gnu/collate_members.cc
1852 CCTYPE_CC=config/locale/gnu/ctype_members.cc
1853 CMESSAGES_H=config/locale/gnu/messages_members.h
1854 CMESSAGES_CC=config/locale/gnu/messages_members.cc
1855 CMONEY_CC=config/locale/gnu/monetary_members.cc
1856 CNUMERIC_CC=config/locale/gnu/numeric_members.cc
1c26d8fd 1857 CTIME_H=config/locale/gnu/time_members.h
1fa4bed7 1858 CTIME_CC=config/locale/gnu/time_members.cc
89671b70 1859 CLOCALE_INTERNAL_H=config/locale/gnu/c++locale_internal.h
0214010c 1860 ;;
ff66d28f 1861 ieee_1003.1-2001)
7f78b6ca 1862 AC_MSG_RESULT(IEEE 1003.1)
33590f13 1863
1fa4bed7
BK
1864 CLOCALE_H=config/locale/ieee_1003.1-2001/c_locale.h
1865 CLOCALE_CC=config/locale/ieee_1003.1-2001/c_locale.cc
38cca750 1866 CCODECVT_CC=config/locale/generic/codecvt_members.cc
1fa4bed7
BK
1867 CCOLLATE_CC=config/locale/generic/collate_members.cc
1868 CCTYPE_CC=config/locale/generic/ctype_members.cc
1869 CMESSAGES_H=config/locale/ieee_1003.1-2001/messages_members.h
1870 CMESSAGES_CC=config/locale/ieee_1003.1-2001/messages_members.cc
1871 CMONEY_CC=config/locale/generic/monetary_members.cc
1872 CNUMERIC_CC=config/locale/generic/numeric_members.cc
1c26d8fd 1873 CTIME_H=config/locale/generic/time_members.h
1fa4bed7 1874 CTIME_CC=config/locale/generic/time_members.cc
89671b70 1875 CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
0214010c 1876 ;;
0214010c
BK
1877 esac
1878
33590f13
BK
1879 # This is where the testsuite looks for locale catalogs, using the
1880 # -DLOCALEDIR define during testsuite compilation.
3d7c150e
BK
1881 glibcxx_localedir=${glibcxx_builddir}/po/share/locale
1882 AC_SUBST(glibcxx_localedir)
33590f13 1883
7f78b6ca
PE
1884 # A standalone libintl (e.g., GNU libintl) may be in use.
1885 if test $USE_NLS = yes; then
c67528fe
PE
1886 AC_CHECK_HEADERS([libintl.h], [], USE_NLS=no)
1887 AC_SEARCH_LIBS(gettext, intl, [], USE_NLS=no)
1888 fi
1889 if test $USE_NLS = yes; then
4651e622
KC
1890 AC_DEFINE(_GLIBCXX_USE_NLS, 1,
1891 [Define if NLS translations are to be used.])
7f78b6ca
PE
1892 fi
1893
4e10943d 1894 AC_SUBST(USE_NLS)
4a9d5109 1895 AC_SUBST(CLOCALE_H)
33590f13 1896 AC_SUBST(CMESSAGES_H)
6aa43d99
BK
1897 AC_SUBST(CCODECVT_CC)
1898 AC_SUBST(CCOLLATE_CC)
1899 AC_SUBST(CCTYPE_CC)
1900 AC_SUBST(CMESSAGES_CC)
1901 AC_SUBST(CMONEY_CC)
1902 AC_SUBST(CNUMERIC_CC)
1c26d8fd 1903 AC_SUBST(CTIME_H)
6aa43d99
BK
1904 AC_SUBST(CTIME_CC)
1905 AC_SUBST(CLOCALE_CC)
1906 AC_SUBST(CLOCALE_INTERNAL_H)
0214010c
BK
1907])
1908
1909
8b0d6051
BK
1910dnl
1911dnl Check for which std::allocator base class to use. The choice is
1912dnl mapped from a subdirectory of include/ext.
1913dnl
1914dnl Default is new.
1915dnl
1916AC_DEFUN([GLIBCXX_ENABLE_ALLOCATOR], [
347669a0 1917 AC_MSG_CHECKING([for std::allocator base class])
8b0d6051
BK
1918 GLIBCXX_ENABLE(libstdcxx-allocator,auto,[=KIND],
1919 [use KIND for target std::allocator base],
29d4adf4 1920 [permit new|malloc|mt|bitmap|pool|yes|no|auto])
7d3998a4 1921
8b0d6051
BK
1922 # If they didn't use this option switch, or if they specified --enable
1923 # with no specific model, we'll have to look for one. If they
1924 # specified --disable (???), do likewise.
7d3998a4
PE
1925 if test $enable_libstdcxx_allocator = no ||
1926 test $enable_libstdcxx_allocator = yes;
1927 then
8b0d6051
BK
1928 enable_libstdcxx_allocator=auto
1929 fi
1930
780028b6
BK
1931 # Either a known package, or "auto". Auto implies the default choice
1932 # for a particular platform.
8b0d6051
BK
1933 enable_libstdcxx_allocator_flag=$enable_libstdcxx_allocator
1934
1935 # Probe for host-specific support if no specific model is specified.
1936 # Default to "new".
1937 if test $enable_libstdcxx_allocator_flag = auto; then
1938 case ${target_os} in
780028b6 1939 linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
797308b2 1940 enable_libstdcxx_allocator_flag=new
780028b6 1941 ;;
8b0d6051
BK
1942 *)
1943 enable_libstdcxx_allocator_flag=new
1944 ;;
1945 esac
1946 fi
1947 AC_MSG_RESULT($enable_libstdcxx_allocator_flag)
1948
1949
1950 # Set configure bits for specified locale package
1951 case ${enable_libstdcxx_allocator_flag} in
1952 bitmap)
1953 ALLOCATOR_H=config/allocator/bitmap_allocator_base.h
1954 ALLOCATOR_NAME=__gnu_cxx::bitmap_allocator
1955 ;;
1956 malloc)
1957 ALLOCATOR_H=config/allocator/malloc_allocator_base.h
1958 ALLOCATOR_NAME=__gnu_cxx::malloc_allocator
1959 ;;
1960 mt)
1961 ALLOCATOR_H=config/allocator/mt_allocator_base.h
1962 ALLOCATOR_NAME=__gnu_cxx::__mt_alloc
1963 ;;
1964 new)
1965 ALLOCATOR_H=config/allocator/new_allocator_base.h
1966 ALLOCATOR_NAME=__gnu_cxx::new_allocator
1967 ;;
29d4adf4
PC
1968 pool)
1969 ALLOCATOR_H=config/allocator/pool_allocator_base.h
1970 ALLOCATOR_NAME=__gnu_cxx::__pool_alloc
1971 ;;
8b0d6051
BK
1972 esac
1973
1974 AC_SUBST(ALLOCATOR_H)
1975 AC_SUBST(ALLOCATOR_NAME)
1976])
1977
1978
b2dad0e3 1979dnl
ff66d28f
PE
1980dnl Check for whether the Boost-derived checks should be turned on.
1981dnl
1982dnl --enable-concept-checks turns them on.
1983dnl --disable-concept-checks leaves them off.
1984dnl + Usage: GLIBCXX_ENABLE_CONCEPT_CHECKS[(DEFAULT)]
1985dnl Where DEFAULT is either `yes' or `no'.
1986dnl
f214923c 1987AC_DEFUN([GLIBCXX_ENABLE_CONCEPT_CHECKS], [
ff66d28f
PE
1988 GLIBCXX_ENABLE(concept-checks,$1,,[use Boost-derived template checks])
1989 if test $enable_concept_checks = yes; then
4651e622
KC
1990 AC_DEFINE(_GLIBCXX_CONCEPT_CHECKS, 1,
1991 [Define to use concept checking code from the boost libraries.])
ff66d28f
PE
1992 fi
1993])
1994
c2ba9709
JS
1995dnl
1996dnl Check for parallel mode pre-requisites, including OpenMP support.
1997dnl
1998dnl + Usage: GLIBCXX_ENABLE_PARALLEL
1999dnl
2000AC_DEFUN([GLIBCXX_ENABLE_PARALLEL], [
2001
2002 enable_parallel=no;
6995087d 2003
0aec205c
BK
2004 # See if configured libgomp/omp.h exists. (libgomp may be in
2005 # noconfigdirs but not explicitly disabled.)
aae29963 2006 if echo " ${TARGET_CONFIGDIRS} " | grep " libgomp " > /dev/null 2>&1 ; then
0aec205c
BK
2007 enable_parallel=yes;
2008 else
aae29963 2009 AC_MSG_NOTICE([target-libgomp not built])
c2ba9709
JS
2010 fi
2011
2012 AC_MSG_CHECKING([for parallel mode support])
2013 AC_MSG_RESULT([$enable_parallel])
2014 GLIBCXX_CONDITIONAL(ENABLE_PARALLEL, test $enable_parallel = yes)
2015])
2016
ff66d28f 2017
b2dad0e3 2018dnl
ff66d28f 2019dnl Check for which I/O library to use: stdio, or something specific.
37bc6ca2 2020dnl
ff66d28f 2021dnl Default is stdio.
b2dad0e3 2022dnl
f214923c 2023AC_DEFUN([GLIBCXX_ENABLE_CSTDIO], [
ff66d28f
PE
2024 AC_MSG_CHECKING([for underlying I/O to use])
2025 GLIBCXX_ENABLE(cstdio,stdio,[=PACKAGE],
2026 [use target-specific I/O package], [permit stdio])
2027
2028 # Now that libio has been removed, you can have any color you want as long
2029 # as it's black. This is one big no-op until other packages are added, but
2030 # showing the framework never hurts.
2031 case ${enable_cstdio} in
2032 stdio)
33590f13
BK
2033 CSTDIO_H=config/io/c_io_stdio.h
2034 BASIC_FILE_H=config/io/basic_file_stdio.h
2035 BASIC_FILE_CC=config/io/basic_file_stdio.cc
9717c75c 2036 AC_MSG_RESULT(stdio)
dd75251f 2037 ;;
b2dad0e3 2038 esac
cc5112c9 2039
4a9d5109
SW
2040 AC_SUBST(CSTDIO_H)
2041 AC_SUBST(BASIC_FILE_H)
6aa43d99 2042 AC_SUBST(BASIC_FILE_CC)
b2dad0e3
BK
2043])
2044
2045
9e57d5ca 2046dnl
ff66d28f 2047dnl Check for "unusual" flags to pass to the compiler while building.
9e57d5ca 2048dnl
ff66d28f
PE
2049dnl --enable-cxx-flags='-foo -bar -baz' is a general method for passing
2050dnl experimental flags such as -fpch, -fIMI, -Dfloat=char, etc.
2051dnl --disable-cxx-flags passes nothing.
2052dnl + See http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00131.html
2053dnl http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00284.html
2054dnl http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00035.html
2055dnl + Usage: GLIBCXX_ENABLE_CXX_FLAGS(default flags)
2056dnl If "default flags" is an empty string, the effect is the same
2057dnl as --disable or --enable=no.
44f0760e 2058dnl
f214923c 2059AC_DEFUN([GLIBCXX_ENABLE_CXX_FLAGS], [dnl
ff66d28f
PE
2060 AC_MSG_CHECKING([for extra compiler flags for building])
2061 GLIBCXX_ENABLE(cxx-flags,$1,[=FLAGS],
2062 [pass compiler FLAGS when building library],
2063 [case "x$enable_cxx_flags" in
2064 xno | x) enable_cxx_flags= ;;
2065 x-*) ;;
2066 *) AC_MSG_ERROR(_g_switch needs compiler flags as arguments) ;;
2067 esac])
2068
2069 # Run through flags (either default or command-line) and set anything
2070 # extra (e.g., #defines) that must accompany particular g++ options.
2071 if test -n "$enable_cxx_flags"; then
2072 for f in $enable_cxx_flags; do
2073 case "$f" in
2074 -fhonor-std) ;;
2075 -*) ;;
2076 *) # and we're trying to pass /what/ exactly?
2077 AC_MSG_ERROR([compiler flags start with a -]) ;;
2078 esac
2079 done
44f0760e
BK
2080 fi
2081
ff66d28f
PE
2082 EXTRA_CXX_FLAGS="$enable_cxx_flags"
2083 AC_MSG_RESULT($EXTRA_CXX_FLAGS)
2084 AC_SUBST(EXTRA_CXX_FLAGS)
9e57d5ca
BK
2085])
2086
ff66d28f 2087
ff66d28f
PE
2088dnl
2089dnl Check to see if debugging libraries are to be built.
2090dnl
2091dnl --enable-libstdcxx-debug
2092dnl builds a separate set of debugging libraries in addition to the
2093dnl normal (shared, static) libstdc++ binaries.
2094dnl
2095dnl --disable-libstdcxx-debug
2096dnl builds only one (non-debug) version of libstdc++.
2097dnl
2098dnl --enable-libstdcxx-debug-flags=FLAGS
2099dnl iff --enable-debug == yes, then use FLAGS to build the debug library.
2100dnl
2101dnl + Usage: GLIBCXX_ENABLE_DEBUG[(DEFAULT)]
2102dnl Where DEFAULT is either `yes' or `no'.
2103dnl
f214923c 2104AC_DEFUN([GLIBCXX_ENABLE_DEBUG], [
ff66d28f
PE
2105 AC_MSG_CHECKING([for additional debug build])
2106 GLIBCXX_ENABLE(libstdcxx-debug,$1,,[build extra debug library])
2107 AC_MSG_RESULT($enable_libstdcxx_debug)
92eabea2 2108 GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_DEBUG, test $enable_libstdcxx_debug = yes)
b2dad0e3
BK
2109])
2110
2111
52a11cbf 2112dnl
ff66d28f 2113dnl Check for explicit debug flags.
52a11cbf 2114dnl
ff66d28f
PE
2115dnl --enable-libstdcxx-debug-flags='-O1'
2116dnl is a general method for passing flags to be used when
2117dnl building debug libraries with --enable-debug.
52a11cbf 2118dnl
ff66d28f
PE
2119dnl --disable-libstdcxx-debug-flags does nothing.
2120dnl + Usage: GLIBCXX_ENABLE_DEBUG_FLAGS(default flags)
2121dnl If "default flags" is an empty string, the effect is the same
2122dnl as --disable or --enable=no.
2123dnl
f214923c 2124AC_DEFUN([GLIBCXX_ENABLE_DEBUG_FLAGS], [
ff66d28f
PE
2125 GLIBCXX_ENABLE(libstdcxx-debug-flags,[$1],[=FLAGS],
2126 [pass compiler FLAGS when building debug library],
2127 [case "x$enable_libstdcxx_debug_flags" in
2128 xno | x) enable_libstdcxx_debug_flags= ;;
2129 x-*) ;;
2130 *) AC_MSG_ERROR(_g_switch needs compiler flags as arguments) ;;
2131 esac])
2132
2133 # Option parsed, now set things appropriately
2134 DEBUG_FLAGS="$enable_libstdcxx_debug_flags"
2135 AC_SUBST(DEBUG_FLAGS)
2136
2137 AC_MSG_NOTICE([Debug build flags set to $DEBUG_FLAGS])
52a11cbf
RH
2138])
2139
2140
92eabea2
PE
2141dnl
2142dnl Check if the user only wants a freestanding library implementation.
2143dnl
2144dnl --disable-hosted-libstdcxx will turn off most of the library build,
2145dnl installing only the headers required by [17.4.1.3] and the language
2146dnl support library. More than that will be built (to keep the Makefiles
2147dnl conveniently clean), but not installed.
2148dnl
2149dnl Sets:
2150dnl is_hosted (yes/no)
2151dnl
3660e02f
PE
2152dnl Defines:
2153dnl _GLIBCXX_HOSTED (always defined, either to 1 or 0)
2154dnl
f214923c 2155AC_DEFUN([GLIBCXX_ENABLE_HOSTED], [
92eabea2
PE
2156 AC_ARG_ENABLE([hosted-libstdcxx],
2157 AC_HELP_STRING([--disable-hosted-libstdcxx],
2158 [only build freestanding C++ runtime support]),,
4c24b21a
MM
2159 [case "$host" in
2160 arm*-*-symbianelf*)
2161 enable_hosted_libstdcxx=no
2162 ;;
2163 *)
2164 enable_hosted_libstdcxx=yes
2165 ;;
2166 esac])
92eabea2
PE
2167 if test "$enable_hosted_libstdcxx" = no; then
2168 AC_MSG_NOTICE([Only freestanding libraries will be built])
2169 is_hosted=no
3660e02f 2170 hosted_define=0
92eabea2
PE
2171 enable_abi_check=no
2172 enable_libstdcxx_pch=no
2173 else
2174 is_hosted=yes
3660e02f 2175 hosted_define=1
92eabea2
PE
2176 fi
2177 GLIBCXX_CONDITIONAL(GLIBCXX_HOSTED, test $is_hosted = yes)
3660e02f
PE
2178 AC_DEFINE_UNQUOTED(_GLIBCXX_HOSTED, $hosted_define,
2179 [Define to 1 if a full hosted library is built, or 0 if freestanding.])
92eabea2
PE
2180])
2181
2182
6c3a9f72 2183dnl
347669a0 2184dnl Check for template specializations for the 'long long' type.
22248545
PE
2185dnl The result determines only whether 'long long' I/O is enabled; things
2186dnl like numeric_limits<> specializations are always available.
6c3a9f72 2187dnl
3d7c150e
BK
2188dnl --enable-long-long defines _GLIBCXX_USE_LONG_LONG
2189dnl --disable-long-long leaves _GLIBCXX_USE_LONG_LONG undefined
2190dnl + Usage: GLIBCXX_ENABLE_LONG_LONG[(DEFAULT)]
ff66d28f 2191dnl Where DEFAULT is either `yes' or `no'.
6c3a9f72 2192dnl
f214923c 2193AC_DEFUN([GLIBCXX_ENABLE_LONG_LONG], [
347669a0 2194 GLIBCXX_ENABLE(long-long,$1,,[enable template specializations for 'long long'])
ff66d28f 2195 if test $enable_long_long = yes; then
4651e622
KC
2196 AC_DEFINE(_GLIBCXX_USE_LONG_LONG, 1,
2197 [Define if code specialized for long long should be used.])
6c3a9f72 2198 fi
347669a0
BK
2199 AC_MSG_CHECKING([for enabled long long specializations])
2200 AC_MSG_RESULT([$enable_long_long])
2201])
2202
2203
4cdc8761
BK
2204dnl
2205dnl Check for decimal floating point.
2206dnl See:
2207dnl http://gcc.gnu.org/onlinedocs/gcc/Decimal-Float.html#Decimal-Float
2208dnl
2209dnl This checks to see if the host supports decimal floating point types.
2210dnl
2211dnl Defines:
2212dnl _GLIBCXX_USE_DECIMAL_FLOAT
2213dnl
2214AC_DEFUN([GLIBCXX_ENABLE_DECIMAL_FLOAT], [
2215
2216 # Fake what AC_TRY_COMPILE does, without linking as this is
2217 # unnecessary for this test.
2218
2219 cat > conftest.$ac_ext << EOF
2220[#]line __oline__ "configure"
2221int main()
2222{
2223 _Decimal32 d1;
2224 _Decimal64 d2;
2225 _Decimal128 d3;
2226 return 0;
2227}
2228EOF
2229
2230 AC_MSG_CHECKING([for ISO/IEC TR 24733 ])
2231 if AC_TRY_EVAL(ac_compile); then
2232 AC_DEFINE(_GLIBCXX_USE_DECIMAL_FLOAT, 1,
2233 [Define if ISO/IEC TR 24733 decimal floating point types are supported on this host.])
2234 enable_dfp=yes
2235 else
2236 enable_dfp=no
2237 fi
2238 AC_MSG_RESULT($enable_dfp)
2239 rm -f conftest*
2240])
2241
347669a0
BK
2242dnl
2243dnl Check for template specializations for the 'wchar_t' type.
2244dnl
2245dnl --enable-wchar_t defines _GLIBCXX_USE_WCHAR_T
2246dnl --disable-wchar_t leaves _GLIBCXX_USE_WCHAR_T undefined
2247dnl + Usage: GLIBCXX_ENABLE_WCHAR_T[(DEFAULT)]
2248dnl Where DEFAULT is either `yes' or `no'.
2249dnl
8a9b2875 2250dnl Necessary support must also be present.
347669a0
BK
2251dnl
2252AC_DEFUN([GLIBCXX_ENABLE_WCHAR_T], [
2253 GLIBCXX_ENABLE(wchar_t,$1,,[enable template specializations for 'wchar_t'])
8a9b2875
PC
2254
2255 # Test wchar.h for mbstate_t, which is needed for char_traits and fpos.
2256 AC_CHECK_HEADERS(wchar.h, ac_has_wchar_h=yes, ac_has_wchar_h=no)
2257 AC_MSG_CHECKING([for mbstate_t])
2258 AC_TRY_COMPILE([#include <wchar.h>],
2259 [mbstate_t teststate;],
2260 have_mbstate_t=yes, have_mbstate_t=no)
2261 AC_MSG_RESULT($have_mbstate_t)
2262 if test x"$have_mbstate_t" = xyes; then
2263 AC_DEFINE(HAVE_MBSTATE_T,1,[Define if mbstate_t exists in wchar.h.])
2264 fi
2265
d814595c
PC
2266 # Test it always, for use in GLIBCXX_ENABLE_C99, together with
2267 # ac_has_wchar_h.
2268 AC_CHECK_HEADERS(wctype.h, ac_has_wctype_h=yes, ac_has_wctype_h=no)
2269
8a9b2875
PC
2270 if test x"$enable_wchar_t" = x"yes"; then
2271
2272 AC_LANG_SAVE
2273 AC_LANG_CPLUSPLUS
2274
8a9b2875
PC
2275 if test x"$ac_has_wchar_h" = xyes &&
2276 test x"$ac_has_wctype_h" = xyes; then
2277 AC_TRY_COMPILE([#include <wchar.h>
2278 #include <stddef.h>
2279 wint_t i;
2280 long l = WEOF;
2281 long j = WCHAR_MIN;
2282 long k = WCHAR_MAX;
2283 namespace test
2284 {
2285 using ::btowc;
2286 using ::fgetwc;
2287 using ::fgetws;
2288 using ::fputwc;
2289 using ::fputws;
2290 using ::fwide;
2291 using ::fwprintf;
2292 using ::fwscanf;
2293 using ::getwc;
2294 using ::getwchar;
2295 using ::mbrlen;
2296 using ::mbrtowc;
2297 using ::mbsinit;
2298 using ::mbsrtowcs;
2299 using ::putwc;
2300 using ::putwchar;
2301 using ::swprintf;
2302 using ::swscanf;
2303 using ::ungetwc;
2304 using ::vfwprintf;
2305 using ::vswprintf;
2306 using ::vwprintf;
2307 using ::wcrtomb;
2308 using ::wcscat;
2309 using ::wcschr;
2310 using ::wcscmp;
2311 using ::wcscoll;
2312 using ::wcscpy;
2313 using ::wcscspn;
2314 using ::wcsftime;
2315 using ::wcslen;
2316 using ::wcsncat;
2317 using ::wcsncmp;
2318 using ::wcsncpy;
2319 using ::wcspbrk;
2320 using ::wcsrchr;
2321 using ::wcsrtombs;
2322 using ::wcsspn;
2323 using ::wcsstr;
2324 using ::wcstod;
2325 using ::wcstok;
2326 using ::wcstol;
2327 using ::wcstoul;
2328 using ::wcsxfrm;
2329 using ::wctob;
2330 using ::wmemchr;
2331 using ::wmemcmp;
2332 using ::wmemcpy;
2333 using ::wmemmove;
2334 using ::wmemset;
2335 using ::wprintf;
2336 using ::wscanf;
2337 }
2338 ],[],[], [enable_wchar_t=no])
2339 else
2340 enable_wchar_t=no
2341 fi
2342
2343 AC_LANG_RESTORE
2344 fi
2345
2346 if test x"$enable_wchar_t" = x"yes"; then
4651e622
KC
2347 AC_DEFINE(_GLIBCXX_USE_WCHAR_T, 1,
2348 [Define if code specialized for wchar_t should be used.])
347669a0 2349 fi
8a9b2875 2350
347669a0
BK
2351 AC_MSG_CHECKING([for enabled wchar_t specializations])
2352 AC_MSG_RESULT([$enable_wchar_t])
6c3a9f72
BK
2353])
2354
2355
99246c90 2356dnl
ff66d28f 2357dnl Check to see if building and using a C++ precompiled header can be done.
72ed2836 2358dnl
ff66d28f
PE
2359dnl --enable-libstdcxx-pch=yes
2360dnl default, this shows intent to use stdc++.h.gch If it looks like it
2361dnl may work, after some light-hearted attempts to puzzle out compiler
2362dnl support, flip bits on in include/Makefile.am
43ba4a58 2363dnl
ff66d28f
PE
2364dnl --disable-libstdcxx-pch
2365dnl turns off attempts to use or build stdc++.h.gch.
fe413112 2366dnl
ff66d28f
PE
2367dnl Substs:
2368dnl glibcxx_PCHFLAGS
fe413112 2369dnl
f214923c 2370AC_DEFUN([GLIBCXX_ENABLE_PCH], [
ff66d28f 2371 GLIBCXX_ENABLE(libstdcxx-pch,$1,,[build pre-compiled libstdc++ headers])
ff66d28f
PE
2372 if test $enable_libstdcxx_pch = yes; then
2373 AC_CACHE_CHECK([for compiler with PCH support],
2374 [glibcxx_cv_prog_CXX_pch],
2375 [ac_save_CXXFLAGS="$CXXFLAGS"
2376 CXXFLAGS="$CXXFLAGS -Werror -Winvalid-pch -Wno-deprecated"
2377 AC_LANG_SAVE
2378 AC_LANG_CPLUSPLUS
2379 echo '#include <math.h>' > conftest.h
2380 if $CXX $CXXFLAGS $CPPFLAGS -x c++-header conftest.h \
2381 -o conftest.h.gch 1>&5 2>&1 &&
2382 echo '#error "pch failed"' > conftest.h &&
2383 echo '#include "conftest.h"' > conftest.cc &&
2384 $CXX -c $CXXFLAGS $CPPFLAGS conftest.cc 1>&5 2>&1 ;
2385 then
2386 glibcxx_cv_prog_CXX_pch=yes
2387 else
2388 glibcxx_cv_prog_CXX_pch=no
2389 fi
2390 rm -f conftest*
2391 CXXFLAGS=$ac_save_CXXFLAGS
2392 AC_LANG_RESTORE
2393 ])
2394 enable_libstdcxx_pch=$glibcxx_cv_prog_CXX_pch
c4c064e7 2395 fi
747d0967 2396
797308b2
BK
2397 AC_MSG_CHECKING([for enabled PCH])
2398 AC_MSG_RESULT([$enable_libstdcxx_pch])
2399
92eabea2 2400 GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_PCH, test $enable_libstdcxx_pch = yes)
ff66d28f 2401 if test $enable_libstdcxx_pch = yes; then
c2ba9709 2402 glibcxx_PCHFLAGS="-include bits/stdc++.h"
c4c064e7 2403 else
ff66d28f 2404 glibcxx_PCHFLAGS=""
bbacb998 2405 fi
ff66d28f 2406 AC_SUBST(glibcxx_PCHFLAGS)
bbacb998
PC
2407])
2408
7cda84dc 2409
701a3eee
BK
2410dnl
2411dnl Check for atomic builtins.
2412dnl See:
2413dnl http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html#Atomic-Builtins
2414dnl
2415dnl This checks to see if the host supports the compiler-generated
35648b45
BK
2416dnl builtins for atomic operations for various integral sizes. Note, this
2417dnl is intended to be an all-or-nothing switch, so all the atomic operations
2418dnl that are used should be checked.
701a3eee
BK
2419dnl
2420dnl Note:
2cd9cdcc 2421dnl libgomp and libgfortran use a link test, see CHECK_SYNC_FETCH_AND_ADD.
701a3eee
BK
2422dnl
2423dnl Defines:
35648b45 2424dnl _GLIBCXX_ATOMIC_BUILTINS_1
50ce8d3d 2425dnl _GLIBCXX_ATOMIC_BUILTINS_2
35648b45 2426dnl _GLIBCXX_ATOMIC_BUILTINS_4
50ce8d3d 2427dnl _GLIBCXX_ATOMIC_BUILTINS_8
701a3eee
BK
2428dnl
2429AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS], [
701a3eee
BK
2430 AC_LANG_SAVE
2431 AC_LANG_CPLUSPLUS
35648b45 2432 old_CXXFLAGS="$CXXFLAGS"
2cd9cdcc
PC
2433
2434 # Do link tests if possible, instead asm tests, limited to some platforms
2435 # see discussion in PR target/40134, PR libstdc++/40133 and the thread
2436 # starting at http://gcc.gnu.org/ml/gcc-patches/2009-07/msg00322.html
2437 atomic_builtins_link_tests=no
2438 if test x$gcc_no_link != xyes; then
2439 # Can do link tests. Limit to some tested platforms
2440 case "$host" in
2441 *-*-linux* | *-*-uclinux* | *-*-kfreebsd*-gnu | *-*-gnu*)
2442 atomic_builtins_link_tests=yes
2443 ;;
2444 esac
2445 fi
2446
2447 if test x$atomic_builtins_link_tests = xyes; then
2448
2449 # Do link tests.
2450
2451 CXXFLAGS="$CXXFLAGS -fno-exceptions"
2452
2453 AC_MSG_CHECKING([for atomic builtins for bool])
2454 AC_CACHE_VAL(glibcxx_cv_atomic_bool, [
2455 AC_TRY_LINK(
2456 [ ],
2457 [typedef bool atomic_type;
2458 atomic_type c1;
2459 atomic_type c2;
2460 const atomic_type c3(0);
2461 __sync_fetch_and_add(&c1, c2);
2462 __sync_val_compare_and_swap(&c1, c3, c2);
2463 __sync_lock_test_and_set(&c1, c3);
2464 __sync_lock_release(&c1);
2465 __sync_synchronize();],
2466 [glibcxx_cv_atomic_bool=yes],
2467 [glibcxx_cv_atomic_bool=no])
2468 ])
2469 if test $glibcxx_cv_atomic_bool = yes; then
2470 AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_1, 1,
2471 [Define if builtin atomic operations for bool are supported on this host.])
2472 fi
2473 AC_MSG_RESULT($glibcxx_cv_atomic_bool)
2474
2475 AC_MSG_CHECKING([for atomic builtins for short])
2476 AC_CACHE_VAL(glibcxx_cv_atomic_short, [
2477 AC_TRY_LINK(
2478 [ ],
2479 [typedef short atomic_type;
2480 atomic_type c1;
2481 atomic_type c2;
2482 const atomic_type c3(0);
2483 __sync_fetch_and_add(&c1, c2);
2484 __sync_val_compare_and_swap(&c1, c3, c2);
2485 __sync_lock_test_and_set(&c1, c3);
2486 __sync_lock_release(&c1);
2487 __sync_synchronize();],
2488 [glibcxx_cv_atomic_short=yes],
2489 [glibcxx_cv_atomic_short=no])
2490 ])
2491 if test $glibcxx_cv_atomic_short = yes; then
2492 AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_2, 1,
2493 [Define if builtin atomic operations for short are supported on this host.])
2494 fi
2495 AC_MSG_RESULT($glibcxx_cv_atomic_short)
2496
2497 AC_MSG_CHECKING([for atomic builtins for int])
2498 AC_CACHE_VAL(glibcxx_cv_atomic_int, [
2499 AC_TRY_LINK(
2500 [ ],
2501 [typedef int atomic_type;
2502 atomic_type c1;
2503 atomic_type c2;
2504 const atomic_type c3(0);
2505 __sync_fetch_and_add(&c1, c2);
2506 __sync_val_compare_and_swap(&c1, c3, c2);
2507 __sync_lock_test_and_set(&c1, c3);
2508 __sync_lock_release(&c1);
2509 __sync_synchronize();],
2510 [glibcxx_cv_atomic_int=yes],
2511 [glibcxx_cv_atomic_int=no])
2512 ])
2513 if test $glibcxx_cv_atomic_int = yes; then
2514 AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_4, 1,
2515 [Define if builtin atomic operations for int are supported on this host.])
2516 fi
2517 AC_MSG_RESULT($glibcxx_cv_atomic_int)
2518
2519 AC_MSG_CHECKING([for atomic builtins for long long])
2520 AC_CACHE_VAL(glibcxx_cv_atomic_long_long, [
2521 AC_TRY_LINK(
2522 [ ],
2523 [typedef long long atomic_type;
2524 atomic_type c1;
2525 atomic_type c2;
2526 const atomic_type c3(0);
2527 __sync_fetch_and_add(&c1, c2);
2528 __sync_val_compare_and_swap(&c1, c3, c2);
2529 __sync_lock_test_and_set(&c1, c3);
2530 __sync_lock_release(&c1);
2531 __sync_synchronize();],
2532 [glibcxx_cv_atomic_long_long=yes],
2533 [glibcxx_cv_atomic_long_long=no])
2534 ])
2535 if test $glibcxx_cv_atomic_long_long = yes; then
2536 AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_8, 1,
2537 [Define if builtin atomic operations for long long are supported on this host.])
2538 fi
2539 AC_MSG_RESULT($glibcxx_cv_atomic_long_long)
2540
2541 else
2542
2543 # Do asm tests.
2544
35648b45
BK
2545 # Compile unoptimized.
2546 CXXFLAGS='-O0 -S'
2547
2cd9cdcc 2548 # Fake what AC_TRY_COMPILE does.
701a3eee 2549
701a3eee
BK
2550 cat > conftest.$ac_ext << EOF
2551[#]line __oline__ "configure"
2552int main()
50ce8d3d
BK
2553{
2554 typedef bool atomic_type;
2555 atomic_type c1;
2556 atomic_type c2;
2557 const atomic_type c3(0);
2558 __sync_fetch_and_add(&c1, c2);
2559 __sync_val_compare_and_swap(&c1, c3, c2);
2560 __sync_lock_test_and_set(&c1, c3);
2561 __sync_lock_release(&c1);
2562 __sync_synchronize();
2563 return 0;
2564}
2565EOF
2566
2567 AC_MSG_CHECKING([for atomic builtins for bool])
2568 if AC_TRY_EVAL(ac_compile); then
2569 if grep __sync_ conftest.s >/dev/null 2>&1 ; then
2cd9cdcc 2570 glibcxx_cv_atomic_bool=no
50ce8d3d
BK
2571 else
2572 AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_1, 1,
2573 [Define if builtin atomic operations for bool are supported on this host.])
2cd9cdcc 2574 glibcxx_cv_atomic_bool=yes
50ce8d3d
BK
2575 fi
2576 fi
2cd9cdcc 2577 AC_MSG_RESULT($glibcxx_cv_atomic_bool)
50ce8d3d
BK
2578 rm -f conftest*
2579
2580 cat > conftest.$ac_ext << EOF
2581[#]line __oline__ "configure"
2582int main()
2583{
2584 typedef short atomic_type;
2585 atomic_type c1;
2586 atomic_type c2;
2587 const atomic_type c3(0);
2588 __sync_fetch_and_add(&c1, c2);
2589 __sync_val_compare_and_swap(&c1, c3, c2);
2590 __sync_lock_test_and_set(&c1, c3);
2591 __sync_lock_release(&c1);
2592 __sync_synchronize();
2593 return 0;
2594}
2595EOF
2596
2597 AC_MSG_CHECKING([for atomic builtins for short])
2598 if AC_TRY_EVAL(ac_compile); then
2599 if grep __sync_ conftest.s >/dev/null 2>&1 ; then
2cd9cdcc 2600 glibcxx_cv_atomic_short=no
50ce8d3d
BK
2601 else
2602 AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_2, 1,
2603 [Define if builtin atomic operations for short are supported on this host.])
2cd9cdcc 2604 glibcxx_cv_atomic_short=yes
50ce8d3d
BK
2605 fi
2606 fi
2cd9cdcc 2607 AC_MSG_RESULT($glibcxx_cv_atomic_short)
50ce8d3d
BK
2608 rm -f conftest*
2609
2610 cat > conftest.$ac_ext << EOF
2611[#]line __oline__ "configure"
2612int main()
701a3eee
BK
2613{
2614 // NB: _Atomic_word not necessarily int.
2615 typedef int atomic_type;
2616 atomic_type c1;
2617 atomic_type c2;
2618 const atomic_type c3(0);
35648b45
BK
2619 __sync_fetch_and_add(&c1, c2);
2620 __sync_val_compare_and_swap(&c1, c3, c2);
2621 __sync_lock_test_and_set(&c1, c3);
2622 __sync_lock_release(&c1);
2623 __sync_synchronize();
2624 return 0;
2625}
2626EOF
2627
2628 AC_MSG_CHECKING([for atomic builtins for int])
2629 if AC_TRY_EVAL(ac_compile); then
2630 if grep __sync_ conftest.s >/dev/null 2>&1 ; then
2cd9cdcc 2631 glibcxx_cv_atomic_int=no
35648b45
BK
2632 else
2633 AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_4, 1,
2634 [Define if builtin atomic operations for int are supported on this host.])
2cd9cdcc 2635 glibcxx_cv_atomic_int=yes
35648b45
BK
2636 fi
2637 fi
2cd9cdcc 2638 AC_MSG_RESULT($glibcxx_cv_atomic_int)
35648b45
BK
2639 rm -f conftest*
2640
2641 cat > conftest.$ac_ext << EOF
2642[#]line __oline__ "configure"
2643int main()
2644{
50ce8d3d 2645 typedef long long atomic_type;
35648b45
BK
2646 atomic_type c1;
2647 atomic_type c2;
2648 const atomic_type c3(0);
2649 __sync_fetch_and_add(&c1, c2);
2650 __sync_val_compare_and_swap(&c1, c3, c2);
2651 __sync_lock_test_and_set(&c1, c3);
2652 __sync_lock_release(&c1);
2653 __sync_synchronize();
2654 return 0;
701a3eee
BK
2655}
2656EOF
35648b45 2657
50ce8d3d 2658 AC_MSG_CHECKING([for atomic builtins for long long])
701a3eee 2659 if AC_TRY_EVAL(ac_compile); then
35648b45 2660 if grep __sync_ conftest.s >/dev/null 2>&1 ; then
2cd9cdcc 2661 glibcxx_cv_atomic_long_long=no
701a3eee 2662 else
50ce8d3d
BK
2663 AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_8, 1,
2664 [Define if builtin atomic operations for long long are supported on this host.])
2cd9cdcc 2665 glibcxx_cv_atomic_long_long=yes
701a3eee
BK
2666 fi
2667 fi
2cd9cdcc 2668 AC_MSG_RESULT($glibcxx_cv_atomic_long_long)
701a3eee
BK
2669 rm -f conftest*
2670
2cd9cdcc 2671 fi
50ce8d3d 2672
35648b45
BK
2673 CXXFLAGS="$old_CXXFLAGS"
2674 AC_LANG_RESTORE
2675
2676 # Set atomicity_dir to builtins if either of above tests pass.
2cd9cdcc 2677 if test $glibcxx_cv_atomic_int = yes || test $glibcxx_cv_atomic_bool = yes ; then
35648b45
BK
2678 atomicity_dir=cpu/generic/atomicity_builtins
2679 fi
2680
2681 # If still generic, set to mutex.
701a3eee 2682 if test $atomicity_dir = "cpu/generic" ; then
35648b45 2683 atomicity_dir=cpu/generic/atomicity_mutex
6995087d 2684 AC_MSG_WARN([No native atomic operations are provided for this platform.])
dd88bc97 2685 if test "x$target_thread_file" = xsingle; then
6995087d
BK
2686 AC_MSG_WARN([They cannot be faked when thread support is disabled.])
2687 AC_MSG_WARN([Thread-safety of certain classes is not guaranteed.])
2688 else
2689 AC_MSG_WARN([They will be faked using a mutex.])
2690 AC_MSG_WARN([Performance of certain classes will degrade as a result.])
2691 fi
701a3eee 2692 fi
35648b45 2693
701a3eee
BK
2694])
2695
2696
bda243ec 2697dnl
ff66d28f
PE
2698dnl Check for exception handling support. If an explicit enable/disable
2699dnl sjlj exceptions is given, we don't have to detect. Otherwise the
2700dnl target may or may not support call frame exceptions.
bda243ec 2701dnl
ff66d28f
PE
2702dnl --enable-sjlj-exceptions forces the use of builtin setjmp.
2703dnl --disable-sjlj-exceptions forces the use of call frame unwinding.
1260d70f 2704dnl Neither one forces an attempt at detection.
4d16bdbb 2705dnl
ff66d28f
PE
2706dnl Defines:
2707dnl _GLIBCXX_SJLJ_EXCEPTIONS if the compiler is configured for it
4d16bdbb 2708dnl
f214923c 2709AC_DEFUN([GLIBCXX_ENABLE_SJLJ_EXCEPTIONS], [
ff66d28f
PE
2710 AC_MSG_CHECKING([for exception model to use])
2711 AC_LANG_SAVE
2712 AC_LANG_CPLUSPLUS
1260d70f 2713 GLIBCXX_ENABLE(sjlj-exceptions,auto,,
ff66d28f 2714 [force use of builtin_setjmp for exceptions],
1260d70f
PE
2715 [permit yes|no|auto])
2716
2717 if test $enable_sjlj_exceptions = auto; then
2718 # Botheration. Now we've got to detect the exception model. Link tests
2719 # against libgcc.a are problematic since we've not been given proper -L
2720 # bits for single-tree newlib and libgloss.
2721 #
2722 # Fake what AC_TRY_COMPILE does. XXX Look at redoing this new-style.
2723 cat > conftest.$ac_ext << EOF
ff66d28f
PE
2724[#]line __oline__ "configure"
2725struct S { ~S(); };
2726void bar();
2727void foo()
2728{
2729 S s;
2730 bar();
2731}
2732EOF
1260d70f
PE
2733 old_CXXFLAGS="$CXXFLAGS"
2734 CXXFLAGS=-S
2735 if AC_TRY_EVAL(ac_compile); then
2736 if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
2737 enable_sjlj_exceptions=yes
2738 elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then
2739 enable_sjlj_exceptions=no
617a1b71
PB
2740 elif grep __cxa_end_cleanup conftest.s >/dev/null 2>&1 ; then
2741 enable_sjlj_exceptions=no
1260d70f
PE
2742 fi
2743 fi
2744 CXXFLAGS="$old_CXXFLAGS"
2745 rm -f conftest*
2746 fi
2747
cddfb1c7
BK
2748 # This is a tad weird, for hysterical raisins. We have to map
2749 # enable/disable to two different models.
1260d70f
PE
2750 case $enable_sjlj_exceptions in
2751 yes)
2752 AC_DEFINE(_GLIBCXX_SJLJ_EXCEPTIONS, 1,
2753 [Define if the compiler is configured for setjmp/longjmp exceptions.])
2754 ac_exception_model_name=sjlj
2755 ;;
2756 no)
2757 ac_exception_model_name="call frame"
2758 ;;
2759 *)
2760 AC_MSG_ERROR([unable to detect exception model])
2761 ;;
2762 esac
ff66d28f
PE
2763 AC_LANG_RESTORE
2764 AC_MSG_RESULT($ac_exception_model_name)
4d16bdbb
PE
2765])
2766
2767
98e615b4
BK
2768dnl
2769dnl Allow visibility attributes to be used on namespaces, objects, etc.
2770dnl
2771dnl --enable-visibility enables attempt to use visibility attributes.
2772dnl --disable-visibility turns off all use of visibility attributes.
2773dnl + Usage: GLIBCXX_ENABLE_VISIBILITY[(DEFAULT)]
2774dnl Where DEFAULT is 'yes'.
2775dnl
2776AC_DEFUN([GLIBCXX_ENABLE_VISIBILITY], [
2777GLIBCXX_ENABLE(visibility,$1,,[enables visibility safe usage])
2778
2779if test x$enable_visibility = xyes ; then
2780 dnl all hail libgfortran
2781 dnl Check whether the target supports hidden visibility.
2782 AC_CACHE_CHECK([whether the target supports hidden visibility],
6d26724a 2783 glibcxx_cv_have_attribute_visibility, [
98e615b4
BK
2784 save_CFLAGS="$CFLAGS"
2785 CFLAGS="$CFLAGS -Werror"
2786 AC_TRY_COMPILE([void __attribute__((visibility("hidden"))) foo(void) { }],
6d26724a
RW
2787 [], glibcxx_cv_have_attribute_visibility=yes,
2788 glibcxx_cv_have_attribute_visibility=no)
98e615b4 2789 CFLAGS="$save_CFLAGS"])
6d26724a 2790 if test $glibcxx_cv_have_attribute_visibility = no; then
98e615b4
BK
2791 enable_visibility=no
2792 fi
2793fi
2794
2795GLIBCXX_CONDITIONAL(ENABLE_VISIBILITY, test $enable_visibility = yes)
2796AC_MSG_NOTICE([visibility supported: $enable_visibility])
2797])
2798
2799
530539d9
PE
2800dnl
2801dnl Add version tags to symbols in shared library (or not), additionally
2802dnl marking other symbols as private/local (or not).
2803dnl
c98b201b
PE
2804dnl --enable-symvers=style adds a version script to the linker call when
2805dnl creating the shared library. The choice of version script is
2806dnl controlled by 'style'.
530539d9 2807dnl --disable-symvers does not.
3d7c150e 2808dnl + Usage: GLIBCXX_ENABLE_SYMVERS[(DEFAULT)]
ff66d28f
PE
2809dnl Where DEFAULT is either 'yes' or 'no'. Passing `yes' tries to
2810dnl choose a default style based on linker characteristics. Passing
2811dnl 'no' disables versioning.
2812dnl
f214923c 2813AC_DEFUN([GLIBCXX_ENABLE_SYMVERS], [
ff66d28f
PE
2814
2815GLIBCXX_ENABLE(symvers,$1,[=STYLE],
2816 [enables symbol versioning of the shared library],
c18dc5cc 2817 [permit yes|no|gnu|gnu-versioned-namespace|darwin|darwin-export|sun])
c98b201b 2818
3d7c150e 2819# If we never went through the GLIBCXX_CHECK_LINKER_FEATURES macro, then we
37bc6ca2 2820# don't know enough about $LD to do tricks...
ff66d28f 2821AC_REQUIRE([GLIBCXX_CHECK_LINKER_FEATURES])
c18dc5cc
RO
2822# Sun style symbol versions needs GNU c++filt for make_sunver.pl to work
2823# with extern "C++" in version scripts.
2824AC_REQUIRE([GCC_PROG_GNU_CXXFILT])
a9fdd472
GK
2825
2826# Turn a 'yes' into a suitable default.
2827if test x$enable_symvers = xyes ; then
4bd726d0 2828 if test $enable_shared = no || test "x$LD" = x || test x$gcc_no_link = xyes; then
a9fdd472 2829 enable_symvers=no
a9fdd472 2830 else
fb5c309d 2831 if test $with_gnu_ld = yes ; then
d89f0ad6 2832 case ${target_os} in
f7e413e2 2833 hpux*)
d89f0ad6
AL
2834 enable_symvers=no ;;
2835 *)
2836 enable_symvers=gnu ;;
2837 esac
fb5c309d
BK
2838 else
2839 case ${target_os} in
2840 darwin*)
2841 enable_symvers=darwin ;;
c18dc5cc
RO
2842 # Sun symbol versioning exists since Solaris 2.5.
2843 solaris2.[[5-9]]* | solaris2.1[[0-9]]*)
2844 # make_sunver.pl needs GNU c++filt to support extern "C++" in
2845 # version scripts, so disable symbol versioning if none can be
2846 # found.
2847 if test -z "$ac_cv_path_CXXFILT"; then
2848 AC_MSG_WARN([=== You have requested Sun symbol versioning, but])
2849 AC_MSG_WARN([=== no GNU c++filt could be found.])
2850 AC_MSG_WARN([=== Symbol versioning will be disabled.])
2851 enable_symvers=no
2852 else
2853 enable_symvers=sun
2854 fi
2855 ;;
fb5c309d
BK
2856 *)
2857 enable_symvers=no ;;
2858 esac
2859 fi
a9fdd472 2860 fi
530539d9 2861fi
c98b201b 2862
fb5c309d
BK
2863# Check to see if 'darwin' or 'darwin-export' can win.
2864if test x$enable_symvers = xdarwin-export ; then
2865 enable_symvers=darwin
2866fi
2867
c18dc5cc
RO
2868# Check if 'sun' was requested on non-Solaris 2 platforms.
2869if test x$enable_symvers = xsun ; then
2870 case ${target_os} in
2871 solaris2*)
2872 # All fine.
2873 ;;
2874 *)
2875 # Unlikely to work.
2876 AC_MSG_WARN([=== You have requested Sun symbol versioning, but])
2877 AC_MSG_WARN([=== you are not targetting Solaris 2.])
2878 AC_MSG_WARN([=== Symbol versioning will be disabled.])
2879 enable_symvers=no
2880 ;;
2881 esac
2882fi
2883
f47bddec 2884# Check to see if 'gnu' can win.
c18dc5cc
RO
2885if test $enable_symvers = gnu ||
2886 test $enable_symvers = gnu-versioned-namespace ||
2887 test $enable_symvers = sun; then
f47bddec 2888 # Check to see if libgcc_s exists, indicating that shared libgcc is possible.
2c839a4e
PE
2889 AC_MSG_CHECKING([for shared libgcc])
2890 ac_save_CFLAGS="$CFLAGS"
2891 CFLAGS=' -lgcc_s'
ff66d28f 2892 AC_TRY_LINK(, [return 0;], glibcxx_shared_libgcc=yes, glibcxx_shared_libgcc=no)
2c839a4e 2893 CFLAGS="$ac_save_CFLAGS"
d5325238
JJ
2894 if test $glibcxx_shared_libgcc = no; then
2895 cat > conftest.c <<EOF
2896int main (void) { return 0; }
2897EOF
2898changequote(,)dnl
2899 glibcxx_libgcc_s_suffix=`${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
2900 -shared -shared-libgcc -o conftest.so \
2901 conftest.c -v 2>&1 >/dev/null \
2902 | sed -n 's/^.* -lgcc_s\([^ ]*\) .*$/\1/p'`
2903changequote([,])dnl
2904 rm -f conftest.c conftest.so
2905 if test x${glibcxx_libgcc_s_suffix+set} = xset; then
2906 CFLAGS=" -lgcc_s$glibcxx_libgcc_s_suffix"
2907 AC_TRY_LINK(, [return 0;], glibcxx_shared_libgcc=yes)
2908 CFLAGS="$ac_save_CFLAGS"
2909 fi
2910 fi
3d7c150e 2911 AC_MSG_RESULT($glibcxx_shared_libgcc)
a9fdd472 2912
a9fdd472
GK
2913 # For GNU ld, we need at least this version. The format is described in
2914 # GLIBCXX_CHECK_LINKER_FEATURES above.
2915 glibcxx_min_gnu_ld_version=21400
c98b201b 2916
f47bddec
GK
2917 # If no shared libgcc, can't win.
2918 if test $glibcxx_shared_libgcc != yes; then
2919 AC_MSG_WARN([=== You have requested GNU symbol versioning, but])
2920 AC_MSG_WARN([=== you are not building a shared libgcc_s.])
2921 AC_MSG_WARN([=== Symbol versioning will be disabled.])
2922 enable_symvers=no
c18dc5cc
RO
2923 elif test $with_gnu_ld != yes && test $enable_symvers = sun; then
2924 : All interesting versions of Sun ld support sun style symbol versioning.
f47bddec 2925 elif test $with_gnu_ld != yes ; then
ab3bc736 2926 # just fail for now
a9fdd472
GK
2927 AC_MSG_WARN([=== You have requested GNU symbol versioning, but])
2928 AC_MSG_WARN([=== you are not using the GNU linker.])
2929 AC_MSG_WARN([=== Symbol versioning will be disabled.])
2930 enable_symvers=no
d60a2d4d
ILT
2931 elif test $glibcxx_ld_is_gold = yes ; then
2932 : All versions of gold support symbol versioning.
a9fdd472
GK
2933 elif test $glibcxx_gnu_ld_version -lt $glibcxx_min_gnu_ld_version ; then
2934 # The right tools, the right setup, but too old. Fallbacks?
2935 AC_MSG_WARN(=== Linker version $glibcxx_gnu_ld_version is too old for)
2936 AC_MSG_WARN(=== full symbol versioning support in this release of GCC.)
2937 AC_MSG_WARN(=== You would need to upgrade your binutils to version)
2938 AC_MSG_WARN(=== $glibcxx_min_gnu_ld_version or later and rebuild GCC.)
58579a27 2939 AC_MSG_WARN([=== Symbol versioning will be disabled.])
ab3bc736
BK
2940 enable_symvers=no
2941 fi
2942fi
2943
ff66d28f 2944# Everything parsed; figure out what file to use.
c98b201b 2945case $enable_symvers in
ab3bc736 2946 no)
fb5c309d 2947 SYMVER_FILE=config/abi/pre/none.ver
ff66d28f 2948 ;;
c98b201b 2949 gnu)
fb5c309d
BK
2950 SYMVER_FILE=config/abi/pre/gnu.ver
2951 AC_DEFINE(_GLIBCXX_SYMVER_GNU, 1,
2952 [Define to use GNU versioning in the shared library.])
a9fdd472 2953 ;;
3cbc7af0
BK
2954 gnu-versioned-namespace)
2955 SYMVER_FILE=config/abi/pre/gnu-versioned-namespace.ver
2956 AC_DEFINE(_GLIBCXX_SYMVER_GNU_NAMESPACE, 1,
2957 [Define to use GNU namespace versioning in the shared library.])
2958 ;;
fb5c309d
BK
2959 darwin)
2960 SYMVER_FILE=config/abi/pre/gnu.ver
2961 AC_DEFINE(_GLIBCXX_SYMVER_DARWIN, 1,
2962 [Define to use darwin versioning in the shared library.])
ff66d28f 2963 ;;
c18dc5cc
RO
2964 sun)
2965 SYMVER_FILE=config/abi/pre/gnu.ver
2966 AC_DEFINE(_GLIBCXX_SYMVER_SUN, 1,
2967 [Define to use Sun versioning in the shared library.])
2968 ;;
c98b201b
PE
2969esac
2970
fb5c309d
BK
2971if test x$enable_symvers != xno ; then
2972 AC_DEFINE(_GLIBCXX_SYMVER, 1,
2973 [Define to use symbol versioning in the shared library.])
2974fi
2975
1f93f687
JJ
2976AC_CACHE_CHECK([whether the target supports .symver directive],
2977 glibcxx_cv_have_as_symver_directive, [
2978 AC_TRY_COMPILE([void foo (void); __asm (".symver foo, bar@SYMVER");],
2979 [], glibcxx_cv_have_as_symver_directive=yes,
2980 glibcxx_cv_have_as_symver_directive=no)])
2981if test $glibcxx_cv_have_as_symver_directive = yes; then
2982 AC_DEFINE(HAVE_AS_SYMVER_DIRECTIVE, 1,
2983 [Define to 1 if the target assembler supports .symver directive.])
2984fi
2985
fb5c309d
BK
2986AC_SUBST(SYMVER_FILE)
2987AC_SUBST(port_specific_symbol_files)
2988GLIBCXX_CONDITIONAL(ENABLE_SYMVERS, test $enable_symvers != no)
2989GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_GNU, test $enable_symvers = gnu)
3cbc7af0 2990GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_GNU_NAMESPACE, test $enable_symvers = gnu-versioned-namespace)
fb5c309d 2991GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_DARWIN, test $enable_symvers = darwin)
c18dc5cc 2992GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_SUN, test $enable_symvers = sun)
fb5c309d
BK
2993AC_MSG_NOTICE(versioning on shared library symbols is $enable_symvers)
2994
c18dc5cc
RO
2995if test $enable_symvers != no ; then
2996 case ${target_os} in
2997 # The Solaris 2 runtime linker doesn't support the GNU extension of
2998 # binding the same symbol to different versions
2999 solaris2*)
3000 symvers_renaming=no ;;
3001 # Other platforms with GNU symbol versioning (GNU/Linux, more?) do.
3002 *)
8198d541 3003 AC_DEFINE(HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT, 1,
c18dc5cc 3004 [Define to 1 if the target runtime linker supports binding the same symbol to different versions.])
8198d541 3005 symvers_renaming=yes ;;
c18dc5cc
RO
3006 esac
3007fi
3008GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_SOL2, test $symvers_renaming = no)
3009
fb5c309d 3010# Now, set up compatibility support, if any.
bb2b2a24
BK
3011# In addition, need this to deal with std::size_t mangling in
3012# src/compatibility.cc. In a perfect world, could use
3013# typeid(std::size_t).name()[0] to do direct substitution.
3014AC_MSG_CHECKING([for size_t as unsigned int])
3015ac_save_CFLAGS="$CFLAGS"
3016CFLAGS="-Werror"
3017AC_TRY_COMPILE(, [__SIZE_TYPE__* stp; unsigned int* uip; stp = uip;],
3018 [glibcxx_size_t_is_i=yes], [glibcxx_size_t_is_i=no])
3019CFLAGS=$ac_save_CFLAGS
3020if test "$glibcxx_size_t_is_i" = yes; then
3021 AC_DEFINE(_GLIBCXX_SIZE_T_IS_UINT, 1, [Define if size_t is unsigned int.])
3022fi
3023AC_MSG_RESULT([$glibcxx_size_t_is_i])
3024
3025AC_MSG_CHECKING([for ptrdiff_t as int])
3026ac_save_CFLAGS="$CFLAGS"
3027CFLAGS="-Werror"
3028AC_TRY_COMPILE(, [__PTRDIFF_TYPE__* ptp; int* ip; ptp = ip;],
3029 [glibcxx_ptrdiff_t_is_i=yes], [glibcxx_ptrdiff_t_is_i=no])
3030CFLAGS=$ac_save_CFLAGS
3031if test "$glibcxx_ptrdiff_t_is_i" = yes; then
3032 AC_DEFINE(_GLIBCXX_PTRDIFF_T_IS_INT, 1, [Define if ptrdiff_t is int.])
3033fi
3034AC_MSG_RESULT([$glibcxx_ptrdiff_t_is_i])
ff66d28f
PE
3035])
3036
3037
3038dnl
3039dnl Setup to use the gcc gthr.h thread-specific memory and mutex model.
3040dnl We must stage the required headers so that they will be installed
3041dnl with the library (unlike libgcc, the STL implementation is provided
3042dnl solely within headers). Since we must not inject random user-space
3043dnl macro names into user-provided C++ code, we first stage into <file>-in
3044dnl and process to <file> with an output command. The reason for a two-
3045dnl stage process here is to correctly handle $srcdir!=$objdir without
3046dnl having to write complex code (the sed commands to clean the macro
3047dnl namespace are complex and fragile enough as it is). We must also
3048dnl add a relative path so that -I- is supported properly.
3049dnl
3050dnl Substs:
3051dnl glibcxx_thread_h
3052dnl
3053dnl Defines:
3054dnl HAVE_GTHR_DEFAULT
ff66d28f 3055dnl
f214923c 3056AC_DEFUN([GLIBCXX_ENABLE_THREADS], [
ff66d28f 3057 AC_MSG_CHECKING([for thread model used by GCC])
fbe057bb 3058 target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
ff66d28f
PE
3059 AC_MSG_RESULT([$target_thread_file])
3060
3061 if test $target_thread_file != single; then
4651e622
KC
3062 AC_DEFINE(HAVE_GTHR_DEFAULT, 1,
3063 [Define if gthr-default.h exists
3064 (meaning that threading support is enabled).])
ff66d28f
PE
3065 fi
3066
3067 glibcxx_thread_h=gthr-$target_thread_file.h
382c6e2d
BK
3068
3069 dnl Check for __GTHREADS define.
3070 gthread_file=${toplevel_srcdir}/gcc/${glibcxx_thread_h}
3071 if grep __GTHREADS $gthread_file >/dev/null 2>&1 ; then
3072 enable_thread=yes
3073 else
3074 enable_thread=no
3075 fi
3076
ff66d28f
PE
3077 AC_SUBST(glibcxx_thread_h)
3078])
3079
3080
b8c41c8e
CF
3081dnl
3082dnl Check if gthread implementation defines the types and functions
3083dnl required by the c++0x thread library. Conforming gthread
3084dnl implementations can define __GTHREADS_CXX0X to enable use with c++0x.
3085dnl
3086AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [
3087 AC_LANG_SAVE
3088 AC_LANG_CPLUSPLUS
3089
3090 ac_save_CXXFLAGS="$CXXFLAGS"
3091 CXXFLAGS="$CXXFLAGS -fno-exceptions -I${toplevel_srcdir}/gcc"
3092
3093 target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
3094 case $target_thread_file in
3095 posix)
3096 CXXFLAGS="$CXXFLAGS -DSUPPORTS_WEAK -DGTHREAD_USE_WEAK -D_PTHREADS"
3097 esac
3098
3099 AC_MSG_CHECKING([for gthreads library])
3100
3101 AC_TRY_COMPILE([#include "gthr.h"],
3102 [
a1c5742d
PC
3103 #ifndef __GTHREADS_CXX0X
3104 #error
3105 #endif
3106
3107 // In case of POSIX threads check _POSIX_TIMEOUTS too.
3108 #if (defined(_PTHREADS) \
3109 && (!defined(_POSIX_TIMEOUTS) || _POSIX_TIMEOUTS <= 0))
3110 #error
3111 #endif
b8c41c8e
CF
3112 ], [ac_has_gthreads=yes], [ac_has_gthreads=no])
3113
3114 AC_MSG_RESULT([$ac_has_gthreads])
3115
3116 if test x"$ac_has_gthreads" = x"yes"; then
3117 AC_DEFINE(_GLIBCXX_HAS_GTHREADS, 1,
3118 [Define if gthreads library is available.])
3119 fi
3120
3121 CXXFLAGS="$ac_save_CXXFLAGS"
3122 AC_LANG_RESTORE
3123])
3124
3125
ff66d28f
PE
3126# Check whether LC_MESSAGES is available in <locale.h>.
3127# Ulrich Drepper <drepper@cygnus.com>, 1995.
3128#
3129# This file file be copied and used freely without restrictions. It can
3130# be used in projects which are not available under the GNU Public License
3131# but which still want to provide support for the GNU gettext functionality.
3132# Please note that the actual code is *not* freely available.
f214923c 3133AC_DEFUN([AC_LC_MESSAGES], [
ff66d28f
PE
3134 AC_CHECK_HEADER(locale.h, [
3135 AC_CACHE_CHECK([for LC_MESSAGES], ac_cv_val_LC_MESSAGES,
99bf8d16 3136 [AC_TRY_COMPILE([#include <locale.h>], [return LC_MESSAGES],
ff66d28f
PE
3137 ac_cv_val_LC_MESSAGES=yes, ac_cv_val_LC_MESSAGES=no)])
3138 if test $ac_cv_val_LC_MESSAGES = yes; then
4651e622
KC
3139 AC_DEFINE(HAVE_LC_MESSAGES, 1,
3140 [Define if LC_MESSAGES is available in <locale.h>.])
ff66d28f
PE
3141 fi
3142 ])
3143])
3144
cddfb1c7 3145# Macros from the top-level gcc directory.
c18dc5cc 3146m4_include([../config/gc++filt.m4])
cddfb1c7 3147m4_include([../config/tls.m4])
ff66d28f 3148