]> git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/acinclude.m4
4936cc8cc4f6a8cbbed09805f57c85d3a2498177
[thirdparty/gcc.git] / libstdc++-v3 / acinclude.m4
1
2 dnl
3 dnl GLIBCXX_CONDITIONAL (NAME, SHELL-TEST)
4 dnl
5 dnl Exactly like AM_CONDITIONAL, but delays evaluation of the test until the
6 dnl end of configure. This lets tested variables be reassigned, and the
7 dnl conditional will depend on the final state of the variable. For a simple
8 dnl example of why this is needed, see GLIBCXX_ENABLE_HOSTED.
9 dnl
10 m4_define([_m4_divert(glibcxx_diversion)], 8000)dnl
11 AC_DEFUN([GLIBCXX_CONDITIONAL], [dnl
12 m4_divert_text([glibcxx_diversion],dnl
13 AM_CONDITIONAL([$1],[$2])
14 )dnl
15 ])dnl
16 AC_DEFUN([GLIBCXX_EVALUATE_CONDITIONALS], [m4_undivert([glibcxx_diversion])])dnl
17
18
19 dnl
20 dnl Check to see what architecture and operating system we are compiling
21 dnl for. Also, if architecture- or OS-specific flags are required for
22 dnl compilation, pick them up here.
23 dnl
24 AC_DEFUN([GLIBCXX_CHECK_HOST], [
25 . $glibcxx_srcdir/configure.host
26 AC_MSG_NOTICE([CPU config directory is $cpu_include_dir])
27 AC_MSG_NOTICE([OS config directory is $os_include_dir])
28 ])
29
30 dnl
31 dnl Initialize the rest of the library configury. At this point we have
32 dnl variables like $host.
33 dnl
34 dnl Sets:
35 dnl SUBDIRS
36 dnl Substs:
37 dnl glibcxx_builddir (absolute path)
38 dnl glibcxx_srcdir (absolute path)
39 dnl toplevel_srcdir (absolute path)
40 dnl with_cross_host
41 dnl with_newlib
42 dnl with_target_subdir
43 dnl plus
44 dnl - the variables in GLIBCXX_CHECK_HOST / configure.host
45 dnl - default settings for all AM_CONFITIONAL test variables
46 dnl - lots of tools, like CC and CXX
47 dnl
48 AC_DEFUN([GLIBCXX_CONFIGURE], [
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.
52 m4_define([glibcxx_SUBDIRS],[include libmath libsupc++ src doc po testsuite])
53 SUBDIRS='glibcxx_SUBDIRS'
54
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.
58 glibcxx_builddir=`${PWDCMD-pwd}`
59 case $srcdir in
60 [\\/$]* | ?:[\\/]*) glibcxx_srcdir=${srcdir} ;;
61 *) glibcxx_srcdir=`cd "$srcdir" && ${PWDCMD-pwd} || echo "$srcdir"` ;;
62 esac
63 toplevel_srcdir=${glibcxx_srcdir}/..
64 AC_SUBST(glibcxx_builddir)
65 AC_SUBST(glibcxx_srcdir)
66 AC_SUBST(toplevel_srcdir)
67
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
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
94 # that ourselves. Un-preciousing AC_PROG_CC also affects CC and CFLAGS.
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.
98
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"
104 AC_PROG_CC
105 AC_PROG_CXX
106 CXXFLAGS="$save_CXXFLAGS"
107 m4_rename([glibcxx_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
108 AC_SUBST(CFLAGS)
109 AC_SUBST(CXXFLAGS)
110
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
116 AC_CHECK_TOOL(AS, as)
117 AC_CHECK_TOOL(AR, ar)
118 AC_CHECK_TOOL(RANLIB, ranlib, ranlib-not-found-in-path-error)
119
120 AM_MAINTAINER_MODE
121
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
126 need_libmath=no
127
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
137 # Find platform-specific directories containing configuration info.
138 # Also possibly modify flags used elsewhere, as needed by the platform.
139 GLIBCXX_CHECK_HOST
140 ])
141
142
143 dnl
144 dnl Tests for newer compiler features, or features that are present in newer
145 dnl compiler versions but not older compiler versions still in use, should
146 dnl be placed here.
147 dnl
148 dnl Defines:
149 dnl WERROR='-Werror' if requested and possible; g++'s that lack the
150 dnl new inlining code or the new system_header pragma will die on -Werror.
151 dnl Leave it out by default and use maint-mode to use it.
152 dnl SECTION_FLAGS='-ffunction-sections -fdata-sections' if
153 dnl compiler supports it and the user has not requested debug mode.
154 dnl
155 AC_DEFUN([GLIBCXX_CHECK_COMPILER_FEATURES], [
156 # All these tests are for C++; save the language and the compiler flags.
157 # The CXXFLAGS thing is suspicious, but based on similar bits previously
158 # found in GLIBCXX_CONFIGURE.
159 AC_LANG_SAVE
160 AC_LANG_CPLUSPLUS
161 ac_test_CXXFLAGS="${CXXFLAGS+set}"
162 ac_save_CXXFLAGS="$CXXFLAGS"
163
164 # Check for maintainer-mode bits.
165 if test x"$USE_MAINTAINER_MODE" = xno; then
166 WERROR=''
167 else
168 WERROR='-Werror'
169 fi
170
171 # Check for -ffunction-sections -fdata-sections
172 AC_MSG_CHECKING([for g++ that supports -ffunction-sections -fdata-sections])
173 CXXFLAGS='-g -Werror -ffunction-sections -fdata-sections'
174 AC_TRY_COMPILE([int foo; void bar() { };],, [ac_fdsections=yes], [ac_fdsections=no])
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
181 if test x"$ac_fdsections" = x"yes"; then
182 SECTION_FLAGS='-ffunction-sections -fdata-sections'
183 fi
184 AC_MSG_RESULT($ac_fdsections)
185
186 AC_LANG_RESTORE
187 AC_SUBST(WERROR)
188 AC_SUBST(SECTION_FLAGS)
189 ])
190
191
192 dnl
193 dnl If GNU ld is in use, check to see if tricky linker opts can be used. If
194 dnl the native linker is in use, all variables will be defined to something
195 dnl safe (like an empty string).
196 dnl
197 dnl Defines:
198 dnl SECTION_LDFLAGS='-Wl,--gc-sections' if possible
199 dnl OPT_LDFLAGS='-Wl,-O1' and '-z,relro' if possible
200 dnl LD (as a side effect of testing)
201 dnl Sets:
202 dnl with_gnu_ld
203 dnl glibcxx_ld_is_gold (set to "no" or "yes")
204 dnl glibcxx_gnu_ld_version (possibly)
205 dnl
206 dnl The last will be a single integer, e.g., version 1.23.45.0.67.89 will
207 dnl set glibcxx_gnu_ld_version to 12345. Zeros cause problems.
208 dnl
209 AC_DEFUN([GLIBCXX_CHECK_LINKER_FEATURES], [
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...
213 test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS=''
214 test -z "$OPT_LDFLAGS" && OPT_LDFLAGS=''
215 AC_REQUIRE([AC_PROG_LD])
216 AC_REQUIRE([AC_PROG_AWK])
217
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.
235 glibcxx_ld_is_gold=no
236 if test x"$with_gnu_ld" = x"yes"; then
237 AC_MSG_CHECKING([for ld version])
238 changequote(,)
239 if $LD --version 2>/dev/null | grep 'GNU gold' >/dev/null 2>&1; then
240 glibcxx_ld_is_gold=yes
241 fi
242 ldver=`$LD --version 2>/dev/null | head -1 | \
243 sed -e 's/GNU \(go\)\{0,1\}ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\4/'`
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
249
250 # Set --gc-sections.
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" &&
259 test $glibcxx_gnu_ld_version -gt $glibcxx_gcsections_min_ld ; then
260 glibcxx_have_gc_sections=yes
261 fi
262 fi
263 if test "$glibcxx_have_gc_sections" = "yes"; then
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.
267
268 ac_test_CFLAGS="${CFLAGS+set}"
269 ac_save_CFLAGS="$CFLAGS"
270 CFLAGS='-Wl,--gc-sections'
271
272 # Check for -Wl,--gc-sections
273 AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
274 AC_TRY_LINK([ int one(void) { return 1; }
275 int two(void) { return 2; }
276 ], [ two(); ] , [ac_gcsections=yes], [ac_gcsections=no])
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
288 if test "$ac_gcsections" = "yes"; then
289 SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
290 fi
291 AC_MSG_RESULT($ac_gcsections)
292
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
299 fi
300
301 # Set -z,relro.
302 # Note this is only for shared objects.
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
314 # Set linker optimization flags.
315 if test x"$with_gnu_ld" = x"yes"; then
316 OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
317 fi
318
319 AC_SUBST(SECTION_LDFLAGS)
320 AC_SUBST(OPT_LDFLAGS)
321 ])
322
323
324 dnl
325 dnl Check for headers for, and arguments to, the setrlimit() function.
326 dnl Used only in testsuite_hooks.h. Called from GLIBCXX_CONFIGURE_TESTSUITE.
327 dnl
328 dnl Defines:
329 dnl _GLIBCXX_RES_LIMITS if we can set artificial resource limits
330 dnl various HAVE_LIMIT_* for individual limit names
331 dnl
332 AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT_ancilliary], [
333 AC_MSG_CHECKING([for RLIMIT_$1])
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])
341 AC_DEFINE_UNQUOTED(HAVE_LIMIT_$1, $glibcxx_mresult,
342 [Only used in build directory testsuite_hooks.h.])
343 if test $glibcxx_mresult = 1 ; then res=yes ; else res=no ; fi
344 AC_MSG_RESULT($res)
345 ])
346
347 AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT], [
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)
360 GLIBCXX_CHECK_SETRLIMIT_ancilliary(FSIZE)
361
362 # Check for rlimit, setrlimit.
363 AC_CACHE_VAL(glibcxx_cv_setrlimit, [
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);],
371 [glibcxx_cv_setrlimit=yes], [glibcxx_cv_setrlimit=no])
372 ])
373 fi
374
375 AC_MSG_CHECKING([for testsuite resource limits support])
376 if test $setrlimit_have_headers = yes && test $glibcxx_cv_setrlimit = yes; then
377 ac_res_limits=yes
378 AC_DEFINE(_GLIBCXX_RES_LIMITS, 1,
379 [Define if using setrlimit to set resource limits during
380 "make check"])
381 else
382 ac_res_limits=no
383 fi
384 AC_MSG_RESULT($ac_res_limits)
385 ])
386
387
388 dnl
389 dnl Check whether S_ISREG (Posix) or S_IFREG is available in <sys/stat.h>.
390 dnl Define HAVE_S_ISREG / HAVE_S_IFREG appropriately.
391 dnl
392 AC_DEFUN([GLIBCXX_CHECK_S_ISREG_OR_S_IFREG], [
393
394 AC_LANG_SAVE
395 AC_LANG_CPLUSPLUS
396 ac_save_CXXFLAGS="$CXXFLAGS"
397 CXXFLAGS="$CXXFLAGS -fno-exceptions"
398
399 AC_MSG_CHECKING([for S_ISREG or S_IFREG])
400 AC_CACHE_VAL(glibcxx_cv_S_ISREG, [
401 GCC_TRY_COMPILE_OR_LINK(
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, [
410 GCC_TRY_COMPILE_OR_LINK(
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 ])
418 res=no
419 if test $glibcxx_cv_S_ISREG = yes; then
420 AC_DEFINE(HAVE_S_ISREG, 1,
421 [Define if S_IFREG is available in <sys/stat.h>.])
422 res=S_ISREG
423 elif test $glibcxx_cv_S_IFREG = yes; then
424 AC_DEFINE(HAVE_S_IFREG, 1,
425 [Define if S_IFREG is available in <sys/stat.h>.])
426 res=S_IFREG
427 fi
428 AC_MSG_RESULT($res)
429
430 CXXFLAGS="$ac_save_CXXFLAGS"
431 AC_LANG_RESTORE
432 ])
433
434
435 dnl
436 dnl Check whether poll is available in <poll.h>, and define HAVE_POLL.
437 dnl
438 AC_DEFUN([GLIBCXX_CHECK_POLL], [
439
440 AC_LANG_SAVE
441 AC_LANG_CPLUSPLUS
442 ac_save_CXXFLAGS="$CXXFLAGS"
443 CXXFLAGS="$CXXFLAGS -fno-exceptions"
444
445 AC_MSG_CHECKING([for poll])
446 AC_CACHE_VAL(glibcxx_cv_POLL, [
447 GCC_TRY_COMPILE_OR_LINK(
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
456 AC_DEFINE(HAVE_POLL, 1, [Define if poll is available in <poll.h>.])
457 fi
458 AC_MSG_RESULT($glibcxx_cv_POLL)
459
460 CXXFLAGS="$ac_save_CXXFLAGS"
461 AC_LANG_RESTORE
462 ])
463
464
465 dnl
466 dnl Check whether writev is available in <sys/uio.h>, and define HAVE_WRITEV.
467 dnl
468 AC_DEFUN([GLIBCXX_CHECK_WRITEV], [
469
470 AC_LANG_SAVE
471 AC_LANG_CPLUSPLUS
472 ac_save_CXXFLAGS="$CXXFLAGS"
473 CXXFLAGS="$CXXFLAGS -fno-exceptions"
474
475 AC_MSG_CHECKING([for writev])
476 AC_CACHE_VAL(glibcxx_cv_WRITEV, [
477 GCC_TRY_COMPILE_OR_LINK(
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
485 AC_DEFINE(HAVE_WRITEV, 1, [Define if writev is available in <sys/uio.h>.])
486 fi
487 AC_MSG_RESULT($glibcxx_cv_WRITEV)
488
489 CXXFLAGS="$ac_save_CXXFLAGS"
490 AC_LANG_RESTORE
491 ])
492
493
494 dnl
495 dnl Check whether int64_t is available in <stdint.h>, and define HAVE_INT64_T.
496 dnl Also check whether int64_t is actually a typedef to long or long long.
497 dnl
498 AC_DEFUN([GLIBCXX_CHECK_INT64_T], [
499
500 AC_LANG_SAVE
501 AC_LANG_CPLUSPLUS
502
503 AC_MSG_CHECKING([for int64_t])
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 ])
511
512 if test $glibcxx_cv_INT64_T = yes; then
513 AC_DEFINE(HAVE_INT64_T, 1, [Define if int64_t is available in <stdint.h>.])
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
545 fi
546
547 AC_LANG_RESTORE
548 ])
549
550
551 dnl
552 dnl Check whether LFS support is available.
553 dnl
554 AC_DEFUN([GLIBCXX_CHECK_LFS], [
555 AC_LANG_SAVE
556 AC_LANG_CPLUSPLUS
557 ac_save_CXXFLAGS="$CXXFLAGS"
558 CXXFLAGS="$CXXFLAGS -fno-exceptions"
559 AC_MSG_CHECKING([for LFS support])
560 AC_CACHE_VAL(glibcxx_cv_LFS, [
561 GCC_TRY_COMPILE_OR_LINK(
562 [#include <unistd.h>
563 #include <stdio.h>
564 #include <sys/stat.h>
565 ],
566 [FILE* fp;
567 fopen64("t", "w");
568 fseeko64(fp, 0, SEEK_CUR);
569 ftello64(fp);
570 lseek64(1, 0, SEEK_CUR);
571 struct stat64 buf;
572 fstat64(1, &buf);],
573 [glibcxx_cv_LFS=yes],
574 [glibcxx_cv_LFS=no])
575 ])
576 if test $glibcxx_cv_LFS = yes; then
577 AC_DEFINE(_GLIBCXX_USE_LFS, 1, [Define if LFS support is available.])
578 fi
579 AC_MSG_RESULT($glibcxx_cv_LFS)
580 CXXFLAGS="$ac_save_CXXFLAGS"
581 AC_LANG_RESTORE
582 ])
583
584
585 dnl
586 dnl Check for whether a fully dynamic basic_string implementation should
587 dnl be turned on, that does not put empty objects in per-process static
588 dnl memory (mostly useful together with shared memory allocators, see PR
589 dnl libstdc++/16612 for details).
590 dnl
591 dnl --enable-fully-dynamic-string defines _GLIBCXX_FULLY_DYNAMIC_STRING
592 dnl --disable-fully-dynamic-string leaves _GLIBCXX_FULLY_DYNAMIC_STRING undefined
593 dnl + Usage: GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING[(DEFAULT)]
594 dnl Where DEFAULT is either `yes' or `no'.
595 dnl
596 AC_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
599 AC_DEFINE(_GLIBCXX_FULLY_DYNAMIC_STRING, 1,
600 [Define if a fully dynamic basic_string is wanted.])
601 fi
602 ])
603
604
605 dnl
606 dnl Does any necessary configuration of the testsuite directory. Generates
607 dnl the testsuite_hooks.h header.
608 dnl
609 dnl GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE must be done before this.
610 dnl
611 dnl Sets:
612 dnl enable_abi_check
613 dnl GLIBCXX_TEST_WCHAR_T
614 dnl GLIBCXX_TEST_THREAD
615 dnl Substs:
616 dnl baseline_dir
617 dnl
618 AC_DEFUN([GLIBCXX_CONFIGURE_TESTSUITE], [
619 if $GLIBCXX_IS_NATIVE ; then
620 # Do checks for resource limit functions.
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)
625 fi
626
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
635 else
636 # Only build this as native, since automake does not understand
637 # CXX_FOR_BUILD.
638 enable_abi_check=no
639 fi
640
641 # Export file names for ABI checking.
642 baseline_dir="$glibcxx_srcdir/config/abi/post/${abi_baseline_pair}\$(MULTISUBDIR)"
643 AC_SUBST(baseline_dir)
644 ])
645
646
647 dnl
648 dnl Set up *_INCLUDES variables for all sundry Makefile.am's.
649 dnl
650 dnl Substs:
651 dnl GLIBCXX_INCLUDES
652 dnl TOPLEVEL_INCLUDES
653 dnl
654 AC_DEFUN([GLIBCXX_EXPORT_INCLUDES], [
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++"
660
661 # For Canadian crosses, pick this up too.
662 if test $CANADIAN = yes; then
663 GLIBCXX_INCLUDES="$GLIBCXX_INCLUDES -I\${includedir}"
664 fi
665
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'
670
671 # Now, export this to all the little Makefiles....
672 AC_SUBST(GLIBCXX_INCLUDES)
673 AC_SUBST(TOPLEVEL_INCLUDES)
674 ])
675
676
677 dnl
678 dnl Set up *_FLAGS and *FLAGS variables for all sundry Makefile.am's.
679 dnl (SECTION_FLAGS is done under CHECK_COMPILER_FEATURES.)
680 dnl
681 dnl Substs:
682 dnl OPTIMIZE_CXXFLAGS
683 dnl WARN_FLAGS
684 dnl
685 AC_DEFUN([GLIBCXX_EXPORT_FLAGS], [
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...
688 # Alternatively OPTIMIZE_CXXFLAGS can be set in configure.host.
689 # OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc
690 AC_SUBST(OPTIMIZE_CXXFLAGS)
691
692 WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual'
693 AC_SUBST(WARN_FLAGS)
694 ])
695
696
697 dnl
698 dnl All installation directory information is determined here.
699 dnl
700 dnl Substs:
701 dnl gxx_install_dir
702 dnl glibcxx_prefixdir
703 dnl glibcxx_toolexecdir
704 dnl glibcxx_toolexeclibdir
705 dnl
706 dnl Assumes cross_compiling bits already done, and with_cross_host in
707 dnl particular.
708 dnl
709 dnl This logic must match gcc/configure.ac's setting of gcc_gxx_include_dir.
710 dnl config/gxx-include-dir.m4 must be kept consistant with this as well.
711 AC_DEFUN([GLIBCXX_EXPORT_INSTALL_INFO], [
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
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
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
755 # is selected. FIXME: these variables are misnamed, there are
756 # no executables installed in _toolexecdir or _toolexeclibdir.
757 if test x"$gxx_include_dir" = x"no"; then
758 gxx_include_dir='${libdir}/gcc/${host_alias}/${gcc_version}/include/c++'
759 fi
760 glibcxx_toolexecdir='${libdir}/gcc/${host_alias}'
761 glibcxx_toolexeclibdir='${toolexecdir}/${gcc_version}$(MULTISUBDIR)'
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
769 glibcxx_toolexecdir='${exec_prefix}/${host_alias}'
770 glibcxx_toolexeclibdir='${toolexecdir}/lib'
771 else
772 glibcxx_toolexecdir='${libdir}/gcc/${host_alias}'
773 glibcxx_toolexeclibdir='${libdir}'
774 fi
775 multi_os_directory=`$CXX -print-multi-os-directory`
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
792 dnl
793 dnl GLIBCXX_ENABLE
794 dnl (FEATURE, DEFAULT, HELP-ARG, HELP-STRING)
795 dnl (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, permit a|b|c)
796 dnl (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, SHELL-CODE-HANDLER)
797 dnl
798 dnl See docs/html/17_intro/configury.html#enable for documentation.
799 dnl
800 m4_define([GLIBCXX_ENABLE],[dnl
801 m4_define([_g_switch],[--enable-$1])dnl
802 m4_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])
823 m4_undefine([_g_switch])dnl
824 m4_undefine([_g_help])dnl
825 ])
826
827
828 dnl
829 dnl Check for ISO/IEC 9899:1999 "C99" support.
830 dnl
831 dnl --enable-c99 defines _GLIBCXX_USE_C99
832 dnl --disable-c99 leaves _GLIBCXX_USE_C99 undefined
833 dnl + Usage: GLIBCXX_ENABLE_C99[(DEFAULT)]
834 dnl Where DEFAULT is either `yes' or `no'.
835 dnl + If 'C99' stuff is not available, ignores DEFAULT and sets `no'.
836 dnl
837 AC_DEFUN([GLIBCXX_ENABLE_C99], [
838 GLIBCXX_ENABLE(c99,$1,,[turns on ISO/IEC 9899:1999 support])
839
840 if test x"$enable_c99" = x"yes"; then
841
842 AC_LANG_SAVE
843 AC_LANG_CPLUSPLUS
844
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.
850 ac_save_CXXFLAGS="$CXXFLAGS"
851 CXXFLAGS="$CXXFLAGS -std=c++98"
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
867 # Check for the existence of <math.h> functions used if C99 is enabled.
868 AC_MSG_CHECKING([for ISO C99 support in <math.h>])
869 AC_CACHE_VAL(glibcxx_cv_c99_math, [
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);
887 ],[glibcxx_cv_c99_math=yes], [glibcxx_cv_c99_math=no])
888 ])
889 AC_MSG_RESULT($glibcxx_cv_c99_math)
890 if test x"$glibcxx_cv_c99_math" = x"yes"; then
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.])
894 fi
895
896 # Check for the existence of <complex.h> complex math functions.
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.
900 AC_CHECK_HEADERS(tgmath.h, ac_has_tgmath_h=yes, ac_has_tgmath_h=no)
901 AC_CHECK_HEADERS(complex.h, ac_has_complex_h=yes, ac_has_complex_h=no)
902 glibcxx_cv_c99_complex=no;
903 if test x"$ac_has_complex_h" = x"yes"; then
904 AC_MSG_CHECKING([for ISO C99 support in <complex.h>])
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);
928 tmpf = cprojf(tmpf);
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);
941 tmpd = cproj(tmpd);
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);
954 tmpld = cprojl(tmpld);
955 ],[glibcxx_cv_c99_complex=yes], [glibcxx_cv_c99_complex=no])
956 fi
957 AC_MSG_RESULT($glibcxx_cv_c99_complex)
958 if test x"$glibcxx_cv_c99_complex" = x"yes"; then
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.])
963 fi
964
965 # Check for the existence in <stdio.h> of vscanf, et. al.
966 AC_MSG_CHECKING([for ISO C99 support in <stdio.h>])
967 AC_CACHE_VAL(glibcxx_cv_c99_stdio, [
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");],
980 [glibcxx_cv_c99_stdio=yes], [glibcxx_cv_c99_stdio=no])
981 ])
982 AC_MSG_RESULT($glibcxx_cv_c99_stdio)
983
984 # Check for the existence in <stdlib.h> of lldiv_t, et. al.
985 AC_MSG_CHECKING([for ISO C99 support in <stdlib.h>])
986 AC_CACHE_VAL(glibcxx_cv_c99_stdlib, [
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);
1004 ],[glibcxx_cv_c99_stdlib=yes], [glibcxx_cv_c99_stdlib=no])
1005 ])
1006 AC_MSG_RESULT($glibcxx_cv_c99_stdlib)
1007
1008 # Check for the existence in <wchar.h> of wcstold, etc.
1009 glibcxx_cv_c99_wchar=no;
1010 if test x"$ac_has_wchar_h" = xyes &&
1011 test x"$ac_has_wctype_h" = xyes; then
1012 AC_MSG_CHECKING([for ISO C99 support in <wchar.h>])
1013 AC_TRY_COMPILE([#include <wchar.h>
1014 namespace test
1015 {
1016 using ::wcstold;
1017 using ::wcstoll;
1018 using ::wcstoull;
1019 }
1020 ],[],[glibcxx_cv_c99_wchar=yes], [glibcxx_cv_c99_wchar=no])
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
1049 AC_MSG_RESULT($glibcxx_cv_c99_wchar)
1050 fi
1051
1052 # Option parsed, now set things appropriately.
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
1058 enable_c99=no;
1059 else
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.])
1063 fi
1064
1065 gcc_no_link="$ac_save_gcc_no_link"
1066 LIBS="$ac_save_LIBS"
1067 CXXFLAGS="$ac_save_CXXFLAGS"
1068 AC_LANG_RESTORE
1069 fi
1070
1071 AC_MSG_CHECKING([for fully enabled ISO C99 support])
1072 AC_MSG_RESULT($enable_c99)
1073 ])
1074
1075
1076 dnl
1077 dnl Check for clock_gettime clocks, used in the implementation of 20.8.5
1078 dnl [time.clock] in the current C++0x working draft.
1079 dnl
1080 dnl --enable-clock-gettime
1081 dnl --enable-clock-gettime=yes
1082 dnl checks for the availability of monotonic and realtime clocks
1083 dnl in libc and libposix4 and in case links the latter
1084 dnl --enable-clock-gettime=rt
1085 dnl also searches (and, in case, links) librt. Note that this is
1086 dnl not always desirable because, in glibc, for example, in turn it
1087 dnl triggers the linking of libpthread too, which activates locking,
1088 dnl a large overhead for single-thread programs.
1089 dnl --enable-clock-gettime=no
1090 dnl --disable-clock-gettime
1091 dnl disables the checks completely
1092 dnl
1093 AC_DEFUN([GLIBCXX_ENABLE_CLOCK_GETTIME], [
1094
1095 AC_MSG_CHECKING([for clock_gettime clocks])
1096 GLIBCXX_ENABLE(clock-gettime,$1,[=KIND],
1097 [use KIND for check type],
1098 [permit yes|no|rt])
1099
1100 AC_LANG_SAVE
1101 AC_LANG_CPLUSPLUS
1102 ac_save_CXXFLAGS="$CXXFLAGS"
1103 CXXFLAGS="$CXXFLAGS -fno-exceptions"
1104 ac_save_LIBS="$LIBS"
1105
1106 ac_has_clock_monotonic=no;
1107 ac_has_clock_realtime=no;
1108
1109 if test x"$enable_clock_gettime" != x"no"; then
1110
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)
1136
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
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
1157
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
1162
1163 AC_SUBST(GLIBCXX_LIBS)
1164
1165 CXXFLAGS="$ac_save_CXXFLAGS"
1166 LIBS="$ac_save_LIBS"
1167 AC_LANG_RESTORE
1168 ])
1169
1170 dnl
1171 dnl Check for gettimeofday, used in the implementation of 20.8.5
1172 dnl [time.clock] in the current C++0x working draft.
1173 dnl
1174 AC_DEFUN([GLIBCXX_CHECK_GETTIMEOFDAY], [
1175
1176 AC_MSG_CHECKING([for gettimeofday])
1177
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])
1187 GCC_TRY_COMPILE_OR_LINK([#include <sys/time.h>],
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
1203 dnl
1204 dnl Check for ISO/IEC 9899:1999 "C99" support to ISO/IEC DTR 19768 "TR1"
1205 dnl facilities in Chapter 8, "C compatibility".
1206 dnl
1207 AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [
1208
1209 AC_LANG_SAVE
1210 AC_LANG_CPLUSPLUS
1211
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
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>])
1257 AC_CACHE_VAL(glibcxx_cv_c99_ctype_tr1, [
1258 AC_TRY_COMPILE([#include <ctype.h>],
1259 [int ch;
1260 int ret;
1261 ret = isblank(ch);
1262 ],[glibcxx_cv_c99_ctype_tr1=yes],
1263 [glibcxx_cv_c99_ctype_tr1=no])
1264 ])
1265 AC_MSG_RESULT($glibcxx_cv_c99_ctype_tr1)
1266 if test x"$glibcxx_cv_c99_ctype_tr1" = x"yes"; then
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
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;
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);
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
1302 # Check for the existence of <stdint.h> types.
1303 AC_MSG_CHECKING([for ISO C99 support to TR1 in <stdint.h>])
1304 AC_CACHE_VAL(glibcxx_cv_c99_stdint_tr1, [
1305 AC_TRY_COMPILE([#define __STDC_LIMIT_MACROS
1306 #define __STDC_CONSTANT_MACROS
1307 #include <stdint.h>],
1308 [typedef int8_t my_int8_t;
1309 my_int8_t i8 = INT8_MIN;
1310 i8 = INT8_MAX;
1311 typedef int16_t my_int16_t;
1312 my_int16_t i16 = INT16_MIN;
1313 i16 = INT16_MAX;
1314 typedef int32_t my_int32_t;
1315 my_int32_t i32 = INT32_MIN;
1316 i32 = INT32_MAX;
1317 typedef int64_t my_int64_t;
1318 my_int64_t i64 = INT64_MIN;
1319 i64 = INT64_MAX;
1320 typedef int_fast8_t my_int_fast8_t;
1321 my_int_fast8_t if8 = INT_FAST8_MIN;
1322 if8 = INT_FAST8_MAX;
1323 typedef int_fast16_t my_int_fast16_t;
1324 my_int_fast16_t if16 = INT_FAST16_MIN;
1325 if16 = INT_FAST16_MAX;
1326 typedef int_fast32_t my_int_fast32_t;
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;
1332 typedef int_least8_t my_int_least8_t;
1333 my_int_least8_t il8 = INT_LEAST8_MIN;
1334 il8 = INT_LEAST8_MAX;
1335 typedef int_least16_t my_int_least16_t;
1336 my_int_least16_t il16 = INT_LEAST16_MIN;
1337 il16 = INT_LEAST16_MAX;
1338 typedef int_least32_t my_int_least32_t;
1339 my_int_least32_t il32 = INT_LEAST32_MIN;
1340 il32 = INT_LEAST32_MAX;
1341 typedef int_least64_t my_int_least64_t;
1342 my_int_least64_t il64 = INT_LEAST64_MIN;
1343 il64 = INT_LEAST64_MAX;
1344 typedef intmax_t my_intmax_t;
1345 my_intmax_t im = INTMAX_MAX;
1346 im = INTMAX_MIN;
1347 typedef intptr_t my_intptr_t;
1348 my_intptr_t ip = INTPTR_MAX;
1349 ip = INTPTR_MIN;
1350 typedef uint8_t my_uint8_t;
1351 my_uint8_t ui8 = UINT8_MAX;
1352 ui8 = UINT8_MAX;
1353 typedef uint16_t my_uint16_t;
1354 my_uint16_t ui16 = UINT16_MAX;
1355 ui16 = UINT16_MAX;
1356 typedef uint32_t my_uint32_t;
1357 my_uint32_t ui32 = UINT32_MAX;
1358 ui32 = UINT32_MAX;
1359 typedef uint64_t my_uint64_t;
1360 my_uint64_t ui64 = UINT64_MAX;
1361 ui64 = UINT64_MAX;
1362 typedef uint_fast8_t my_uint_fast8_t;
1363 my_uint_fast8_t uif8 = UINT_FAST8_MAX;
1364 uif8 = UINT_FAST8_MAX;
1365 typedef uint_fast16_t my_uint_fast16_t;
1366 my_uint_fast16_t uif16 = UINT_FAST16_MAX;
1367 uif16 = UINT_FAST16_MAX;
1368 typedef uint_fast32_t my_uint_fast32_t;
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;
1374 typedef uint_least8_t my_uint_least8_t;
1375 my_uint_least8_t uil8 = UINT_LEAST8_MAX;
1376 uil8 = UINT_LEAST8_MAX;
1377 typedef uint_least16_t my_uint_least16_t;
1378 my_uint_least16_t uil16 = UINT_LEAST16_MAX;
1379 uil16 = UINT_LEAST16_MAX;
1380 typedef uint_least32_t my_uint_least32_t;
1381 my_uint_least32_t uil32 = UINT_LEAST32_MAX;
1382 uil32 = UINT_LEAST32_MAX;
1383 typedef uint_least64_t my_uint_least64_t;
1384 my_uint_least64_t uil64 = UINT_LEAST64_MAX;
1385 uil64 = UINT_LEAST64_MAX;
1386 typedef uintmax_t my_uintmax_t;
1387 my_uintmax_t uim = UINTMAX_MAX;
1388 uim = UINTMAX_MAX;
1389 typedef uintptr_t my_uintptr_t;
1390 my_uintptr_t uip = UINTPTR_MAX;
1391 uip = UINTPTR_MAX;
1392 ],[glibcxx_cv_c99_stdint_tr1=yes],
1393 [glibcxx_cv_c99_stdint_tr1=no])
1394 ])
1395 AC_MSG_RESULT($glibcxx_cv_c99_stdint_tr1)
1396 if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
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
1402 # Check for the existence of <math.h> functions.
1403 AC_MSG_CHECKING([for ISO C99 support to TR1 in <math.h>])
1404 AC_CACHE_VAL(glibcxx_cv_c99_math_tr1, [
1405 AC_TRY_COMPILE([#include <math.h>],
1406 [typedef double_t my_double_t;
1407 typedef float_t my_float_t;
1408 acosh(0.0);
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);
1513 ],[glibcxx_cv_c99_math_tr1=yes], [glibcxx_cv_c99_math_tr1=no])
1514 ])
1515 AC_MSG_RESULT($glibcxx_cv_c99_math_tr1)
1516 if test x"$glibcxx_cv_c99_math_tr1" = x"yes"; then
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
1522 # Check for the existence of <inttypes.h> functions (NB: doesn't make
1523 # sense if the glibcxx_cv_c99_stdint_tr1 check fails, per C99, 7.8/1).
1524 ac_c99_inttypes_tr1=no;
1525 if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
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;
1531 intmax_t ret = imaxabs(i);
1532 imaxdiv_t dret = imaxdiv(numer, denom);
1533 ret = strtoimax(s, endptr, base);
1534 uintmax_t uret = strtoumax(s, endptr, base);
1535 ],[ac_c99_inttypes_tr1=yes], [ac_c99_inttypes_tr1=no])
1536 fi
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
1541 <tr1/cinttypes> in namespace std::tr1.])
1542 fi
1543
1544 # Check for the existence of whcar_t <inttypes.h> functions (NB: doesn't
1545 # make sense if the glibcxx_cv_c99_stdint_tr1 check fails, per C99, 7.8/1).
1546 ac_c99_inttypes_wchar_t_tr1=no;
1547 if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
1548 AC_MSG_CHECKING([for wchar_t ISO C99 support to TR1 in <inttypes.h>])
1549 AC_TRY_COMPILE([#include <inttypes.h>],
1550 [intmax_t base;
1551 const wchar_t* s;
1552 wchar_t** endptr;
1553 intmax_t ret = wcstoimax(s, endptr, base);
1554 uintmax_t uret = wcstoumax(s, endptr, base);
1555 ],[ac_c99_inttypes_wchar_t_tr1=yes],
1556 [ac_c99_inttypes_wchar_t_tr1=no])
1557 fi
1558 AC_MSG_RESULT($ac_c99_inttypes_wchar_t_tr1)
1559 if test x"$ac_c99_inttypes_wchar_t_tr1" = x"yes"; then
1560 AC_DEFINE(_GLIBCXX_USE_C99_INTTYPES_WCHAR_T_TR1, 1,
1561 [Define if wchar_t C99 functions in <inttypes.h> should be
1562 imported in <tr1/cinttypes> in namespace std::tr1.])
1563 fi
1564
1565 # Check for the existence of the <stdbool.h> header.
1566 AC_CHECK_HEADERS(stdbool.h)
1567
1568 CXXFLAGS="$ac_save_CXXFLAGS"
1569 AC_LANG_RESTORE
1570 ])
1571
1572 dnl
1573 dnl Check whether "/dev/random" and "/dev/urandom" are available for the
1574 dnl random_device of "TR1" (Chapter 5.1, "Random number generation").
1575 dnl
1576 AC_DEFUN([GLIBCXX_CHECK_RANDOM_TR1], [
1577
1578 AC_MSG_CHECKING([for "/dev/random" and "/dev/urandom" for TR1 random_device])
1579 AC_CACHE_VAL(glibcxx_cv_random_tr1, [
1580 if test -r /dev/random && test -r /dev/urandom; then
1581 glibcxx_cv_random_tr1=yes;
1582 else
1583 glibcxx_cv_random_tr1=no;
1584 fi
1585 ])
1586 AC_MSG_RESULT($glibcxx_cv_random_tr1)
1587
1588 if test x"$glibcxx_cv_random_tr1" = x"yes"; then
1589 AC_DEFINE(_GLIBCXX_USE_RANDOM_TR1, 1,
1590 [Define if /dev/random and /dev/urandom are available for
1591 the random_device of TR1 (Chapter 5.1).])
1592 fi
1593
1594 ])
1595
1596 dnl
1597 dnl Check whether EOF, SEEK_CUR, and SEEK_END have the most common values:
1598 dnl in that case including <cstdio> in some C++ headers can be avoided.
1599 dnl
1600 AC_DEFUN([GLIBCXX_CHECK_STDIO_MACROS], [
1601
1602 AC_MSG_CHECKING([for EOF == -1, SEEK_CUR == 1, SEEK_END == 2])
1603 AC_CACHE_VAL(glibcxx_cv_stdio_macros, [
1604 AC_TRY_COMPILE([#include <stdio.h>],
1605 [#if ((EOF != -1) || (SEEK_CUR != 1) || (SEEK_END != 2))
1606 unusual values...
1607 #endif
1608 ], [glibcxx_cv_stdio_macros=yes],
1609 [glibcxx_cv_stdio_macros=no])
1610 ])
1611 AC_MSG_RESULT($glibcxx_cv_stdio_macros)
1612 if test x"$glibcxx_cv_stdio_macros" = x"yes"; then
1613 AC_DEFINE(_GLIBCXX_STDIO_MACROS, 1,
1614 [Define if EOF == -1, SEEK_CUR == 1, SEEK_END == 2.])
1615 fi
1616
1617 ])
1618
1619 dnl
1620 dnl Check whether macros, etc are present for <system_error>
1621 dnl
1622 AC_DEFUN([GLIBCXX_CHECK_SYSTEM_ERROR], [
1623
1624 m4_pushdef([n_syserr], [1])dnl
1625 m4_foreach([syserr], [EOWNERDEAD, ENOTRECOVERABLE, ENOLINK, EPROTO, ENODATA,
1626 ENOSR, ENOSTR, ETIME, EBADMSG, ECANCELED,
1627 EOVERFLOW, ENOTSUP, EIDRM, ETXTBSY],
1628 [m4_pushdef([SYSERR], m4_toupper(syserr))dnl
1629 AC_MSG_CHECKING([for syserr])
1630 AC_CACHE_VAL([glibcxx_cv_system_error[]n_syserr], [
1631 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <errno.h>]],
1632 [int i = syserr;])],
1633 [glibcxx_cv_system_error[]n_syserr=yes],
1634 [glibcxx_cv_system_error[]n_syserr=no])
1635 ])
1636 AC_MSG_RESULT([$glibcxx_cv_system_error[]n_syserr])
1637 if test x"$glibcxx_cv_system_error[]n_syserr" = x"yes"; then
1638 AC_DEFINE([HAVE_]SYSERR, 1, [Define if ]syserr[ exists.])
1639 fi
1640 m4_define([n_syserr], m4_incr(n_syserr))dnl
1641 m4_popdef([SYSERR])dnl
1642 ])
1643 m4_popdef([n_syserr])dnl
1644 ])
1645
1646 dnl
1647 dnl Check whether C++200x's standard layout types are supported.
1648 dnl
1649 AC_DEFUN([GLIBCXX_CHECK_STANDARD_LAYOUT], [
1650
1651 AC_MSG_CHECKING([for ISO C++200x standard layout type support])
1652 AC_CACHE_VAL(ac_standard_layout, [
1653 AC_LANG_SAVE
1654 AC_LANG_CPLUSPLUS
1655 ac_test_CXXFLAGS="${CXXFLAGS+set}"
1656 ac_save_CXXFLAGS="$CXXFLAGS"
1657 CXXFLAGS='-std=gnu++0x'
1658
1659 AC_TRY_COMPILE([struct b
1660 {
1661 bool t;
1662
1663 // Need standard layout relaxation from POD
1664 private:
1665 b& operator=(const b&);
1666 b(const b&);
1667 };],
1668 [b tst1 = { false };],
1669 [ac_standard_layout=yes], [ac_standard_layout=no])
1670
1671 CXXFLAGS="$ac_save_CXXFLAGS"
1672 AC_LANG_RESTORE
1673 ])
1674 AC_MSG_RESULT($ac_standard_layout)
1675 if test x"$ac_standard_layout" = x"yes"; then
1676 AC_DEFINE(_GLIBCXX_USE_STANDARD_LAYOUT, 1,
1677 [Define if standard layout types are supported in C++200x.])
1678 fi
1679 ])
1680
1681 dnl
1682 dnl Check for what type of C headers to use.
1683 dnl
1684 dnl --enable-cheaders= [does stuff].
1685 dnl --disable-cheaders [does not do anything, really].
1686 dnl + Usage: GLIBCXX_ENABLE_CHEADERS[(DEFAULT)]
1687 dnl Where DEFAULT is either 'c' or 'c_std' or 'c_global'.
1688 dnl
1689 AC_DEFUN([GLIBCXX_ENABLE_CHEADERS], [
1690 GLIBCXX_ENABLE(cheaders,$1,[=KIND],
1691 [construct "C" headers for g++], [permit c|c_std|c_global])
1692 AC_MSG_NOTICE("C" header strategy set to $enable_cheaders)
1693
1694 C_INCLUDE_DIR='${glibcxx_srcdir}/include/'$enable_cheaders
1695
1696 # Allow overrides to configure.host here.
1697 if test $enable_cheaders = c_global; then
1698 c_compatibility=yes
1699 fi
1700
1701 if test $enable_cheaders = c_global || test $enable_cheaders = c_std; then
1702 c_extra=yes
1703 fi
1704
1705 AC_SUBST(C_INCLUDE_DIR)
1706 GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C, test $enable_cheaders = c)
1707 GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C_STD, test $enable_cheaders = c_std)
1708 GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C_GLOBAL, test $enable_cheaders = c_global)
1709 GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_COMPATIBILITY, test $c_compatibility = yes)
1710 GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_EXTRA, test $c_extra = yes)
1711 ])
1712
1713
1714 dnl
1715 dnl Check for which locale library to use. The choice is mapped to
1716 dnl a subdirectory of config/locale.
1717 dnl
1718 dnl Default is generic.
1719 dnl
1720 AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
1721 GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@],
1722 [use MODEL for target locale package],
1723 [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
1724
1725 # Deal with gettext issues. Default to not using it (=no) until we detect
1726 # support for it later. Let the user turn it off via --e/d, but let that
1727 # default to on for easier handling.
1728 USE_NLS=no
1729 AC_ARG_ENABLE(nls,
1730 AC_HELP_STRING([--enable-nls],[use Native Language Support (default)]),
1731 [],
1732 [enable_nls=yes])
1733
1734 # Either a known packaage, or "auto"
1735 if test $enable_clocale = no || test $enable_clocale = yes; then
1736 enable_clocale=auto
1737 fi
1738 enable_clocale_flag=$enable_clocale
1739
1740 # Probe for locale model to use if none specified.
1741 # Default to "generic".
1742 if test $enable_clocale_flag = auto; then
1743 case ${target_os} in
1744 linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
1745 enable_clocale_flag=gnu
1746 ;;
1747 darwin* | freebsd*)
1748 enable_clocale_flag=darwin
1749 ;;
1750 *)
1751 enable_clocale_flag=generic
1752 ;;
1753 esac
1754 fi
1755
1756 # Sanity check model, and test for special functionality.
1757 if test $enable_clocale_flag = gnu; then
1758 AC_EGREP_CPP([_GLIBCXX_ok], [
1759 #include <features.h>
1760 #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
1761 _GLIBCXX_ok
1762 #endif
1763 ], enable_clocale_flag=gnu, enable_clocale_flag=generic)
1764
1765 if test $enable_clocale = auto; then
1766 # Test for bugs early in glibc-2.2.x series
1767 AC_TRY_RUN([
1768 #define _GNU_SOURCE 1
1769 #include <locale.h>
1770 #include <string.h>
1771 #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
1772 extern __typeof(newlocale) __newlocale;
1773 extern __typeof(duplocale) __duplocale;
1774 extern __typeof(strcoll_l) __strcoll_l;
1775 #endif
1776 int main()
1777 {
1778 const char __one[] = "Äuglein Augmen";
1779 const char __two[] = "Äuglein";
1780 int i;
1781 int j;
1782 __locale_t loc;
1783 __locale_t loc_dup;
1784 loc = __newlocale(1 << LC_ALL, "de_DE", 0);
1785 loc_dup = __duplocale(loc);
1786 i = __strcoll_l(__one, __two, loc);
1787 j = __strcoll_l(__one, __two, loc_dup);
1788 return 0;
1789 }
1790 ],
1791 [enable_clocale_flag=gnu],[enable_clocale_flag=generic],
1792 [enable_clocale_flag=generic])
1793 fi
1794
1795 # Set it to scream when it hurts.
1796 ac_save_CFLAGS="$CFLAGS"
1797 CFLAGS="-Wimplicit-function-declaration -Werror"
1798
1799 # Use strxfrm_l if available.
1800 AC_TRY_COMPILE([#define _GNU_SOURCE 1
1801 #include <string.h>
1802 #include <locale.h>],
1803 [char s[128]; __locale_t loc; strxfrm_l(s, "C", 5, loc);],
1804 AC_DEFINE(HAVE_STRXFRM_L, 1,
1805 [Define if strxfrm_l is available in <string.h>.]),)
1806
1807 # Use strerror_l if available.
1808 AC_TRY_COMPILE([#define _GNU_SOURCE 1
1809 #include <string.h>
1810 #include <locale.h>],
1811 [__locale_t loc; strerror_l(5, loc);],
1812 AC_DEFINE(HAVE_STRERROR_L, 1,
1813 [Define if strerror_l is available in <string.h>.]),)
1814
1815 CFLAGS="$ac_save_CFLAGS"
1816 fi
1817
1818 # Perhaps use strerror_r if available, and strerror_l isn't.
1819 ac_save_CFLAGS="$CFLAGS"
1820 CFLAGS="-Wimplicit-function-declaration -Werror"
1821 AC_TRY_COMPILE([#define _GNU_SOURCE 1
1822 #include <string.h>
1823 #include <locale.h>],
1824 [char s[128]; strerror_r(5, s, 128);],
1825 AC_DEFINE(HAVE_STRERROR_R, 1,
1826 [Define if strerror_r is available in <string.h>.]),)
1827 CFLAGS="$ac_save_CFLAGS"
1828
1829 # Set configure bits for specified locale package
1830 AC_MSG_CHECKING([for C locale to use])
1831 case ${enable_clocale_flag} in
1832 generic)
1833 AC_MSG_RESULT(generic)
1834
1835 CLOCALE_H=config/locale/generic/c_locale.h
1836 CLOCALE_CC=config/locale/generic/c_locale.cc
1837 CCODECVT_CC=config/locale/generic/codecvt_members.cc
1838 CCOLLATE_CC=config/locale/generic/collate_members.cc
1839 CCTYPE_CC=config/locale/generic/ctype_members.cc
1840 CMESSAGES_H=config/locale/generic/messages_members.h
1841 CMESSAGES_CC=config/locale/generic/messages_members.cc
1842 CMONEY_CC=config/locale/generic/monetary_members.cc
1843 CNUMERIC_CC=config/locale/generic/numeric_members.cc
1844 CTIME_H=config/locale/generic/time_members.h
1845 CTIME_CC=config/locale/generic/time_members.cc
1846 CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
1847 ;;
1848 darwin)
1849 AC_MSG_RESULT(darwin or freebsd)
1850
1851 CLOCALE_H=config/locale/generic/c_locale.h
1852 CLOCALE_CC=config/locale/generic/c_locale.cc
1853 CCODECVT_CC=config/locale/generic/codecvt_members.cc
1854 CCOLLATE_CC=config/locale/generic/collate_members.cc
1855 CCTYPE_CC=config/locale/darwin/ctype_members.cc
1856 CMESSAGES_H=config/locale/generic/messages_members.h
1857 CMESSAGES_CC=config/locale/generic/messages_members.cc
1858 CMONEY_CC=config/locale/generic/monetary_members.cc
1859 CNUMERIC_CC=config/locale/generic/numeric_members.cc
1860 CTIME_H=config/locale/generic/time_members.h
1861 CTIME_CC=config/locale/generic/time_members.cc
1862 CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
1863 ;;
1864
1865 gnu)
1866 AC_MSG_RESULT(gnu)
1867
1868 # Declare intention to use gettext, and add support for specific
1869 # languages.
1870 # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
1871 ALL_LINGUAS="de fr"
1872
1873 # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
1874 AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
1875 if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
1876 USE_NLS=yes
1877 fi
1878 # Export the build objects.
1879 for ling in $ALL_LINGUAS; do \
1880 glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
1881 glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
1882 done
1883 AC_SUBST(glibcxx_MOFILES)
1884 AC_SUBST(glibcxx_POFILES)
1885
1886 CLOCALE_H=config/locale/gnu/c_locale.h
1887 CLOCALE_CC=config/locale/gnu/c_locale.cc
1888 CCODECVT_CC=config/locale/gnu/codecvt_members.cc
1889 CCOLLATE_CC=config/locale/gnu/collate_members.cc
1890 CCTYPE_CC=config/locale/gnu/ctype_members.cc
1891 CMESSAGES_H=config/locale/gnu/messages_members.h
1892 CMESSAGES_CC=config/locale/gnu/messages_members.cc
1893 CMONEY_CC=config/locale/gnu/monetary_members.cc
1894 CNUMERIC_CC=config/locale/gnu/numeric_members.cc
1895 CTIME_H=config/locale/gnu/time_members.h
1896 CTIME_CC=config/locale/gnu/time_members.cc
1897 CLOCALE_INTERNAL_H=config/locale/gnu/c++locale_internal.h
1898 ;;
1899 ieee_1003.1-2001)
1900 AC_MSG_RESULT(IEEE 1003.1)
1901
1902 CLOCALE_H=config/locale/ieee_1003.1-2001/c_locale.h
1903 CLOCALE_CC=config/locale/ieee_1003.1-2001/c_locale.cc
1904 CCODECVT_CC=config/locale/generic/codecvt_members.cc
1905 CCOLLATE_CC=config/locale/generic/collate_members.cc
1906 CCTYPE_CC=config/locale/generic/ctype_members.cc
1907 CMESSAGES_H=config/locale/ieee_1003.1-2001/messages_members.h
1908 CMESSAGES_CC=config/locale/ieee_1003.1-2001/messages_members.cc
1909 CMONEY_CC=config/locale/generic/monetary_members.cc
1910 CNUMERIC_CC=config/locale/generic/numeric_members.cc
1911 CTIME_H=config/locale/generic/time_members.h
1912 CTIME_CC=config/locale/generic/time_members.cc
1913 CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
1914 ;;
1915 esac
1916
1917 # This is where the testsuite looks for locale catalogs, using the
1918 # -DLOCALEDIR define during testsuite compilation.
1919 glibcxx_localedir=${glibcxx_builddir}/po/share/locale
1920 AC_SUBST(glibcxx_localedir)
1921
1922 # A standalone libintl (e.g., GNU libintl) may be in use.
1923 if test $USE_NLS = yes; then
1924 AC_CHECK_HEADERS([libintl.h], [], USE_NLS=no)
1925 AC_SEARCH_LIBS(gettext, intl, [], USE_NLS=no)
1926 fi
1927 if test $USE_NLS = yes; then
1928 AC_DEFINE(_GLIBCXX_USE_NLS, 1,
1929 [Define if NLS translations are to be used.])
1930 fi
1931
1932 AC_SUBST(USE_NLS)
1933 AC_SUBST(CLOCALE_H)
1934 AC_SUBST(CMESSAGES_H)
1935 AC_SUBST(CCODECVT_CC)
1936 AC_SUBST(CCOLLATE_CC)
1937 AC_SUBST(CCTYPE_CC)
1938 AC_SUBST(CMESSAGES_CC)
1939 AC_SUBST(CMONEY_CC)
1940 AC_SUBST(CNUMERIC_CC)
1941 AC_SUBST(CTIME_H)
1942 AC_SUBST(CTIME_CC)
1943 AC_SUBST(CLOCALE_CC)
1944 AC_SUBST(CLOCALE_INTERNAL_H)
1945 ])
1946
1947
1948 dnl
1949 dnl Check for which std::allocator base class to use. The choice is
1950 dnl mapped from a subdirectory of include/ext.
1951 dnl
1952 dnl Default is new.
1953 dnl
1954 AC_DEFUN([GLIBCXX_ENABLE_ALLOCATOR], [
1955 AC_MSG_CHECKING([for std::allocator base class])
1956 GLIBCXX_ENABLE(libstdcxx-allocator,auto,[=KIND],
1957 [use KIND for target std::allocator base],
1958 [permit new|malloc|mt|bitmap|pool|yes|no|auto])
1959
1960 # If they didn't use this option switch, or if they specified --enable
1961 # with no specific model, we'll have to look for one. If they
1962 # specified --disable (???), do likewise.
1963 if test $enable_libstdcxx_allocator = no ||
1964 test $enable_libstdcxx_allocator = yes;
1965 then
1966 enable_libstdcxx_allocator=auto
1967 fi
1968
1969 # Either a known package, or "auto". Auto implies the default choice
1970 # for a particular platform.
1971 enable_libstdcxx_allocator_flag=$enable_libstdcxx_allocator
1972
1973 # Probe for host-specific support if no specific model is specified.
1974 # Default to "new".
1975 if test $enable_libstdcxx_allocator_flag = auto; then
1976 case ${target_os} in
1977 linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
1978 enable_libstdcxx_allocator_flag=new
1979 ;;
1980 *)
1981 enable_libstdcxx_allocator_flag=new
1982 ;;
1983 esac
1984 fi
1985 AC_MSG_RESULT($enable_libstdcxx_allocator_flag)
1986
1987
1988 # Set configure bits for specified locale package
1989 case ${enable_libstdcxx_allocator_flag} in
1990 bitmap)
1991 ALLOCATOR_H=config/allocator/bitmap_allocator_base.h
1992 ALLOCATOR_NAME=__gnu_cxx::bitmap_allocator
1993 ;;
1994 malloc)
1995 ALLOCATOR_H=config/allocator/malloc_allocator_base.h
1996 ALLOCATOR_NAME=__gnu_cxx::malloc_allocator
1997 ;;
1998 mt)
1999 ALLOCATOR_H=config/allocator/mt_allocator_base.h
2000 ALLOCATOR_NAME=__gnu_cxx::__mt_alloc
2001 ;;
2002 new)
2003 ALLOCATOR_H=config/allocator/new_allocator_base.h
2004 ALLOCATOR_NAME=__gnu_cxx::new_allocator
2005 ;;
2006 pool)
2007 ALLOCATOR_H=config/allocator/pool_allocator_base.h
2008 ALLOCATOR_NAME=__gnu_cxx::__pool_alloc
2009 ;;
2010 esac
2011
2012 AC_SUBST(ALLOCATOR_H)
2013 AC_SUBST(ALLOCATOR_NAME)
2014 ])
2015
2016
2017 dnl
2018 dnl Check for whether the Boost-derived checks should be turned on.
2019 dnl
2020 dnl --enable-concept-checks turns them on.
2021 dnl --disable-concept-checks leaves them off.
2022 dnl + Usage: GLIBCXX_ENABLE_CONCEPT_CHECKS[(DEFAULT)]
2023 dnl Where DEFAULT is either `yes' or `no'.
2024 dnl
2025 AC_DEFUN([GLIBCXX_ENABLE_CONCEPT_CHECKS], [
2026 GLIBCXX_ENABLE(concept-checks,$1,,[use Boost-derived template checks])
2027 if test $enable_concept_checks = yes; then
2028 AC_DEFINE(_GLIBCXX_CONCEPT_CHECKS, 1,
2029 [Define to use concept checking code from the boost libraries.])
2030 fi
2031 ])
2032
2033 dnl
2034 dnl Check for parallel mode pre-requisites, including OpenMP support.
2035 dnl
2036 dnl + Usage: GLIBCXX_ENABLE_PARALLEL
2037 dnl
2038 AC_DEFUN([GLIBCXX_ENABLE_PARALLEL], [
2039
2040 enable_parallel=no;
2041
2042 # See if configured libgomp/omp.h exists. (libgomp may be in
2043 # noconfigdirs but not explicitly disabled.)
2044 if test -f $glibcxx_builddir/../libgomp/omp.h; then
2045 enable_parallel=yes;
2046 else
2047 AC_MSG_NOTICE([$glibcxx_builddir/../libgomp/omp.h not found])
2048 fi
2049
2050 AC_MSG_CHECKING([for parallel mode support])
2051 AC_MSG_RESULT([$enable_parallel])
2052 GLIBCXX_CONDITIONAL(ENABLE_PARALLEL, test $enable_parallel = yes)
2053 ])
2054
2055
2056 dnl
2057 dnl Check for which I/O library to use: stdio, or something specific.
2058 dnl
2059 dnl Default is stdio.
2060 dnl
2061 AC_DEFUN([GLIBCXX_ENABLE_CSTDIO], [
2062 AC_MSG_CHECKING([for underlying I/O to use])
2063 GLIBCXX_ENABLE(cstdio,stdio,[=PACKAGE],
2064 [use target-specific I/O package], [permit stdio])
2065
2066 # Now that libio has been removed, you can have any color you want as long
2067 # as it's black. This is one big no-op until other packages are added, but
2068 # showing the framework never hurts.
2069 case ${enable_cstdio} in
2070 stdio)
2071 CSTDIO_H=config/io/c_io_stdio.h
2072 BASIC_FILE_H=config/io/basic_file_stdio.h
2073 BASIC_FILE_CC=config/io/basic_file_stdio.cc
2074 AC_MSG_RESULT(stdio)
2075 ;;
2076 esac
2077
2078 AC_SUBST(CSTDIO_H)
2079 AC_SUBST(BASIC_FILE_H)
2080 AC_SUBST(BASIC_FILE_CC)
2081 ])
2082
2083
2084 dnl
2085 dnl Check for "unusual" flags to pass to the compiler while building.
2086 dnl
2087 dnl --enable-cxx-flags='-foo -bar -baz' is a general method for passing
2088 dnl experimental flags such as -fpch, -fIMI, -Dfloat=char, etc.
2089 dnl --disable-cxx-flags passes nothing.
2090 dnl + See http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00131.html
2091 dnl http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00284.html
2092 dnl http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00035.html
2093 dnl + Usage: GLIBCXX_ENABLE_CXX_FLAGS(default flags)
2094 dnl If "default flags" is an empty string, the effect is the same
2095 dnl as --disable or --enable=no.
2096 dnl
2097 AC_DEFUN([GLIBCXX_ENABLE_CXX_FLAGS], [dnl
2098 AC_MSG_CHECKING([for extra compiler flags for building])
2099 GLIBCXX_ENABLE(cxx-flags,$1,[=FLAGS],
2100 [pass compiler FLAGS when building library],
2101 [case "x$enable_cxx_flags" in
2102 xno | x) enable_cxx_flags= ;;
2103 x-*) ;;
2104 *) AC_MSG_ERROR(_g_switch needs compiler flags as arguments) ;;
2105 esac])
2106
2107 # Run through flags (either default or command-line) and set anything
2108 # extra (e.g., #defines) that must accompany particular g++ options.
2109 if test -n "$enable_cxx_flags"; then
2110 for f in $enable_cxx_flags; do
2111 case "$f" in
2112 -fhonor-std) ;;
2113 -*) ;;
2114 *) # and we're trying to pass /what/ exactly?
2115 AC_MSG_ERROR([compiler flags start with a -]) ;;
2116 esac
2117 done
2118 fi
2119
2120 EXTRA_CXX_FLAGS="$enable_cxx_flags"
2121 AC_MSG_RESULT($EXTRA_CXX_FLAGS)
2122 AC_SUBST(EXTRA_CXX_FLAGS)
2123 ])
2124
2125
2126 dnl
2127 dnl Check to see if debugging libraries are to be built.
2128 dnl
2129 dnl --enable-libstdcxx-debug
2130 dnl builds a separate set of debugging libraries in addition to the
2131 dnl normal (shared, static) libstdc++ binaries.
2132 dnl
2133 dnl --disable-libstdcxx-debug
2134 dnl builds only one (non-debug) version of libstdc++.
2135 dnl
2136 dnl --enable-libstdcxx-debug-flags=FLAGS
2137 dnl iff --enable-debug == yes, then use FLAGS to build the debug library.
2138 dnl
2139 dnl + Usage: GLIBCXX_ENABLE_DEBUG[(DEFAULT)]
2140 dnl Where DEFAULT is either `yes' or `no'.
2141 dnl
2142 AC_DEFUN([GLIBCXX_ENABLE_DEBUG], [
2143 AC_MSG_CHECKING([for additional debug build])
2144 GLIBCXX_ENABLE(libstdcxx-debug,$1,,[build extra debug library])
2145 AC_MSG_RESULT($enable_libstdcxx_debug)
2146 GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_DEBUG, test $enable_libstdcxx_debug = yes)
2147 ])
2148
2149
2150 dnl
2151 dnl Check for explicit debug flags.
2152 dnl
2153 dnl --enable-libstdcxx-debug-flags='-O1'
2154 dnl is a general method for passing flags to be used when
2155 dnl building debug libraries with --enable-debug.
2156 dnl
2157 dnl --disable-libstdcxx-debug-flags does nothing.
2158 dnl + Usage: GLIBCXX_ENABLE_DEBUG_FLAGS(default flags)
2159 dnl If "default flags" is an empty string, the effect is the same
2160 dnl as --disable or --enable=no.
2161 dnl
2162 AC_DEFUN([GLIBCXX_ENABLE_DEBUG_FLAGS], [
2163 GLIBCXX_ENABLE(libstdcxx-debug-flags,[$1],[=FLAGS],
2164 [pass compiler FLAGS when building debug library],
2165 [case "x$enable_libstdcxx_debug_flags" in
2166 xno | x) enable_libstdcxx_debug_flags= ;;
2167 x-*) ;;
2168 *) AC_MSG_ERROR(_g_switch needs compiler flags as arguments) ;;
2169 esac])
2170
2171 # Option parsed, now set things appropriately
2172 DEBUG_FLAGS="$enable_libstdcxx_debug_flags"
2173 AC_SUBST(DEBUG_FLAGS)
2174
2175 AC_MSG_NOTICE([Debug build flags set to $DEBUG_FLAGS])
2176 ])
2177
2178
2179 dnl
2180 dnl Check if the user only wants a freestanding library implementation.
2181 dnl
2182 dnl --disable-hosted-libstdcxx will turn off most of the library build,
2183 dnl installing only the headers required by [17.4.1.3] and the language
2184 dnl support library. More than that will be built (to keep the Makefiles
2185 dnl conveniently clean), but not installed.
2186 dnl
2187 dnl Sets:
2188 dnl is_hosted (yes/no)
2189 dnl
2190 dnl Defines:
2191 dnl _GLIBCXX_HOSTED (always defined, either to 1 or 0)
2192 dnl
2193 AC_DEFUN([GLIBCXX_ENABLE_HOSTED], [
2194 AC_ARG_ENABLE([hosted-libstdcxx],
2195 AC_HELP_STRING([--disable-hosted-libstdcxx],
2196 [only build freestanding C++ runtime support]),,
2197 [case "$host" in
2198 arm*-*-symbianelf*)
2199 enable_hosted_libstdcxx=no
2200 ;;
2201 *)
2202 enable_hosted_libstdcxx=yes
2203 ;;
2204 esac])
2205 if test "$enable_hosted_libstdcxx" = no; then
2206 AC_MSG_NOTICE([Only freestanding libraries will be built])
2207 is_hosted=no
2208 hosted_define=0
2209 enable_abi_check=no
2210 enable_libstdcxx_pch=no
2211 else
2212 is_hosted=yes
2213 hosted_define=1
2214 fi
2215 GLIBCXX_CONDITIONAL(GLIBCXX_HOSTED, test $is_hosted = yes)
2216 AC_DEFINE_UNQUOTED(_GLIBCXX_HOSTED, $hosted_define,
2217 [Define to 1 if a full hosted library is built, or 0 if freestanding.])
2218 ])
2219
2220
2221 dnl
2222 dnl Check for template specializations for the 'long long' type.
2223 dnl The result determines only whether 'long long' I/O is enabled; things
2224 dnl like numeric_limits<> specializations are always available.
2225 dnl
2226 dnl --enable-long-long defines _GLIBCXX_USE_LONG_LONG
2227 dnl --disable-long-long leaves _GLIBCXX_USE_LONG_LONG undefined
2228 dnl + Usage: GLIBCXX_ENABLE_LONG_LONG[(DEFAULT)]
2229 dnl Where DEFAULT is either `yes' or `no'.
2230 dnl
2231 AC_DEFUN([GLIBCXX_ENABLE_LONG_LONG], [
2232 GLIBCXX_ENABLE(long-long,$1,,[enable template specializations for 'long long'])
2233 if test $enable_long_long = yes; then
2234 AC_DEFINE(_GLIBCXX_USE_LONG_LONG, 1,
2235 [Define if code specialized for long long should be used.])
2236 fi
2237 AC_MSG_CHECKING([for enabled long long specializations])
2238 AC_MSG_RESULT([$enable_long_long])
2239 ])
2240
2241
2242 dnl
2243 dnl Check for template specializations for the 'wchar_t' type.
2244 dnl
2245 dnl --enable-wchar_t defines _GLIBCXX_USE_WCHAR_T
2246 dnl --disable-wchar_t leaves _GLIBCXX_USE_WCHAR_T undefined
2247 dnl + Usage: GLIBCXX_ENABLE_WCHAR_T[(DEFAULT)]
2248 dnl Where DEFAULT is either `yes' or `no'.
2249 dnl
2250 dnl Necessary support must also be present.
2251 dnl
2252 AC_DEFUN([GLIBCXX_ENABLE_WCHAR_T], [
2253 GLIBCXX_ENABLE(wchar_t,$1,,[enable template specializations for 'wchar_t'])
2254
2255 # Test wchar.h for mbstate_t, which is needed for char_traits and fpos.
2256 AC_CHECK_HEADERS(wchar.h, ac_has_wchar_h=yes, ac_has_wchar_h=no)
2257 AC_MSG_CHECKING([for mbstate_t])
2258 AC_TRY_COMPILE([#include <wchar.h>],
2259 [mbstate_t teststate;],
2260 have_mbstate_t=yes, have_mbstate_t=no)
2261 AC_MSG_RESULT($have_mbstate_t)
2262 if test x"$have_mbstate_t" = xyes; then
2263 AC_DEFINE(HAVE_MBSTATE_T,1,[Define if mbstate_t exists in wchar.h.])
2264 fi
2265
2266 # Test it always, for use in GLIBCXX_ENABLE_C99, together with
2267 # ac_has_wchar_h.
2268 AC_CHECK_HEADERS(wctype.h, ac_has_wctype_h=yes, ac_has_wctype_h=no)
2269
2270 if test x"$enable_wchar_t" = x"yes"; then
2271
2272 AC_LANG_SAVE
2273 AC_LANG_CPLUSPLUS
2274
2275 if test x"$ac_has_wchar_h" = xyes &&
2276 test x"$ac_has_wctype_h" = xyes; then
2277 AC_TRY_COMPILE([#include <wchar.h>
2278 #include <stddef.h>
2279 wint_t i;
2280 long l = WEOF;
2281 long j = WCHAR_MIN;
2282 long k = WCHAR_MAX;
2283 namespace test
2284 {
2285 using ::btowc;
2286 using ::fgetwc;
2287 using ::fgetws;
2288 using ::fputwc;
2289 using ::fputws;
2290 using ::fwide;
2291 using ::fwprintf;
2292 using ::fwscanf;
2293 using ::getwc;
2294 using ::getwchar;
2295 using ::mbrlen;
2296 using ::mbrtowc;
2297 using ::mbsinit;
2298 using ::mbsrtowcs;
2299 using ::putwc;
2300 using ::putwchar;
2301 using ::swprintf;
2302 using ::swscanf;
2303 using ::ungetwc;
2304 using ::vfwprintf;
2305 using ::vswprintf;
2306 using ::vwprintf;
2307 using ::wcrtomb;
2308 using ::wcscat;
2309 using ::wcschr;
2310 using ::wcscmp;
2311 using ::wcscoll;
2312 using ::wcscpy;
2313 using ::wcscspn;
2314 using ::wcsftime;
2315 using ::wcslen;
2316 using ::wcsncat;
2317 using ::wcsncmp;
2318 using ::wcsncpy;
2319 using ::wcspbrk;
2320 using ::wcsrchr;
2321 using ::wcsrtombs;
2322 using ::wcsspn;
2323 using ::wcsstr;
2324 using ::wcstod;
2325 using ::wcstok;
2326 using ::wcstol;
2327 using ::wcstoul;
2328 using ::wcsxfrm;
2329 using ::wctob;
2330 using ::wmemchr;
2331 using ::wmemcmp;
2332 using ::wmemcpy;
2333 using ::wmemmove;
2334 using ::wmemset;
2335 using ::wprintf;
2336 using ::wscanf;
2337 }
2338 ],[],[], [enable_wchar_t=no])
2339 else
2340 enable_wchar_t=no
2341 fi
2342
2343 AC_LANG_RESTORE
2344 fi
2345
2346 if test x"$enable_wchar_t" = x"yes"; then
2347 AC_DEFINE(_GLIBCXX_USE_WCHAR_T, 1,
2348 [Define if code specialized for wchar_t should be used.])
2349 fi
2350
2351 AC_MSG_CHECKING([for enabled wchar_t specializations])
2352 AC_MSG_RESULT([$enable_wchar_t])
2353 ])
2354
2355
2356 dnl
2357 dnl Check to see if building and using a C++ precompiled header can be done.
2358 dnl
2359 dnl --enable-libstdcxx-pch=yes
2360 dnl default, this shows intent to use stdc++.h.gch If it looks like it
2361 dnl may work, after some light-hearted attempts to puzzle out compiler
2362 dnl support, flip bits on in include/Makefile.am
2363 dnl
2364 dnl --disable-libstdcxx-pch
2365 dnl turns off attempts to use or build stdc++.h.gch.
2366 dnl
2367 dnl Substs:
2368 dnl glibcxx_PCHFLAGS
2369 dnl
2370 AC_DEFUN([GLIBCXX_ENABLE_PCH], [
2371 GLIBCXX_ENABLE(libstdcxx-pch,$1,,[build pre-compiled libstdc++ headers])
2372 if test $enable_libstdcxx_pch = yes; then
2373 AC_CACHE_CHECK([for compiler with PCH support],
2374 [glibcxx_cv_prog_CXX_pch],
2375 [ac_save_CXXFLAGS="$CXXFLAGS"
2376 CXXFLAGS="$CXXFLAGS -Werror -Winvalid-pch -Wno-deprecated"
2377 AC_LANG_SAVE
2378 AC_LANG_CPLUSPLUS
2379 echo '#include <math.h>' > conftest.h
2380 if $CXX $CXXFLAGS $CPPFLAGS -x c++-header conftest.h \
2381 -o conftest.h.gch 1>&5 2>&1 &&
2382 echo '#error "pch failed"' > conftest.h &&
2383 echo '#include "conftest.h"' > conftest.cc &&
2384 $CXX -c $CXXFLAGS $CPPFLAGS conftest.cc 1>&5 2>&1 ;
2385 then
2386 glibcxx_cv_prog_CXX_pch=yes
2387 else
2388 glibcxx_cv_prog_CXX_pch=no
2389 fi
2390 rm -f conftest*
2391 CXXFLAGS=$ac_save_CXXFLAGS
2392 AC_LANG_RESTORE
2393 ])
2394 enable_libstdcxx_pch=$glibcxx_cv_prog_CXX_pch
2395 fi
2396
2397 AC_MSG_CHECKING([for enabled PCH])
2398 AC_MSG_RESULT([$enable_libstdcxx_pch])
2399
2400 GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_PCH, test $enable_libstdcxx_pch = yes)
2401 if test $enable_libstdcxx_pch = yes; then
2402 glibcxx_PCHFLAGS="-include bits/stdc++.h"
2403 else
2404 glibcxx_PCHFLAGS=""
2405 fi
2406 AC_SUBST(glibcxx_PCHFLAGS)
2407 ])
2408
2409
2410 dnl
2411 dnl Check for atomic builtins.
2412 dnl See:
2413 dnl http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html#Atomic-Builtins
2414 dnl
2415 dnl This checks to see if the host supports the compiler-generated
2416 dnl builtins for atomic operations for various integral sizes. Note, this
2417 dnl is intended to be an all-or-nothing switch, so all the atomic operations
2418 dnl that are used should be checked.
2419 dnl
2420 dnl Note:
2421 dnl libgomp and libgfortran do this with a link test, instead of an asm test.
2422 dnl see: CHECK_SYNC_FETCH_AND_ADD
2423 dnl
2424 dnl Defines:
2425 dnl _GLIBCXX_ATOMIC_BUILTINS_1
2426 dnl _GLIBCXX_ATOMIC_BUILTINS_4
2427 dnl
2428 AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS], [
2429 AC_LANG_SAVE
2430 AC_LANG_CPLUSPLUS
2431 old_CXXFLAGS="$CXXFLAGS"
2432
2433 # Compile unoptimized.
2434 CXXFLAGS='-O0 -S'
2435
2436 # Fake what AC_TRY_COMPILE does, without linking as this is
2437 # unnecessary for a builtins test.
2438
2439 cat > conftest.$ac_ext << EOF
2440 [#]line __oline__ "configure"
2441 int main()
2442 {
2443 // NB: _Atomic_word not necessarily int.
2444 typedef int atomic_type;
2445 atomic_type c1;
2446 atomic_type c2;
2447 const atomic_type c3(0);
2448 __sync_fetch_and_add(&c1, c2);
2449 __sync_val_compare_and_swap(&c1, c3, c2);
2450 __sync_lock_test_and_set(&c1, c3);
2451 __sync_lock_release(&c1);
2452 __sync_synchronize();
2453 return 0;
2454 }
2455 EOF
2456
2457 AC_MSG_CHECKING([for atomic builtins for int])
2458 if AC_TRY_EVAL(ac_compile); then
2459 if grep __sync_ conftest.s >/dev/null 2>&1 ; then
2460 enable_atomic_builtinsi=no
2461 else
2462 AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_4, 1,
2463 [Define if builtin atomic operations for int are supported on this host.])
2464 enable_atomic_builtinsi=yes
2465 fi
2466 fi
2467 AC_MSG_RESULT($enable_atomic_builtinsi)
2468 rm -f conftest*
2469
2470 cat > conftest.$ac_ext << EOF
2471 [#]line __oline__ "configure"
2472 int main()
2473 {
2474 typedef bool atomic_type;
2475 atomic_type c1;
2476 atomic_type c2;
2477 const atomic_type c3(0);
2478 __sync_fetch_and_add(&c1, c2);
2479 __sync_val_compare_and_swap(&c1, c3, c2);
2480 __sync_lock_test_and_set(&c1, c3);
2481 __sync_lock_release(&c1);
2482 __sync_synchronize();
2483 return 0;
2484 }
2485 EOF
2486
2487 AC_MSG_CHECKING([for atomic builtins for bool])
2488 if AC_TRY_EVAL(ac_compile); then
2489 if grep __sync_ conftest.s >/dev/null 2>&1 ; then
2490 enable_atomic_builtinsb=no
2491 else
2492 AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_1, 1,
2493 [Define if builtin atomic operations for bool are supported on this host.])
2494 enable_atomic_builtinsb=yes
2495 fi
2496 fi
2497 AC_MSG_RESULT($enable_atomic_builtinsb)
2498 rm -f conftest*
2499
2500 CXXFLAGS="$old_CXXFLAGS"
2501 AC_LANG_RESTORE
2502
2503 # Set atomicity_dir to builtins if either of above tests pass.
2504 if test $enable_atomic_builtinsi = yes || test $enable_atomic_builtinsb = yes ; then
2505 atomicity_dir=cpu/generic/atomicity_builtins
2506 fi
2507
2508 # If still generic, set to mutex.
2509 if test $atomicity_dir = "cpu/generic" ; then
2510 atomicity_dir=cpu/generic/atomicity_mutex
2511 AC_MSG_WARN([No native atomic operations are provided for this platform.])
2512 if test $target_thread_file = single; then
2513 AC_MSG_WARN([They cannot be faked when thread support is disabled.])
2514 AC_MSG_WARN([Thread-safety of certain classes is not guaranteed.])
2515 else
2516 AC_MSG_WARN([They will be faked using a mutex.])
2517 AC_MSG_WARN([Performance of certain classes will degrade as a result.])
2518 fi
2519 fi
2520
2521 ])
2522
2523
2524 dnl
2525 dnl Check for exception handling support. If an explicit enable/disable
2526 dnl sjlj exceptions is given, we don't have to detect. Otherwise the
2527 dnl target may or may not support call frame exceptions.
2528 dnl
2529 dnl --enable-sjlj-exceptions forces the use of builtin setjmp.
2530 dnl --disable-sjlj-exceptions forces the use of call frame unwinding.
2531 dnl Neither one forces an attempt at detection.
2532 dnl
2533 dnl Defines:
2534 dnl _GLIBCXX_SJLJ_EXCEPTIONS if the compiler is configured for it
2535 dnl
2536 AC_DEFUN([GLIBCXX_ENABLE_SJLJ_EXCEPTIONS], [
2537 AC_MSG_CHECKING([for exception model to use])
2538 AC_LANG_SAVE
2539 AC_LANG_CPLUSPLUS
2540 GLIBCXX_ENABLE(sjlj-exceptions,auto,,
2541 [force use of builtin_setjmp for exceptions],
2542 [permit yes|no|auto])
2543
2544 if test $enable_sjlj_exceptions = auto; then
2545 # Botheration. Now we've got to detect the exception model. Link tests
2546 # against libgcc.a are problematic since we've not been given proper -L
2547 # bits for single-tree newlib and libgloss.
2548 #
2549 # Fake what AC_TRY_COMPILE does. XXX Look at redoing this new-style.
2550 cat > conftest.$ac_ext << EOF
2551 [#]line __oline__ "configure"
2552 struct S { ~S(); };
2553 void bar();
2554 void foo()
2555 {
2556 S s;
2557 bar();
2558 }
2559 EOF
2560 old_CXXFLAGS="$CXXFLAGS"
2561 CXXFLAGS=-S
2562 if AC_TRY_EVAL(ac_compile); then
2563 if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
2564 enable_sjlj_exceptions=yes
2565 elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then
2566 enable_sjlj_exceptions=no
2567 elif grep __cxa_end_cleanup conftest.s >/dev/null 2>&1 ; then
2568 enable_sjlj_exceptions=no
2569 fi
2570 fi
2571 CXXFLAGS="$old_CXXFLAGS"
2572 rm -f conftest*
2573 fi
2574
2575 # This is a tad weird, for hysterical raisins. We have to map
2576 # enable/disable to two different models.
2577 case $enable_sjlj_exceptions in
2578 yes)
2579 AC_DEFINE(_GLIBCXX_SJLJ_EXCEPTIONS, 1,
2580 [Define if the compiler is configured for setjmp/longjmp exceptions.])
2581 ac_exception_model_name=sjlj
2582 ;;
2583 no)
2584 ac_exception_model_name="call frame"
2585 ;;
2586 *)
2587 AC_MSG_ERROR([unable to detect exception model])
2588 ;;
2589 esac
2590 AC_LANG_RESTORE
2591 AC_MSG_RESULT($ac_exception_model_name)
2592 ])
2593
2594
2595 dnl
2596 dnl Allow visibility attributes to be used on namespaces, objects, etc.
2597 dnl
2598 dnl --enable-visibility enables attempt to use visibility attributes.
2599 dnl --disable-visibility turns off all use of visibility attributes.
2600 dnl + Usage: GLIBCXX_ENABLE_VISIBILITY[(DEFAULT)]
2601 dnl Where DEFAULT is 'yes'.
2602 dnl
2603 AC_DEFUN([GLIBCXX_ENABLE_VISIBILITY], [
2604 GLIBCXX_ENABLE(visibility,$1,,[enables visibility safe usage])
2605
2606 if test x$enable_visibility = xyes ; then
2607 dnl all hail libgfortran
2608 dnl Check whether the target supports hidden visibility.
2609 AC_CACHE_CHECK([whether the target supports hidden visibility],
2610 glibcxx_cv_have_attribute_visibility, [
2611 save_CFLAGS="$CFLAGS"
2612 CFLAGS="$CFLAGS -Werror"
2613 AC_TRY_COMPILE([void __attribute__((visibility("hidden"))) foo(void) { }],
2614 [], glibcxx_cv_have_attribute_visibility=yes,
2615 glibcxx_cv_have_attribute_visibility=no)
2616 CFLAGS="$save_CFLAGS"])
2617 if test $glibcxx_cv_have_attribute_visibility = no; then
2618 enable_visibility=no
2619 fi
2620 fi
2621
2622 GLIBCXX_CONDITIONAL(ENABLE_VISIBILITY, test $enable_visibility = yes)
2623 AC_MSG_NOTICE([visibility supported: $enable_visibility])
2624 ])
2625
2626
2627 dnl
2628 dnl Add version tags to symbols in shared library (or not), additionally
2629 dnl marking other symbols as private/local (or not).
2630 dnl
2631 dnl --enable-symvers=style adds a version script to the linker call when
2632 dnl creating the shared library. The choice of version script is
2633 dnl controlled by 'style'.
2634 dnl --disable-symvers does not.
2635 dnl + Usage: GLIBCXX_ENABLE_SYMVERS[(DEFAULT)]
2636 dnl Where DEFAULT is either 'yes' or 'no'. Passing `yes' tries to
2637 dnl choose a default style based on linker characteristics. Passing
2638 dnl 'no' disables versioning.
2639 dnl
2640 AC_DEFUN([GLIBCXX_ENABLE_SYMVERS], [
2641
2642 GLIBCXX_ENABLE(symvers,$1,[=STYLE],
2643 [enables symbol versioning of the shared library],
2644 [permit yes|no|gnu|gnu-versioned-namespace|darwin|darwin-export])
2645
2646 # If we never went through the GLIBCXX_CHECK_LINKER_FEATURES macro, then we
2647 # don't know enough about $LD to do tricks...
2648 AC_REQUIRE([GLIBCXX_CHECK_LINKER_FEATURES])
2649
2650 # Turn a 'yes' into a suitable default.
2651 if test x$enable_symvers = xyes ; then
2652 if test $enable_shared = no || test "x$LD" = x || test x$gcc_no_link = xyes; then
2653 enable_symvers=no
2654 else
2655 if test $with_gnu_ld = yes ; then
2656 case ${target_os} in
2657 cygwin* | pe | mingw32*)
2658 enable_symvers=no ;;
2659 *)
2660 enable_symvers=gnu ;;
2661 esac
2662 else
2663 case ${target_os} in
2664 darwin*)
2665 enable_symvers=darwin ;;
2666 *)
2667 enable_symvers=no ;;
2668 esac
2669 fi
2670 fi
2671 fi
2672
2673 # Check to see if 'darwin' or 'darwin-export' can win.
2674 if test x$enable_symvers = xdarwin-export ; then
2675 enable_symvers=darwin
2676 fi
2677
2678 # Check to see if 'gnu' can win.
2679 if test $enable_symvers = gnu || test $enable_symvers = gnu-versioned-namespace; then
2680 # Check to see if libgcc_s exists, indicating that shared libgcc is possible.
2681 AC_MSG_CHECKING([for shared libgcc])
2682 ac_save_CFLAGS="$CFLAGS"
2683 CFLAGS=' -lgcc_s'
2684 AC_TRY_LINK(, [return 0;], glibcxx_shared_libgcc=yes, glibcxx_shared_libgcc=no)
2685 CFLAGS="$ac_save_CFLAGS"
2686 if test $glibcxx_shared_libgcc = no; then
2687 cat > conftest.c <<EOF
2688 int main (void) { return 0; }
2689 EOF
2690 changequote(,)dnl
2691 glibcxx_libgcc_s_suffix=`${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
2692 -shared -shared-libgcc -o conftest.so \
2693 conftest.c -v 2>&1 >/dev/null \
2694 | sed -n 's/^.* -lgcc_s\([^ ]*\) .*$/\1/p'`
2695 changequote([,])dnl
2696 rm -f conftest.c conftest.so
2697 if test x${glibcxx_libgcc_s_suffix+set} = xset; then
2698 CFLAGS=" -lgcc_s$glibcxx_libgcc_s_suffix"
2699 AC_TRY_LINK(, [return 0;], glibcxx_shared_libgcc=yes)
2700 CFLAGS="$ac_save_CFLAGS"
2701 fi
2702 fi
2703 AC_MSG_RESULT($glibcxx_shared_libgcc)
2704
2705 # For GNU ld, we need at least this version. The format is described in
2706 # GLIBCXX_CHECK_LINKER_FEATURES above.
2707 glibcxx_min_gnu_ld_version=21400
2708
2709 # If no shared libgcc, can't win.
2710 if test $glibcxx_shared_libgcc != yes; then
2711 AC_MSG_WARN([=== You have requested GNU symbol versioning, but])
2712 AC_MSG_WARN([=== you are not building a shared libgcc_s.])
2713 AC_MSG_WARN([=== Symbol versioning will be disabled.])
2714 enable_symvers=no
2715 elif test $with_gnu_ld != yes ; then
2716 # just fail for now
2717 AC_MSG_WARN([=== You have requested GNU symbol versioning, but])
2718 AC_MSG_WARN([=== you are not using the GNU linker.])
2719 AC_MSG_WARN([=== Symbol versioning will be disabled.])
2720 enable_symvers=no
2721 elif test $glibcxx_ld_is_gold = yes ; then
2722 : All versions of gold support symbol versioning.
2723 elif test $glibcxx_gnu_ld_version -lt $glibcxx_min_gnu_ld_version ; then
2724 # The right tools, the right setup, but too old. Fallbacks?
2725 AC_MSG_WARN(=== Linker version $glibcxx_gnu_ld_version is too old for)
2726 AC_MSG_WARN(=== full symbol versioning support in this release of GCC.)
2727 AC_MSG_WARN(=== You would need to upgrade your binutils to version)
2728 AC_MSG_WARN(=== $glibcxx_min_gnu_ld_version or later and rebuild GCC.)
2729 AC_MSG_WARN([=== Symbol versioning will be disabled.])
2730 enable_symvers=no
2731 fi
2732 fi
2733
2734 # Everything parsed; figure out what file to use.
2735 case $enable_symvers in
2736 no)
2737 SYMVER_FILE=config/abi/pre/none.ver
2738 ;;
2739 gnu)
2740 SYMVER_FILE=config/abi/pre/gnu.ver
2741 AC_DEFINE(_GLIBCXX_SYMVER_GNU, 1,
2742 [Define to use GNU versioning in the shared library.])
2743 ;;
2744 gnu-versioned-namespace)
2745 SYMVER_FILE=config/abi/pre/gnu-versioned-namespace.ver
2746 AC_DEFINE(_GLIBCXX_SYMVER_GNU_NAMESPACE, 1,
2747 [Define to use GNU namespace versioning in the shared library.])
2748 ;;
2749 darwin)
2750 SYMVER_FILE=config/abi/pre/gnu.ver
2751 AC_DEFINE(_GLIBCXX_SYMVER_DARWIN, 1,
2752 [Define to use darwin versioning in the shared library.])
2753 ;;
2754 esac
2755
2756 if test x$enable_symvers != xno ; then
2757 AC_DEFINE(_GLIBCXX_SYMVER, 1,
2758 [Define to use symbol versioning in the shared library.])
2759 fi
2760
2761 AC_SUBST(SYMVER_FILE)
2762 AC_SUBST(port_specific_symbol_files)
2763 GLIBCXX_CONDITIONAL(ENABLE_SYMVERS, test $enable_symvers != no)
2764 GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_GNU, test $enable_symvers = gnu)
2765 GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_GNU_NAMESPACE, test $enable_symvers = gnu-versioned-namespace)
2766 GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_DARWIN, test $enable_symvers = darwin)
2767 AC_MSG_NOTICE(versioning on shared library symbols is $enable_symvers)
2768
2769 # Now, set up compatibility support, if any.
2770 # In addition, need this to deal with std::size_t mangling in
2771 # src/compatibility.cc. In a perfect world, could use
2772 # typeid(std::size_t).name()[0] to do direct substitution.
2773 AC_MSG_CHECKING([for size_t as unsigned int])
2774 ac_save_CFLAGS="$CFLAGS"
2775 CFLAGS="-Werror"
2776 AC_TRY_COMPILE(, [__SIZE_TYPE__* stp; unsigned int* uip; stp = uip;],
2777 [glibcxx_size_t_is_i=yes], [glibcxx_size_t_is_i=no])
2778 CFLAGS=$ac_save_CFLAGS
2779 if test "$glibcxx_size_t_is_i" = yes; then
2780 AC_DEFINE(_GLIBCXX_SIZE_T_IS_UINT, 1, [Define if size_t is unsigned int.])
2781 fi
2782 AC_MSG_RESULT([$glibcxx_size_t_is_i])
2783
2784 AC_MSG_CHECKING([for ptrdiff_t as int])
2785 ac_save_CFLAGS="$CFLAGS"
2786 CFLAGS="-Werror"
2787 AC_TRY_COMPILE(, [__PTRDIFF_TYPE__* ptp; int* ip; ptp = ip;],
2788 [glibcxx_ptrdiff_t_is_i=yes], [glibcxx_ptrdiff_t_is_i=no])
2789 CFLAGS=$ac_save_CFLAGS
2790 if test "$glibcxx_ptrdiff_t_is_i" = yes; then
2791 AC_DEFINE(_GLIBCXX_PTRDIFF_T_IS_INT, 1, [Define if ptrdiff_t is int.])
2792 fi
2793 AC_MSG_RESULT([$glibcxx_ptrdiff_t_is_i])
2794 ])
2795
2796
2797 dnl
2798 dnl Setup to use the gcc gthr.h thread-specific memory and mutex model.
2799 dnl We must stage the required headers so that they will be installed
2800 dnl with the library (unlike libgcc, the STL implementation is provided
2801 dnl solely within headers). Since we must not inject random user-space
2802 dnl macro names into user-provided C++ code, we first stage into <file>-in
2803 dnl and process to <file> with an output command. The reason for a two-
2804 dnl stage process here is to correctly handle $srcdir!=$objdir without
2805 dnl having to write complex code (the sed commands to clean the macro
2806 dnl namespace are complex and fragile enough as it is). We must also
2807 dnl add a relative path so that -I- is supported properly.
2808 dnl
2809 dnl Substs:
2810 dnl glibcxx_thread_h
2811 dnl
2812 dnl Defines:
2813 dnl HAVE_GTHR_DEFAULT
2814 dnl
2815 AC_DEFUN([GLIBCXX_ENABLE_THREADS], [
2816 AC_MSG_CHECKING([for thread model used by GCC])
2817 target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
2818 AC_MSG_RESULT([$target_thread_file])
2819
2820 if test $target_thread_file != single; then
2821 AC_DEFINE(HAVE_GTHR_DEFAULT, 1,
2822 [Define if gthr-default.h exists
2823 (meaning that threading support is enabled).])
2824 fi
2825
2826 glibcxx_thread_h=gthr-$target_thread_file.h
2827
2828 dnl Check for __GTHREADS define.
2829 gthread_file=${toplevel_srcdir}/gcc/${glibcxx_thread_h}
2830 if grep __GTHREADS $gthread_file >/dev/null 2>&1 ; then
2831 enable_thread=yes
2832 else
2833 enable_thread=no
2834 fi
2835
2836 AC_SUBST(glibcxx_thread_h)
2837 ])
2838
2839
2840 dnl
2841 dnl Check if gthread implementation defines the types and functions
2842 dnl required by the c++0x thread library. Conforming gthread
2843 dnl implementations can define __GTHREADS_CXX0X to enable use with c++0x.
2844 dnl
2845 AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [
2846 AC_LANG_SAVE
2847 AC_LANG_CPLUSPLUS
2848
2849 ac_save_CXXFLAGS="$CXXFLAGS"
2850 CXXFLAGS="$CXXFLAGS -fno-exceptions -I${toplevel_srcdir}/gcc"
2851
2852 target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
2853 case $target_thread_file in
2854 posix)
2855 CXXFLAGS="$CXXFLAGS -DSUPPORTS_WEAK -DGTHREAD_USE_WEAK -D_PTHREADS"
2856 esac
2857
2858 AC_MSG_CHECKING([for gthreads library])
2859
2860 AC_TRY_COMPILE([#include "gthr.h"],
2861 [
2862 #ifndef __GTHREADS_CXX0X
2863 #error
2864 #endif
2865
2866 // In case of POSIX threads check _POSIX_TIMEOUTS too.
2867 #if (defined(_PTHREADS) \
2868 && (!defined(_POSIX_TIMEOUTS) || _POSIX_TIMEOUTS <= 0))
2869 #error
2870 #endif
2871 ], [ac_has_gthreads=yes], [ac_has_gthreads=no])
2872
2873 AC_MSG_RESULT([$ac_has_gthreads])
2874
2875 if test x"$ac_has_gthreads" = x"yes"; then
2876 AC_DEFINE(_GLIBCXX_HAS_GTHREADS, 1,
2877 [Define if gthreads library is available.])
2878 fi
2879
2880 CXXFLAGS="$ac_save_CXXFLAGS"
2881 AC_LANG_RESTORE
2882 ])
2883
2884
2885 # Check whether LC_MESSAGES is available in <locale.h>.
2886 # Ulrich Drepper <drepper@cygnus.com>, 1995.
2887 #
2888 # This file file be copied and used freely without restrictions. It can
2889 # be used in projects which are not available under the GNU Public License
2890 # but which still want to provide support for the GNU gettext functionality.
2891 # Please note that the actual code is *not* freely available.
2892 AC_DEFUN([AC_LC_MESSAGES], [
2893 AC_CHECK_HEADER(locale.h, [
2894 AC_CACHE_CHECK([for LC_MESSAGES], ac_cv_val_LC_MESSAGES,
2895 [AC_TRY_COMPILE([#include <locale.h>], [return LC_MESSAGES],
2896 ac_cv_val_LC_MESSAGES=yes, ac_cv_val_LC_MESSAGES=no)])
2897 if test $ac_cv_val_LC_MESSAGES = yes; then
2898 AC_DEFINE(HAVE_LC_MESSAGES, 1,
2899 [Define if LC_MESSAGES is available in <locale.h>.])
2900 fi
2901 ])
2902 ])
2903
2904 # Macros from the top-level gcc directory.
2905 m4_include([../config/tls.m4])
2906