]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/acinclude.m4
ada-tree.h (DECL_PARM_ALT): Now DECL_PARM_ALT_TYPE.
[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.
4312e020 52 m4_define([glibcxx_SUBDIRS],[include libmath libsupc++ 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 # 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
f6dda651 94 # that ourselves. Un-preciousing AC_PROG_CC also affects CC and CFLAGS.
ff66d28f
PE
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.
fbe057bb 98
ff66d28f
PE
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"
f6dda651 104 AC_PROG_CC
ff66d28f
PE
105 AC_PROG_CXX
106 CXXFLAGS="$save_CXXFLAGS"
107 m4_rename([glibcxx_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
f6dda651 108 AC_SUBST(CFLAGS)
ff66d28f 109 AC_SUBST(CXXFLAGS)
b2dad0e3 110
ff66d28f
PE
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
5780a46b
BK
116 AC_CHECK_TOOL(AS, as)
117 AC_CHECK_TOOL(AR, ar)
46840bcd 118 AC_CHECK_TOOL(RANLIB, ranlib, ranlib-not-found-in-path-error)
b2dad0e3 119
5780a46b 120 AM_MAINTAINER_MODE
b2dad0e3 121
92eabea2
PE
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
16da539b 126 need_libmath=no
16da539b 127
464aea98
JM
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
ff66d28f
PE
137 # Find platform-specific directories containing configuration info.
138 # Also possibly modify flags used elsewhere, as needed by the platform.
3d7c150e 139 GLIBCXX_CHECK_HOST
b2dad0e3
BK
140])
141
142
c470c17d 143dnl
52b55e7d
PE
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.
b2dad0e3 147dnl
ff66d28f
PE
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.
c21b6f87 154dnl
f214923c 155AC_DEFUN([GLIBCXX_CHECK_COMPILER_FEATURES], [
a4e99046 156 # All these tests are for C++; save the language and the compiler flags.
52b55e7d 157 # The CXXFLAGS thing is suspicious, but based on similar bits previously
3d7c150e 158 # found in GLIBCXX_CONFIGURE.
a4e99046
PE
159 AC_LANG_SAVE
160 AC_LANG_CPLUSPLUS
161 ac_test_CXXFLAGS="${CXXFLAGS+set}"
162 ac_save_CXXFLAGS="$CXXFLAGS"
a4e99046 163
7f586614
BK
164 # Check for maintainer-mode bits.
165 if test x"$USE_MAINTAINER_MODE" = xno; then
166 WERROR=''
8bd636c5 167 else
7f586614 168 WERROR='-Werror'
8bd636c5
PE
169 fi
170
c470c17d
BK
171 # Check for -ffunction-sections -fdata-sections
172 AC_MSG_CHECKING([for g++ that supports -ffunction-sections -fdata-sections])
85ee35ca
BK
173 CXXFLAGS='-g -Werror -ffunction-sections -fdata-sections'
174 AC_TRY_COMPILE([int foo; void bar() { };],, [ac_fdsections=yes], [ac_fdsections=no])
c470c17d
BK
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
6aa43d99 181 if test x"$ac_fdsections" = x"yes"; then
c470c17d
BK
182 SECTION_FLAGS='-ffunction-sections -fdata-sections'
183 fi
184 AC_MSG_RESULT($ac_fdsections)
185
a4e99046 186 AC_LANG_RESTORE
8bd636c5 187 AC_SUBST(WERROR)
c470c17d 188 AC_SUBST(SECTION_FLAGS)
b2dad0e3
BK
189])
190
c470c17d
BK
191
192dnl
421173e6
PE
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
ff66d28f
PE
197dnl Defines:
198dnl SECTION_LDFLAGS='-Wl,--gc-sections' if possible
a429affe 199dnl OPT_LDFLAGS='-Wl,-O1' and '-z,relro' if possible
ff66d28f
PE
200dnl LD (as a side effect of testing)
201dnl Sets:
202dnl with_gnu_ld
d60a2d4d 203dnl glibcxx_ld_is_gold (set to "no" or "yes")
ff66d28f
PE
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.
c470c17d 208dnl
f214923c 209AC_DEFUN([GLIBCXX_CHECK_LINKER_FEATURES], [
421173e6
PE
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...
654421eb
DE
213 test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS=''
214 test -z "$OPT_LDFLAGS" && OPT_LDFLAGS=''
421173e6 215 AC_REQUIRE([AC_PROG_LD])
ff66d28f 216 AC_REQUIRE([AC_PROG_AWK])
5bd17d39 217
c98b201b
PE
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.
d60a2d4d 235 glibcxx_ld_is_gold=no
e2c104d8
BK
236 if test x"$with_gnu_ld" = x"yes"; then
237 AC_MSG_CHECKING([for ld version])
238 changequote(,)
d60a2d4d
ILT
239 if $LD --version 2>/dev/null | grep 'GNU gold' >/dev/null 2>&1; then
240 glibcxx_ld_is_gold=yes
241 fi
e2c104d8 242 ldver=`$LD --version 2>/dev/null | head -1 | \
d60a2d4d 243 sed -e 's/GNU \(go\)\{0,1\}ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\4/'`
e2c104d8
BK
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
c98b201b 249
5bd17d39 250 # Set --gc-sections.
d60a2d4d
ILT
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" &&
ac2b2479 259 test $glibcxx_gnu_ld_version -gt $glibcxx_gcsections_min_ld ; then
d60a2d4d
ILT
260 glibcxx_have_gc_sections=yes
261 fi
262 fi
263 if test "$glibcxx_have_gc_sections" = "yes"; then
ac2b2479
BK
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.
421173e6 267
421173e6
PE
268 ac_test_CFLAGS="${CFLAGS+set}"
269 ac_save_CFLAGS="$CFLAGS"
2a0ab51c 270 CFLAGS='-Wl,--gc-sections'
421173e6
PE
271
272 # Check for -Wl,--gc-sections
273 AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
acb6e9be
BK
274 AC_TRY_LINK([ int one(void) { return 1; }
275 int two(void) { return 2; }
276 ], [ two(); ] , [ac_gcsections=yes], [ac_gcsections=no])
360e8759
L
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
acb6e9be
BK
288 if test "$ac_gcsections" = "yes"; then
289 SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
290 fi
291 AC_MSG_RESULT($ac_gcsections)
292
421173e6
PE
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
5bd17d39 299 fi
a9117427 300
a429affe 301 # Set -z,relro.
952c7b74 302 # Note this is only for shared objects.
a429affe
BK
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
5bd17d39 314 # Set linker optimization flags.
6aa43d99 315 if test x"$with_gnu_ld" = x"yes"; then
654421eb 316 OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
421173e6 317 fi
5bd17d39 318
c470c17d 319 AC_SUBST(SECTION_LDFLAGS)
421173e6 320 AC_SUBST(OPT_LDFLAGS)
c470c17d
BK
321])
322
323
b2dad0e3 324dnl
ff66d28f
PE
325dnl Check for headers for, and arguments to, the setrlimit() function.
326dnl Used only in testsuite_hooks.h. Called from GLIBCXX_CONFIGURE_TESTSUITE.
6aa43d99 327dnl
ff66d28f 328dnl Defines:
2ae6e982
PC
329dnl _GLIBCXX_RES_LIMITS if we can set artificial resource limits
330dnl various HAVE_LIMIT_* for individual limit names
6aa43d99 331dnl
f214923c 332AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT_ancilliary], [
e0103440 333 AC_MSG_CHECKING([for RLIMIT_$1])
ff66d28f
PE
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])
2ae6e982 341 AC_DEFINE_UNQUOTED(HAVE_LIMIT_$1, $glibcxx_mresult,
ff66d28f 342 [Only used in build directory testsuite_hooks.h.])
e0103440
GK
343 if test $glibcxx_mresult = 1 ; then res=yes ; else res=no ; fi
344 AC_MSG_RESULT($res)
ff66d28f
PE
345])
346
f214923c 347AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT], [
ff66d28f
PE
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)
2ae6e982 360 GLIBCXX_CHECK_SETRLIMIT_ancilliary(FSIZE)
ff66d28f
PE
361
362 # Check for rlimit, setrlimit.
6d26724a 363 AC_CACHE_VAL(glibcxx_cv_setrlimit, [
ff66d28f
PE
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);],
6d26724a 371 [glibcxx_cv_setrlimit=yes], [glibcxx_cv_setrlimit=no])
ff66d28f
PE
372 ])
373 fi
374
2ae6e982 375 AC_MSG_CHECKING([for testsuite resource limits support])
6d26724a 376 if test $setrlimit_have_headers = yes && test $glibcxx_cv_setrlimit = yes; then
2ae6e982 377 ac_res_limits=yes
4651e622
KC
378 AC_DEFINE(_GLIBCXX_RES_LIMITS, 1,
379 [Define if using setrlimit to set resource limits during
380 "make check"])
ff66d28f 381 else
2ae6e982 382 ac_res_limits=no
ff66d28f 383 fi
2ae6e982 384 AC_MSG_RESULT($ac_res_limits)
6aa43d99
BK
385])
386
387
6aa43d99 388dnl
ff66d28f
PE
389dnl Check whether S_ISREG (Posix) or S_IFREG is available in <sys/stat.h>.
390dnl Define HAVE_S_ISREG / HAVE_S_IFREG appropriately.
6aa43d99 391dnl
f214923c 392AC_DEFUN([GLIBCXX_CHECK_S_ISREG_OR_S_IFREG], [
e0103440 393 AC_MSG_CHECKING([for S_ISREG or S_IFREG])
ff66d28f
PE
394 AC_CACHE_VAL(glibcxx_cv_S_ISREG, [
395 AC_TRY_LINK(
396 [#include <sys/stat.h>],
397 [struct stat buffer;
398 fstat(0, &buffer);
399 S_ISREG(buffer.st_mode);],
400 [glibcxx_cv_S_ISREG=yes],
401 [glibcxx_cv_S_ISREG=no])
402 ])
403 AC_CACHE_VAL(glibcxx_cv_S_IFREG, [
404 AC_TRY_LINK(
405 [#include <sys/stat.h>],
406 [struct stat buffer;
407 fstat(0, &buffer);
408 S_IFREG & buffer.st_mode;],
409 [glibcxx_cv_S_IFREG=yes],
410 [glibcxx_cv_S_IFREG=no])
411 ])
e0103440 412 res=no
ff66d28f 413 if test $glibcxx_cv_S_ISREG = yes; then
4651e622
KC
414 AC_DEFINE(HAVE_S_ISREG, 1,
415 [Define if S_IFREG is available in <sys/stat.h>.])
e0103440 416 res=S_ISREG
ff66d28f 417 elif test $glibcxx_cv_S_IFREG = yes; then
4651e622
KC
418 AC_DEFINE(HAVE_S_IFREG, 1,
419 [Define if S_IFREG is available in <sys/stat.h>.])
e0103440 420 res=S_IFREG
ff66d28f 421 fi
e0103440 422 AC_MSG_RESULT($res)
b2dad0e3
BK
423])
424
425
dcfa0bc8 426dnl
ff66d28f 427dnl Check whether poll is available in <poll.h>, and define HAVE_POLL.
dcfa0bc8 428dnl
f214923c 429AC_DEFUN([GLIBCXX_CHECK_POLL], [
e0103440 430 AC_MSG_CHECKING([for poll])
ff66d28f 431 AC_CACHE_VAL(glibcxx_cv_POLL, [
3d05b345 432 AC_TRY_LINK(
ff66d28f
PE
433 [#include <poll.h>],
434 [struct pollfd pfd[1];
435 pfd[0].events = POLLIN;
436 poll(pfd, 1, 0);],
437 [glibcxx_cv_POLL=yes],
438 [glibcxx_cv_POLL=no])
439 ])
440 if test $glibcxx_cv_POLL = yes; then
4651e622 441 AC_DEFINE(HAVE_POLL, 1, [Define if poll is available in <poll.h>.])
ff66d28f 442 fi
e0103440 443 AC_MSG_RESULT($glibcxx_cv_POLL)
ff66d28f
PE
444])
445
446
447dnl
448dnl Check whether writev is available in <sys/uio.h>, and define HAVE_WRITEV.
449dnl
f214923c 450AC_DEFUN([GLIBCXX_CHECK_WRITEV], [
e0103440 451 AC_MSG_CHECKING([for writev])
ff66d28f 452 AC_CACHE_VAL(glibcxx_cv_WRITEV, [
3d05b345 453 AC_TRY_LINK(
ff66d28f
PE
454 [#include <sys/uio.h>],
455 [struct iovec iov[2];
456 writev(0, iov, 0);],
457 [glibcxx_cv_WRITEV=yes],
458 [glibcxx_cv_WRITEV=no])
459 ])
460 if test $glibcxx_cv_WRITEV = yes; then
4651e622 461 AC_DEFINE(HAVE_WRITEV, 1, [Define if writev is available in <sys/uio.h>.])
ff66d28f 462 fi
e0103440 463 AC_MSG_RESULT($glibcxx_cv_WRITEV)
ff66d28f
PE
464])
465
466
3d05b345
PC
467dnl
468dnl Check whether int64_t is available in <stdint.h>, and define HAVE_INT64_T.
469dnl
f214923c 470AC_DEFUN([GLIBCXX_CHECK_INT64_T], [
e0103440 471 AC_MSG_CHECKING([for int64_t])
3d05b345
PC
472 AC_CACHE_VAL(glibcxx_cv_INT64_T, [
473 AC_TRY_COMPILE(
474 [#include <stdint.h>],
475 [int64_t var;],
476 [glibcxx_cv_INT64_T=yes],
477 [glibcxx_cv_INT64_T=no])
478 ])
479 if test $glibcxx_cv_INT64_T = yes; then
4651e622 480 AC_DEFINE(HAVE_INT64_T, 1, [Define if int64_t is available in <stdint.h>.])
3d05b345 481 fi
e0103440 482 AC_MSG_RESULT($glibcxx_cv_INT64_T)
3d05b345
PC
483])
484
485
486dnl
487dnl Check whether LFS support is available.
488dnl
f214923c 489AC_DEFUN([GLIBCXX_CHECK_LFS], [
0c6b814a 490 AC_LANG_SAVE
9d47bc51
PC
491 AC_LANG_CPLUSPLUS
492 ac_save_CXXFLAGS="$CXXFLAGS"
493 CXXFLAGS="$CXXFLAGS -fno-exceptions"
e0103440 494 AC_MSG_CHECKING([for LFS support])
3d05b345
PC
495 AC_CACHE_VAL(glibcxx_cv_LFS, [
496 AC_TRY_LINK(
0c6b814a
PC
497 [#include <unistd.h>
498 #include <stdio.h>
dd5d134b 499 #include <sys/stat.h>
0c6b814a 500 ],
5c89246d
PC
501 [FILE* fp;
502 fopen64("t", "w");
503 fseeko64(fp, 0, SEEK_CUR);
504 ftello64(fp);
dd5d134b
PC
505 lseek64(1, 0, SEEK_CUR);
506 struct stat64 buf;
507 fstat64(1, &buf);],
3d05b345
PC
508 [glibcxx_cv_LFS=yes],
509 [glibcxx_cv_LFS=no])
510 ])
511 if test $glibcxx_cv_LFS = yes; then
4651e622 512 AC_DEFINE(_GLIBCXX_USE_LFS, 1, [Define if LFS support is available.])
3d05b345 513 fi
e0103440 514 AC_MSG_RESULT($glibcxx_cv_LFS)
9d47bc51
PC
515 CXXFLAGS="$ac_save_CXXFLAGS"
516 AC_LANG_RESTORE
3d05b345
PC
517])
518
519
1165dc50
PC
520dnl
521dnl Check for whether a fully dynamic basic_string implementation should
522dnl be turned on, that does not put empty objects in per-process static
523dnl memory (mostly useful together with shared memory allocators, see PR
524dnl libstdc++/16612 for details).
525dnl
526dnl --enable-fully-dynamic-string defines _GLIBCXX_FULLY_DYNAMIC_STRING
527dnl --disable-fully-dynamic-string leaves _GLIBCXX_FULLY_DYNAMIC_STRING undefined
528dnl + Usage: GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING[(DEFAULT)]
529dnl Where DEFAULT is either `yes' or `no'.
530dnl
531AC_DEFUN([GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING], [
532 GLIBCXX_ENABLE(fully-dynamic-string,$1,,[do not put empty strings in per-process static memory])
533 if test $enable_fully_dynamic_string = yes; then
4651e622
KC
534 AC_DEFINE(_GLIBCXX_FULLY_DYNAMIC_STRING, 1,
535 [Define if a fully dynamic basic_string is wanted.])
1165dc50
PC
536 fi
537])
538
539
ff66d28f
PE
540dnl
541dnl Does any necessary configuration of the testsuite directory. Generates
542dnl the testsuite_hooks.h header.
543dnl
544dnl GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE must be done before this.
545dnl
546dnl Sets:
84946e72 547dnl enable_abi_check
e3f78d9b
BK
548dnl GLIBCXX_TEST_WCHAR_T
549dnl GLIBCXX_TEST_THREAD
ff66d28f
PE
550dnl Substs:
551dnl baseline_dir
552dnl
f214923c 553AC_DEFUN([GLIBCXX_CONFIGURE_TESTSUITE], [
0646b059 554 if $GLIBCXX_IS_NATIVE ; then
2ae6e982 555 # Do checks for resource limit functions.
ff66d28f
PE
556 GLIBCXX_CHECK_SETRLIMIT
557
558 # Look for setenv, so that extended locale tests can be performed.
559 GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3(setenv)
0646b059 560 fi
dbc66058 561
0646b059
GK
562 if $GLIBCXX_IS_NATIVE && test $is_hosted = yes &&
563 test $enable_symvers != no; then
564 case "$host" in
565 *-*-cygwin*)
566 enable_abi_check=no ;;
567 *)
568 enable_abi_check=yes ;;
569 esac
dbc66058
DJ
570 else
571 # Only build this as native, since automake does not understand
572 # CXX_FOR_BUILD.
573 enable_abi_check=no
ff66d28f 574 fi
84946e72 575
ff66d28f 576 # Export file names for ABI checking.
fb5c309d 577 baseline_dir="$glibcxx_srcdir/config/abi/post/${abi_baseline_pair}\$(MULTISUBDIR)"
ff66d28f 578 AC_SUBST(baseline_dir)
ff66d28f
PE
579])
580
581
582dnl
583dnl Set up *_INCLUDES variables for all sundry Makefile.am's.
584dnl
585dnl Substs:
586dnl GLIBCXX_INCLUDES
587dnl TOPLEVEL_INCLUDES
ff66d28f 588dnl
f214923c 589AC_DEFUN([GLIBCXX_EXPORT_INCLUDES], [
0df3f383
PE
590 # Used for every C++ compile we perform.
591 GLIBCXX_INCLUDES="\
592-I$glibcxx_builddir/include/$host_alias \
593-I$glibcxx_builddir/include \
594-I$glibcxx_srcdir/libsupc++"
ff66d28f 595
0df3f383 596 # For Canadian crosses, pick this up too.
ff66d28f 597 if test $CANADIAN = yes; then
37e0ff11 598 GLIBCXX_INCLUDES="$GLIBCXX_INCLUDES -I\${includedir}"
ff66d28f
PE
599 fi
600
0df3f383
PE
601 # Stuff in the actual top level. Currently only used by libsupc++ to
602 # get unwind* headers from the gcc dir.
603 #TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/gcc -I$(toplevel_srcdir)/include'
604 TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/gcc'
ff66d28f
PE
605
606 # Now, export this to all the little Makefiles....
607 AC_SUBST(GLIBCXX_INCLUDES)
608 AC_SUBST(TOPLEVEL_INCLUDES)
ff66d28f
PE
609])
610
611
612dnl
613dnl Set up *_FLAGS and *FLAGS variables for all sundry Makefile.am's.
614dnl (SECTION_FLAGS is done under CHECK_COMPILER_FEATURES.)
615dnl
616dnl Substs:
617dnl OPTIMIZE_CXXFLAGS
618dnl WARN_FLAGS
619dnl
f214923c 620AC_DEFUN([GLIBCXX_EXPORT_FLAGS], [
ff66d28f
PE
621 # Optimization flags that are probably a good idea for thrill-seekers. Just
622 # uncomment the lines below and make, everything else is ready to go...
62801a96 623 # Alternatively OPTIMIZE_CXXFLAGS can be set in configure.host.
ff66d28f 624 # OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc
ff66d28f
PE
625 AC_SUBST(OPTIMIZE_CXXFLAGS)
626
dc7c62ae 627 WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual'
ff66d28f
PE
628 AC_SUBST(WARN_FLAGS)
629])
630
631
632dnl
633dnl All installation directory information is determined here.
634dnl
635dnl Substs:
636dnl gxx_install_dir
637dnl glibcxx_prefixdir
638dnl glibcxx_toolexecdir
639dnl glibcxx_toolexeclibdir
640dnl
641dnl Assumes cross_compiling bits already done, and with_cross_host in
642dnl particular.
643dnl
0f57bf40 644dnl This logic must match gcc/configure.ac's setting of gcc_gxx_include_dir.
505692b0 645dnl config/gxx-include-dir.m4 must be kept consistant with this as well.
f214923c 646AC_DEFUN([GLIBCXX_EXPORT_INSTALL_INFO], [
ff66d28f
PE
647 glibcxx_toolexecdir=no
648 glibcxx_toolexeclibdir=no
649 glibcxx_prefixdir=$prefix
650
651 AC_MSG_CHECKING([for gxx-include-dir])
652 AC_ARG_WITH([gxx-include-dir],
653 AC_HELP_STRING([--with-gxx-include-dir=DIR],
654 [installation directory for include files]),
655 [case "$withval" in
656 yes) AC_MSG_ERROR([Missing directory for --with-gxx-include-dir]) ;;
657 no) gxx_include_dir=no ;;
658 *) gxx_include_dir=$withval ;;
659 esac],
660 [gxx_include_dir=no])
661 AC_MSG_RESULT($gxx_include_dir)
662
663 AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
664 AC_ARG_ENABLE([version-specific-runtime-libs],
665 AC_HELP_STRING([--enable-version-specific-runtime-libs],
666 [Specify that runtime libraries should be installed in a compiler-specific directory]),
667 [case "$enableval" in
668 yes) version_specific_libs=yes ;;
669 no) version_specific_libs=no ;;
670 *) AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);;
671 esac],
672 [version_specific_libs=no])
673 AC_MSG_RESULT($version_specific_libs)
674
675 # Default case for install directory for include files.
676 if test $version_specific_libs = no && test $gxx_include_dir = no; then
0f57bf40
MM
677 gxx_include_dir='include/c++/${gcc_version}'
678 if test -n "$with_cross_host" &&
679 test x"$with_cross_host" != x"no"; then
680 gxx_include_dir='${prefix}/${target_alias}/'"$gxx_include_dir"
681 else
682 gxx_include_dir='${prefix}/'"$gxx_include_dir"
683 fi
ff66d28f
PE
684 fi
685
686 # Version-specific runtime libs processing.
687 if test $version_specific_libs = yes; then
688 # Need the gcc compiler version to know where to install libraries
689 # and header files if --enable-version-specific-runtime-libs option
0314451d
GK
690 # is selected. FIXME: these variables are misnamed, there are
691 # no executables installed in _toolexecdir or _toolexeclibdir.
ff66d28f 692 if test x"$gxx_include_dir" = x"no"; then
47194af4 693 gxx_include_dir='${libdir}/gcc/${host_alias}/${gcc_version}/include/c++'
ff66d28f 694 fi
0314451d 695 glibcxx_toolexecdir='${libdir}/gcc/${host_alias}'
47194af4 696 glibcxx_toolexeclibdir='${toolexecdir}/${gcc_version}$(MULTISUBDIR)'
ff66d28f
PE
697 fi
698
699 # Calculate glibcxx_toolexecdir, glibcxx_toolexeclibdir
700 # Install a library built with a cross compiler in tooldir, not libdir.
701 if test x"$glibcxx_toolexecdir" = x"no"; then
702 if test -n "$with_cross_host" &&
703 test x"$with_cross_host" != x"no"; then
fbe057bb
PE
704 glibcxx_toolexecdir='${exec_prefix}/${host_alias}'
705 glibcxx_toolexeclibdir='${toolexecdir}/lib'
ff66d28f 706 else
0314451d 707 glibcxx_toolexecdir='${libdir}/gcc/${host_alias}'
fbe057bb 708 glibcxx_toolexeclibdir='${libdir}'
ff66d28f 709 fi
fbe057bb 710 multi_os_directory=`$CXX -print-multi-os-directory`
ff66d28f
PE
711 case $multi_os_directory in
712 .) ;; # Avoid trailing /.
713 *) glibcxx_toolexeclibdir=$glibcxx_toolexeclibdir/$multi_os_directory ;;
714 esac
715 fi
716
717 AC_MSG_CHECKING([for install location])
718 AC_MSG_RESULT($gxx_include_dir)
719
720 AC_SUBST(glibcxx_prefixdir)
721 AC_SUBST(gxx_include_dir)
722 AC_SUBST(glibcxx_toolexecdir)
723 AC_SUBST(glibcxx_toolexeclibdir)
724])
725
726
727dnl
728dnl GLIBCXX_ENABLE
729dnl (FEATURE, DEFAULT, HELP-ARG, HELP-STRING)
730dnl (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, permit a|b|c)
731dnl (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, SHELL-CODE-HANDLER)
732dnl
733dnl See docs/html/17_intro/configury.html#enable for documentation.
734dnl
735m4_define([GLIBCXX_ENABLE],[dnl
736m4_define([_g_switch],[--enable-$1])dnl
737m4_define([_g_help],[AC_HELP_STRING(_g_switch$3,[$4 @<:@default=$2@:>@])])dnl
738 AC_ARG_ENABLE($1,_g_help,
739 m4_bmatch([$5],
740 [^permit ],
741 [[
742 case "$enableval" in
743 m4_bpatsubst([$5],[permit ])) ;;
744 *) AC_MSG_ERROR(Unknown argument to enable/disable $1) ;;
745 dnl Idea for future: generate a URL pointing to
746 dnl "onlinedocs/configopts.html#whatever"
747 esac
748 ]],
749 [^$],
750 [[
751 case "$enableval" in
752 yes|no) ;;
753 *) AC_MSG_ERROR(Argument to enable/disable $1 must be yes or no) ;;
754 esac
755 ]],
756 [[$5]]),
757 [enable_]m4_bpatsubst([$1],-,_)[=][$2])
758m4_undefine([_g_switch])dnl
759m4_undefine([_g_help])dnl
760])
761
762
763dnl
764dnl Check for ISO/IEC 9899:1999 "C99" support.
765dnl
766dnl --enable-c99 defines _GLIBCXX_USE_C99
767dnl --disable-c99 leaves _GLIBCXX_USE_C99 undefined
768dnl + Usage: GLIBCXX_ENABLE_C99[(DEFAULT)]
769dnl Where DEFAULT is either `yes' or `no'.
770dnl + If 'C99' stuff is not available, ignores DEFAULT and sets `no'.
771dnl
f214923c 772AC_DEFUN([GLIBCXX_ENABLE_C99], [
ff66d28f
PE
773 GLIBCXX_ENABLE(c99,$1,,[turns on ISO/IEC 9899:1999 support])
774
347669a0
BK
775 if test x"$enable_c99" = x"yes"; then
776
ff66d28f
PE
777 AC_LANG_SAVE
778 AC_LANG_CPLUSPLUS
779
18f310b7
PC
780 # Use -std=c++98 because the default (-std=gnu++98) leaves __STRICT_ANSI__
781 # undefined and fake C99 facilities - like pre-standard snprintf - may be
782 # spuriously enabled.
783 # Long term, -std=c++0x could be even better, could manage to explicitely
784 # request C99 facilities to the underlying C headers.
b6f914f6 785 ac_save_CXXFLAGS="$CXXFLAGS"
18f310b7 786 CXXFLAGS="$CXXFLAGS -std=c++98"
b6f914f6
RS
787 ac_save_LIBS="$LIBS"
788 ac_save_gcc_no_link="$gcc_no_link"
789
790 if test x$gcc_no_link != xyes; then
791 # Use -fno-exceptions to that the C driver can link these tests without
792 # hitting undefined references to personality routines.
793 CXXFLAGS="$CXXFLAGS -fno-exceptions"
794 AC_CHECK_LIB(m, sin, [
795 LIBS="$LIBS -lm"
796 ], [
797 # Use the default compile-only tests in GCC_TRY_COMPILE_OR_LINK
798 gcc_no_link=yes
799 ])
800 fi
801
ff66d28f 802 # Check for the existence of <math.h> functions used if C99 is enabled.
ff66d28f 803 AC_MSG_CHECKING([for ISO C99 support in <math.h>])
6d26724a 804 AC_CACHE_VAL(glibcxx_cv_c99_math, [
b6f914f6
RS
805 GCC_TRY_COMPILE_OR_LINK(
806 [#include <math.h>
807 volatile double d1, d2;
808 volatile int i;],
809 [i = fpclassify(d1);
810 i = isfinite(d1);
811 i = isinf(d1);
812 i = isnan(d1);
813 i = isnormal(d1);
814 i = signbit(d1);
815 i = isgreater(d1, d2);
816 i = isgreaterequal(d1, d2);
817 i = isless(d1, d2);
818 i = islessequal(d1, d2);
819 i = islessgreater(d1, d2);
820 i = islessgreater(d1, d2);
821 i = isunordered(d1, d2);
6d26724a 822 ],[glibcxx_cv_c99_math=yes], [glibcxx_cv_c99_math=no])
347669a0 823 ])
6d26724a
RW
824 AC_MSG_RESULT($glibcxx_cv_c99_math)
825 if test x"$glibcxx_cv_c99_math" = x"yes"; then
4651e622
KC
826 AC_DEFINE(_GLIBCXX_USE_C99_MATH, 1,
827 [Define if C99 functions or macros in <math.h> should be imported
828 in <cmath> in namespace std.])
517da0ce
MM
829 fi
830
225962a0 831 # Check for the existence of <complex.h> complex math functions.
52e6723c
BK
832 # This is necessary even though libstdc++ uses the builtin versions
833 # of these functions, because if the builtin cannot be used, a reference
834 # to the library function is emitted.
5ad2f32d 835 AC_CHECK_HEADERS(tgmath.h, ac_has_tgmath_h=yes, ac_has_tgmath_h=no)
52e6723c 836 AC_CHECK_HEADERS(complex.h, ac_has_complex_h=yes, ac_has_complex_h=no)
6d26724a 837 glibcxx_cv_c99_complex=no;
52e6723c 838 if test x"$ac_has_complex_h" = x"yes"; then
52e6723c 839 AC_MSG_CHECKING([for ISO C99 support in <complex.h>])
b6f914f6
RS
840 GCC_TRY_COMPILE_OR_LINK(
841 [#include <complex.h>
842 typedef __complex__ float float_type;
843 typedef __complex__ double double_type;
844 typedef __complex__ long double ld_type;
845 volatile float_type tmpf;
846 volatile double_type tmpd;
847 volatile ld_type tmpld;
848 volatile float f;
849 volatile double d;
850 volatile long double ld;],
851 [f = cabsf(tmpf);
852 f = cargf(tmpf);
853 tmpf = ccosf(tmpf);
854 tmpf = ccoshf(tmpf);
855 tmpf = cexpf(tmpf);
856 tmpf = clogf(tmpf);
857 tmpf = csinf(tmpf);
858 tmpf = csinhf(tmpf);
859 tmpf = csqrtf(tmpf);
860 tmpf = ctanf(tmpf);
861 tmpf = ctanhf(tmpf);
862 tmpf = cpowf(tmpf, tmpf);
3cd54fc9 863 tmpf = cprojf(tmpf);
b6f914f6
RS
864 d = cabs(tmpd);
865 d = carg(tmpd);
866 tmpd = ccos(tmpd);
867 tmpd = ccosh(tmpd);
868 tmpd = cexp(tmpd);
869 tmpd = clog(tmpd);
870 tmpd = csin(tmpd);
871 tmpd = csinh(tmpd);
872 tmpd = csqrt(tmpd);
873 tmpd = ctan(tmpd);
874 tmpd = ctanh(tmpd);
875 tmpd = cpow(tmpd, tmpd);
3cd54fc9 876 tmpd = cproj(tmpd);
b6f914f6
RS
877 ld = cabsl(tmpld);
878 ld = cargl(tmpld);
879 tmpld = ccosl(tmpld);
880 tmpld = ccoshl(tmpld);
881 tmpld = cexpl(tmpld);
882 tmpld = clogl(tmpld);
883 tmpld = csinl(tmpld);
884 tmpld = csinhl(tmpld);
885 tmpld = csqrtl(tmpld);
886 tmpld = ctanl(tmpld);
887 tmpld = ctanhl(tmpld);
888 tmpld = cpowl(tmpld, tmpld);
3cd54fc9 889 tmpld = cprojl(tmpld);
6d26724a 890 ],[glibcxx_cv_c99_complex=yes], [glibcxx_cv_c99_complex=no])
52e6723c 891 fi
6d26724a
RW
892 AC_MSG_RESULT($glibcxx_cv_c99_complex)
893 if test x"$glibcxx_cv_c99_complex" = x"yes"; then
4651e622
KC
894 AC_DEFINE(_GLIBCXX_USE_C99_COMPLEX, 1,
895 [Define if C99 functions in <complex.h> should be used in
896 <complex>. Using compiler builtins for these functions requires
897 corresponding C99 library functions to be present.])
52e6723c
BK
898 fi
899
ff66d28f 900 # Check for the existence in <stdio.h> of vscanf, et. al.
ff66d28f 901 AC_MSG_CHECKING([for ISO C99 support in <stdio.h>])
6d26724a 902 AC_CACHE_VAL(glibcxx_cv_c99_stdio, [
b6f914f6
RS
903 GCC_TRY_COMPILE_OR_LINK(
904 [#include <stdio.h>
905 #include <stdarg.h>
906 void foo(char* fmt, ...)
907 {
908 va_list args; va_start(args, fmt);
909 vfscanf(stderr, "%i", args);
910 vscanf("%i", args);
911 vsnprintf(fmt, 0, "%i", args);
912 vsscanf(fmt, "%i", args);
913 }],
914 [snprintf("12", 0, "%i");],
6d26724a 915 [glibcxx_cv_c99_stdio=yes], [glibcxx_cv_c99_stdio=no])
347669a0 916 ])
6d26724a 917 AC_MSG_RESULT($glibcxx_cv_c99_stdio)
ff66d28f
PE
918
919 # Check for the existence in <stdlib.h> of lldiv_t, et. al.
ff66d28f 920 AC_MSG_CHECKING([for ISO C99 support in <stdlib.h>])
6d26724a 921 AC_CACHE_VAL(glibcxx_cv_c99_stdlib, [
b6f914f6
RS
922 GCC_TRY_COMPILE_OR_LINK(
923 [#include <stdlib.h>
924 volatile float f;
925 volatile long double ld;
926 volatile unsigned long long ll;
927 lldiv_t mydivt;],
928 [char* tmp;
929 f = strtof("gnu", &tmp);
930 ld = strtold("gnu", &tmp);
931 ll = strtoll("gnu", &tmp, 10);
932 ll = strtoull("gnu", &tmp, 10);
933 ll = llabs(10);
934 mydivt = lldiv(10,1);
935 ll = mydivt.quot;
936 ll = mydivt.rem;
937 ll = atoll("10");
938 _Exit(0);
6d26724a 939 ],[glibcxx_cv_c99_stdlib=yes], [glibcxx_cv_c99_stdlib=no])
347669a0 940 ])
6d26724a 941 AC_MSG_RESULT($glibcxx_cv_c99_stdlib)
ff66d28f 942
8a9b2875 943 # Check for the existence in <wchar.h> of wcstold, etc.
6d26724a 944 glibcxx_cv_c99_wchar=no;
347669a0
BK
945 if test x"$ac_has_wchar_h" = xyes &&
946 test x"$ac_has_wctype_h" = xyes; then
8a9b2875 947 AC_MSG_CHECKING([for ISO C99 support in <wchar.h>])
347669a0 948 AC_TRY_COMPILE([#include <wchar.h>
347669a0
BK
949 namespace test
950 {
347669a0
BK
951 using ::wcstold;
952 using ::wcstoll;
347669a0 953 using ::wcstoull;
347669a0 954 }
6d26724a 955 ],[],[glibcxx_cv_c99_wchar=yes], [glibcxx_cv_c99_wchar=no])
347669a0
BK
956
957 # Checks for wide character functions that may not be present.
958 # Injection of these is wrapped with guard macros.
959 # NB: only put functions here, instead of immediately above, if
960 # absolutely necessary.
961 AC_TRY_COMPILE([#include <wchar.h>
962 namespace test { using ::vfwscanf; } ], [],
963 [AC_DEFINE(HAVE_VFWSCANF,1,
964 [Defined if vfwscanf exists.])],[])
965
966 AC_TRY_COMPILE([#include <wchar.h>
967 namespace test { using ::vswscanf; } ], [],
968 [AC_DEFINE(HAVE_VSWSCANF,1,
969 [Defined if vswscanf exists.])],[])
970
971 AC_TRY_COMPILE([#include <wchar.h>
972 namespace test { using ::vwscanf; } ], [],
973 [AC_DEFINE(HAVE_VWSCANF,1,[Defined if vwscanf exists.])],[])
974
975 AC_TRY_COMPILE([#include <wchar.h>
976 namespace test { using ::wcstof; } ], [],
977 [AC_DEFINE(HAVE_WCSTOF,1,[Defined if wcstof exists.])],[])
978
979 AC_TRY_COMPILE([#include <wctype.h>],
980 [ wint_t t; int i = iswblank(t);],
981 [AC_DEFINE(HAVE_ISWBLANK,1,
982 [Defined if iswblank exists.])],[])
983
6d26724a 984 AC_MSG_RESULT($glibcxx_cv_c99_wchar)
347669a0 985 fi
ff66d28f 986
347669a0 987 # Option parsed, now set things appropriately.
6d26724a
RW
988 if test x"$glibcxx_cv_c99_math" = x"no" ||
989 test x"$glibcxx_cv_c99_complex" = x"no" ||
990 test x"$glibcxx_cv_c99_stdio" = x"no" ||
991 test x"$glibcxx_cv_c99_stdlib" = x"no" ||
992 test x"$glibcxx_cv_c99_wchar" = x"no"; then
ff66d28f 993 enable_c99=no;
347669a0 994 else
4651e622
KC
995 AC_DEFINE(_GLIBCXX_USE_C99, 1,
996 [Define if C99 functions or macros from <wchar.h>, <math.h>,
997 <complex.h>, <stdio.h>, and <stdlib.h> can be used or exposed.])
ff66d28f
PE
998 fi
999
b6f914f6
RS
1000 gcc_no_link="$ac_save_gcc_no_link"
1001 LIBS="$ac_save_LIBS"
1002 CXXFLAGS="$ac_save_CXXFLAGS"
ff66d28f 1003 AC_LANG_RESTORE
347669a0
BK
1004 fi
1005
1006 AC_MSG_CHECKING([for fully enabled ISO C99 support])
1007 AC_MSG_RESULT($enable_c99)
dcfa0bc8
PE
1008])
1009
1010
15e38d0d
CF
1011dnl
1012dnl Check for IEEE Std 1003.1-2001 clock_gettime required for
1013dnl 20.8.5 [time.clock] in the current C++0X working draft.
1014dnl
1015AC_DEFUN([GLIBCXX_CHECK_CLOCK_GETTIME], [
1016
1017 AC_LANG_SAVE
1018 AC_LANG_CPLUSPLUS
1019 ac_save_CXXFLAGS="$CXXFLAGS"
1020 CXXFLAGS="$CXXFLAGS -fno-exceptions"
1021
1022 AC_CHECK_HEADERS(unistd.h, ac_has_unistd_h=yes, ac_has_unistd_h=no)
8cbb6b00 1023
15e38d0d
CF
1024 ac_has_clock_monotonic=no;
1025 ac_has_clock_realtime=no;
1026 if test x"$ac_has_unistd_h" = x"yes"; then
1027 AC_MSG_CHECKING([for monotonic clock])
1028 AC_TRY_LINK(
1029 [#include <unistd.h>
1030 #include <time.h>
1031 ],
1032 [#if _POSIX_TIMERS > 0 && defined(_POSIX_MONOTONIC_CLOCK)
1033 timespec tp;
1034 #endif
1035 clock_gettime(CLOCK_MONOTONIC, &tp);
1036 ], [ac_has_clock_monotonic=yes], [ac_has_clock_monotonic=no])
1037
1038 AC_MSG_RESULT($ac_has_clock_monotonic)
1039
1040 AC_MSG_CHECKING([for realtime clock])
1041 AC_TRY_LINK(
1042 [#include <unistd.h>
1043 #include <time.h>
1044 ],
1045 [#if _POSIX_TIMERS > 0
1046 timespec tp;
1047 #endif
1048 clock_gettime(CLOCK_REALTIME, &tp);
1049 ], [ac_has_clock_realtime=yes], [ac_has_clock_realtime=no])
1050
1051 AC_MSG_RESULT($ac_has_clock_realtime)
1052 fi
8cbb6b00 1053
15e38d0d
CF
1054 if test x"$ac_has_clock_monotonic" = x"yes"; then
1055 AC_DEFINE(_GLIBCXX_USE_CLOCK_MONOTONIC, 1,
1056 [ Defined if clock_gettime has monotonic clock support. ])
1057 fi
1058
1059 if test x"$ac_has_clock_realtime" = x"yes"; then
1060 AC_DEFINE(_GLIBCXX_USE_CLOCK_REALTIME, 1,
1061 [ Defined if clock_gettime has realtime clock support. ])
1062 fi
1063
1064 CXXFLAGS="$ac_save_CXXFLAGS"
1065 AC_LANG_RESTORE
1066])
1067
1068dnl
1069dnl Check for IEEE Std 1003.1-2001 gettimeofday required for
1070dnl 20.8.5 [time.clock] in the current C++0X working draft.
1071dnl
1072AC_DEFUN([GLIBCXX_CHECK_GETTIMEOFDAY], [
1073
1074 AC_LANG_SAVE
1075 AC_LANG_CPLUSPLUS
1076 ac_save_CXXFLAGS="$CXXFLAGS"
1077 CXXFLAGS="$CXXFLAGS -fno-exceptions"
1078
1079 ac_has_gettimeofday=no;
1080 AC_CHECK_HEADERS(sys/time.h, ac_has_sys_time_h=yes, ac_has_sys_time_h=no)
1081 if test x"$ac_has_sys_time_h" = x"yes"; then
1082 AC_MSG_CHECKING([for gettimeofday])
1083 AC_TRY_LINK([#include <sys/time.h>],
1084 [timeval tv; gettimeofday(&tv, 0);],
1085 [ac_has_gettimeofday=yes], [ac_has_gettimeofday=no])
1086
1087 AC_MSG_RESULT($ac_has_gettimeofday)
1088 fi
1089
1090 if test x"$ac_has_gettimeofday" = x"yes"; then
1091 AC_DEFINE(_GLIBCXX_USE_GETTIMEOFDAY, 1,
1092 [ Defined if gettimeofday is available. ])
1093 fi
1094
1095 CXXFLAGS="$ac_save_CXXFLAGS"
1096 AC_LANG_RESTORE
1097])
1098
bd2bb1ea
PC
1099dnl
1100dnl Check for ISO/IEC 9899:1999 "C99" support to ISO/IEC DTR 19768 "TR1"
1101dnl facilities in Chapter 8, "C compatibility".
1102dnl
1103AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [
1104
1105 AC_LANG_SAVE
1106 AC_LANG_CPLUSPLUS
1107
18f310b7
PC
1108 # Use -std=c++98 because the default (-std=gnu++98) leaves __STRICT_ANSI__
1109 # undefined and fake C99 facilities may be spuriously enabled.
1110 ac_save_CXXFLAGS="$CXXFLAGS"
1111 CXXFLAGS="$CXXFLAGS -std=c++98"
1112
bd2bb1ea
PC
1113 # Check for the existence of <complex.h> complex math functions used
1114 # by tr1/complex.
1115 AC_CHECK_HEADERS(complex.h, ac_has_complex_h=yes, ac_has_complex_h=no)
1116 ac_c99_complex_tr1=no;
1117 if test x"$ac_has_complex_h" = x"yes"; then
1118 AC_MSG_CHECKING([for ISO C99 support to TR1 in <complex.h>])
1119 AC_TRY_COMPILE([#include <complex.h>],
1120 [typedef __complex__ float float_type; float_type tmpf;
1121 cacosf(tmpf);
1122 casinf(tmpf);
1123 catanf(tmpf);
1124 cacoshf(tmpf);
1125 casinhf(tmpf);
1126 catanhf(tmpf);
1127 typedef __complex__ double double_type; double_type tmpd;
1128 cacos(tmpd);
1129 casin(tmpd);
1130 catan(tmpd);
1131 cacosh(tmpd);
1132 casinh(tmpd);
1133 catanh(tmpd);
1134 typedef __complex__ long double ld_type; ld_type tmpld;
1135 cacosl(tmpld);
1136 casinl(tmpld);
1137 catanl(tmpld);
1138 cacoshl(tmpld);
1139 casinhl(tmpld);
1140 catanhl(tmpld);
1141 ],[ac_c99_complex_tr1=yes], [ac_c99_complex_tr1=no])
1142 fi
1143 AC_MSG_RESULT($ac_c99_complex_tr1)
1144 if test x"$ac_c99_complex_tr1" = x"yes"; then
1145 AC_DEFINE(_GLIBCXX_USE_C99_COMPLEX_TR1, 1,
1146 [Define if C99 functions in <complex.h> should be used in
1147 <tr1/complex>. Using compiler builtins for these functions
1148 requires corresponding C99 library functions to be present.])
1149 fi
1150
1151 # Check for the existence of <ctype.h> functions.
1152 AC_MSG_CHECKING([for ISO C99 support to TR1 in <ctype.h>])
6d26724a 1153 AC_CACHE_VAL(glibcxx_cv_c99_ctype_tr1, [
bd2bb1ea 1154 AC_TRY_COMPILE([#include <ctype.h>],
20921e53 1155 [int ch;
98fb1d29
PC
1156 int ret;
1157 ret = isblank(ch);
6d26724a 1158 ],[glibcxx_cv_c99_ctype_tr1=yes], [glibcxx_cv_c99_ctype_tr1=no])
bd2bb1ea 1159 ])
6d26724a
RW
1160 AC_MSG_RESULT($glibcxx_cv_c99_ctype_tr1)
1161 if test x"$glibcxx_cv_c99_ctype_tr1" = x"yes"; then
bd2bb1ea
PC
1162 AC_DEFINE(_GLIBCXX_USE_C99_CTYPE_TR1, 1,
1163 [Define if C99 functions in <ctype.h> should be imported in
1164 <tr1/cctype> in namespace std::tr1.])
1165 fi
1166
20921e53
PC
1167 # Check for the existence of <fenv.h> functions.
1168 AC_CHECK_HEADERS(fenv.h, ac_has_fenv_h=yes, ac_has_fenv_h=no)
1169 ac_c99_fenv_tr1=no;
1170 if test x"$ac_has_fenv_h" = x"yes"; then
1171 AC_MSG_CHECKING([for ISO C99 support to TR1 in <fenv.h>])
1172 AC_TRY_COMPILE([#include <fenv.h>],
1173 [int except, mode;
1174 fexcept_t* pflag;
1175 fenv_t* penv;
98fb1d29
PC
1176 int ret;
1177 ret = feclearexcept(except);
1178 ret = fegetexceptflag(pflag, except);
1179 ret = feraiseexcept(except);
1180 ret = fesetexceptflag(pflag, except);
1181 ret = fetestexcept(except);
1182 ret = fegetround();
1183 ret = fesetround(mode);
1184 ret = fegetenv(penv);
1185 ret = feholdexcept(penv);
1186 ret = fesetenv(penv);
1187 ret = feupdateenv(penv);
20921e53
PC
1188 ],[ac_c99_fenv_tr1=yes], [ac_c99_fenv_tr1=no])
1189 fi
1190 AC_MSG_RESULT($ac_c99_fenv_tr1)
1191 if test x"$ac_c99_fenv_tr1" = x"yes"; then
1192 AC_DEFINE(_GLIBCXX_USE_C99_FENV_TR1, 1,
1193 [Define if C99 functions in <fenv.h> should be imported in
1194 <tr1/cfenv> in namespace std::tr1.])
1195 fi
1196
2a1d6346
PC
1197 # Check for the existence of <stdint.h> types.
1198 AC_MSG_CHECKING([for ISO C99 support to TR1 in <stdint.h>])
6d26724a 1199 AC_CACHE_VAL(glibcxx_cv_c99_stdint_tr1, [
2a1d6346
PC
1200 AC_TRY_COMPILE([#include <stdint.h>],
1201 [typedef int8_t my_int8_t;
1202 typedef int16_t my_int16_t;
1203 typedef int32_t my_int32_t;
1204 typedef int64_t my_int64_t;
1205 typedef int_fast8_t my_int_fast8_t;
1206 typedef int_fast16_t my_int_fast16_t;
1207 typedef int_fast32_t my_int_fast32_t;
1208 typedef int_fast64_t my_int_fast64_t;
1209 typedef int_least8_t my_int_least8_t;
1210 typedef int_least16_t my_int_least16_t;
1211 typedef int_least32_t my_int_least32_t;
1212 typedef int_least64_t my_int_least64_t;
1213 typedef intmax_t my_intmax_t;
1214 typedef intptr_t my_intptr_t;
1215 typedef uint8_t my_uint8_t;
1216 typedef uint16_t my_uint16_t;
1217 typedef uint32_t my_uint32_t;
1218 typedef uint64_t my_uint64_t;
1219 typedef uint_fast8_t my_uint_fast8_t;
1220 typedef uint_fast16_t my_uint_fast16_t;
1221 typedef uint_fast32_t my_uint_fast32_t;
1222 typedef uint_fast64_t my_uint_fast64_t;
1223 typedef uint_least8_t my_uint_least8_t;
1224 typedef uint_least16_t my_uint_least16_t;
1225 typedef uint_least32_t my_uint_least32_t;
1226 typedef uint_least64_t my_uint_least64_t;
1227 typedef uintmax_t my_uintmax_t;
1228 typedef uintptr_t my_uintptr_t;
6d26724a 1229 ],[glibcxx_cv_c99_stdint_tr1=yes], [glibcxx_cv_c99_stdint_tr1=no])
2a1d6346 1230 ])
6d26724a
RW
1231 AC_MSG_RESULT($glibcxx_cv_c99_stdint_tr1)
1232 if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
2a1d6346
PC
1233 AC_DEFINE(_GLIBCXX_USE_C99_STDINT_TR1, 1,
1234 [Define if C99 types in <stdint.h> should be imported in
1235 <tr1/cstdint> in namespace std::tr1.])
1236 fi
1237
4f0de5dd
PC
1238 # Check for the existence of <math.h> functions.
1239 AC_MSG_CHECKING([for ISO C99 support to TR1 in <math.h>])
6d26724a 1240 AC_CACHE_VAL(glibcxx_cv_c99_math_tr1, [
4f0de5dd 1241 AC_TRY_COMPILE([#include <math.h>],
9a7ab578
PC
1242 [typedef double_t my_double_t;
1243 typedef float_t my_float_t;
1244 acosh(0.0);
4f0de5dd
PC
1245 acoshf(0.0f);
1246 acoshl(0.0l);
1247 asinh(0.0);
1248 asinhf(0.0f);
1249 asinhl(0.0l);
1250 atanh(0.0);
1251 atanhf(0.0f);
1252 atanhl(0.0l);
1253 cbrt(0.0);
1254 cbrtf(0.0f);
1255 cbrtl(0.0l);
1256 copysign(0.0, 0.0);
1257 copysignf(0.0f, 0.0f);
1258 copysignl(0.0l, 0.0l);
1259 erf(0.0);
1260 erff(0.0f);
1261 erfl(0.0l);
1262 erfc(0.0);
1263 erfcf(0.0f);
1264 erfcl(0.0l);
1265 exp2(0.0);
1266 exp2f(0.0f);
1267 exp2l(0.0l);
1268 expm1(0.0);
1269 expm1f(0.0f);
1270 expm1l(0.0l);
1271 fdim(0.0, 0.0);
1272 fdimf(0.0f, 0.0f);
1273 fdiml(0.0l, 0.0l);
1274 fma(0.0, 0.0, 0.0);
1275 fmaf(0.0f, 0.0f, 0.0f);
1276 fmal(0.0l, 0.0l, 0.0l);
1277 fmax(0.0, 0.0);
1278 fmaxf(0.0f, 0.0f);
1279 fmaxl(0.0l, 0.0l);
1280 fmin(0.0, 0.0);
1281 fminf(0.0f, 0.0f);
1282 fminl(0.0l, 0.0l);
1283 hypot(0.0, 0.0);
1284 hypotf(0.0f, 0.0f);
1285 hypotl(0.0l, 0.0l);
1286 ilogb(0.0);
1287 ilogbf(0.0f);
1288 ilogbl(0.0l);
1289 lgamma(0.0);
1290 lgammaf(0.0f);
1291 lgammal(0.0l);
1292 llrint(0.0);
1293 llrintf(0.0f);
1294 llrintl(0.0l);
1295 llround(0.0);
1296 llroundf(0.0f);
1297 llroundl(0.0l);
1298 log1p(0.0);
1299 log1pf(0.0f);
1300 log1pl(0.0l);
1301 log2(0.0);
1302 log2f(0.0f);
1303 log2l(0.0l);
1304 logb(0.0);
1305 logbf(0.0f);
1306 logbl(0.0l);
1307 lrint(0.0);
1308 lrintf(0.0f);
1309 lrintl(0.0l);
1310 lround(0.0);
1311 lroundf(0.0f);
1312 lroundl(0.0l);
1313 nan(0);
1314 nanf(0);
1315 nanl(0);
1316 nearbyint(0.0);
1317 nearbyintf(0.0f);
1318 nearbyintl(0.0l);
1319 nextafter(0.0, 0.0);
1320 nextafterf(0.0f, 0.0f);
1321 nextafterl(0.0l, 0.0l);
1322 nexttoward(0.0, 0.0);
1323 nexttowardf(0.0f, 0.0f);
1324 nexttowardl(0.0l, 0.0l);
1325 remainder(0.0, 0.0);
1326 remainderf(0.0f, 0.0f);
1327 remainderl(0.0l, 0.0l);
1328 remquo(0.0, 0.0, 0);
1329 remquo(0.0f, 0.0f, 0);
1330 remquo(0.0l, 0.0l, 0);
1331 rint(0.0);
1332 rintf(0.0f);
1333 rintl(0.0l);
1334 round(0.0);
1335 roundf(0.0f);
1336 roundl(0.0l);
1337 scalbln(0.0, 0l);
1338 scalblnf(0.0f, 0l);
1339 scalblnl(0.0l, 0l);
1340 scalbn(0.0, 0);
1341 scalbnf(0.0f, 0);
1342 scalbnl(0.0l, 0);
1343 tgamma(0.0);
1344 tgammaf(0.0f);
1345 tgammal(0.0l);
1346 trunc(0.0);
1347 truncf(0.0f);
1348 truncl(0.0l);
6d26724a 1349 ],[glibcxx_cv_c99_math_tr1=yes], [glibcxx_cv_c99_math_tr1=no])
4f0de5dd 1350 ])
6d26724a
RW
1351 AC_MSG_RESULT($glibcxx_cv_c99_math_tr1)
1352 if test x"$glibcxx_cv_c99_math_tr1" = x"yes"; then
4f0de5dd
PC
1353 AC_DEFINE(_GLIBCXX_USE_C99_MATH_TR1, 1,
1354 [Define if C99 functions or macros in <math.h> should be imported
1355 in <tr1/cmath> in namespace std::tr1.])
1356 fi
1357
03bf3bc1
PC
1358 # Check for the existence of <inttypes.h> functions (NB: doesn't make
1359 # sense if the previous check fails, per C99, 7.8/1).
1360 ac_c99_inttypes_tr1=no;
6d26724a 1361 if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
03bf3bc1
PC
1362 AC_MSG_CHECKING([for ISO C99 support to TR1 in <inttypes.h>])
1363 AC_TRY_COMPILE([#include <inttypes.h>],
1364 [intmax_t i, numer, denom, base;
1365 const char* s;
1366 char** endptr;
af66a43e
PC
1367 intmax_t ret = imaxabs(i);
1368 imaxdiv_t dret = imaxdiv(numer, denom);
03bf3bc1 1369 ret = strtoimax(s, endptr, base);
af66a43e 1370 uintmax_t uret = strtoumax(s, endptr, base);
03bf3bc1
PC
1371 ],[ac_c99_inttypes_tr1=yes], [ac_c99_inttypes_tr1=no])
1372 fi
52a64bd3
PC
1373 AC_MSG_RESULT($ac_c99_inttypes_tr1)
1374 if test x"$ac_c99_inttypes_tr1" = x"yes"; then
1375 AC_DEFINE(_GLIBCXX_USE_C99_INTTYPES_TR1, 1,
1376 [Define if C99 functions in <inttypes.h> should be imported in
03bf3bc1 1377 <tr1/cinttypes> in namespace std::tr1.])
52a64bd3
PC
1378 fi
1379
1e41a98c
PC
1380 # Check for the existence of the <stdbool.h> header.
1381 AC_CHECK_HEADERS(stdbool.h)
1382
18f310b7 1383 CXXFLAGS="$ac_save_CXXFLAGS"
bd2bb1ea
PC
1384 AC_LANG_RESTORE
1385])
1386
d8bc9819
PC
1387dnl
1388dnl Check whether "dev/random" and "dev/urandom" are available for the
1389dnl random_device of "TR1" (Chapter 5.1, "Random number generation").
1390dnl
1391AC_DEFUN([GLIBCXX_CHECK_RANDOM_TR1], [
1392
1393 AC_MSG_CHECKING([for "dev/random" and "dev/urandom" for TR1 random_device])
6d26724a 1394 AC_CACHE_VAL(glibcxx_cv_random_tr1, [
d8bc9819
PC
1395 AC_TRY_RUN([#include <stdio.h>
1396 int main()
1397 {
1398 return !(fopen("/dev/random", "r")
1399 && fopen("/dev/urandom", "r"));
1400 }
1401 ],
6d26724a
RW
1402 [glibcxx_cv_random_tr1=yes], [glibcxx_cv_random_tr1=no],
1403 [glibcxx_cv_random_tr1=no])
d8bc9819 1404 ])
6d26724a
RW
1405 AC_MSG_RESULT($glibcxx_cv_random_tr1)
1406 if test x"$glibcxx_cv_random_tr1" = x"yes"; then
d8bc9819
PC
1407 AC_DEFINE(_GLIBCXX_USE_RANDOM_TR1, 1,
1408 [Define if dev/random and dev/urandom are available for
1409 the random_device of TR1 (Chapter 5.1).])
1410 fi
1411
1412])
bd2bb1ea 1413
0646d8a3
BK
1414dnl
1415dnl Check whether macros, etc are present for <system_error>
1416dnl
1417AC_DEFUN([GLIBCXX_CHECK_SYSTEM_ERROR], [
1418
6d26724a
RW
1419m4_pushdef([n_syserr], [1])dnl
1420m4_foreach([syserr], [EOWNERDEAD, ENOTRECOVERABLE, ENOLINK, EPROTO, ENODATA,
70593ad2 1421 ENOSR, ENOSTR, ETIME, EBADMSG, ECANCELED,
6d26724a
RW
1422 EOVERFLOW, ENOTSUP, EIDRM, ETXTBSY],
1423[m4_pushdef([SYSERR], m4_toupper(syserr))dnl
1424AC_MSG_CHECKING([for syserr])
1425AC_CACHE_VAL([glibcxx_cv_system_error[]n_syserr], [
1426AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <errno.h>]],
1427 [int i = syserr;])],
1428 [glibcxx_cv_system_error[]n_syserr=yes],
1429 [glibcxx_cv_system_error[]n_syserr=no])
1430])
1431AC_MSG_RESULT([$glibcxx_cv_system_error[]n_syserr])
1432if test x"$glibcxx_cv_system_error[]n_syserr" = x"yes"; then
1433 AC_DEFINE([HAVE_]SYSERR, 1, [Define if ]syserr[ exists.])
1434fi
1435m4_define([n_syserr], m4_incr(n_syserr))dnl
1436m4_popdef([SYSERR])dnl
1437])
1438m4_popdef([n_syserr])dnl
0646d8a3
BK
1439])
1440
d466a7e2
BK
1441dnl
1442dnl Check whether C++200x's standard layout types are supported.
1443dnl
1444AC_DEFUN([GLIBCXX_CHECK_STANDARD_LAYOUT], [
1445
1446 AC_MSG_CHECKING([for ISO C++200x standard layout type support])
1447 AC_CACHE_VAL(ac_standard_layout, [
1448 AC_LANG_SAVE
1449 AC_LANG_CPLUSPLUS
1450 ac_test_CXXFLAGS="${CXXFLAGS+set}"
1451 ac_save_CXXFLAGS="$CXXFLAGS"
1452 CXXFLAGS='-std=gnu++0x'
1453
1454 AC_TRY_COMPILE([struct b
1455 {
1456 bool t;
1457
1458 // Need standard layout relaxation from POD
1459 private:
1460 b& operator=(const b&);
1461 b(const b&);
1462 };
1463
1464 int main()
1465 {
1466 b tst1 = { false };
1467 return 0;
1468 }],,
1469 [ac_standard_layout=yes], [ac_standard_layout=no])
1470
1471 CXXFLAGS="$ac_save_CXXFLAGS"
1472 AC_LANG_RESTORE
1473 ])
1474 AC_MSG_RESULT($ac_standard_layout)
1475 if test x"$ac_standard_layout" = x"yes"; then
1476 AC_DEFINE(_GLIBCXX_USE_STANDARD_LAYOUT, 1,
1477 [Define if standard layout types are supported in C++200x.])
1478 fi
1479])
1480
0214010c 1481dnl
ff66d28f
PE
1482dnl Check for what type of C headers to use.
1483dnl
1484dnl --enable-cheaders= [does stuff].
1485dnl --disable-cheaders [does not do anything, really].
1486dnl + Usage: GLIBCXX_ENABLE_CHEADERS[(DEFAULT)]
af13a7a6 1487dnl Where DEFAULT is either 'c' or 'c_std' or 'c_global'.
ff66d28f 1488dnl
f214923c 1489AC_DEFUN([GLIBCXX_ENABLE_CHEADERS], [
ff66d28f 1490 GLIBCXX_ENABLE(cheaders,$1,[=KIND],
af13a7a6 1491 [construct "C" headers for g++], [permit c|c_std|c_global])
ff66d28f
PE
1492 AC_MSG_NOTICE("C" header strategy set to $enable_cheaders)
1493
1494 C_INCLUDE_DIR='${glibcxx_srcdir}/include/'$enable_cheaders
1495
af13a7a6
BK
1496 # Allow overrides to configure.host here.
1497 if test $enable_cheaders = c_global; then
1498 c_compatibility=yes
1499 fi
1500
1501 if test $enable_cheaders = c_global || test $enable_cheaders = c_std; then
1502 c_extra=yes
1503 fi
1504
ff66d28f 1505 AC_SUBST(C_INCLUDE_DIR)
92eabea2
PE
1506 GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C, test $enable_cheaders = c)
1507 GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C_STD, test $enable_cheaders = c_std)
af13a7a6 1508 GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C_GLOBAL, test $enable_cheaders = c_global)
92eabea2 1509 GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_COMPATIBILITY, test $c_compatibility = yes)
af13a7a6 1510 GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_EXTRA, test $c_extra = yes)
ff66d28f
PE
1511])
1512
1513
0214010c 1514dnl
ff66d28f
PE
1515dnl Check for which locale library to use. The choice is mapped to
1516dnl a subdirectory of config/locale.
37bc6ca2 1517dnl
ff66d28f 1518dnl Default is generic.
0214010c 1519dnl
f214923c 1520AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
ff66d28f
PE
1521 GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@],
1522 [use MODEL for target locale package],
1523 [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
0258dc3a
BK
1524
1525 # Deal with gettext issues. Default to not using it (=no) until we detect
1526 # support for it later. Let the user turn it off via --e/d, but let that
1527 # default to on for easier handling.
1528 USE_NLS=no
1529 AC_ARG_ENABLE(nls,
1530 AC_HELP_STRING([--enable-nls],[use Native Language Support (default)]),
1531 [],
1532 [enable_nls=yes])
ff66d28f 1533
0258dc3a 1534 # Either a known packaage, or "auto"
ff66d28f
PE
1535 if test $enable_clocale = no || test $enable_clocale = yes; then
1536 enable_clocale=auto
1537 fi
0214010c
BK
1538 enable_clocale_flag=$enable_clocale
1539
0258dc3a 1540 # Probe for locale model to use if none specified.
ff66d28f
PE
1541 # Default to "generic".
1542 if test $enable_clocale_flag = auto; then
7d3998a4
PE
1543 case ${target_os} in
1544 linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
0258dc3a 1545 enable_clocale_flag=gnu
56deb74c 1546 ;;
a7f7b334 1547 darwin* | freebsd*)
f9686024
GK
1548 enable_clocale_flag=darwin
1549 ;;
56deb74c 1550 *)
ff66d28f
PE
1551 enable_clocale_flag=generic
1552 ;;
56deb74c
BK
1553 esac
1554 fi
1555
0258dc3a
BK
1556 # Sanity check model, and test for special functionality.
1557 if test $enable_clocale_flag = gnu; then
1558 AC_EGREP_CPP([_GLIBCXX_ok], [
1559 #include <features.h>
1560 #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
1561 _GLIBCXX_ok
1562 #endif
1563 ], enable_clocale_flag=gnu, enable_clocale_flag=generic)
1564
1ba74130
PC
1565 if test $enable_clocale = auto; then
1566 # Test for bugs early in glibc-2.2.x series
1567 AC_TRY_RUN([
1568 #define _GNU_SOURCE 1
1569 #include <locale.h>
1570 #include <string.h>
1571 #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
1572 extern __typeof(newlocale) __newlocale;
1573 extern __typeof(duplocale) __duplocale;
1574 extern __typeof(strcoll_l) __strcoll_l;
1575 #endif
1576 int main()
1577 {
1578