]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/acinclude.m4
* predict.c (maybe_hot_bb_p, maybe_hot_edge_p): Previous commit
[thirdparty/gcc.git] / libstdc++-v3 / acinclude.m4
CommitLineData
68224f8d 1
11764568 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
2ad02b6c 11AC_DEFUN([GLIBCXX_CONDITIONAL], [dnl
11764568 12 m4_divert_text([glibcxx_diversion],dnl
13 AM_CONDITIONAL([$1],[$2])
14 )dnl
15])dnl
2ad02b6c 16AC_DEFUN([GLIBCXX_EVALUATE_CONDITIONALS], [m4_undivert([glibcxx_diversion])])dnl
11764568 17
18
68224f8d 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
2ad02b6c 24AC_DEFUN([GLIBCXX_CHECK_HOST], [
68224f8d 25 . $glibcxx_srcdir/configure.host
2ad02b6c 26 AC_MSG_NOTICE([CPU config directory is $cpu_include_dir])
27 AC_MSG_NOTICE([OS config directory is $os_include_dir])
68224f8d 28])
29
68224f8d 30dnl
31dnl Initialize the rest of the library configury. At this point we have
32dnl variables like $host.
8400ab1c 33dnl
68224f8d 34dnl Sets:
4591e20f 35dnl SUBDIRS
68224f8d 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
8400ab1c 47dnl
2ad02b6c 48AC_DEFUN([GLIBCXX_CONFIGURE], [
4591e20f 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.
0aeadebf 52 m4_define([glibcxx_SUBDIRS],[include libmath libsupc++ src doc po testsuite])
4591e20f 53 SUBDIRS='glibcxx_SUBDIRS'
54
acf7a6bc 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.
5a64d8cf 58 glibcxx_builddir=`${PWDCMD-pwd}`
acf7a6bc 59 case $srcdir in
68224f8d 60 [\\/$]* | ?:[\\/]*) glibcxx_srcdir=${srcdir} ;;
61 *) glibcxx_srcdir=`cd "$srcdir" && ${PWDCMD-pwd} || echo "$srcdir"` ;;
acf7a6bc 62 esac
68224f8d 63 toplevel_srcdir=${glibcxx_srcdir}/..
5a64d8cf 64 AC_SUBST(glibcxx_builddir)
65 AC_SUBST(glibcxx_srcdir)
68224f8d 66 AC_SUBST(toplevel_srcdir)
acf7a6bc 67
68224f8d 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
68224f8d 82 # We're almost certainly being configured before anything else which uses
83 # C++, so all of our AC_PROG_* discoveries will be cached. It's vital that
84 # we not cache the value of CXX that we "discover" here, because it's set
85 # to something unique for us and libjava. Other target libraries need to
86 # find CXX for themselves. We yank the rug out from under the normal AC_*
87 # process by sneakily renaming the cache variable. This also lets us debug
88 # the value of "our" CXX in postmortems.
89 #
90 # We must also force CXX to /not/ be a precious variable, otherwise the
91 # wrong (non-multilib-adjusted) value will be used in multilibs. This
92 # little trick also affects CPPFLAGS, CXXFLAGS, and LDFLAGS. And as a side
93 # effect, CXXFLAGS is no longer automagically subst'd, so we have to do
b1e05b1a 94 # that ourselves. Un-preciousing AC_PROG_CC also affects CC and CFLAGS.
68224f8d 95 #
96 # -fno-builtin must be present here so that a non-conflicting form of
97 # std::exit can be guessed by AC_PROG_CXX, and used in later tests.
f4a06a64 98
68224f8d 99 m4_define([ac_cv_prog_CXX],[glibcxx_cv_prog_CXX])
100 m4_rename([_AC_ARG_VAR_PRECIOUS],[glibcxx_PRECIOUS])
101 m4_define([_AC_ARG_VAR_PRECIOUS],[])
102 save_CXXFLAGS="$CXXFLAGS"
103 CXXFLAGS="$CXXFLAGS -fno-builtin"
b1e05b1a 104 AC_PROG_CC
68224f8d 105 AC_PROG_CXX
106 CXXFLAGS="$save_CXXFLAGS"
107 m4_rename([glibcxx_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
b1e05b1a 108 AC_SUBST(CFLAGS)
68224f8d 109 AC_SUBST(CXXFLAGS)
b9e8095b 110
68224f8d 111 # Will set LN_S to either 'ln -s', 'ln', or 'cp -p' (if linking isn't
112 # available). Uncomment the next line to force a particular method.
113 AC_PROG_LN_S
114 #LN_S='cp -p'
115
f1f1b9ae 116 AC_CHECK_TOOL(AS, as)
117 AC_CHECK_TOOL(AR, ar)
c45e0e39 118 AC_CHECK_TOOL(RANLIB, ranlib, ranlib-not-found-in-path-error)
b9e8095b 119
f1f1b9ae 120 AM_MAINTAINER_MODE
b9e8095b 121
11764568 122 # Set up safe default values for all subsequent AM_CONDITIONAL tests
123 # which are themselves conditionally expanded.
124 ## (Right now, this only matters for enable_wchar_t, but nothing prevents
125 ## other macros from doing the same. This should be automated.) -pme
d1fde434 126 need_libmath=no
d1fde434 127
ee085235 128 # Check for uClibc since Linux platforms use different configuration
129 # directories depending on the C library in use.
130 AC_EGREP_CPP([_using_uclibc], [
131 #include <stdio.h>
132 #if __UCLIBC__
133 _using_uclibc
134 #endif
135 ], uclibc=yes, uclibc=no)
136
68224f8d 137 # Find platform-specific directories containing configuration info.
138 # Also possibly modify flags used elsewhere, as needed by the platform.
5a64d8cf 139 GLIBCXX_CHECK_HOST
b9e8095b 140])
141
142
c21bc234 143dnl
457683de 144dnl Tests for newer compiler features, or features that are present in newer
145dnl compiler versions but not older compiler versions still in use, should
146dnl be placed here.
b9e8095b 147dnl
68224f8d 148dnl Defines:
149dnl WERROR='-Werror' if requested and possible; g++'s that lack the
150dnl new inlining code or the new system_header pragma will die on -Werror.
151dnl Leave it out by default and use maint-mode to use it.
152dnl SECTION_FLAGS='-ffunction-sections -fdata-sections' if
153dnl compiler supports it and the user has not requested debug mode.
b9386e63 154dnl
2ad02b6c 155AC_DEFUN([GLIBCXX_CHECK_COMPILER_FEATURES], [
c51c23c3 156 # All these tests are for C++; save the language and the compiler flags.
457683de 157 # The CXXFLAGS thing is suspicious, but based on similar bits previously
5a64d8cf 158 # found in GLIBCXX_CONFIGURE.
c51c23c3 159 AC_LANG_SAVE
160 AC_LANG_CPLUSPLUS
161 ac_test_CXXFLAGS="${CXXFLAGS+set}"
162 ac_save_CXXFLAGS="$CXXFLAGS"
c51c23c3 163
211ecbdf 164 # Check for maintainer-mode bits.
165 if test x"$USE_MAINTAINER_MODE" = xno; then
166 WERROR=''
9c6a106c 167 else
211ecbdf 168 WERROR='-Werror'
9c6a106c 169 fi
170
c21bc234 171 # Check for -ffunction-sections -fdata-sections
172 AC_MSG_CHECKING([for g++ that supports -ffunction-sections -fdata-sections])
acccde02 173 CXXFLAGS='-g -Werror -ffunction-sections -fdata-sections'
174 AC_TRY_COMPILE([int foo; void bar() { };],, [ac_fdsections=yes], [ac_fdsections=no])
c21bc234 175 if test "$ac_test_CXXFLAGS" = set; then
176 CXXFLAGS="$ac_save_CXXFLAGS"
177 else
178 # this is the suspicious part
179 CXXFLAGS=''
180 fi
7f713ccf 181 if test x"$ac_fdsections" = x"yes"; then
c21bc234 182 SECTION_FLAGS='-ffunction-sections -fdata-sections'
183 fi
184 AC_MSG_RESULT($ac_fdsections)
185
c51c23c3 186 AC_LANG_RESTORE
9c6a106c 187 AC_SUBST(WERROR)
c21bc234 188 AC_SUBST(SECTION_FLAGS)
b9e8095b 189])
190
c21bc234 191
192dnl
06f58ac6 193dnl If GNU ld is in use, check to see if tricky linker opts can be used. If
194dnl the native linker is in use, all variables will be defined to something
195dnl safe (like an empty string).
196dnl
68224f8d 197dnl Defines:
198dnl SECTION_LDFLAGS='-Wl,--gc-sections' if possible
bc12299b 199dnl OPT_LDFLAGS='-Wl,-O1' and '-z,relro' if possible
68224f8d 200dnl LD (as a side effect of testing)
201dnl Sets:
202dnl with_gnu_ld
09ffaa43 203dnl glibcxx_ld_is_gold (set to "no" or "yes")
68224f8d 204dnl glibcxx_gnu_ld_version (possibly)
205dnl
206dnl The last will be a single integer, e.g., version 1.23.45.0.67.89 will
207dnl set glibcxx_gnu_ld_version to 12345. Zeros cause problems.
c21bc234 208dnl
2ad02b6c 209AC_DEFUN([GLIBCXX_CHECK_LINKER_FEATURES], [
06f58ac6 210 # If we're not using GNU ld, then there's no point in even trying these
211 # tests. Check for that first. We should have already tested for gld
212 # by now (in libtool), but require it now just to be safe...
13bad5d9 213 test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS=''
214 test -z "$OPT_LDFLAGS" && OPT_LDFLAGS=''
06f58ac6 215 AC_REQUIRE([AC_PROG_LD])
68224f8d 216 AC_REQUIRE([AC_PROG_AWK])
445cdc9a 217
00c7100f 218 # The name set by libtool depends on the version of libtool. Shame on us
219 # for depending on an impl detail, but c'est la vie. Older versions used
220 # ac_cv_prog_gnu_ld, but now it's lt_cv_prog_gnu_ld, and is copied back on
221 # top of with_gnu_ld (which is also set by --with-gnu-ld, so that actually
222 # makes sense). We'll test with_gnu_ld everywhere else, so if that isn't
223 # set (hence we're using an older libtool), then set it.
224 if test x${with_gnu_ld+set} != xset; then
225 if test x${ac_cv_prog_gnu_ld+set} != xset; then
226 # We got through "ac_require(ac_prog_ld)" and still not set? Huh?
227 with_gnu_ld=no
228 else
229 with_gnu_ld=$ac_cv_prog_gnu_ld
230 fi
231 fi
232
233 # Start by getting the version number. I think the libtool test already
234 # does some of this, but throws away the result.
09ffaa43 235 glibcxx_ld_is_gold=no
a8c6eff1 236 if test x"$with_gnu_ld" = x"yes"; then
237 AC_MSG_CHECKING([for ld version])
238 changequote(,)
09ffaa43 239 if $LD --version 2>/dev/null | grep 'GNU gold' >/dev/null 2>&1; then
240 glibcxx_ld_is_gold=yes
241 fi
a8c6eff1 242 ldver=`$LD --version 2>/dev/null | head -1 | \
09ffaa43 243 sed -e 's/GNU \(go\)\{0,1\}ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\4/'`
a8c6eff1 244 changequote([,])
245 glibcxx_gnu_ld_version=`echo $ldver | \
246 $AWK -F. '{ if (NF<3) [$]3=0; print ([$]1*100+[$]2)*100+[$]3 }'`
247 AC_MSG_RESULT($glibcxx_gnu_ld_version)
248 fi
00c7100f 249
445cdc9a 250 # Set --gc-sections.
09ffaa43 251 glibcxx_have_gc_sections=no
252 if test "$glibcxx_ld_is_gold" = "yes"; then
253 if $LD --help 2>/dev/null | grep gc-sections >/dev/null 2>&1; then
254 glibcxx_have_gc_sections=yes
255 fi
256 else
257 glibcxx_gcsections_min_ld=21602
258 if test x"$with_gnu_ld" = x"yes" &&
3afdc8c9 259 test $glibcxx_gnu_ld_version -gt $glibcxx_gcsections_min_ld ; then
09ffaa43 260 glibcxx_have_gc_sections=yes
261 fi
262 fi
263 if test "$glibcxx_have_gc_sections" = "yes"; then
3afdc8c9 264 # Sufficiently young GNU ld it is! Joy and bunny rabbits!
265 # NB: This flag only works reliably after 2.16.1. Configure tests
266 # for this are difficult, so hard wire a value that should work.
06f58ac6 267
06f58ac6 268 ac_test_CFLAGS="${CFLAGS+set}"
269 ac_save_CFLAGS="$CFLAGS"
86bb9627 270 CFLAGS='-Wl,--gc-sections'
06f58ac6 271
272 # Check for -Wl,--gc-sections
273 AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
e3acaece 274 AC_TRY_LINK([ int one(void) { return 1; }
275 int two(void) { return 2; }
276 ], [ two(); ] , [ac_gcsections=yes], [ac_gcsections=no])
78e1dded 277 if test "$ac_gcsections" = "yes"; then
278 rm -f conftest.c
279 touch conftest.c
280 if $CC -c conftest.c; then
281 if $LD --gc-sections -o conftest conftest.o 2>&1 | \
282 grep "Warning: gc-sections option ignored" > /dev/null; then
283 ac_gcsections=no
284 fi
285 fi
286 rm -f conftest.c conftest.o conftest
287 fi
e3acaece 288 if test "$ac_gcsections" = "yes"; then
289 SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
290 fi
291 AC_MSG_RESULT($ac_gcsections)
292
06f58ac6 293 if test "$ac_test_CFLAGS" = set; then
294 CFLAGS="$ac_save_CFLAGS"
295 else
296 # this is the suspicious part
297 CFLAGS=''
298 fi
445cdc9a 299 fi
985550e9 300
bc12299b 301 # Set -z,relro.
fd9a63cd 302 # Note this is only for shared objects.
bc12299b 303 ac_ld_relro=no
304 if test x"$with_gnu_ld" = x"yes"; then
305 AC_MSG_CHECKING([for ld that supports -Wl,-z,relro])
306 cxx_z_relo=`$LD -v --help 2>/dev/null | grep "z relro"`
307 if test -n "$cxx_z_relo"; then
308 OPT_LDFLAGS="-Wl,-z,relro"
309 ac_ld_relro=yes
310 fi
311 AC_MSG_RESULT($ac_ld_relro)
312 fi
313
445cdc9a 314 # Set linker optimization flags.
7f713ccf 315 if test x"$with_gnu_ld" = x"yes"; then
13bad5d9 316 OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
06f58ac6 317 fi
445cdc9a 318
c21bc234 319 AC_SUBST(SECTION_LDFLAGS)
06f58ac6 320 AC_SUBST(OPT_LDFLAGS)
c21bc234 321])
322
323
b9e8095b 324dnl
68224f8d 325dnl Check for headers for, and arguments to, the setrlimit() function.
326dnl Used only in testsuite_hooks.h. Called from GLIBCXX_CONFIGURE_TESTSUITE.
7f713ccf 327dnl
68224f8d 328dnl Defines:
ac7a2146 329dnl _GLIBCXX_RES_LIMITS if we can set artificial resource limits
330dnl various HAVE_LIMIT_* for individual limit names
7f713ccf 331dnl
2ad02b6c 332AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT_ancilliary], [
bd30e718 333 AC_MSG_CHECKING([for RLIMIT_$1])
68224f8d 334 AC_TRY_COMPILE(
335 [#include <unistd.h>
336 #include <sys/time.h>
337 #include <sys/resource.h>
338 ],
339 [ int f = RLIMIT_$1 ; ],
340 [glibcxx_mresult=1], [glibcxx_mresult=0])
ac7a2146 341 AC_DEFINE_UNQUOTED(HAVE_LIMIT_$1, $glibcxx_mresult,
68224f8d 342 [Only used in build directory testsuite_hooks.h.])
bd30e718 343 if test $glibcxx_mresult = 1 ; then res=yes ; else res=no ; fi
344 AC_MSG_RESULT($res)
68224f8d 345])
346
2ad02b6c 347AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT], [
68224f8d 348 setrlimit_have_headers=yes
349 AC_CHECK_HEADERS(unistd.h sys/time.h sys/resource.h,
350 [],
351 [setrlimit_have_headers=no])
352 # If don't have the headers, then we can't run the tests now, and we
353 # won't be seeing any of these during testsuite compilation.
354 if test $setrlimit_have_headers = yes; then
355 # Can't do these in a loop, else the resulting syntax is wrong.
356 GLIBCXX_CHECK_SETRLIMIT_ancilliary(DATA)
357 GLIBCXX_CHECK_SETRLIMIT_ancilliary(RSS)
358 GLIBCXX_CHECK_SETRLIMIT_ancilliary(VMEM)
359 GLIBCXX_CHECK_SETRLIMIT_ancilliary(AS)
ac7a2146 360 GLIBCXX_CHECK_SETRLIMIT_ancilliary(FSIZE)
68224f8d 361
362 # Check for rlimit, setrlimit.
6992582a 363 AC_CACHE_VAL(glibcxx_cv_setrlimit, [
68224f8d 364 AC_TRY_COMPILE(
365 [#include <unistd.h>
366 #include <sys/time.h>
367 #include <sys/resource.h>
368 ],
369 [struct rlimit r;
370 setrlimit(0, &r);],
6992582a 371 [glibcxx_cv_setrlimit=yes], [glibcxx_cv_setrlimit=no])
68224f8d 372 ])
373 fi
374
ac7a2146 375 AC_MSG_CHECKING([for testsuite resource limits support])
6992582a 376 if test $setrlimit_have_headers = yes && test $glibcxx_cv_setrlimit = yes; then
ac7a2146 377 ac_res_limits=yes
d64903a9 378 AC_DEFINE(_GLIBCXX_RES_LIMITS, 1,
379 [Define if using setrlimit to set resource limits during
380 "make check"])
68224f8d 381 else
ac7a2146 382 ac_res_limits=no
68224f8d 383 fi
ac7a2146 384 AC_MSG_RESULT($ac_res_limits)
7f713ccf 385])
386
387
7f713ccf 388dnl
68224f8d 389dnl Check whether S_ISREG (Posix) or S_IFREG is available in <sys/stat.h>.
390dnl Define HAVE_S_ISREG / HAVE_S_IFREG appropriately.
7f713ccf 391dnl
2ad02b6c 392AC_DEFUN([GLIBCXX_CHECK_S_ISREG_OR_S_IFREG], [
4f37153a 393
394 AC_LANG_SAVE
395 AC_LANG_CPLUSPLUS
396 ac_save_CXXFLAGS="$CXXFLAGS"
397 CXXFLAGS="$CXXFLAGS -fno-exceptions"
398
bd30e718 399 AC_MSG_CHECKING([for S_ISREG or S_IFREG])
68224f8d 400 AC_CACHE_VAL(glibcxx_cv_S_ISREG, [
4f37153a 401 GCC_TRY_COMPILE_OR_LINK(
68224f8d 402 [#include <sys/stat.h>],
403 [struct stat buffer;
404 fstat(0, &buffer);
405 S_ISREG(buffer.st_mode);],
406 [glibcxx_cv_S_ISREG=yes],
407 [glibcxx_cv_S_ISREG=no])
408 ])
409 AC_CACHE_VAL(glibcxx_cv_S_IFREG, [
4f37153a 410 GCC_TRY_COMPILE_OR_LINK(
68224f8d 411 [#include <sys/stat.h>],
412 [struct stat buffer;
413 fstat(0, &buffer);
414 S_IFREG & buffer.st_mode;],
415 [glibcxx_cv_S_IFREG=yes],
416 [glibcxx_cv_S_IFREG=no])
417 ])
bd30e718 418 res=no
68224f8d 419 if test $glibcxx_cv_S_ISREG = yes; then
d64903a9 420 AC_DEFINE(HAVE_S_ISREG, 1,
421 [Define if S_IFREG is available in <sys/stat.h>.])
bd30e718 422 res=S_ISREG
68224f8d 423 elif test $glibcxx_cv_S_IFREG = yes; then
d64903a9 424 AC_DEFINE(HAVE_S_IFREG, 1,
425 [Define if S_IFREG is available in <sys/stat.h>.])
bd30e718 426 res=S_IFREG
68224f8d 427 fi
bd30e718 428 AC_MSG_RESULT($res)
4f37153a 429
430 CXXFLAGS="$ac_save_CXXFLAGS"
431 AC_LANG_RESTORE
b9e8095b 432])
433
434
401f263f 435dnl
68224f8d 436dnl Check whether poll is available in <poll.h>, and define HAVE_POLL.
401f263f 437dnl
2ad02b6c 438AC_DEFUN([GLIBCXX_CHECK_POLL], [
4f37153a 439
440 AC_LANG_SAVE
441 AC_LANG_CPLUSPLUS
442 ac_save_CXXFLAGS="$CXXFLAGS"
443 CXXFLAGS="$CXXFLAGS -fno-exceptions"
444
bd30e718 445 AC_MSG_CHECKING([for poll])
68224f8d 446 AC_CACHE_VAL(glibcxx_cv_POLL, [
4f37153a 447 GCC_TRY_COMPILE_OR_LINK(
68224f8d 448 [#include <poll.h>],
449 [struct pollfd pfd[1];
450 pfd[0].events = POLLIN;
451 poll(pfd, 1, 0);],
452 [glibcxx_cv_POLL=yes],
453 [glibcxx_cv_POLL=no])
454 ])
455 if test $glibcxx_cv_POLL = yes; then
d64903a9 456 AC_DEFINE(HAVE_POLL, 1, [Define if poll is available in <poll.h>.])
68224f8d 457 fi
bd30e718 458 AC_MSG_RESULT($glibcxx_cv_POLL)
4f37153a 459
460 CXXFLAGS="$ac_save_CXXFLAGS"
461 AC_LANG_RESTORE
68224f8d 462])
463
464
465dnl
466dnl Check whether writev is available in <sys/uio.h>, and define HAVE_WRITEV.
467dnl
2ad02b6c 468AC_DEFUN([GLIBCXX_CHECK_WRITEV], [
4f37153a 469
470 AC_LANG_SAVE
471 AC_LANG_CPLUSPLUS
472 ac_save_CXXFLAGS="$CXXFLAGS"
473 CXXFLAGS="$CXXFLAGS -fno-exceptions"
474
bd30e718 475 AC_MSG_CHECKING([for writev])
68224f8d 476 AC_CACHE_VAL(glibcxx_cv_WRITEV, [
4f37153a 477 GCC_TRY_COMPILE_OR_LINK(
68224f8d 478 [#include <sys/uio.h>],
479 [struct iovec iov[2];
480 writev(0, iov, 0);],
481 [glibcxx_cv_WRITEV=yes],
482 [glibcxx_cv_WRITEV=no])
483 ])
484 if test $glibcxx_cv_WRITEV = yes; then
d64903a9 485 AC_DEFINE(HAVE_WRITEV, 1, [Define if writev is available in <sys/uio.h>.])
68224f8d 486 fi
bd30e718 487 AC_MSG_RESULT($glibcxx_cv_WRITEV)
4f37153a 488
489 CXXFLAGS="$ac_save_CXXFLAGS"
490 AC_LANG_RESTORE
68224f8d 491])
492
493
440c107f 494dnl
495dnl Check whether int64_t is available in <stdint.h>, and define HAVE_INT64_T.
e061cb0f 496dnl Also check whether int64_t is actually a typedef to long or long long.
440c107f 497dnl
2ad02b6c 498AC_DEFUN([GLIBCXX_CHECK_INT64_T], [
e061cb0f 499
500 AC_LANG_SAVE
501 AC_LANG_CPLUSPLUS
502
bd30e718 503 AC_MSG_CHECKING([for int64_t])
440c107f 504 AC_CACHE_VAL(glibcxx_cv_INT64_T, [
505 AC_TRY_COMPILE(
506 [#include <stdint.h>],
507 [int64_t var;],
508 [glibcxx_cv_INT64_T=yes],
509 [glibcxx_cv_INT64_T=no])
510 ])
e061cb0f 511
440c107f 512 if test $glibcxx_cv_INT64_T = yes; then
d64903a9 513 AC_DEFINE(HAVE_INT64_T, 1, [Define if int64_t is available in <stdint.h>.])
e061cb0f 514 AC_MSG_RESULT($glibcxx_cv_INT64_T)
515
516 AC_MSG_CHECKING([for int64_t as long])
517 AC_CACHE_VAL(glibcxx_cv_int64_t_long, [
518 AC_TRY_COMPILE(
519 [#include <stdint.h>
520 template<typename, typename> struct same { enum { value = -1 }; };
521 template<typename Tp> struct same<Tp, Tp> { enum { value = 1 }; };
522 int array[same<int64_t, long>::value];], [],
523 [glibcxx_cv_int64_t_long=yes], [glibcxx_cv_int64_t_long=no])
524 ])
525
526 if test $glibcxx_cv_int64_t_long = yes; then
527 AC_DEFINE(HAVE_INT64_T_LONG, 1, [Define if int64_t is a long.])
528 AC_MSG_RESULT($glibcxx_cv_int64_t_long)
529 fi
530
531 AC_MSG_CHECKING([for int64_t as long long])
532 AC_CACHE_VAL(glibcxx_cv_int64_t_long_long, [
533 AC_TRY_COMPILE(
534 [#include <stdint.h>
535 template<typename, typename> struct same { enum { value = -1 }; };
536 template<typename Tp> struct same<Tp, Tp> { enum { value = 1 }; };
537 int array[same<int64_t, long long>::value];], [],
538 [glibcxx_cv_int64_t_long_long=yes], [glibcxx_cv_int64_t_long_long=no])
539 ])
540
541 if test $glibcxx_cv_int64_t_long_long = yes; then
542 AC_DEFINE(HAVE_INT64_T_LONG_LONG, 1, [Define if int64_t is a long long.])
543 AC_MSG_RESULT($glibcxx_cv_int64_t_long_long)
544 fi
440c107f 545 fi
e061cb0f 546
547 AC_LANG_RESTORE
440c107f 548])
549
550
551dnl
552dnl Check whether LFS support is available.
553dnl
2ad02b6c 554AC_DEFUN([GLIBCXX_CHECK_LFS], [
14636c22 555 AC_LANG_SAVE
f6c9c179 556 AC_LANG_CPLUSPLUS
557 ac_save_CXXFLAGS="$CXXFLAGS"
558 CXXFLAGS="$CXXFLAGS -fno-exceptions"
bd30e718 559 AC_MSG_CHECKING([for LFS support])
440c107f 560 AC_CACHE_VAL(glibcxx_cv_LFS, [
4f37153a 561 GCC_TRY_COMPILE_OR_LINK(
14636c22 562 [#include <unistd.h>
563 #include <stdio.h>
b1e0564a 564 #include <sys/stat.h>
14636c22 565 ],
c92ce3f5 566 [FILE* fp;
567 fopen64("t", "w");
568 fseeko64(fp, 0, SEEK_CUR);
569 ftello64(fp);
b1e0564a 570 lseek64(1, 0, SEEK_CUR);
571 struct stat64 buf;
572 fstat64(1, &buf);],
440c107f 573 [glibcxx_cv_LFS=yes],
574 [glibcxx_cv_LFS=no])
575 ])
576 if test $glibcxx_cv_LFS = yes; then
d64903a9 577 AC_DEFINE(_GLIBCXX_USE_LFS, 1, [Define if LFS support is available.])
440c107f 578 fi
bd30e718 579 AC_MSG_RESULT($glibcxx_cv_LFS)
f6c9c179 580 CXXFLAGS="$ac_save_CXXFLAGS"
581 AC_LANG_RESTORE
440c107f 582])
583
584
06450f58 585dnl
586dnl Check for whether a fully dynamic basic_string implementation should
587dnl be turned on, that does not put empty objects in per-process static
588dnl memory (mostly useful together with shared memory allocators, see PR
589dnl libstdc++/16612 for details).
590dnl
591dnl --enable-fully-dynamic-string defines _GLIBCXX_FULLY_DYNAMIC_STRING
592dnl --disable-fully-dynamic-string leaves _GLIBCXX_FULLY_DYNAMIC_STRING undefined
593dnl + Usage: GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING[(DEFAULT)]
594dnl Where DEFAULT is either `yes' or `no'.
595dnl
596AC_DEFUN([GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING], [
597 GLIBCXX_ENABLE(fully-dynamic-string,$1,,[do not put empty strings in per-process static memory])
598 if test $enable_fully_dynamic_string = yes; then
d64903a9 599 AC_DEFINE(_GLIBCXX_FULLY_DYNAMIC_STRING, 1,
600 [Define if a fully dynamic basic_string is wanted.])
06450f58 601 fi
602])
603
604
68224f8d 605dnl
606dnl Does any necessary configuration of the testsuite directory. Generates
607dnl the testsuite_hooks.h header.
608dnl
609dnl GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE must be done before this.
610dnl
611dnl Sets:
099c5a78 612dnl enable_abi_check
c37e7a9d 613dnl GLIBCXX_TEST_WCHAR_T
614dnl GLIBCXX_TEST_THREAD
68224f8d 615dnl Substs:
616dnl baseline_dir
617dnl
2ad02b6c 618AC_DEFUN([GLIBCXX_CONFIGURE_TESTSUITE], [
10f7a2cb 619 if $GLIBCXX_IS_NATIVE ; then
ac7a2146 620 # Do checks for resource limit functions.
68224f8d 621 GLIBCXX_CHECK_SETRLIMIT
622
623 # Look for setenv, so that extended locale tests can be performed.
624 GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3(setenv)
10f7a2cb 625 fi
3795d5fd 626
10f7a2cb 627 if $GLIBCXX_IS_NATIVE && test $is_hosted = yes &&
628 test $enable_symvers != no; then
629 case "$host" in
630 *-*-cygwin*)
631 enable_abi_check=no ;;
632 *)
633 enable_abi_check=yes ;;
634 esac
3795d5fd 635 else
636 # Only build this as native, since automake does not understand
637 # CXX_FOR_BUILD.
638 enable_abi_check=no
68224f8d 639 fi
099c5a78 640
68224f8d 641 # Export file names for ABI checking.
871b22db 642 baseline_dir="$glibcxx_srcdir/config/abi/post/${abi_baseline_pair}\$(MULTISUBDIR)"
68224f8d 643 AC_SUBST(baseline_dir)
68224f8d 644])
645
646
647dnl
648dnl Set up *_INCLUDES variables for all sundry Makefile.am's.
649dnl
650dnl Substs:
651dnl GLIBCXX_INCLUDES
652dnl TOPLEVEL_INCLUDES
68224f8d 653dnl
2ad02b6c 654AC_DEFUN([GLIBCXX_EXPORT_INCLUDES], [
2eb169cd 655 # Used for every C++ compile we perform.
656 GLIBCXX_INCLUDES="\
657-I$glibcxx_builddir/include/$host_alias \
658-I$glibcxx_builddir/include \
659-I$glibcxx_srcdir/libsupc++"
68224f8d 660
2eb169cd 661 # For Canadian crosses, pick this up too.
68224f8d 662 if test $CANADIAN = yes; then
c0d1c48c 663 GLIBCXX_INCLUDES="$GLIBCXX_INCLUDES -I\${includedir}"
68224f8d 664 fi
665
2eb169cd 666 # Stuff in the actual top level. Currently only used by libsupc++ to
667 # get unwind* headers from the gcc dir.
668 #TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/gcc -I$(toplevel_srcdir)/include'
669 TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/gcc'
68224f8d 670
671 # Now, export this to all the little Makefiles....
672 AC_SUBST(GLIBCXX_INCLUDES)
673 AC_SUBST(TOPLEVEL_INCLUDES)
68224f8d 674])
675
676
677dnl
678dnl Set up *_FLAGS and *FLAGS variables for all sundry Makefile.am's.
679dnl (SECTION_FLAGS is done under CHECK_COMPILER_FEATURES.)
680dnl
681dnl Substs:
682dnl OPTIMIZE_CXXFLAGS
683dnl WARN_FLAGS
684dnl
2ad02b6c 685AC_DEFUN([GLIBCXX_EXPORT_FLAGS], [
68224f8d 686 # Optimization flags that are probably a good idea for thrill-seekers. Just
687 # uncomment the lines below and make, everything else is ready to go...
074377fd 688 # Alternatively OPTIMIZE_CXXFLAGS can be set in configure.host.
68224f8d 689 # OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc
68224f8d 690 AC_SUBST(OPTIMIZE_CXXFLAGS)
691
c8559392 692 WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual'
68224f8d 693 AC_SUBST(WARN_FLAGS)
694])
695
696
697dnl
698dnl All installation directory information is determined here.
699dnl
700dnl Substs:
701dnl gxx_install_dir
702dnl glibcxx_prefixdir
703dnl glibcxx_toolexecdir
704dnl glibcxx_toolexeclibdir
705dnl
706dnl Assumes cross_compiling bits already done, and with_cross_host in
707dnl particular.
708dnl
0bf9691e 709dnl This logic must match gcc/configure.ac's setting of gcc_gxx_include_dir.
717b8f50 710dnl config/gxx-include-dir.m4 must be kept consistant with this as well.
2ad02b6c 711AC_DEFUN([GLIBCXX_EXPORT_INSTALL_INFO], [
68224f8d 712 glibcxx_toolexecdir=no
713 glibcxx_toolexeclibdir=no
714 glibcxx_prefixdir=$prefix
715
716 AC_MSG_CHECKING([for gxx-include-dir])
717 AC_ARG_WITH([gxx-include-dir],
718 AC_HELP_STRING([--with-gxx-include-dir=DIR],
719 [installation directory for include files]),
720 [case "$withval" in
721 yes) AC_MSG_ERROR([Missing directory for --with-gxx-include-dir]) ;;
722 no) gxx_include_dir=no ;;
723 *) gxx_include_dir=$withval ;;
724 esac],
725 [gxx_include_dir=no])
726 AC_MSG_RESULT($gxx_include_dir)
727
728 AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
729 AC_ARG_ENABLE([version-specific-runtime-libs],
730 AC_HELP_STRING([--enable-version-specific-runtime-libs],
731 [Specify that runtime libraries should be installed in a compiler-specific directory]),
732 [case "$enableval" in
733 yes) version_specific_libs=yes ;;
734 no) version_specific_libs=no ;;
735 *) AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);;
736 esac],
737 [version_specific_libs=no])
738 AC_MSG_RESULT($version_specific_libs)
739
740 # Default case for install directory for include files.
741 if test $version_specific_libs = no && test $gxx_include_dir = no; then
0bf9691e 742 gxx_include_dir='include/c++/${gcc_version}'
743 if test -n "$with_cross_host" &&
744 test x"$with_cross_host" != x"no"; then
745 gxx_include_dir='${prefix}/${target_alias}/'"$gxx_include_dir"
746 else
747 gxx_include_dir='${prefix}/'"$gxx_include_dir"
748 fi
68224f8d 749 fi
750
751 # Version-specific runtime libs processing.
752 if test $version_specific_libs = yes; then
753 # Need the gcc compiler version to know where to install libraries
754 # and header files if --enable-version-specific-runtime-libs option
949aa2c6 755 # is selected. FIXME: these variables are misnamed, there are
756 # no executables installed in _toolexecdir or _toolexeclibdir.
68224f8d 757 if test x"$gxx_include_dir" = x"no"; then
b6ca54bb 758 gxx_include_dir='${libdir}/gcc/${host_alias}/${gcc_version}/include/c++'
68224f8d 759 fi
949aa2c6 760 glibcxx_toolexecdir='${libdir}/gcc/${host_alias}'
b6ca54bb 761 glibcxx_toolexeclibdir='${toolexecdir}/${gcc_version}$(MULTISUBDIR)'
68224f8d 762 fi
763
764 # Calculate glibcxx_toolexecdir, glibcxx_toolexeclibdir
765 # Install a library built with a cross compiler in tooldir, not libdir.
766 if test x"$glibcxx_toolexecdir" = x"no"; then
767 if test -n "$with_cross_host" &&
768 test x"$with_cross_host" != x"no"; then
f4a06a64 769 glibcxx_toolexecdir='${exec_prefix}/${host_alias}'
770 glibcxx_toolexeclibdir='${toolexecdir}/lib'
68224f8d 771 else
949aa2c6 772 glibcxx_toolexecdir='${libdir}/gcc/${host_alias}'
f4a06a64 773 glibcxx_toolexeclibdir='${libdir}'
68224f8d 774 fi
f4a06a64 775 multi_os_directory=`$CXX -print-multi-os-directory`
68224f8d 776 case $multi_os_directory in
777 .) ;; # Avoid trailing /.
778 *) glibcxx_toolexeclibdir=$glibcxx_toolexeclibdir/$multi_os_directory ;;
779 esac
780 fi
781
782 AC_MSG_CHECKING([for install location])
783 AC_MSG_RESULT($gxx_include_dir)
784
785 AC_SUBST(glibcxx_prefixdir)
786 AC_SUBST(gxx_include_dir)
787 AC_SUBST(glibcxx_toolexecdir)
788 AC_SUBST(glibcxx_toolexeclibdir)
789])
790
791
792dnl
793dnl GLIBCXX_ENABLE
794dnl (FEATURE, DEFAULT, HELP-ARG, HELP-STRING)
795dnl (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, permit a|b|c)
796dnl (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, SHELL-CODE-HANDLER)
797dnl
798dnl See docs/html/17_intro/configury.html#enable for documentation.
799dnl
800m4_define([GLIBCXX_ENABLE],[dnl
801m4_define([_g_switch],[--enable-$1])dnl
802m4_define([_g_help],[AC_HELP_STRING(_g_switch$3,[$4 @<:@default=$2@:>@])])dnl
803 AC_ARG_ENABLE($1,_g_help,
804 m4_bmatch([$5],
805 [^permit ],
806 [[
807 case "$enableval" in
808 m4_bpatsubst([$5],[permit ])) ;;
809 *) AC_MSG_ERROR(Unknown argument to enable/disable $1) ;;
810 dnl Idea for future: generate a URL pointing to
811 dnl "onlinedocs/configopts.html#whatever"
812 esac
813 ]],
814 [^$],
815 [[
816 case "$enableval" in
817 yes|no) ;;
818 *) AC_MSG_ERROR(Argument to enable/disable $1 must be yes or no) ;;
819 esac
820 ]],
821 [[$5]]),
822 [enable_]m4_bpatsubst([$1],-,_)[=][$2])
823m4_undefine([_g_switch])dnl
824m4_undefine([_g_help])dnl
825])
826
827
828dnl
829dnl Check for ISO/IEC 9899:1999 "C99" support.
830dnl
831dnl --enable-c99 defines _GLIBCXX_USE_C99
832dnl --disable-c99 leaves _GLIBCXX_USE_C99 undefined
833dnl + Usage: GLIBCXX_ENABLE_C99[(DEFAULT)]
834dnl Where DEFAULT is either `yes' or `no'.
835dnl + If 'C99' stuff is not available, ignores DEFAULT and sets `no'.
836dnl
2ad02b6c 837AC_DEFUN([GLIBCXX_ENABLE_C99], [
68224f8d 838 GLIBCXX_ENABLE(c99,$1,,[turns on ISO/IEC 9899:1999 support])
839
c586733c 840 if test x"$enable_c99" = x"yes"; then
841
68224f8d 842 AC_LANG_SAVE
843 AC_LANG_CPLUSPLUS
844
91f76f05 845 # Use -std=c++98 because the default (-std=gnu++98) leaves __STRICT_ANSI__
846 # undefined and fake C99 facilities - like pre-standard snprintf - may be
847 # spuriously enabled.
848 # Long term, -std=c++0x could be even better, could manage to explicitely
849 # request C99 facilities to the underlying C headers.
757228f3 850 ac_save_CXXFLAGS="$CXXFLAGS"
91f76f05 851 CXXFLAGS="$CXXFLAGS -std=c++98"
757228f3 852 ac_save_LIBS="$LIBS"
853 ac_save_gcc_no_link="$gcc_no_link"
854
855 if test x$gcc_no_link != xyes; then
856 # Use -fno-exceptions to that the C driver can link these tests without
857 # hitting undefined references to personality routines.
858 CXXFLAGS="$CXXFLAGS -fno-exceptions"
859 AC_CHECK_LIB(m, sin, [
860 LIBS="$LIBS -lm"
861 ], [
862 # Use the default compile-only tests in GCC_TRY_COMPILE_OR_LINK
863 gcc_no_link=yes
864 ])
865 fi
866
68224f8d 867 # Check for the existence of <math.h> functions used if C99 is enabled.
68224f8d 868 AC_MSG_CHECKING([for ISO C99 support in <math.h>])
6992582a 869 AC_CACHE_VAL(glibcxx_cv_c99_math, [
757228f3 870 GCC_TRY_COMPILE_OR_LINK(
871 [#include <math.h>
872 volatile double d1, d2;
873 volatile int i;],
874 [i = fpclassify(d1);
875 i = isfinite(d1);
876 i = isinf(d1);
877 i = isnan(d1);
878 i = isnormal(d1);
879 i = signbit(d1);
880 i = isgreater(d1, d2);
881 i = isgreaterequal(d1, d2);
882 i = isless(d1, d2);
883 i = islessequal(d1, d2);
884 i = islessgreater(d1, d2);
885 i = islessgreater(d1, d2);
886 i = isunordered(d1, d2);
6992582a 887 ],[glibcxx_cv_c99_math=yes], [glibcxx_cv_c99_math=no])
c586733c 888 ])
6992582a 889 AC_MSG_RESULT($glibcxx_cv_c99_math)
890 if test x"$glibcxx_cv_c99_math" = x"yes"; then
d64903a9 891 AC_DEFINE(_GLIBCXX_USE_C99_MATH, 1,
892 [Define if C99 functions or macros in <math.h> should be imported
893 in <cmath> in namespace std.])
90d5bb42 894 fi
895
7b989971 896 # Check for the existence of <complex.h> complex math functions.
9253fc43 897 # This is necessary even though libstdc++ uses the builtin versions
898 # of these functions, because if the builtin cannot be used, a reference
899 # to the library function is emitted.
054432c5 900 AC_CHECK_HEADERS(tgmath.h, ac_has_tgmath_h=yes, ac_has_tgmath_h=no)
9253fc43 901 AC_CHECK_HEADERS(complex.h, ac_has_complex_h=yes, ac_has_complex_h=no)
6992582a 902 glibcxx_cv_c99_complex=no;
9253fc43 903 if test x"$ac_has_complex_h" = x"yes"; then
9253fc43 904 AC_MSG_CHECKING([for ISO C99 support in <complex.h>])
757228f3 905 GCC_TRY_COMPILE_OR_LINK(
906 [#include <complex.h>
907 typedef __complex__ float float_type;
908 typedef __complex__ double double_type;
909 typedef __complex__ long double ld_type;
910 volatile float_type tmpf;
911 volatile double_type tmpd;
912 volatile ld_type tmpld;
913 volatile float f;
914 volatile double d;
915 volatile long double ld;],
916 [f = cabsf(tmpf);
917 f = cargf(tmpf);
918 tmpf = ccosf(tmpf);
919 tmpf = ccoshf(tmpf);
920 tmpf = cexpf(tmpf);
921 tmpf = clogf(tmpf);
922 tmpf = csinf(tmpf);
923 tmpf = csinhf(tmpf);
924 tmpf = csqrtf(tmpf);
925 tmpf = ctanf(tmpf);
926 tmpf = ctanhf(tmpf);
927 tmpf = cpowf(tmpf, tmpf);
df2fcd57 928 tmpf = cprojf(tmpf);
757228f3 929 d = cabs(tmpd);
930 d = carg(tmpd);
931 tmpd = ccos(tmpd);
932 tmpd = ccosh(tmpd);
933 tmpd = cexp(tmpd);
934 tmpd = clog(tmpd);
935 tmpd = csin(tmpd);
936 tmpd = csinh(tmpd);
937 tmpd = csqrt(tmpd);
938 tmpd = ctan(tmpd);
939 tmpd = ctanh(tmpd);
940 tmpd = cpow(tmpd, tmpd);
df2fcd57 941 tmpd = cproj(tmpd);
757228f3 942 ld = cabsl(tmpld);
943 ld = cargl(tmpld);
944 tmpld = ccosl(tmpld);
945 tmpld = ccoshl(tmpld);
946 tmpld = cexpl(tmpld);
947 tmpld = clogl(tmpld);
948 tmpld = csinl(tmpld);
949 tmpld = csinhl(tmpld);
950 tmpld = csqrtl(tmpld);
951 tmpld = ctanl(tmpld);
952 tmpld = ctanhl(tmpld);
953 tmpld = cpowl(tmpld, tmpld);
df2fcd57 954 tmpld = cprojl(tmpld);
6992582a 955 ],[glibcxx_cv_c99_complex=yes], [glibcxx_cv_c99_complex=no])
9253fc43 956 fi
6992582a 957 AC_MSG_RESULT($glibcxx_cv_c99_complex)
958 if test x"$glibcxx_cv_c99_complex" = x"yes"; then
d64903a9 959 AC_DEFINE(_GLIBCXX_USE_C99_COMPLEX, 1,
960 [Define if C99 functions in <complex.h> should be used in
961 <complex>. Using compiler builtins for these functions requires
962 corresponding C99 library functions to be present.])
9253fc43 963 fi
964
68224f8d 965 # Check for the existence in <stdio.h> of vscanf, et. al.
68224f8d 966 AC_MSG_CHECKING([for ISO C99 support in <stdio.h>])
6992582a 967 AC_CACHE_VAL(glibcxx_cv_c99_stdio, [
757228f3 968 GCC_TRY_COMPILE_OR_LINK(
969 [#include <stdio.h>
970 #include <stdarg.h>
971 void foo(char* fmt, ...)
972 {
973 va_list args; va_start(args, fmt);
974 vfscanf(stderr, "%i", args);
975 vscanf("%i", args);
976 vsnprintf(fmt, 0, "%i", args);
977 vsscanf(fmt, "%i", args);
978 }],
979 [snprintf("12", 0, "%i");],
6992582a 980 [glibcxx_cv_c99_stdio=yes], [glibcxx_cv_c99_stdio=no])
c586733c 981 ])
6992582a 982 AC_MSG_RESULT($glibcxx_cv_c99_stdio)
68224f8d 983
984 # Check for the existence in <stdlib.h> of lldiv_t, et. al.
68224f8d 985 AC_MSG_CHECKING([for ISO C99 support in <stdlib.h>])
6992582a 986 AC_CACHE_VAL(glibcxx_cv_c99_stdlib, [
757228f3 987 GCC_TRY_COMPILE_OR_LINK(
988 [#include <stdlib.h>
989 volatile float f;
990 volatile long double ld;
991 volatile unsigned long long ll;
992 lldiv_t mydivt;],
993 [char* tmp;
994 f = strtof("gnu", &tmp);
995 ld = strtold("gnu", &tmp);
996 ll = strtoll("gnu", &tmp, 10);
997 ll = strtoull("gnu", &tmp, 10);
998 ll = llabs(10);
999 mydivt = lldiv(10,1);
1000 ll = mydivt.quot;
1001 ll = mydivt.rem;
1002 ll = atoll("10");
1003 _Exit(0);
6992582a 1004 ],[glibcxx_cv_c99_stdlib=yes], [glibcxx_cv_c99_stdlib=no])
c586733c 1005 ])
6992582a 1006 AC_MSG_RESULT($glibcxx_cv_c99_stdlib)
68224f8d 1007
21b22bc5 1008 # Check for the existence in <wchar.h> of wcstold, etc.
6992582a 1009 glibcxx_cv_c99_wchar=no;
c586733c 1010 if test x"$ac_has_wchar_h" = xyes &&
1011 test x"$ac_has_wctype_h" = xyes; then
21b22bc5 1012 AC_MSG_CHECKING([for ISO C99 support in <wchar.h>])
c586733c 1013 AC_TRY_COMPILE([#include <wchar.h>
c586733c 1014 namespace test
1015 {
c586733c 1016 using ::wcstold;
1017 using ::wcstoll;
c586733c 1018 using ::wcstoull;
c586733c 1019 }
6992582a 1020 ],[],[glibcxx_cv_c99_wchar=yes], [glibcxx_cv_c99_wchar=no])
c586733c 1021
1022 # Checks for wide character functions that may not be present.
1023 # Injection of these is wrapped with guard macros.
1024 # NB: only put functions here, instead of immediately above, if
1025 # absolutely necessary.
1026 AC_TRY_COMPILE([#include <wchar.h>
1027 namespace test { using ::vfwscanf; } ], [],
1028 [AC_DEFINE(HAVE_VFWSCANF,1,
1029 [Defined if vfwscanf exists.])],[])
1030
1031 AC_TRY_COMPILE([#include <wchar.h>
1032 namespace test { using ::vswscanf; } ], [],
1033 [AC_DEFINE(HAVE_VSWSCANF,1,
1034 [Defined if vswscanf exists.])],[])
1035
1036 AC_TRY_COMPILE([#include <wchar.h>
1037 namespace test { using ::vwscanf; } ], [],
1038 [AC_DEFINE(HAVE_VWSCANF,1,[Defined if vwscanf exists.])],[])
1039
1040 AC_TRY_COMPILE([#include <wchar.h>
1041 namespace test { using ::wcstof; } ], [],
1042 [AC_DEFINE(HAVE_WCSTOF,1,[Defined if wcstof exists.])],[])
1043
1044 AC_TRY_COMPILE([#include <wctype.h>],
1045 [ wint_t t; int i = iswblank(t);],
1046 [AC_DEFINE(HAVE_ISWBLANK,1,
1047 [Defined if iswblank exists.])],[])
1048
6992582a 1049 AC_MSG_RESULT($glibcxx_cv_c99_wchar)
c586733c 1050 fi
68224f8d 1051
c586733c 1052 # Option parsed, now set things appropriately.
6992582a 1053 if test x"$glibcxx_cv_c99_math" = x"no" ||
1054 test x"$glibcxx_cv_c99_complex" = x"no" ||
1055 test x"$glibcxx_cv_c99_stdio" = x"no" ||
1056 test x"$glibcxx_cv_c99_stdlib" = x"no" ||
1057 test x"$glibcxx_cv_c99_wchar" = x"no"; then
68224f8d 1058 enable_c99=no;
c586733c 1059 else
d64903a9 1060 AC_DEFINE(_GLIBCXX_USE_C99, 1,
1061 [Define if C99 functions or macros from <wchar.h>, <math.h>,
1062 <complex.h>, <stdio.h>, and <stdlib.h> can be used or exposed.])
68224f8d 1063 fi
1064
757228f3 1065 gcc_no_link="$ac_save_gcc_no_link"
1066 LIBS="$ac_save_LIBS"
1067 CXXFLAGS="$ac_save_CXXFLAGS"
68224f8d 1068 AC_LANG_RESTORE
c586733c 1069 fi
1070
1071 AC_MSG_CHECKING([for fully enabled ISO C99 support])
1072 AC_MSG_RESULT($enable_c99)
401f263f 1073])
1074
1075
4971b9a8 1076dnl
d6182d17 1077dnl Check for clock_gettime clocks, used in the implementation of 20.8.5
1078dnl [time.clock] in the current C++0x working draft.
4971b9a8 1079dnl
d6182d17 1080dnl --enable-clock-gettime
1081dnl --enable-clock-gettime=yes
82af6a35 1082dnl checks for the availability of monotonic and realtime clocks
1083dnl in libc and libposix4 and in case links the latter
d6182d17 1084dnl --enable-clock-gettime=rt
82af6a35 1085dnl also searches (and, in case, links) librt. Note that this is
d6182d17 1086dnl not always desirable because, in glibc, for example, in turn it
82af6a35 1087dnl triggers the linking of libpthread too, which activates locking,
1088dnl a large overhead for single-thread programs.
d6182d17 1089dnl --enable-clock-gettime=no
1090dnl --disable-clock-gettime
1091dnl disables the checks completely
1092dnl
1093AC_DEFUN([GLIBCXX_ENABLE_CLOCK_GETTIME], [
1094
1095 AC_MSG_CHECKING([for clock_gettime clocks])
b23411e9 1096 GLIBCXX_ENABLE(clock-gettime,$1,[=KIND],
d6182d17 1097 [use KIND for check type],
1098 [permit yes|no|rt])
4971b9a8 1099
1100 AC_LANG_SAVE
1101 AC_LANG_CPLUSPLUS
1102 ac_save_CXXFLAGS="$CXXFLAGS"
1103 CXXFLAGS="$CXXFLAGS -fno-exceptions"
ad3e2295 1104 ac_save_LIBS="$LIBS"
1105
d6182d17 1106 ac_has_clock_monotonic=no;
1107 ac_has_clock_realtime=no;
ad3e2295 1108
d6182d17 1109 if test x"$enable_clock_gettime" != x"no"; then
ad3e2295 1110
d6182d17 1111 if test x"$enable_clock_gettime" = x"rt"; then
1112 AC_SEARCH_LIBS(clock_gettime, [rt posix4])
1113 else
1114 AC_SEARCH_LIBS(clock_gettime, [posix4])
1115 fi
1116
1117 case "$ac_cv_search_clock_gettime" in
1118 -l*) GLIBCXX_LIBS=$ac_cv_search_clock_gettime
1119 esac
1120
1121 AC_CHECK_HEADERS(unistd.h, ac_has_unistd_h=yes, ac_has_unistd_h=no)
1122
1123 if test x"$ac_has_unistd_h" = x"yes"; then
1124 AC_MSG_CHECKING([for monotonic clock])
1125 AC_TRY_LINK(
1126 [#include <unistd.h>
1127 #include <time.h>
1128 ],
1129 [#if _POSIX_TIMERS > 0 && defined(_POSIX_MONOTONIC_CLOCK)
1130 timespec tp;
1131 #endif
1132 clock_gettime(CLOCK_MONOTONIC, &tp);
1133 ], [ac_has_clock_monotonic=yes], [ac_has_clock_monotonic=no])
1134
1135 AC_MSG_RESULT($ac_has_clock_monotonic)
4971b9a8 1136
d6182d17 1137 AC_MSG_CHECKING([for realtime clock])
1138 AC_TRY_LINK(
1139 [#include <unistd.h>
1140 #include <time.h>
1141 ],
1142 [#if _POSIX_TIMERS > 0
1143 timespec tp;
1144 #endif
1145 clock_gettime(CLOCK_REALTIME, &tp);
1146 ], [ac_has_clock_realtime=yes], [ac_has_clock_realtime=no])
1147
1148 AC_MSG_RESULT($ac_has_clock_realtime)
1149 fi
1150
1151 fi
1152
4971b9a8 1153 if test x"$ac_has_clock_monotonic" = x"yes"; then
1154 AC_DEFINE(_GLIBCXX_USE_CLOCK_MONOTONIC, 1,
1155 [ Defined if clock_gettime has monotonic clock support. ])
1156 fi
ad3e2295 1157
4971b9a8 1158 if test x"$ac_has_clock_realtime" = x"yes"; then
1159 AC_DEFINE(_GLIBCXX_USE_CLOCK_REALTIME, 1,
1160 [ Defined if clock_gettime has realtime clock support. ])
1161 fi
ad3e2295 1162
1163 AC_SUBST(GLIBCXX_LIBS)
1164
4971b9a8 1165 CXXFLAGS="$ac_save_CXXFLAGS"
ad3e2295 1166 LIBS="$ac_save_LIBS"
4971b9a8 1167 AC_LANG_RESTORE
1168])
1169
1170dnl
d6182d17 1171dnl Check for gettimeofday, used in the implementation of 20.8.5
1172dnl [time.clock] in the current C++0x working draft.
4971b9a8 1173dnl
1174AC_DEFUN([GLIBCXX_CHECK_GETTIMEOFDAY], [
1175
d6182d17 1176 AC_MSG_CHECKING([for gettimeofday])
1177
4971b9a8 1178 AC_LANG_SAVE
1179 AC_LANG_CPLUSPLUS
1180 ac_save_CXXFLAGS="$CXXFLAGS"
1181 CXXFLAGS="$CXXFLAGS -fno-exceptions"
1182
1183 ac_has_gettimeofday=no;
1184 AC_CHECK_HEADERS(sys/time.h, ac_has_sys_time_h=yes, ac_has_sys_time_h=no)
1185 if test x"$ac_has_sys_time_h" = x"yes"; then
1186 AC_MSG_CHECKING([for gettimeofday])
d6182d17 1187 GCC_TRY_COMPILE_OR_LINK([#include <sys/time.h>],
4971b9a8 1188 [timeval tv; gettimeofday(&tv, 0);],
1189 [ac_has_gettimeofday=yes], [ac_has_gettimeofday=no])
1190
1191 AC_MSG_RESULT($ac_has_gettimeofday)
1192 fi
1193
1194 if test x"$ac_has_gettimeofday" = x"yes"; then
1195 AC_DEFINE(_GLIBCXX_USE_GETTIMEOFDAY, 1,
1196 [ Defined if gettimeofday is available. ])
1197 fi
1198
1199 CXXFLAGS="$ac_save_CXXFLAGS"
1200 AC_LANG_RESTORE
1201])
1202
d04e5f88 1203dnl
1204dnl Check for ISO/IEC 9899:1999 "C99" support to ISO/IEC DTR 19768 "TR1"
1205dnl facilities in Chapter 8, "C compatibility".
1206dnl
1207AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [
1208
1209 AC_LANG_SAVE
1210 AC_LANG_CPLUSPLUS
1211
91f76f05 1212 # Use -std=c++98 because the default (-std=gnu++98) leaves __STRICT_ANSI__
1213 # undefined and fake C99 facilities may be spuriously enabled.
1214 ac_save_CXXFLAGS="$CXXFLAGS"
1215 CXXFLAGS="$CXXFLAGS -std=c++98"
1216
d04e5f88 1217 # Check for the existence of <complex.h> complex math functions used
1218 # by tr1/complex.
1219 AC_CHECK_HEADERS(complex.h, ac_has_complex_h=yes, ac_has_complex_h=no)
1220 ac_c99_complex_tr1=no;
1221 if test x"$ac_has_complex_h" = x"yes"; then
1222 AC_MSG_CHECKING([for ISO C99 support to TR1 in <complex.h>])
1223 AC_TRY_COMPILE([#include <complex.h>],
1224 [typedef __complex__ float float_type; float_type tmpf;
1225 cacosf(tmpf);
1226 casinf(tmpf);
1227 catanf(tmpf);
1228 cacoshf(tmpf);
1229 casinhf(tmpf);
1230 catanhf(tmpf);
1231 typedef __complex__ double double_type; double_type tmpd;
1232 cacos(tmpd);
1233 casin(tmpd);
1234 catan(tmpd);
1235 cacosh(tmpd);
1236 casinh(tmpd);
1237 catanh(tmpd);
1238 typedef __complex__ long double ld_type; ld_type tmpld;
1239 cacosl(tmpld);
1240 casinl(tmpld);
1241 catanl(tmpld);
1242 cacoshl(tmpld);
1243 casinhl(tmpld);
1244 catanhl(tmpld);
1245 ],[ac_c99_complex_tr1=yes], [ac_c99_complex_tr1=no])
1246 fi
1247 AC_MSG_RESULT($ac_c99_complex_tr1)
1248 if test x"$ac_c99_complex_tr1" = x"yes"; then
1249 AC_DEFINE(_GLIBCXX_USE_C99_COMPLEX_TR1, 1,
1250 [Define if C99 functions in <complex.h> should be used in
1251 <tr1/complex>. Using compiler builtins for these functions
1252 requires corresponding C99 library functions to be present.])
1253 fi
1254
1255 # Check for the existence of <ctype.h> functions.
1256 AC_MSG_CHECKING([for ISO C99 support to TR1 in <ctype.h>])
6992582a 1257 AC_CACHE_VAL(glibcxx_cv_c99_ctype_tr1, [
d04e5f88 1258 AC_TRY_COMPILE([#include <ctype.h>],
1068b7db 1259 [int ch;
54a22b3a 1260 int ret;
1261 ret = isblank(ch);
fcbe9d5c 1262 ],[glibcxx_cv_c99_ctype_tr1=yes],
1263 [glibcxx_cv_c99_ctype_tr1=no])
d04e5f88 1264 ])
6992582a 1265 AC_MSG_RESULT($glibcxx_cv_c99_ctype_tr1)
1266 if test x"$glibcxx_cv_c99_ctype_tr1" = x"yes"; then
d04e5f88 1267 AC_DEFINE(_GLIBCXX_USE_C99_CTYPE_TR1, 1,
1268 [Define if C99 functions in <ctype.h> should be imported in
1269 <tr1/cctype> in namespace std::tr1.])
1270 fi
1271
1068b7db 1272 # Check for the existence of <fenv.h> functions.
1273 AC_CHECK_HEADERS(fenv.h, ac_has_fenv_h=yes, ac_has_fenv_h=no)
1274 ac_c99_fenv_tr1=no;
1275 if test x"$ac_has_fenv_h" = x"yes"; then
1276 AC_MSG_CHECKING([for ISO C99 support to TR1 in <fenv.h>])
1277 AC_TRY_COMPILE([#include <fenv.h>],
1278 [int except, mode;
1279 fexcept_t* pflag;
1280 fenv_t* penv;
54a22b3a 1281 int ret;
1282 ret = feclearexcept(except);
1283 ret = fegetexceptflag(pflag, except);
1284 ret = feraiseexcept(except);
1285 ret = fesetexceptflag(pflag, except);
1286 ret = fetestexcept(except);
1287 ret = fegetround();
1288 ret = fesetround(mode);
1289 ret = fegetenv(penv);
1290 ret = feholdexcept(penv);
1291 ret = fesetenv(penv);
1292 ret = feupdateenv(penv);
1068b7db 1293 ],[ac_c99_fenv_tr1=yes], [ac_c99_fenv_tr1=no])
1294 fi
1295 AC_MSG_RESULT($ac_c99_fenv_tr1)
1296 if test x"$ac_c99_fenv_tr1" = x"yes"; then
1297 AC_DEFINE(_GLIBCXX_USE_C99_FENV_TR1, 1,
1298 [Define if C99 functions in <fenv.h> should be imported in
1299 <tr1/cfenv> in namespace std::tr1.])
1300 fi
1301
14dd354c 1302 # Check for the existence of <stdint.h> types.
1303 AC_MSG_CHECKING([for ISO C99 support to TR1 in <stdint.h>])
6992582a 1304 AC_CACHE_VAL(glibcxx_cv_c99_stdint_tr1, [
b12cc7df 1305 AC_TRY_COMPILE([#define __STDC_LIMIT_MACROS
1306 #define __STDC_CONSTANT_MACROS
1307 #include <stdint.h>],
14dd354c 1308 [typedef int8_t my_int8_t;
b12cc7df 1309 my_int8_t i8 = INT8_MIN;
1310 i8 = INT8_MAX;
14dd354c 1311 typedef int16_t my_int16_t;
b12cc7df 1312 my_int16_t i16 = INT16_MIN;
1313 i16 = INT16_MAX;
14dd354c 1314 typedef int32_t my_int32_t;
b12cc7df 1315 my_int32_t i32 = INT32_MIN;
1316 i32 = INT32_MAX;
14dd354c 1317 typedef int64_t my_int64_t;
b12cc7df 1318 my_int64_t i64 = INT64_MIN;
1319 i64 = INT64_MAX;
14dd354c 1320 typedef int_fast8_t my_int_fast8_t;
b12cc7df 1321 my_int_fast8_t if8 = INT_FAST8_MIN;
1322 if8 = INT_FAST8_MAX;
14dd354c 1323 typedef int_fast16_t my_int_fast16_t;
b12cc7df 1324 my_int_fast16_t if16 = INT_FAST16_MIN;
1325 if16 = INT_FAST16_MAX;
14dd354c 1326 typedef int_fast32_t my_int_fast32_t;
b12cc7df 1327 my_int_fast32_t if32 = INT_FAST32_MIN;
1328 if32 = INT_FAST32_MAX;
1329 typedef int_fast64_t my_int_fast64_t;
1330 my_int_fast64_t if64 = INT_FAST64_MIN;
1331 if64 = INT_FAST64_MAX;
14dd354c 1332 typedef int_least8_t my_int_least8_t;
b12cc7df 1333 my_int_least8_t il8 = INT_LEAST8_MIN;
1334 il8 = INT_LEAST8_MAX;
14dd354c 1335 typedef int_least16_t my_int_least16_t;
b12cc7df 1336 my_int_least16_t il16 = INT_LEAST16_MIN;
1337 il16 = INT_LEAST16_MAX;
14dd354c 1338 typedef int_least32_t my_int_least32_t;
b12cc7df 1339 my_int_least32_t il32 = INT_LEAST32_MIN;
1340 il32 = INT_LEAST32_MAX;
14dd354c 1341 typedef int_least64_t my_int_least64_t;
b12cc7df 1342 my_int_least64_t il64 = INT_LEAST64_MIN;
1343 il64 = INT_LEAST64_MAX;
14dd354c 1344 typedef intmax_t my_intmax_t;
b12cc7df 1345 my_intmax_t im = INTMAX_MAX;
1346 im = INTMAX_MIN;
14dd354c 1347 typedef intptr_t my_intptr_t;
b12cc7df 1348 my_intptr_t ip = INTPTR_MAX;
1349 ip = INTPTR_MIN;
14dd354c 1350 typedef uint8_t my_uint8_t;
b12cc7df 1351 my_uint8_t ui8 = UINT8_MAX;
1352 ui8 = UINT8_MAX;
14dd354c 1353 typedef uint16_t my_uint16_t;
b12cc7df 1354 my_uint16_t ui16 = UINT16_MAX;
1355 ui16 = UINT16_MAX;
14dd354c 1356 typedef uint32_t my_uint32_t;
b12cc7df 1357 my_uint32_t ui32 = UINT32_MAX;
1358 ui32 = UINT32_MAX;
14dd354c 1359 typedef uint64_t my_uint64_t;
b12cc7df 1360 my_uint64_t ui64 = UINT64_MAX;
1361 ui64 = UINT64_MAX;
14dd354c 1362 typedef uint_fast8_t my_uint_fast8_t;
b12cc7df 1363 my_uint_fast8_t uif8 = UINT_FAST8_MAX;
1364 uif8 = UINT_FAST8_MAX;
14dd354c 1365 typedef uint_fast16_t my_uint_fast16_t;
b12cc7df 1366 my_uint_fast16_t uif16 = UINT_FAST16_MAX;
1367 uif16 = UINT_FAST16_MAX;
14dd354c 1368 typedef uint_fast32_t my_uint_fast32_t;
b12cc7df 1369 my_uint_fast32_t uif32 = UINT_FAST32_MAX;
1370 uif32 = UINT_FAST32_MAX;
1371 typedef uint_fast64_t my_uint_fast64_t;
1372 my_uint_fast64_t uif64 = UINT_FAST64_MAX;
1373 uif64 = UINT_FAST64_MAX;
14dd354c 1374 typedef uint_least8_t my_uint_least8_t;
b12cc7df 1375 my_uint_least8_t uil8 = UINT_LEAST8_MAX;
1376 uil8 = UINT_LEAST8_MAX;
14dd354c 1377 typedef uint_least16_t my_uint_least16_t;
b12cc7df 1378 my_uint_least16_t uil16 = UINT_LEAST16_MAX;
1379 uil16 = UINT_LEAST16_MAX;
14dd354c 1380 typedef uint_least32_t my_uint_least32_t;
b12cc7df 1381 my_uint_least32_t uil32 = UINT_LEAST32_MAX;
1382 uil32 = UINT_LEAST32_MAX;
14dd354c 1383 typedef uint_least64_t my_uint_least64_t;
b12cc7df 1384 my_uint_least64_t uil64 = UINT_LEAST64_MAX;
1385 uil64 = UINT_LEAST64_MAX;
14dd354c 1386 typedef uintmax_t my_uintmax_t;
b12cc7df 1387 my_uintmax_t uim = UINTMAX_MAX;
1388 uim = UINTMAX_MAX;
14dd354c 1389 typedef uintptr_t my_uintptr_t;
b12cc7df 1390 my_uintptr_t uip = UINTPTR_MAX;
1391 uip = UINTPTR_MAX;
fcbe9d5c 1392 ],[glibcxx_cv_c99_stdint_tr1=yes],
1393 [glibcxx_cv_c99_stdint_tr1=no])
14dd354c 1394 ])
6992582a 1395 AC_MSG_RESULT($glibcxx_cv_c99_stdint_tr1)
1396 if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
14dd354c 1397 AC_DEFINE(_GLIBCXX_USE_C99_STDINT_TR1, 1,
1398 [Define if C99 types in <stdint.h> should be imported in
1399 <tr1/cstdint> in namespace std::tr1.])
1400 fi
1401
bc4c9cb8 1402 # Check for the existence of <math.h> functions.
1403 AC_MSG_CHECKING([for ISO C99 support to TR1 in <math.h>])
6992582a 1404 AC_CACHE_VAL(glibcxx_cv_c99_math_tr1, [
bc4c9cb8 1405 AC_TRY_COMPILE([#include <math.h>],
626791f9 1406 [typedef double_t my_double_t;
1407 typedef float_t my_float_t;
1408 acosh(0.0);
bc4c9cb8 1409 acoshf(0.0f);
1410 acoshl(0.0l);
1411 asinh(0.0);
1412 asinhf(0.0f);
1413 asinhl(0.0l);
1414 atanh(0.0);
1415 atanhf(0.0f);
1416 atanhl(0.0l);
1417 cbrt(0.0);
1418 cbrtf(0.0f);
1419 cbrtl(0.0l);
1420 copysign(0.0, 0.0);
1421 copysignf(0.0f, 0.0f);
1422 copysignl(0.0l, 0.0l);
1423 erf(0.0);
1424 erff(0.0f);
1425 erfl(0.0l);
1426 erfc(0.0);
1427 erfcf(0.0f);
1428 erfcl(0.0l);
1429 exp2(0.0);
1430 exp2f(0.0f);
1431 exp2l(0.0l);
1432 expm1(0.0);
1433 expm1f(0.0f);
1434 expm1l(0.0l);
1435 fdim(0.0, 0.0);
1436 fdimf(0.0f, 0.0f);
1437 fdiml(0.0l, 0.0l);
1438 fma(0.0, 0.0, 0.0);
1439 fmaf(0.0f, 0.0f, 0.0f);
1440 fmal(0.0l, 0.0l, 0.0l);
1441 fmax(0.0, 0.0);
1442 fmaxf(0.0f, 0.0f);
1443 fmaxl(0.0l, 0.0l);
1444 fmin(0.0, 0.0);
1445 fminf(0.0f, 0.0f);
1446 fminl(0.0l, 0.0l);
1447 hypot(0.0, 0.0);
1448 hypotf(0.0f, 0.0f);
1449 hypotl(0.0l, 0.0l);
1450 ilogb(0.0);
1451 ilogbf(0.0f);
1452 ilogbl(0.0l);
1453 lgamma(0.0);
1454 lgammaf(0.0f);
1455 lgammal(0.0l);
1456 llrint(0.0);
1457 llrintf(0.0f);
1458 llrintl(0.0l);
1459 llround(0.0);
1460 llroundf(0.0f);
1461 llroundl(0.0l);
1462 log1p(0.0);
1463 log1pf(0.0f);
1464 log1pl(0.0l);
1465 log2(0.0);
1466 log2f(0.0f);
1467 log2l(0.0l);
1468 logb(0.0);
1469 logbf(0.0f);
1470 logbl(0.0l);
1471 lrint(0.0);
1472 lrintf(0.0f);
1473 lrintl(0.0l);
1474 lround(0.0);
1475 lroundf(0.0f);
1476 lroundl(0.0l);
1477 nan(0);
1478 nanf(0);
1479 nanl(0);
1480 nearbyint(0.0);
1481 nearbyintf(0.0f);
1482 nearbyintl(0.0l);
1483 nextafter(0.0, 0.0);
1484 nextafterf(0.0f, 0.0f);
1485 nextafterl(0.0l, 0.0l);
1486 nexttoward(0.0, 0.0);
1487 nexttowardf(0.0f, 0.0f);
1488 nexttowardl(0.0l, 0.0l);
1489 remainder(0.0, 0.0);
1490 remainderf(0.0f, 0.0f);
1491 remainderl(0.0l, 0.0l);
1492 remquo(0.0, 0.0, 0);
1493 remquo(0.0f, 0.0f, 0);
1494 remquo(0.0l, 0.0l, 0);
1495 rint(0.0);
1496 rintf(0.0f);
1497 rintl(0.0l);
1498 round(0.0);
1499 roundf(0.0f);
1500 roundl(0.0l);
1501 scalbln(0.0, 0l);
1502 scalblnf(0.0f, 0l);
1503 scalblnl(0.0l, 0l);
1504 scalbn(0.0, 0);
1505 scalbnf(0.0f, 0);
1506 scalbnl(0.0l, 0);
1507 tgamma(0.0);
1508 tgammaf(0.0f);
1509 tgammal(0.0l);
1510 trunc(0.0);
1511 truncf(0.0f);
1512 truncl(0.0l);
6992582a 1513 ],[glibcxx_cv_c99_math_tr1=yes], [glibcxx_cv_c99_math_tr1=no])
bc4c9cb8 1514 ])
6992582a 1515 AC_MSG_RESULT($glibcxx_cv_c99_math_tr1)
1516 if test x"$glibcxx_cv_c99_math_tr1" = x"yes"; then
bc4c9cb8 1517 AC_DEFINE(_GLIBCXX_USE_C99_MATH_TR1, 1,
1518 [Define if C99 functions or macros in <math.h> should be imported
1519 in <tr1/cmath> in namespace std::tr1.])
1520 fi
1521
ed9e4356 1522 # Check for the existence of <inttypes.h> functions (NB: doesn't make
1523 # sense if the previous check fails, per C99, 7.8/1).
1524 ac_c99_inttypes_tr1=no;
6992582a 1525 if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
ed9e4356 1526 AC_MSG_CHECKING([for ISO C99 support to TR1 in <inttypes.h>])
1527 AC_TRY_COMPILE([#include <inttypes.h>],
1528 [intmax_t i, numer, denom, base;
1529 const char* s;
1530 char** endptr;
516fd358 1531 intmax_t ret = imaxabs(i);
1532 imaxdiv_t dret = imaxdiv(numer, denom);
ed9e4356 1533 ret = strtoimax(s, endptr, base);
516fd358 1534 uintmax_t uret = strtoumax(s, endptr, base);
ed9e4356 1535 ],[ac_c99_inttypes_tr1=yes], [ac_c99_inttypes_tr1=no])
1536 fi
cdd306be 1537 AC_MSG_RESULT($ac_c99_inttypes_tr1)
1538 if test x"$ac_c99_inttypes_tr1" = x"yes"; then
1539 AC_DEFINE(_GLIBCXX_USE_C99_INTTYPES_TR1, 1,
1540 [Define if C99 functions in <inttypes.h> should be imported in
ed9e4356 1541 <tr1/cinttypes> in namespace std::tr1.])
cdd306be 1542 fi
1543
5d89ab68 1544 # Check for the existence of the <stdbool.h> header.
1545 AC_CHECK_HEADERS(stdbool.h)
1546
91f76f05 1547 CXXFLAGS="$ac_save_CXXFLAGS"
d04e5f88 1548 AC_LANG_RESTORE
1549])
1550
61edee22 1551dnl
6063a383 1552dnl Check whether "/dev/random" and "/dev/urandom" are available for the
61edee22 1553dnl random_device of "TR1" (Chapter 5.1, "Random number generation").
1554dnl
1555AC_DEFUN([GLIBCXX_CHECK_RANDOM_TR1], [
1556
6063a383 1557 AC_MSG_CHECKING([for "/dev/random" and "/dev/urandom" for TR1 random_device])
6992582a 1558 AC_CACHE_VAL(glibcxx_cv_random_tr1, [
6063a383 1559 if test -r /dev/random && test -r /dev/urandom; then
1560 glibcxx_cv_random_tr1=yes;
1561 else
1562 glibcxx_cv_random_tr1=no;
1563 fi
61edee22 1564 ])
6992582a 1565 AC_MSG_RESULT($glibcxx_cv_random_tr1)
6063a383 1566
6992582a 1567 if test x"$glibcxx_cv_random_tr1" = x"yes"; then
61edee22 1568 AC_DEFINE(_GLIBCXX_USE_RANDOM_TR1, 1,
6063a383 1569 [Define if /dev/random and /dev/urandom are available for
61edee22 1570 the random_device of TR1 (Chapter 5.1).])
1571 fi
1572
1573])
d04e5f88 1574
f4a11b09 1575dnl
1576dnl Check whether EOF, SEEK_CUR, and SEEK_END have the most common values:
1577dnl in that case including <cstdio> in some C++ headers can be avoided.
1578dnl
1579AC_DEFUN([GLIBCXX_CHECK_STDIO_MACROS], [
1580
1581 AC_MSG_CHECKING([for EOF == -1, SEEK_CUR == 1, SEEK_END == 2])
1582 AC_CACHE_VAL(glibcxx_cv_stdio_macros, [
1583 AC_TRY_COMPILE([#include <stdio.h>],
1584 [#if ((EOF != -1) || (SEEK_CUR != 1) || (SEEK_END != 2))
1585 unusual values...
1586 #endif
1587 ], [glibcxx_cv_stdio_macros=yes],
1588 [glibcxx_cv_stdio_macros=no])
1589 ])
1590 AC_MSG_RESULT($glibcxx_cv_stdio_macros)
1591 if test x"$glibcxx_cv_stdio_macros" = x"yes"; then
1592 AC_DEFINE(_GLIBCXX_STDIO_MACROS, 1,
1593 [Define if EOF == -1, SEEK_CUR == 1, SEEK_END == 2.])
1594 fi
1595
1596])
1597
d0ff4e64 1598dnl
1599dnl Check whether macros, etc are present for <system_error>
1600dnl
1601AC_DEFUN([GLIBCXX_CHECK_SYSTEM_ERROR], [
1602
6992582a 1603m4_pushdef([n_syserr], [1])dnl
1604m4_foreach([syserr], [EOWNERDEAD, ENOTRECOVERABLE, ENOLINK, EPROTO, ENODATA,
9539daa0 1605 ENOSR, ENOSTR, ETIME, EBADMSG, ECANCELED,
6992582a 1606 EOVERFLOW, ENOTSUP, EIDRM, ETXTBSY],
1607[m4_pushdef([SYSERR], m4_toupper(syserr))dnl
1608AC_MSG_CHECKING([for syserr])
1609AC_CACHE_VAL([glibcxx_cv_system_error[]n_syserr], [
1610AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <errno.h>]],
1611 [int i = syserr;])],
1612 [glibcxx_cv_system_error[]n_syserr=yes],
1613 [glibcxx_cv_system_error[]n_syserr=no])
1614])
1615AC_MSG_RESULT([$glibcxx_cv_system_error[]n_syserr])
1616if test x"$glibcxx_cv_system_error[]n_syserr" = x"yes"; then
1617 AC_DEFINE([HAVE_]SYSERR, 1, [Define if ]syserr[ exists.])
1618fi
1619m4_define([n_syserr], m4_incr(n_syserr))dnl
1620m4_popdef([SYSERR])dnl
1621])
1622m4_popdef([n_syserr])dnl
d0ff4e64 1623])
1624
857d9b7b 1625dnl
1626dnl Check whether C++200x's standard layout types are supported.
1627dnl
1628AC_DEFUN([GLIBCXX_CHECK_STANDARD_LAYOUT], [
1629
1630 AC_MSG_CHECKING([for ISO C++200x standard layout type support])
1631 AC_CACHE_VAL(ac_standard_layout, [
1632 AC_LANG_SAVE
1633 AC_LANG_CPLUSPLUS
1634 ac_test_CXXFLAGS="${CXXFLAGS+set}"
1635 ac_save_CXXFLAGS="$CXXFLAGS"
1636 CXXFLAGS='-std=gnu++0x'
1637
1638 AC_TRY_COMPILE([struct b
1639 {
1640 bool t;
1641
1642 // Need standard layout relaxation from POD
1643 private:
1644 b& operator=(const b&);
1645 b(const b&);
1646 };
1647
1648 int main()
1649 {
1650 b tst1 = { false };
1651 return 0;
1652 }],,
1653 [ac_standard_layout=yes], [ac_standard_layout=no])
1654
1655 CXXFLAGS="$ac_save_CXXFLAGS"
1656 AC_LANG_RESTORE
1657 ])
1658 AC_MSG_RESULT($ac_standard_layout)
1659 if test x"$ac_standard_layout" = x"yes"; then
1660 AC_DEFINE(_GLIBCXX_USE_STANDARD_LAYOUT, 1,
1661 [Define if standard layout types are supported in C++200x.])
1662 fi
1663])
1664
20752884 1665dnl
68224f8d 1666dnl Check for what type of C headers to use.
1667dnl
1668dnl --enable-cheaders= [does stuff].
1669dnl --disable-cheaders [does not do anything, really].
1670dnl + Usage: GLIBCXX_ENABLE_CHEADERS[(DEFAULT)]
bec9a462 1671dnl Where DEFAULT is either 'c' or 'c_std' or 'c_global'.
68224f8d 1672dnl
2ad02b6c 1673AC_DEFUN([GLIBCXX_ENABLE_CHEADERS], [
68224f8d 1674 GLIBCXX_ENABLE(cheaders,$1,[=KIND],
bec9a462 1675 [construct "C" headers for g++], [permit c|c_std|c_global])
68224f8d 1676 AC_MSG_NOTICE("C" header strategy set to $enable_cheaders)
1677
1678 C_INCLUDE_DIR='${glibcxx_srcdir}/include/'$enable_cheaders
1679
bec9a462 1680 # Allow overrides to configure.host here.
1681 if test $enable_cheaders = c_global; then
1682 c_compatibility=yes
1683 fi
1684
1685 if test $enable_cheaders = c_global || test $enable_cheaders = c_std; then
1686 c_extra=yes
1687 fi
1688
68224f8d 1689 AC_SUBST(C_INCLUDE_DIR)
11764568 1690 GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C, test $enable_cheaders = c)
1691 GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C_STD, test $enable_cheaders = c_std)
bec9a462 1692 GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C_GLOBAL, test $enable_cheaders = c_global)
11764568 1693 GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_COMPATIBILITY, test $c_compatibility = yes)
bec9a462 1694 GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_EXTRA, test $c_extra = yes)
68224f8d 1695])
1696
1697
20752884 1698dnl
68224f8d 1699dnl Check for which locale library to use. The choice is mapped to
1700dnl a subdirectory of config/locale.
77cbec55 1701dnl
68224f8d 1702dnl Default is generic.
20752884 1703dnl
2ad02b6c 1704AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
68224f8d 1705 GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@],
1706 [use MODEL for target locale package],
1707 [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
4a17ac7b 1708
1709 # Deal with gettext issues. Default to not using it (=no) until we detect
1710 # support for it later. Let the user turn it off via --e/d, but let that
1711 # default to on for easier handling.
1712 USE_NLS=no
1713 AC_ARG_ENABLE(nls,
1714 AC_HELP_STRING([--enable-nls],[use Native Language Support (default)]),
1715 [],
1716 [enable_nls=yes])
68224f8d 1717
4a17ac7b 1718 # Either a known packaage, or "auto"
68224f8d 1719 if test $enable_clocale = no || test $enable_clocale = yes; then
1720 enable_clocale=auto
1721 fi
20752884 1722 enable_clocale_flag=$enable_clocale
1723
4a17ac7b 1724 # Probe for locale model to use if none specified.
68224f8d 1725 # Default to "generic".
1726 if test $enable_clocale_flag = auto; then
1abe8d9c 1727 case ${target_os} in
1728 linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
4a17ac7b 1729 enable_clocale_flag=gnu
01702872 1730 ;;
e037e4a6 1731 darwin* | freebsd*)
9132fd65 1732 enable_clocale_flag=darwin
1733 ;;
01702872 1734 *)
68224f8d 1735 enable_clocale_flag=generic
1736 ;;
01702872 1737 esac
1738 fi
1739
4a17ac7b 1740 # Sanity check model, and test for special functionality.
1741 if test $enable_clocale_flag = gnu; then
1742 AC_EGREP_CPP([_GLIBCXX_ok], [
1743 #include <features.h>
1744 #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
1745 _GLIBCXX_ok
1746 #endif
1747 ], enable_clocale_flag=gnu, enable_clocale_flag=generic)
1748
7e457486 1749 if test $enable_clocale = auto; then
1750 # Test for bugs early in glibc-2.2.x series
1751 AC_TRY_RUN([
1752 #define _GNU_SOURCE 1
1753 #include <locale.h>
1754 #include <string.h>
1755 #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
1756 extern __typeof(newlocale) __newlocale;
1757 extern __typeof(duplocale) __duplocale;
1758 extern __typeof(strcoll_l) __strcoll_l;
1759 #endif
1760 int main()
1761 {
1762