acinclude.m4 revision 171828
1 2dnl 3dnl GLIBCXX_CONDITIONAL (NAME, SHELL-TEST) 4dnl 5dnl Exactly like AM_CONDITIONAL, but delays evaluation of the test until the 6dnl end of configure. This lets tested variables be reassigned, and the 7dnl conditional will depend on the final state of the variable. For a simple 8dnl example of why this is needed, see GLIBCXX_ENABLE_HOSTED. 9dnl 10m4_define([_m4_divert(glibcxx_diversion)], 8000)dnl 11AC_DEFUN([GLIBCXX_CONDITIONAL], [dnl 12 m4_divert_text([glibcxx_diversion],dnl 13 AM_CONDITIONAL([$1],[$2]) 14 )dnl 15])dnl 16AC_DEFUN([GLIBCXX_EVALUATE_CONDITIONALS], [m4_undivert([glibcxx_diversion])])dnl 17 18 19dnl 20dnl Check to see what architecture and operating system we are compiling 21dnl for. Also, if architecture- or OS-specific flags are required for 22dnl compilation, pick them up here. 23dnl 24AC_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 30dnl 31dnl Initialize the rest of the library configury. At this point we have 32dnl variables like $host. 33dnl 34dnl Sets: 35dnl SUBDIRS 36dnl Substs: 37dnl glibcxx_builddir (absolute path) 38dnl glibcxx_srcdir (absolute path) 39dnl toplevel_srcdir (absolute path) 40dnl with_cross_host 41dnl with_newlib 42dnl with_target_subdir 43dnl plus 44dnl - the variables in GLIBCXX_CHECK_HOST / configure.host 45dnl - default settings for all AM_CONFITIONAL test variables 46dnl - lots of tools, like CC and CXX 47dnl 48AC_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 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 143dnl 144dnl Tests for newer compiler features, or features that are present in newer 145dnl compiler versions but not older compiler versions still in use, should 146dnl be placed here. 147dnl 148dnl Defines: 149dnl WERROR='-Werror' if requested and possible; g++'s that lack the 150dnl new inlining code or the new system_header pragma will die on -Werror. 151dnl Leave it out by default and use maint-mode to use it. 152dnl SECTION_FLAGS='-ffunction-sections -fdata-sections' if 153dnl compiler supports it and the user has not requested debug mode. 154dnl 155AC_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='-Werror -ffunction-sections -fdata-sections' 174 AC_TRY_COMPILE(, [int foo;], [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 192dnl 193dnl If GNU ld is in use, check to see if tricky linker opts can be used. If 194dnl the native linker is in use, all variables will be defined to something 195dnl safe (like an empty string). 196dnl 197dnl Defines: 198dnl SECTION_LDFLAGS='-Wl,--gc-sections' if possible 199dnl OPT_LDFLAGS='-Wl,-O1' and '-z,relro' if possible 200dnl LD (as a side effect of testing) 201dnl Sets: 202dnl with_gnu_ld 203dnl glibcxx_gnu_ld_version (possibly) 204dnl 205dnl The last will be a single integer, e.g., version 1.23.45.0.67.89 will 206dnl set glibcxx_gnu_ld_version to 12345. Zeros cause problems. 207dnl 208AC_DEFUN([GLIBCXX_CHECK_LINKER_FEATURES], [ 209 # If we're not using GNU ld, then there's no point in even trying these 210 # tests. Check for that first. We should have already tested for gld 211 # by now (in libtool), but require it now just to be safe... 212 test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS='' 213 test -z "$OPT_LDFLAGS" && OPT_LDFLAGS='' 214 AC_REQUIRE([AC_PROG_LD]) 215 AC_REQUIRE([AC_PROG_AWK]) 216 217 # The name set by libtool depends on the version of libtool. Shame on us 218 # for depending on an impl detail, but c'est la vie. Older versions used 219 # ac_cv_prog_gnu_ld, but now it's lt_cv_prog_gnu_ld, and is copied back on 220 # top of with_gnu_ld (which is also set by --with-gnu-ld, so that actually 221 # makes sense). We'll test with_gnu_ld everywhere else, so if that isn't 222 # set (hence we're using an older libtool), then set it. 223 if test x${with_gnu_ld+set} != xset; then 224 if test x${ac_cv_prog_gnu_ld+set} != xset; then 225 # We got through "ac_require(ac_prog_ld)" and still not set? Huh? 226 with_gnu_ld=no 227 else 228 with_gnu_ld=$ac_cv_prog_gnu_ld 229 fi 230 fi 231 232 # Start by getting the version number. I think the libtool test already 233 # does some of this, but throws away the result. 234 if test x"$with_gnu_ld" = x"yes"; then 235 AC_MSG_CHECKING([for ld version]) 236 changequote(,) 237 ldver=`$LD --version 2>/dev/null | head -1 | \ 238 sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'` 239 changequote([,]) 240 glibcxx_gnu_ld_version=`echo $ldver | \ 241 $AWK -F. '{ if (NF<3) [$]3=0; print ([$]1*100+[$]2)*100+[$]3 }'` 242 AC_MSG_RESULT($glibcxx_gnu_ld_version) 243 fi 244 245 # Set --gc-sections. 246 glibcxx_gcsections_min_ld=21602 247 if test x"$with_gnu_ld" = x"yes" && 248 test $glibcxx_gnu_ld_version -gt $glibcxx_gcsections_min_ld ; then 249 250 # Sufficiently young GNU ld it is! Joy and bunny rabbits! 251 # NB: This flag only works reliably after 2.16.1. Configure tests 252 # for this are difficult, so hard wire a value that should work. 253 254 ac_test_CFLAGS="${CFLAGS+set}" 255 ac_save_CFLAGS="$CFLAGS" 256 CFLAGS='-Wl,--gc-sections' 257 258 # Check for -Wl,--gc-sections 259 AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections]) 260 AC_TRY_LINK([ int one(void) { return 1; } 261 int two(void) { return 2; } 262 ], [ two(); ] , [ac_gcsections=yes], [ac_gcsections=no]) 263 if test "$ac_gcsections" = "yes"; then 264 rm -f conftest.c 265 touch conftest.c 266 if $CC -c conftest.c; then 267 if $LD --gc-sections -o conftest conftest.o 2>&1 | \ 268 grep "Warning: gc-sections option ignored" > /dev/null; then 269 ac_gcsections=no 270 fi 271 fi 272 rm -f conftest.c conftest.o conftest 273 fi 274 if test "$ac_gcsections" = "yes"; then 275 SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS" 276 fi 277 AC_MSG_RESULT($ac_gcsections) 278 279 if test "$ac_test_CFLAGS" = set; then 280 CFLAGS="$ac_save_CFLAGS" 281 else 282 # this is the suspicious part 283 CFLAGS='' 284 fi 285 fi 286 287 # Set -z,relro. 288 # Note this is only for shared objects. 289 ac_ld_relro=no 290 if test x"$with_gnu_ld" = x"yes"; then 291 AC_MSG_CHECKING([for ld that supports -Wl,-z,relro]) 292 cxx_z_relo=`$LD -v --help 2>/dev/null | grep "z relro"` 293 if test -n "$cxx_z_relo"; then 294 OPT_LDFLAGS="-Wl,-z,relro" 295 ac_ld_relro=yes 296 fi 297 AC_MSG_RESULT($ac_ld_relro) 298 fi 299 300 # Set linker optimization flags. 301 if test x"$with_gnu_ld" = x"yes"; then 302 OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS" 303 fi 304 305 AC_SUBST(SECTION_LDFLAGS) 306 AC_SUBST(OPT_LDFLAGS) 307]) 308 309 310dnl 311dnl Check to see if this target can enable the iconv specializations. 312dnl If --disable-c-mbchar was given, no wchar_t specialization is enabled. 313dnl (This must have been previously checked, along with the rest of C99 314dnl support.) By default, iconv support is disabled. 315dnl 316dnl Defines: 317dnl _GLIBCXX_USE_ICONV if all the bits are found. 318dnl Substs: 319dnl LIBICONV to a -l string containing the iconv library, if needed. 320dnl 321AC_DEFUN([GLIBCXX_CHECK_ICONV_SUPPORT], [ 322 323 enable_iconv=no 324 # Only continue checking if the ISO C99 headers exist and support is on. 325 if test x"$enable_wchar_t" = xyes; then 326 327 # Use iconv for wchar_t to char conversions. As such, check for 328 # X/Open Portability Guide, version 2 features (XPG2). 329 AC_CHECK_HEADER(iconv.h, ac_has_iconv_h=yes, ac_has_iconv_h=no) 330 AC_CHECK_HEADER(langinfo.h, ac_has_langinfo_h=yes, ac_has_langinfo_h=no) 331 332 # Check for existence of libiconv.a providing XPG2 wchar_t support. 333 AC_CHECK_LIB(iconv, iconv, LIBICONV="-liconv") 334 ac_save_LIBS="$LIBS" 335 LIBS="$LIBS $LIBICONV" 336 AC_SUBST(LIBICONV) 337 338 AC_CHECK_FUNCS([iconv_open iconv_close iconv nl_langinfo], 339 [ac_XPG2funcs=yes], [ac_XPG2funcs=no]) 340 341 LIBS="$ac_save_LIBS" 342 343 if test x"$ac_has_iconv_h" = xyes && 344 test x"$ac_has_langinfo_h" = xyes && 345 test x"$ac_XPG2funcs" = xyes; 346 then 347 AC_DEFINE([_GLIBCXX_USE_ICONV],1, 348 [Define if iconv and related functions exist and are usable.]) 349 enable_iconv=yes 350 fi 351 fi 352 AC_MSG_CHECKING([for enabled iconv specializations]) 353 AC_MSG_RESULT($enable_iconv) 354]) 355 356 357dnl 358dnl Check for headers for, and arguments to, the setrlimit() function. 359dnl Used only in testsuite_hooks.h. Called from GLIBCXX_CONFIGURE_TESTSUITE. 360dnl 361dnl Defines: 362dnl _GLIBCXX_RES_LIMITS if we can set artificial resource limits 363dnl various HAVE_LIMIT_* for individual limit names 364dnl 365AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT_ancilliary], [ 366 AC_MSG_CHECKING([for RLIMIT_$1]) 367 AC_TRY_COMPILE( 368 [#include <unistd.h> 369 #include <sys/time.h> 370 #include <sys/resource.h> 371 ], 372 [ int f = RLIMIT_$1 ; ], 373 [glibcxx_mresult=1], [glibcxx_mresult=0]) 374 AC_DEFINE_UNQUOTED(HAVE_LIMIT_$1, $glibcxx_mresult, 375 [Only used in build directory testsuite_hooks.h.]) 376 if test $glibcxx_mresult = 1 ; then res=yes ; else res=no ; fi 377 AC_MSG_RESULT($res) 378]) 379 380AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT], [ 381 setrlimit_have_headers=yes 382 AC_CHECK_HEADERS(unistd.h sys/time.h sys/resource.h, 383 [], 384 [setrlimit_have_headers=no]) 385 # If don't have the headers, then we can't run the tests now, and we 386 # won't be seeing any of these during testsuite compilation. 387 if test $setrlimit_have_headers = yes; then 388 # Can't do these in a loop, else the resulting syntax is wrong. 389 GLIBCXX_CHECK_SETRLIMIT_ancilliary(DATA) 390 GLIBCXX_CHECK_SETRLIMIT_ancilliary(RSS) 391 GLIBCXX_CHECK_SETRLIMIT_ancilliary(VMEM) 392 GLIBCXX_CHECK_SETRLIMIT_ancilliary(AS) 393 GLIBCXX_CHECK_SETRLIMIT_ancilliary(FSIZE) 394 395 # Check for rlimit, setrlimit. 396 AC_CACHE_VAL(ac_setrlimit, [ 397 AC_TRY_COMPILE( 398 [#include <unistd.h> 399 #include <sys/time.h> 400 #include <sys/resource.h> 401 ], 402 [struct rlimit r; 403 setrlimit(0, &r);], 404 [ac_setrlimit=yes], [ac_setrlimit=no]) 405 ]) 406 fi 407 408 AC_MSG_CHECKING([for testsuite resource limits support]) 409 if test $setrlimit_have_headers = yes && test $ac_setrlimit = yes; then 410 ac_res_limits=yes 411 AC_DEFINE(_GLIBCXX_RES_LIMITS, 1, 412 [Define if using setrlimit to set resource limits during 413 "make check"]) 414 else 415 ac_res_limits=no 416 fi 417 AC_MSG_RESULT($ac_res_limits) 418]) 419 420 421dnl 422dnl Check whether S_ISREG (Posix) or S_IFREG is available in <sys/stat.h>. 423dnl Define HAVE_S_ISREG / HAVE_S_IFREG appropriately. 424dnl 425AC_DEFUN([GLIBCXX_CHECK_S_ISREG_OR_S_IFREG], [ 426 AC_MSG_CHECKING([for S_ISREG or S_IFREG]) 427 AC_CACHE_VAL(glibcxx_cv_S_ISREG, [ 428 AC_TRY_LINK( 429 [#include <sys/stat.h>], 430 [struct stat buffer; 431 fstat(0, &buffer); 432 S_ISREG(buffer.st_mode);], 433 [glibcxx_cv_S_ISREG=yes], 434 [glibcxx_cv_S_ISREG=no]) 435 ]) 436 AC_CACHE_VAL(glibcxx_cv_S_IFREG, [ 437 AC_TRY_LINK( 438 [#include <sys/stat.h>], 439 [struct stat buffer; 440 fstat(0, &buffer); 441 S_IFREG & buffer.st_mode;], 442 [glibcxx_cv_S_IFREG=yes], 443 [glibcxx_cv_S_IFREG=no]) 444 ]) 445 res=no 446 if test $glibcxx_cv_S_ISREG = yes; then 447 AC_DEFINE(HAVE_S_ISREG, 1, 448 [Define if S_IFREG is available in <sys/stat.h>.]) 449 res=S_ISREG 450 elif test $glibcxx_cv_S_IFREG = yes; then 451 AC_DEFINE(HAVE_S_IFREG, 1, 452 [Define if S_IFREG is available in <sys/stat.h>.]) 453 res=S_IFREG 454 fi 455 AC_MSG_RESULT($res) 456]) 457 458 459dnl 460dnl Check whether poll is available in <poll.h>, and define HAVE_POLL. 461dnl 462AC_DEFUN([GLIBCXX_CHECK_POLL], [ 463 AC_MSG_CHECKING([for poll]) 464 AC_CACHE_VAL(glibcxx_cv_POLL, [ 465 AC_TRY_LINK( 466 [#include <poll.h>], 467 [struct pollfd pfd[1]; 468 pfd[0].events = POLLIN; 469 poll(pfd, 1, 0);], 470 [glibcxx_cv_POLL=yes], 471 [glibcxx_cv_POLL=no]) 472 ]) 473 if test $glibcxx_cv_POLL = yes; then 474 AC_DEFINE(HAVE_POLL, 1, [Define if poll is available in <poll.h>.]) 475 fi 476 AC_MSG_RESULT($glibcxx_cv_POLL) 477]) 478 479 480dnl 481dnl Check whether writev is available in <sys/uio.h>, and define HAVE_WRITEV. 482dnl 483AC_DEFUN([GLIBCXX_CHECK_WRITEV], [ 484 AC_MSG_CHECKING([for writev]) 485 AC_CACHE_VAL(glibcxx_cv_WRITEV, [ 486 AC_TRY_LINK( 487 [#include <sys/uio.h>], 488 [struct iovec iov[2]; 489 writev(0, iov, 0);], 490 [glibcxx_cv_WRITEV=yes], 491 [glibcxx_cv_WRITEV=no]) 492 ]) 493 if test $glibcxx_cv_WRITEV = yes; then 494 AC_DEFINE(HAVE_WRITEV, 1, [Define if writev is available in <sys/uio.h>.]) 495 fi 496 AC_MSG_RESULT($glibcxx_cv_WRITEV) 497]) 498 499 500dnl 501dnl Check whether int64_t is available in <stdint.h>, and define HAVE_INT64_T. 502dnl 503AC_DEFUN([GLIBCXX_CHECK_INT64_T], [ 504 AC_MSG_CHECKING([for int64_t]) 505 AC_CACHE_VAL(glibcxx_cv_INT64_T, [ 506 AC_TRY_COMPILE( 507 [#include <stdint.h>], 508 [int64_t var;], 509 [glibcxx_cv_INT64_T=yes], 510 [glibcxx_cv_INT64_T=no]) 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 fi 515 AC_MSG_RESULT($glibcxx_cv_INT64_T) 516]) 517 518 519dnl 520dnl Check whether LFS support is available. 521dnl 522AC_DEFUN([GLIBCXX_CHECK_LFS], [ 523 AC_LANG_SAVE 524 AC_LANG_CPLUSPLUS 525 ac_save_CXXFLAGS="$CXXFLAGS" 526 CXXFLAGS="$CXXFLAGS -fno-exceptions" 527 AC_MSG_CHECKING([for LFS support]) 528 AC_CACHE_VAL(glibcxx_cv_LFS, [ 529 AC_TRY_LINK( 530 [#include <unistd.h> 531 #include <stdio.h> 532 #include <sys/stat.h> 533 ], 534 [FILE* fp; 535 fopen64("t", "w"); 536 fseeko64(fp, 0, SEEK_CUR); 537 ftello64(fp); 538 lseek64(1, 0, SEEK_CUR); 539 struct stat64 buf; 540 fstat64(1, &buf);], 541 [glibcxx_cv_LFS=yes], 542 [glibcxx_cv_LFS=no]) 543 ]) 544 if test $glibcxx_cv_LFS = yes; then 545 AC_DEFINE(_GLIBCXX_USE_LFS, 1, [Define if LFS support is available.]) 546 fi 547 AC_MSG_RESULT($glibcxx_cv_LFS) 548 CXXFLAGS="$ac_save_CXXFLAGS" 549 AC_LANG_RESTORE 550]) 551 552 553dnl 554dnl Check for whether a fully dynamic basic_string implementation should 555dnl be turned on, that does not put empty objects in per-process static 556dnl memory (mostly useful together with shared memory allocators, see PR 557dnl libstdc++/16612 for details). 558dnl 559dnl --enable-fully-dynamic-string defines _GLIBCXX_FULLY_DYNAMIC_STRING 560dnl --disable-fully-dynamic-string leaves _GLIBCXX_FULLY_DYNAMIC_STRING undefined 561dnl + Usage: GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING[(DEFAULT)] 562dnl Where DEFAULT is either `yes' or `no'. 563dnl 564AC_DEFUN([GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING], [ 565 GLIBCXX_ENABLE(fully-dynamic-string,$1,,[do not put empty strings in per-process static memory]) 566 if test $enable_fully_dynamic_string = yes; then 567 AC_DEFINE(_GLIBCXX_FULLY_DYNAMIC_STRING, 1, 568 [Define if a fully dynamic basic_string is wanted.]) 569 fi 570]) 571 572 573dnl 574dnl Does any necessary configuration of the testsuite directory. Generates 575dnl the testsuite_hooks.h header. 576dnl 577dnl GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE must be done before this. 578dnl 579dnl Sets: 580dnl enable_abi_check 581dnl GLIBCXX_TEST_WCHAR_T 582dnl GLIBCXX_TEST_THREAD 583dnl Substs: 584dnl baseline_dir 585dnl 586AC_DEFUN([GLIBCXX_CONFIGURE_TESTSUITE], [ 587 if $GLIBCXX_IS_NATIVE ; then 588 # Do checks for resource limit functions. 589 GLIBCXX_CHECK_SETRLIMIT 590 591 # Look for setenv, so that extended locale tests can be performed. 592 GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3(setenv) 593 fi 594 595 if $GLIBCXX_IS_NATIVE && test $is_hosted = yes && 596 test $enable_symvers != no; then 597 case "$host" in 598 *-*-cygwin*) 599 enable_abi_check=no ;; 600 *) 601 enable_abi_check=yes ;; 602 esac 603 else 604 # Only build this as native, since automake does not understand 605 # CXX_FOR_BUILD. 606 enable_abi_check=no 607 fi 608 609 # Export file names for ABI checking. 610 baseline_dir="$glibcxx_srcdir/config/abi/post/${abi_baseline_pair}\$(MULTISUBDIR)" 611 AC_SUBST(baseline_dir) 612]) 613 614 615dnl 616dnl Set up *_INCLUDES variables for all sundry Makefile.am's. 617dnl 618dnl Substs: 619dnl GLIBCXX_INCLUDES 620dnl TOPLEVEL_INCLUDES 621dnl 622AC_DEFUN([GLIBCXX_EXPORT_INCLUDES], [ 623 # Used for every C++ compile we perform. 624 GLIBCXX_INCLUDES="\ 625-I$glibcxx_builddir/include/$host_alias \ 626-I$glibcxx_builddir/include \ 627-I$glibcxx_srcdir/libsupc++" 628 629 # For Canadian crosses, pick this up too. 630 if test $CANADIAN = yes; then 631 GLIBCXX_INCLUDES="$GLIBCXX_INCLUDES -I\${includedir}" 632 fi 633 634 # Stuff in the actual top level. Currently only used by libsupc++ to 635 # get unwind* headers from the gcc dir. 636 #TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/gcc -I$(toplevel_srcdir)/include' 637 TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/gcc' 638 639 # Now, export this to all the little Makefiles.... 640 AC_SUBST(GLIBCXX_INCLUDES) 641 AC_SUBST(TOPLEVEL_INCLUDES) 642]) 643 644 645dnl 646dnl Set up *_FLAGS and *FLAGS variables for all sundry Makefile.am's. 647dnl (SECTION_FLAGS is done under CHECK_COMPILER_FEATURES.) 648dnl 649dnl Substs: 650dnl OPTIMIZE_CXXFLAGS 651dnl WARN_FLAGS 652dnl 653AC_DEFUN([GLIBCXX_EXPORT_FLAGS], [ 654 # Optimization flags that are probably a good idea for thrill-seekers. Just 655 # uncomment the lines below and make, everything else is ready to go... 656 # OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc 657 OPTIMIZE_CXXFLAGS= 658 AC_SUBST(OPTIMIZE_CXXFLAGS) 659 660 WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual' 661 AC_SUBST(WARN_FLAGS) 662]) 663 664 665dnl 666dnl All installation directory information is determined here. 667dnl 668dnl Substs: 669dnl gxx_install_dir 670dnl glibcxx_prefixdir 671dnl glibcxx_toolexecdir 672dnl glibcxx_toolexeclibdir 673dnl 674dnl Assumes cross_compiling bits already done, and with_cross_host in 675dnl particular. 676dnl 677dnl This logic must match gcc/configure.ac's setting of gcc_gxx_include_dir. 678dnl config/gxx-include-dir.m4 must be kept consistant with this as well. 679AC_DEFUN([GLIBCXX_EXPORT_INSTALL_INFO], [ 680 glibcxx_toolexecdir=no 681 glibcxx_toolexeclibdir=no 682 glibcxx_prefixdir=$prefix 683 684 AC_MSG_CHECKING([for gxx-include-dir]) 685 AC_ARG_WITH([gxx-include-dir], 686 AC_HELP_STRING([--with-gxx-include-dir=DIR], 687 [installation directory for include files]), 688 [case "$withval" in 689 yes) AC_MSG_ERROR([Missing directory for --with-gxx-include-dir]) ;; 690 no) gxx_include_dir=no ;; 691 *) gxx_include_dir=$withval ;; 692 esac], 693 [gxx_include_dir=no]) 694 AC_MSG_RESULT($gxx_include_dir) 695 696 AC_MSG_CHECKING([for --enable-version-specific-runtime-libs]) 697 AC_ARG_ENABLE([version-specific-runtime-libs], 698 AC_HELP_STRING([--enable-version-specific-runtime-libs], 699 [Specify that runtime libraries should be installed in a compiler-specific directory]), 700 [case "$enableval" in 701 yes) version_specific_libs=yes ;; 702 no) version_specific_libs=no ;; 703 *) AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);; 704 esac], 705 [version_specific_libs=no]) 706 AC_MSG_RESULT($version_specific_libs) 707 708 # Default case for install directory for include files. 709 if test $version_specific_libs = no && test $gxx_include_dir = no; then 710 gxx_include_dir='include/c++/${gcc_version}' 711 if test -n "$with_cross_host" && 712 test x"$with_cross_host" != x"no"; then 713 gxx_include_dir='${prefix}/${target_alias}/'"$gxx_include_dir" 714 else 715 gxx_include_dir='${prefix}/'"$gxx_include_dir" 716 fi 717 fi 718 719 # Version-specific runtime libs processing. 720 if test $version_specific_libs = yes; then 721 # Need the gcc compiler version to know where to install libraries 722 # and header files if --enable-version-specific-runtime-libs option 723 # is selected. FIXME: these variables are misnamed, there are 724 # no executables installed in _toolexecdir or _toolexeclibdir. 725 if test x"$gxx_include_dir" = x"no"; then 726 gxx_include_dir='${libdir}/gcc/${host_alias}/${gcc_version}/include/c++' 727 fi 728 glibcxx_toolexecdir='${libdir}/gcc/${host_alias}' 729 glibcxx_toolexeclibdir='${toolexecdir}/${gcc_version}$(MULTISUBDIR)' 730 fi 731 732 # Calculate glibcxx_toolexecdir, glibcxx_toolexeclibdir 733 # Install a library built with a cross compiler in tooldir, not libdir. 734 if test x"$glibcxx_toolexecdir" = x"no"; then 735 if test -n "$with_cross_host" && 736 test x"$with_cross_host" != x"no"; then 737 glibcxx_toolexecdir='${exec_prefix}/${host_alias}' 738 glibcxx_toolexeclibdir='${toolexecdir}/lib' 739 else 740 glibcxx_toolexecdir='${libdir}/gcc/${host_alias}' 741 glibcxx_toolexeclibdir='${libdir}' 742 fi 743 multi_os_directory=`$CXX -print-multi-os-directory` 744 case $multi_os_directory in 745 .) ;; # Avoid trailing /. 746 *) glibcxx_toolexeclibdir=$glibcxx_toolexeclibdir/$multi_os_directory ;; 747 esac 748 fi 749 750 AC_MSG_CHECKING([for install location]) 751 AC_MSG_RESULT($gxx_include_dir) 752 753 AC_SUBST(glibcxx_prefixdir) 754 AC_SUBST(gxx_include_dir) 755 AC_SUBST(glibcxx_toolexecdir) 756 AC_SUBST(glibcxx_toolexeclibdir) 757]) 758 759 760dnl 761dnl GLIBCXX_ENABLE 762dnl (FEATURE, DEFAULT, HELP-ARG, HELP-STRING) 763dnl (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, permit a|b|c) 764dnl (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, SHELL-CODE-HANDLER) 765dnl 766dnl See docs/html/17_intro/configury.html#enable for documentation. 767dnl 768m4_define([GLIBCXX_ENABLE],[dnl 769m4_define([_g_switch],[--enable-$1])dnl 770m4_define([_g_help],[AC_HELP_STRING(_g_switch$3,[$4 @<:@default=$2@:>@])])dnl 771 AC_ARG_ENABLE($1,_g_help, 772 m4_bmatch([$5], 773 [^permit ], 774 [[ 775 case "$enableval" in 776 m4_bpatsubst([$5],[permit ])) ;; 777 *) AC_MSG_ERROR(Unknown argument to enable/disable $1) ;; 778 dnl Idea for future: generate a URL pointing to 779 dnl "onlinedocs/configopts.html#whatever" 780 esac 781 ]], 782 [^$], 783 [[ 784 case "$enableval" in 785 yes|no) ;; 786 *) AC_MSG_ERROR(Argument to enable/disable $1 must be yes or no) ;; 787 esac 788 ]], 789 [[$5]]), 790 [enable_]m4_bpatsubst([$1],-,_)[=][$2]) 791m4_undefine([_g_switch])dnl 792m4_undefine([_g_help])dnl 793]) 794 795 796dnl 797dnl Check for ISO/IEC 9899:1999 "C99" support. 798dnl 799dnl --enable-c99 defines _GLIBCXX_USE_C99 800dnl --disable-c99 leaves _GLIBCXX_USE_C99 undefined 801dnl + Usage: GLIBCXX_ENABLE_C99[(DEFAULT)] 802dnl Where DEFAULT is either `yes' or `no'. 803dnl + If 'C99' stuff is not available, ignores DEFAULT and sets `no'. 804dnl 805AC_DEFUN([GLIBCXX_ENABLE_C99], [ 806 GLIBCXX_ENABLE(c99,$1,,[turns on ISO/IEC 9899:1999 support]) 807 808 if test x"$enable_c99" = x"yes"; then 809 810 AC_LANG_SAVE 811 AC_LANG_CPLUSPLUS 812 813 # Check for the existence of <math.h> functions used if C99 is enabled. 814 AC_MSG_CHECKING([for ISO C99 support in <math.h>]) 815 AC_CACHE_VAL(ac_c99_math, [ 816 AC_TRY_COMPILE([#include <math.h>], 817 [fpclassify(0.0); 818 isfinite(0.0); 819 isinf(0.0); 820 isnan(0.0); 821 isnormal(0.0); 822 signbit(0.0); 823 isgreater(0.0,0.0); 824 isgreaterequal(0.0,0.0); 825 isless(0.0,0.0); 826 islessequal(0.0,0.0); 827 islessgreater(0.0,0.0); 828 islessgreater(0.0,0.0); 829 isunordered(0.0,0.0); 830 ],[ac_c99_math=yes], [ac_c99_math=no]) 831 ]) 832 AC_MSG_RESULT($ac_c99_math) 833 if test x"$ac_c99_math" = x"yes"; then 834 AC_DEFINE(_GLIBCXX_USE_C99_MATH, 1, 835 [Define if C99 functions or macros in <math.h> should be imported 836 in <cmath> in namespace std.]) 837 fi 838 839 # Check for the existence of <complex.h> complex math functions. 840 # This is necessary even though libstdc++ uses the builtin versions 841 # of these functions, because if the builtin cannot be used, a reference 842 # to the library function is emitted. 843 AC_CHECK_HEADERS(complex.h, ac_has_complex_h=yes, ac_has_complex_h=no) 844 ac_c99_complex=no; 845 if test x"$ac_has_complex_h" = x"yes"; then 846 AC_MSG_CHECKING([for ISO C99 support in <complex.h>]) 847 AC_TRY_COMPILE([#include <complex.h>], 848 [typedef __complex__ float float_type; float_type tmpf; 849 cabsf(tmpf); 850 cargf(tmpf); 851 ccosf(tmpf); 852 ccoshf(tmpf); 853 cexpf(tmpf); 854 clogf(tmpf); 855 csinf(tmpf); 856 csinhf(tmpf); 857 csqrtf(tmpf); 858 ctanf(tmpf); 859 ctanhf(tmpf); 860 cpowf(tmpf, tmpf); 861 typedef __complex__ double double_type; double_type tmpd; 862 cabs(tmpd); 863 carg(tmpd); 864 ccos(tmpd); 865 ccosh(tmpd); 866 cexp(tmpd); 867 clog(tmpd); 868 csin(tmpd); 869 csinh(tmpd); 870 csqrt(tmpd); 871 ctan(tmpd); 872 ctanh(tmpd); 873 cpow(tmpd, tmpd); 874 typedef __complex__ long double ld_type; ld_type tmpld; 875 cabsl(tmpld); 876 cargl(tmpld); 877 ccosl(tmpld); 878 ccoshl(tmpld); 879 cexpl(tmpld); 880 clogl(tmpld); 881 csinl(tmpld); 882 csinhl(tmpld); 883 csqrtl(tmpld); 884 ctanl(tmpld); 885 ctanhl(tmpld); 886 cpowl(tmpld, tmpld); 887 ],[ac_c99_complex=yes], [ac_c99_complex=no]) 888 fi 889 AC_MSG_RESULT($ac_c99_complex) 890 if test x"$ac_c99_complex" = x"yes"; then 891 AC_DEFINE(_GLIBCXX_USE_C99_COMPLEX, 1, 892 [Define if C99 functions in <complex.h> should be used in 893 <complex>. Using compiler builtins for these functions requires 894 corresponding C99 library functions to be present.]) 895 fi 896 897 # Check for the existence in <stdio.h> of vscanf, et. al. 898 AC_MSG_CHECKING([for ISO C99 support in <stdio.h>]) 899 AC_CACHE_VAL(ac_c99_stdio, [ 900 AC_TRY_COMPILE([#include <stdio.h> 901 #include <stdarg.h> 902 void foo(char* fmt, ...) 903 { 904 va_list args; va_start(args, fmt); 905 vfscanf(stderr, "%i", args); 906 vscanf("%i", args); 907 vsnprintf(fmt, 0, "%i", args); 908 vsscanf(fmt, "%i", args); 909 }], 910 [snprintf("12", 0, "%i");], 911 [ac_c99_stdio=yes], [ac_c99_stdio=no]) 912 ]) 913 AC_MSG_RESULT($ac_c99_stdio) 914 915 # Check for the existence in <stdlib.h> of lldiv_t, et. al. 916 AC_MSG_CHECKING([for ISO C99 support in <stdlib.h>]) 917 AC_CACHE_VAL(ac_c99_stdlib, [ 918 AC_TRY_COMPILE([#include <stdlib.h>], 919 [char* tmp; 920 strtof("gnu", &tmp); 921 strtold("gnu", &tmp); 922 strtoll("gnu", &tmp, 10); 923 strtoull("gnu", &tmp, 10); 924 llabs(10); 925 lldiv(10,1); 926 atoll("10"); 927 _Exit(0); 928 lldiv_t mydivt;],[ac_c99_stdlib=yes], [ac_c99_stdlib=no]) 929 ]) 930 AC_MSG_RESULT($ac_c99_stdlib) 931 932 # Check for the existence in <wchar.h> of wcstold, etc. 933 ac_c99_wchar=no; 934 if test x"$ac_has_wchar_h" = xyes && 935 test x"$ac_has_wctype_h" = xyes; then 936 AC_MSG_CHECKING([for ISO C99 support in <wchar.h>]) 937 AC_TRY_COMPILE([#include <wchar.h> 938 namespace test 939 { 940 using ::wcstold; 941 using ::wcstoll; 942 using ::wcstoull; 943 } 944 ],[],[ac_c99_wchar=yes], [ac_c99_wchar=no]) 945 946 # Checks for wide character functions that may not be present. 947 # Injection of these is wrapped with guard macros. 948 # NB: only put functions here, instead of immediately above, if 949 # absolutely necessary. 950 AC_TRY_COMPILE([#include <wchar.h> 951 namespace test { using ::vfwscanf; } ], [], 952 [AC_DEFINE(HAVE_VFWSCANF,1, 953 [Defined if vfwscanf exists.])],[]) 954 955 AC_TRY_COMPILE([#include <wchar.h> 956 namespace test { using ::vswscanf; } ], [], 957 [AC_DEFINE(HAVE_VSWSCANF,1, 958 [Defined if vswscanf exists.])],[]) 959 960 AC_TRY_COMPILE([#include <wchar.h> 961 namespace test { using ::vwscanf; } ], [], 962 [AC_DEFINE(HAVE_VWSCANF,1,[Defined if vwscanf exists.])],[]) 963 964 AC_TRY_COMPILE([#include <wchar.h> 965 namespace test { using ::wcstof; } ], [], 966 [AC_DEFINE(HAVE_WCSTOF,1,[Defined if wcstof exists.])],[]) 967 968 AC_TRY_COMPILE([#include <wctype.h>], 969 [ wint_t t; int i = iswblank(t);], 970 [AC_DEFINE(HAVE_ISWBLANK,1, 971 [Defined if iswblank exists.])],[]) 972 973 AC_MSG_RESULT($ac_c99_wchar) 974 fi 975 976 # Option parsed, now set things appropriately. 977 if test x"$ac_c99_math" = x"no" || 978 test x"$ac_c99_complex" = x"no" || 979 test x"$ac_c99_stdio" = x"no" || 980 test x"$ac_c99_stdlib" = x"no" || 981 test x"$ac_c99_wchar" = x"no"; then 982 enable_c99=no; 983 else 984 AC_DEFINE(_GLIBCXX_USE_C99, 1, 985 [Define if C99 functions or macros from <wchar.h>, <math.h>, 986 <complex.h>, <stdio.h>, and <stdlib.h> can be used or exposed.]) 987 fi 988 989 AC_LANG_RESTORE 990 fi 991 992 AC_MSG_CHECKING([for fully enabled ISO C99 support]) 993 AC_MSG_RESULT($enable_c99) 994]) 995 996 997dnl 998dnl Check for ISO/IEC 9899:1999 "C99" support to ISO/IEC DTR 19768 "TR1" 999dnl facilities in Chapter 8, "C compatibility". 1000dnl 1001AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [ 1002 1003 AC_LANG_SAVE 1004 AC_LANG_CPLUSPLUS 1005 1006 # Check for the existence of <complex.h> complex math functions used 1007 # by tr1/complex. 1008 AC_CHECK_HEADERS(complex.h, ac_has_complex_h=yes, ac_has_complex_h=no) 1009 ac_c99_complex_tr1=no; 1010 if test x"$ac_has_complex_h" = x"yes"; then 1011 AC_MSG_CHECKING([for ISO C99 support to TR1 in <complex.h>]) 1012 AC_TRY_COMPILE([#include <complex.h>], 1013 [typedef __complex__ float float_type; float_type tmpf; 1014 cacosf(tmpf); 1015 casinf(tmpf); 1016 catanf(tmpf); 1017 cacoshf(tmpf); 1018 casinhf(tmpf); 1019 catanhf(tmpf); 1020 typedef __complex__ double double_type; double_type tmpd; 1021 cacos(tmpd); 1022 casin(tmpd); 1023 catan(tmpd); 1024 cacosh(tmpd); 1025 casinh(tmpd); 1026 catanh(tmpd); 1027 typedef __complex__ long double ld_type; ld_type tmpld; 1028 cacosl(tmpld); 1029 casinl(tmpld); 1030 catanl(tmpld); 1031 cacoshl(tmpld); 1032 casinhl(tmpld); 1033 catanhl(tmpld); 1034 ],[ac_c99_complex_tr1=yes], [ac_c99_complex_tr1=no]) 1035 fi 1036 AC_MSG_RESULT($ac_c99_complex_tr1) 1037 if test x"$ac_c99_complex_tr1" = x"yes"; then 1038 AC_DEFINE(_GLIBCXX_USE_C99_COMPLEX_TR1, 1, 1039 [Define if C99 functions in <complex.h> should be used in 1040 <tr1/complex>. Using compiler builtins for these functions 1041 requires corresponding C99 library functions to be present.]) 1042 fi 1043 1044 # Check for the existence of <ctype.h> functions. 1045 AC_MSG_CHECKING([for ISO C99 support to TR1 in <ctype.h>]) 1046 AC_CACHE_VAL(ac_c99_ctype_tr1, [ 1047 AC_TRY_COMPILE([#include <ctype.h>], 1048 [int ch; 1049 int ret; 1050 ret = isblank(ch); 1051 ],[ac_c99_ctype_tr1=yes], [ac_c99_ctype_tr1=no]) 1052 ]) 1053 AC_MSG_RESULT($ac_c99_ctype_tr1) 1054 if test x"$ac_c99_ctype_tr1" = x"yes"; then 1055 AC_DEFINE(_GLIBCXX_USE_C99_CTYPE_TR1, 1, 1056 [Define if C99 functions in <ctype.h> should be imported in 1057 <tr1/cctype> in namespace std::tr1.]) 1058 fi 1059 1060 # Check for the existence of <fenv.h> functions. 1061 AC_CHECK_HEADERS(fenv.h, ac_has_fenv_h=yes, ac_has_fenv_h=no) 1062 ac_c99_fenv_tr1=no; 1063 if test x"$ac_has_fenv_h" = x"yes"; then 1064 AC_MSG_CHECKING([for ISO C99 support to TR1 in <fenv.h>]) 1065 AC_TRY_COMPILE([#include <fenv.h>], 1066 [int except, mode; 1067 fexcept_t* pflag; 1068 fenv_t* penv; 1069 int ret; 1070 ret = feclearexcept(except); 1071 ret = fegetexceptflag(pflag, except); 1072 ret = feraiseexcept(except); 1073 ret = fesetexceptflag(pflag, except); 1074 ret = fetestexcept(except); 1075 ret = fegetround(); 1076 ret = fesetround(mode); 1077 ret = fegetenv(penv); 1078 ret = feholdexcept(penv); 1079 ret = fesetenv(penv); 1080 ret = feupdateenv(penv); 1081 ],[ac_c99_fenv_tr1=yes], [ac_c99_fenv_tr1=no]) 1082 fi 1083 AC_MSG_RESULT($ac_c99_fenv_tr1) 1084 if test x"$ac_c99_fenv_tr1" = x"yes"; then 1085 AC_DEFINE(_GLIBCXX_USE_C99_FENV_TR1, 1, 1086 [Define if C99 functions in <fenv.h> should be imported in 1087 <tr1/cfenv> in namespace std::tr1.]) 1088 fi 1089 1090 # Check for the existence of <stdint.h> types. 1091 AC_MSG_CHECKING([for ISO C99 support to TR1 in <stdint.h>]) 1092 AC_CACHE_VAL(ac_c99_stdint_tr1, [ 1093 AC_TRY_COMPILE([#include <stdint.h>], 1094 [typedef int8_t my_int8_t; 1095 typedef int16_t my_int16_t; 1096 typedef int32_t my_int32_t; 1097 typedef int64_t my_int64_t; 1098 typedef int_fast8_t my_int_fast8_t; 1099 typedef int_fast16_t my_int_fast16_t; 1100 typedef int_fast32_t my_int_fast32_t; 1101 typedef int_fast64_t my_int_fast64_t; 1102 typedef int_least8_t my_int_least8_t; 1103 typedef int_least16_t my_int_least16_t; 1104 typedef int_least32_t my_int_least32_t; 1105 typedef int_least64_t my_int_least64_t; 1106 typedef intmax_t my_intmax_t; 1107 typedef intptr_t my_intptr_t; 1108 typedef uint8_t my_uint8_t; 1109 typedef uint16_t my_uint16_t; 1110 typedef uint32_t my_uint32_t; 1111 typedef uint64_t my_uint64_t; 1112 typedef uint_fast8_t my_uint_fast8_t; 1113 typedef uint_fast16_t my_uint_fast16_t; 1114 typedef uint_fast32_t my_uint_fast32_t; 1115 typedef uint_fast64_t my_uint_fast64_t; 1116 typedef uint_least8_t my_uint_least8_t; 1117 typedef uint_least16_t my_uint_least16_t; 1118 typedef uint_least32_t my_uint_least32_t; 1119 typedef uint_least64_t my_uint_least64_t; 1120 typedef uintmax_t my_uintmax_t; 1121 typedef uintptr_t my_uintptr_t; 1122 ],[ac_c99_stdint_tr1=yes], [ac_c99_stdint_tr1=no]) 1123 ]) 1124 AC_MSG_RESULT($ac_c99_stdint_tr1) 1125 if test x"$ac_c99_stdint_tr1" = x"yes"; then 1126 AC_DEFINE(_GLIBCXX_USE_C99_STDINT_TR1, 1, 1127 [Define if C99 types in <stdint.h> should be imported in 1128 <tr1/cstdint> in namespace std::tr1.]) 1129 fi 1130 1131 # Check for the existence of <math.h> functions. 1132 AC_MSG_CHECKING([for ISO C99 support to TR1 in <math.h>]) 1133 AC_CACHE_VAL(ac_c99_math_tr1, [ 1134 AC_TRY_COMPILE([#include <math.h>], 1135 [typedef double_t my_double_t; 1136 typedef float_t my_float_t; 1137 acosh(0.0); 1138 acoshf(0.0f); 1139 acoshl(0.0l); 1140 asinh(0.0); 1141 asinhf(0.0f); 1142 asinhl(0.0l); 1143 atanh(0.0); 1144 atanhf(0.0f); 1145 atanhl(0.0l); 1146 cbrt(0.0); 1147 cbrtf(0.0f); 1148 cbrtl(0.0l); 1149 copysign(0.0, 0.0); 1150 copysignf(0.0f, 0.0f); 1151 copysignl(0.0l, 0.0l); 1152 erf(0.0); 1153 erff(0.0f); 1154 erfl(0.0l); 1155 erfc(0.0); 1156 erfcf(0.0f); 1157 erfcl(0.0l); 1158 exp2(0.0); 1159 exp2f(0.0f); 1160 exp2l(0.0l); 1161 expm1(0.0); 1162 expm1f(0.0f); 1163 expm1l(0.0l); 1164 fdim(0.0, 0.0); 1165 fdimf(0.0f, 0.0f); 1166 fdiml(0.0l, 0.0l); 1167 fma(0.0, 0.0, 0.0); 1168 fmaf(0.0f, 0.0f, 0.0f); 1169 fmal(0.0l, 0.0l, 0.0l); 1170 fmax(0.0, 0.0); 1171 fmaxf(0.0f, 0.0f); 1172 fmaxl(0.0l, 0.0l); 1173 fmin(0.0, 0.0); 1174 fminf(0.0f, 0.0f); 1175 fminl(0.0l, 0.0l); 1176 hypot(0.0, 0.0); 1177 hypotf(0.0f, 0.0f); 1178 hypotl(0.0l, 0.0l); 1179 ilogb(0.0); 1180 ilogbf(0.0f); 1181 ilogbl(0.0l); 1182 lgamma(0.0); 1183 lgammaf(0.0f); 1184 lgammal(0.0l); 1185 llrint(0.0); 1186 llrintf(0.0f); 1187 llrintl(0.0l); 1188 llround(0.0); 1189 llroundf(0.0f); 1190 llroundl(0.0l); 1191 log1p(0.0); 1192 log1pf(0.0f); 1193 log1pl(0.0l); 1194 log2(0.0); 1195 log2f(0.0f); 1196 log2l(0.0l); 1197 logb(0.0); 1198 logbf(0.0f); 1199 logbl(0.0l); 1200 lrint(0.0); 1201 lrintf(0.0f); 1202 lrintl(0.0l); 1203 lround(0.0); 1204 lroundf(0.0f); 1205 lroundl(0.0l); 1206 nan(0); 1207 nanf(0); 1208 nanl(0); 1209 nearbyint(0.0); 1210 nearbyintf(0.0f); 1211 nearbyintl(0.0l); 1212 nextafter(0.0, 0.0); 1213 nextafterf(0.0f, 0.0f); 1214 nextafterl(0.0l, 0.0l); 1215 nexttoward(0.0, 0.0); 1216 nexttowardf(0.0f, 0.0f); 1217 nexttowardl(0.0l, 0.0l); 1218 remainder(0.0, 0.0); 1219 remainderf(0.0f, 0.0f); 1220 remainderl(0.0l, 0.0l); 1221 remquo(0.0, 0.0, 0); 1222 remquo(0.0f, 0.0f, 0); 1223 remquo(0.0l, 0.0l, 0); 1224 rint(0.0); 1225 rintf(0.0f); 1226 rintl(0.0l); 1227 round(0.0); 1228 roundf(0.0f); 1229 roundl(0.0l); 1230 scalbln(0.0, 0l); 1231 scalblnf(0.0f, 0l); 1232 scalblnl(0.0l, 0l); 1233 scalbn(0.0, 0); 1234 scalbnf(0.0f, 0); 1235 scalbnl(0.0l, 0); 1236 tgamma(0.0); 1237 tgammaf(0.0f); 1238 tgammal(0.0l); 1239 trunc(0.0); 1240 truncf(0.0f); 1241 truncl(0.0l); 1242 ],[ac_c99_math_tr1=yes], [ac_c99_math_tr1=no]) 1243 ]) 1244 AC_MSG_RESULT($ac_c99_math_tr1) 1245 if test x"$ac_c99_math_tr1" = x"yes"; then 1246 AC_DEFINE(_GLIBCXX_USE_C99_MATH_TR1, 1, 1247 [Define if C99 functions or macros in <math.h> should be imported 1248 in <tr1/cmath> in namespace std::tr1.]) 1249 fi 1250 1251 # Check for the existence of <inttypes.h> functions (NB: doesn't make 1252 # sense if the previous check fails, per C99, 7.8/1). 1253 ac_c99_inttypes_tr1=no; 1254 if test x"$ac_c99_stdint_tr1" = x"yes"; then 1255 AC_MSG_CHECKING([for ISO C99 support to TR1 in <inttypes.h>]) 1256 AC_TRY_COMPILE([#include <inttypes.h>], 1257 [intmax_t i, numer, denom, base; 1258 const char* s; 1259 char** endptr; 1260 intmax_t ret = imaxabs(i); 1261 imaxdiv_t dret = imaxdiv(numer, denom); 1262 ret = strtoimax(s, endptr, base); 1263 uintmax_t uret = strtoumax(s, endptr, base); 1264 ],[ac_c99_inttypes_tr1=yes], [ac_c99_inttypes_tr1=no]) 1265 fi 1266 AC_MSG_RESULT($ac_c99_inttypes_tr1) 1267 if test x"$ac_c99_inttypes_tr1" = x"yes"; then 1268 AC_DEFINE(_GLIBCXX_USE_C99_INTTYPES_TR1, 1, 1269 [Define if C99 functions in <inttypes.h> should be imported in 1270 <tr1/cinttypes> in namespace std::tr1.]) 1271 fi 1272 1273 # Check for the existence of the <stdbool.h> header. 1274 AC_CHECK_HEADERS(stdbool.h) 1275 1276 AC_LANG_RESTORE 1277]) 1278 1279dnl 1280dnl Check whether "dev/random" and "dev/urandom" are available for the 1281dnl random_device of "TR1" (Chapter 5.1, "Random number generation"). 1282dnl 1283AC_DEFUN([GLIBCXX_CHECK_RANDOM_TR1], [ 1284 1285 AC_MSG_CHECKING([for "dev/random" and "dev/urandom" for TR1 random_device]) 1286 AC_CACHE_VAL(ac_random_tr1, [ 1287 AC_TRY_RUN([#include <stdio.h> 1288 int main() 1289 { 1290 return !(fopen("/dev/random", "r") 1291 && fopen("/dev/urandom", "r")); 1292 } 1293 ], 1294 [ac_random_tr1=yes], [ac_random_tr1=no], 1295 [ac_random_tr1=no]) 1296 ]) 1297 AC_MSG_RESULT($ac_random_tr1) 1298 if test x"$ac_random_tr1" = x"yes"; then 1299 AC_DEFINE(_GLIBCXX_USE_RANDOM_TR1, 1, 1300 [Define if dev/random and dev/urandom are available for 1301 the random_device of TR1 (Chapter 5.1).]) 1302 fi 1303 1304]) 1305 1306dnl 1307dnl Check for what type of C headers to use. 1308dnl 1309dnl --enable-cheaders= [does stuff]. 1310dnl --disable-cheaders [does not do anything, really]. 1311dnl + Usage: GLIBCXX_ENABLE_CHEADERS[(DEFAULT)] 1312dnl Where DEFAULT is either `c' or `c_std'. 1313dnl 1314AC_DEFUN([GLIBCXX_ENABLE_CHEADERS], [ 1315 GLIBCXX_ENABLE(cheaders,$1,[=KIND], 1316 [construct "C" headers for g++], [permit c|c_std]) 1317 AC_MSG_NOTICE("C" header strategy set to $enable_cheaders) 1318 1319 C_INCLUDE_DIR='${glibcxx_srcdir}/include/'$enable_cheaders 1320 1321 AC_SUBST(C_INCLUDE_DIR) 1322 GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C, test $enable_cheaders = c) 1323 GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C_STD, test $enable_cheaders = c_std) 1324 GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_COMPATIBILITY, test $c_compatibility = yes) 1325]) 1326 1327 1328dnl 1329dnl Check for which locale library to use. The choice is mapped to 1330dnl a subdirectory of config/locale. 1331dnl 1332dnl Default is generic. 1333dnl 1334AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [ 1335 GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@], 1336 [use MODEL for target locale package], 1337 [permit generic|gnu|ieee_1003.1-2001|yes|no|auto]) 1338 1339 # Deal with gettext issues. Default to not using it (=no) until we detect 1340 # support for it later. Let the user turn it off via --e/d, but let that 1341 # default to on for easier handling. 1342 USE_NLS=no 1343 AC_ARG_ENABLE(nls, 1344 AC_HELP_STRING([--enable-nls],[use Native Language Support (default)]), 1345 [], 1346 [enable_nls=yes]) 1347 1348 # Either a known packaage, or "auto" 1349 if test $enable_clocale = no || test $enable_clocale = yes; then 1350 enable_clocale=auto 1351 fi 1352 enable_clocale_flag=$enable_clocale 1353 1354 # Probe for locale model to use if none specified. 1355 # Default to "generic". 1356 if test $enable_clocale_flag = auto; then 1357 case ${target_os} in 1358 linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu) 1359 enable_clocale_flag=gnu 1360 ;; 1361 darwin* | freebsd*) 1362 enable_clocale_flag=darwin 1363 ;; 1364 *) 1365 enable_clocale_flag=generic 1366 ;; 1367 esac 1368 fi 1369 1370 # Sanity check model, and test for special functionality. 1371 if test $enable_clocale_flag = gnu; then 1372 AC_EGREP_CPP([_GLIBCXX_ok], [ 1373 #include <features.h> 1374 #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) 1375 _GLIBCXX_ok 1376 #endif 1377 ], enable_clocale_flag=gnu, enable_clocale_flag=generic) 1378 1379 if test $enable_clocale = auto; then 1380 # Test for bugs early in glibc-2.2.x series 1381 AC_TRY_RUN([ 1382 #define _GNU_SOURCE 1 1383 #include <locale.h> 1384 #include <string.h> 1385 #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) 1386 extern __typeof(newlocale) __newlocale; 1387 extern __typeof(duplocale) __duplocale; 1388 extern __typeof(strcoll_l) __strcoll_l; 1389 #endif 1390 int main() 1391 { 1392 const char __one[] = "�uglein Augmen"; 1393 const char __two[] = "�uglein"; 1394 int i; 1395 int j; 1396 __locale_t loc; 1397 __locale_t loc_dup; 1398 loc = __newlocale(1 << LC_ALL, "de_DE", 0); 1399 loc_dup = __duplocale(loc); 1400 i = __strcoll_l(__one, __two, loc); 1401 j = __strcoll_l(__one, __two, loc_dup); 1402 return 0; 1403 } 1404 ], 1405 [enable_clocale_flag=gnu],[enable_clocale_flag=generic], 1406 [enable_clocale_flag=generic]) 1407 fi 1408 1409 # Set it to scream when it hurts. 1410 ac_save_CFLAGS="$CFLAGS" 1411 CFLAGS="-Wimplicit-function-declaration -Werror" 1412 1413 # Use strxfrm_l if available. 1414 AC_TRY_COMPILE([#define _GNU_SOURCE 1 1415 #include <string.h> 1416 #include <locale.h>], 1417 [char s[128]; __locale_t loc; strxfrm_l(s, "C", 5, loc);], 1418 AC_DEFINE(HAVE_STRXFRM_L, 1, 1419 [Define if strxfrm_l is available in <string.h>.]),) 1420 1421 # Use strerror_l if available. 1422 AC_TRY_COMPILE([#define _GNU_SOURCE 1 1423 #include <string.h> 1424 #include <locale.h>], 1425 [__locale_t loc; strerror_l(5, loc);], 1426 AC_DEFINE(HAVE_STRERROR_L, 1, 1427 [Define if strerror_l is available in <string.h>.]),) 1428 1429 CFLAGS="$ac_save_CFLAGS" 1430 fi 1431 1432 # Perhaps use strerror_r if available, and strerror_l isn't. 1433 ac_save_CFLAGS="$CFLAGS" 1434 CFLAGS="-Wimplicit-function-declaration -Werror" 1435 AC_TRY_COMPILE([#define _GNU_SOURCE 1 1436 #include <string.h> 1437 #include <locale.h>], 1438 [char s[128]; strerror_r(5, s, 128);], 1439 AC_DEFINE(HAVE_STRERROR_R, 1, 1440 [Define if strerror_r is available in <string.h>.]),) 1441 CFLAGS="$ac_save_CFLAGS" 1442 1443 # Set configure bits for specified locale package 1444 AC_MSG_CHECKING([for C locale to use]) 1445 case ${enable_clocale_flag} in 1446 generic) 1447 AC_MSG_RESULT(generic) 1448 1449 CLOCALE_H=config/locale/generic/c_locale.h 1450 CLOCALE_CC=config/locale/generic/c_locale.cc 1451 CCODECVT_CC=config/locale/generic/codecvt_members.cc 1452 CCOLLATE_CC=config/locale/generic/collate_members.cc 1453 CCTYPE_CC=config/locale/generic/ctype_members.cc 1454 CMESSAGES_H=config/locale/generic/messages_members.h 1455 CMESSAGES_CC=config/locale/generic/messages_members.cc 1456 CMONEY_CC=config/locale/generic/monetary_members.cc 1457 CNUMERIC_CC=config/locale/generic/numeric_members.cc 1458 CTIME_H=config/locale/generic/time_members.h 1459 CTIME_CC=config/locale/generic/time_members.cc 1460 CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h 1461 ;; 1462 darwin) 1463 AC_MSG_RESULT(darwin or freebsd) 1464 1465 CLOCALE_H=config/locale/generic/c_locale.h 1466 CLOCALE_CC=config/locale/generic/c_locale.cc 1467 CCODECVT_CC=config/locale/generic/codecvt_members.cc 1468 CCOLLATE_CC=config/locale/generic/collate_members.cc 1469 CCTYPE_CC=config/locale/darwin/ctype_members.cc 1470 CMESSAGES_H=config/locale/generic/messages_members.h 1471 CMESSAGES_CC=config/locale/generic/messages_members.cc 1472 CMONEY_CC=config/locale/generic/monetary_members.cc 1473 CNUMERIC_CC=config/locale/generic/numeric_members.cc 1474 CTIME_H=config/locale/generic/time_members.h 1475 CTIME_CC=config/locale/generic/time_members.cc 1476 CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h 1477 ;; 1478 1479 gnu) 1480 AC_MSG_RESULT(gnu) 1481 1482 # Declare intention to use gettext, and add support for specific 1483 # languages. 1484 # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT 1485 ALL_LINGUAS="de fr" 1486 1487 # Don't call AM-GNU-GETTEXT here. Instead, assume glibc. 1488 AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no) 1489 if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then 1490 USE_NLS=yes 1491 fi 1492 # Export the build objects. 1493 for ling in $ALL_LINGUAS; do \ 1494 glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \ 1495 glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \ 1496 done 1497 AC_SUBST(glibcxx_MOFILES) 1498 AC_SUBST(glibcxx_POFILES) 1499 1500 CLOCALE_H=config/locale/gnu/c_locale.h 1501 CLOCALE_CC=config/locale/gnu/c_locale.cc 1502 CCODECVT_CC=config/locale/gnu/codecvt_members.cc 1503 CCOLLATE_CC=config/locale/gnu/collate_members.cc 1504 CCTYPE_CC=config/locale/gnu/ctype_members.cc 1505 CMESSAGES_H=config/locale/gnu/messages_members.h 1506 CMESSAGES_CC=config/locale/gnu/messages_members.cc 1507 CMONEY_CC=config/locale/gnu/monetary_members.cc 1508 CNUMERIC_CC=config/locale/gnu/numeric_members.cc 1509 CTIME_H=config/locale/gnu/time_members.h 1510 CTIME_CC=config/locale/gnu/time_members.cc 1511 CLOCALE_INTERNAL_H=config/locale/gnu/c++locale_internal.h 1512 ;; 1513 ieee_1003.1-2001) 1514 AC_MSG_RESULT(IEEE 1003.1) 1515 1516 CLOCALE_H=config/locale/ieee_1003.1-2001/c_locale.h 1517 CLOCALE_CC=config/locale/ieee_1003.1-2001/c_locale.cc 1518 CCODECVT_CC=config/locale/generic/codecvt_members.cc 1519 CCOLLATE_CC=config/locale/generic/collate_members.cc 1520 CCTYPE_CC=config/locale/generic/ctype_members.cc 1521 CMESSAGES_H=config/locale/ieee_1003.1-2001/messages_members.h 1522 CMESSAGES_CC=config/locale/ieee_1003.1-2001/messages_members.cc 1523 CMONEY_CC=config/locale/generic/monetary_members.cc 1524 CNUMERIC_CC=config/locale/generic/numeric_members.cc 1525 CTIME_H=config/locale/generic/time_members.h 1526 CTIME_CC=config/locale/generic/time_members.cc 1527 CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h 1528 ;; 1529 esac 1530 1531 # This is where the testsuite looks for locale catalogs, using the 1532 # -DLOCALEDIR define during testsuite compilation. 1533 glibcxx_localedir=${glibcxx_builddir}/po/share/locale 1534 AC_SUBST(glibcxx_localedir) 1535 1536 # A standalone libintl (e.g., GNU libintl) may be in use. 1537 if test $USE_NLS = yes; then 1538 AC_CHECK_HEADERS([libintl.h], [], USE_NLS=no) 1539 AC_SEARCH_LIBS(gettext, intl, [], USE_NLS=no) 1540 fi 1541 if test $USE_NLS = yes; then 1542 AC_DEFINE(_GLIBCXX_USE_NLS, 1, 1543 [Define if NLS translations are to be used.]) 1544 fi 1545 1546 AC_SUBST(USE_NLS) 1547 AC_SUBST(CLOCALE_H) 1548 AC_SUBST(CMESSAGES_H) 1549 AC_SUBST(CCODECVT_CC) 1550 AC_SUBST(CCOLLATE_CC) 1551 AC_SUBST(CCTYPE_CC) 1552 AC_SUBST(CMESSAGES_CC) 1553 AC_SUBST(CMONEY_CC) 1554 AC_SUBST(CNUMERIC_CC) 1555 AC_SUBST(CTIME_H) 1556 AC_SUBST(CTIME_CC) 1557 AC_SUBST(CLOCALE_CC) 1558 AC_SUBST(CLOCALE_INTERNAL_H) 1559]) 1560 1561 1562dnl 1563dnl Check for which std::allocator base class to use. The choice is 1564dnl mapped from a subdirectory of include/ext. 1565dnl 1566dnl Default is new. 1567dnl 1568AC_DEFUN([GLIBCXX_ENABLE_ALLOCATOR], [ 1569 AC_MSG_CHECKING([for std::allocator base class]) 1570 GLIBCXX_ENABLE(libstdcxx-allocator,auto,[=KIND], 1571 [use KIND for target std::allocator base], 1572 [permit new|malloc|mt|bitmap|pool|yes|no|auto]) 1573 1574 # If they didn't use this option switch, or if they specified --enable 1575 # with no specific model, we'll have to look for one. If they 1576 # specified --disable (???), do likewise. 1577 if test $enable_libstdcxx_allocator = no || 1578 test $enable_libstdcxx_allocator = yes; 1579 then 1580 enable_libstdcxx_allocator=auto 1581 fi 1582 1583 # Either a known package, or "auto". Auto implies the default choice 1584 # for a particular platform. 1585 enable_libstdcxx_allocator_flag=$enable_libstdcxx_allocator 1586 1587 # Probe for host-specific support if no specific model is specified. 1588 # Default to "new". 1589 if test $enable_libstdcxx_allocator_flag = auto; then 1590 case ${target_os} in 1591 linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu) 1592 enable_libstdcxx_allocator_flag=new 1593 ;; 1594 *) 1595 enable_libstdcxx_allocator_flag=new 1596 ;; 1597 esac 1598 fi 1599 AC_MSG_RESULT($enable_libstdcxx_allocator_flag) 1600 1601 1602 # Set configure bits for specified locale package 1603 case ${enable_libstdcxx_allocator_flag} in 1604 bitmap) 1605 ALLOCATOR_H=config/allocator/bitmap_allocator_base.h 1606 ALLOCATOR_NAME=__gnu_cxx::bitmap_allocator 1607 ;; 1608 malloc) 1609 ALLOCATOR_H=config/allocator/malloc_allocator_base.h 1610 ALLOCATOR_NAME=__gnu_cxx::malloc_allocator 1611 ;; 1612 mt) 1613 ALLOCATOR_H=config/allocator/mt_allocator_base.h 1614 ALLOCATOR_NAME=__gnu_cxx::__mt_alloc 1615 ;; 1616 new) 1617 ALLOCATOR_H=config/allocator/new_allocator_base.h 1618 ALLOCATOR_NAME=__gnu_cxx::new_allocator 1619 ;; 1620 pool) 1621 ALLOCATOR_H=config/allocator/pool_allocator_base.h 1622 ALLOCATOR_NAME=__gnu_cxx::__pool_alloc 1623 ;; 1624 esac 1625 1626 AC_SUBST(ALLOCATOR_H) 1627 AC_SUBST(ALLOCATOR_NAME) 1628]) 1629 1630 1631dnl 1632dnl Check for whether the Boost-derived checks should be turned on. 1633dnl 1634dnl --enable-concept-checks turns them on. 1635dnl --disable-concept-checks leaves them off. 1636dnl + Usage: GLIBCXX_ENABLE_CONCEPT_CHECKS[(DEFAULT)] 1637dnl Where DEFAULT is either `yes' or `no'. 1638dnl 1639AC_DEFUN([GLIBCXX_ENABLE_CONCEPT_CHECKS], [ 1640 GLIBCXX_ENABLE(concept-checks,$1,,[use Boost-derived template checks]) 1641 if test $enable_concept_checks = yes; then 1642 AC_DEFINE(_GLIBCXX_CONCEPT_CHECKS, 1, 1643 [Define to use concept checking code from the boost libraries.]) 1644 fi 1645]) 1646 1647 1648dnl 1649dnl Check for which I/O library to use: stdio, or something specific. 1650dnl 1651dnl Default is stdio. 1652dnl 1653AC_DEFUN([GLIBCXX_ENABLE_CSTDIO], [ 1654 AC_MSG_CHECKING([for underlying I/O to use]) 1655 GLIBCXX_ENABLE(cstdio,stdio,[=PACKAGE], 1656 [use target-specific I/O package], [permit stdio]) 1657 1658 # Now that libio has been removed, you can have any color you want as long 1659 # as it's black. This is one big no-op until other packages are added, but 1660 # showing the framework never hurts. 1661 case ${enable_cstdio} in 1662 stdio) 1663 CSTDIO_H=config/io/c_io_stdio.h 1664 BASIC_FILE_H=config/io/basic_file_stdio.h 1665 BASIC_FILE_CC=config/io/basic_file_stdio.cc 1666 AC_MSG_RESULT(stdio) 1667 ;; 1668 esac 1669 1670 AC_SUBST(CSTDIO_H) 1671 AC_SUBST(BASIC_FILE_H) 1672 AC_SUBST(BASIC_FILE_CC) 1673]) 1674 1675 1676dnl 1677dnl Check for "unusual" flags to pass to the compiler while building. 1678dnl 1679dnl --enable-cxx-flags='-foo -bar -baz' is a general method for passing 1680dnl experimental flags such as -fpch, -fIMI, -Dfloat=char, etc. 1681dnl --disable-cxx-flags passes nothing. 1682dnl + See http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00131.html 1683dnl http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00284.html 1684dnl http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00035.html 1685dnl + Usage: GLIBCXX_ENABLE_CXX_FLAGS(default flags) 1686dnl If "default flags" is an empty string, the effect is the same 1687dnl as --disable or --enable=no. 1688dnl 1689AC_DEFUN([GLIBCXX_ENABLE_CXX_FLAGS], [dnl 1690 AC_MSG_CHECKING([for extra compiler flags for building]) 1691 GLIBCXX_ENABLE(cxx-flags,$1,[=FLAGS], 1692 [pass compiler FLAGS when building library], 1693 [case "x$enable_cxx_flags" in 1694 xno | x) enable_cxx_flags= ;; 1695 x-*) ;; 1696 *) AC_MSG_ERROR(_g_switch needs compiler flags as arguments) ;; 1697 esac]) 1698 1699 # Run through flags (either default or command-line) and set anything 1700 # extra (e.g., #defines) that must accompany particular g++ options. 1701 if test -n "$enable_cxx_flags"; then 1702 for f in $enable_cxx_flags; do 1703 case "$f" in 1704 -fhonor-std) ;; 1705 -*) ;; 1706 *) # and we're trying to pass /what/ exactly? 1707 AC_MSG_ERROR([compiler flags start with a -]) ;; 1708 esac 1709 done 1710 fi 1711 1712 EXTRA_CXX_FLAGS="$enable_cxx_flags" 1713 AC_MSG_RESULT($EXTRA_CXX_FLAGS) 1714 AC_SUBST(EXTRA_CXX_FLAGS) 1715]) 1716 1717 1718dnl 1719dnl Check to see if debugging libraries are to be built. 1720dnl 1721dnl --enable-libstdcxx-debug 1722dnl builds a separate set of debugging libraries in addition to the 1723dnl normal (shared, static) libstdc++ binaries. 1724dnl 1725dnl --disable-libstdcxx-debug 1726dnl builds only one (non-debug) version of libstdc++. 1727dnl 1728dnl --enable-libstdcxx-debug-flags=FLAGS 1729dnl iff --enable-debug == yes, then use FLAGS to build the debug library. 1730dnl 1731dnl + Usage: GLIBCXX_ENABLE_DEBUG[(DEFAULT)] 1732dnl Where DEFAULT is either `yes' or `no'. 1733dnl 1734AC_DEFUN([GLIBCXX_ENABLE_DEBUG], [ 1735 AC_MSG_CHECKING([for additional debug build]) 1736 GLIBCXX_ENABLE(libstdcxx-debug,$1,,[build extra debug library]) 1737 AC_MSG_RESULT($enable_libstdcxx_debug) 1738 GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_DEBUG, test $enable_libstdcxx_debug = yes) 1739]) 1740 1741 1742dnl 1743dnl Check for explicit debug flags. 1744dnl 1745dnl --enable-libstdcxx-debug-flags='-O1' 1746dnl is a general method for passing flags to be used when 1747dnl building debug libraries with --enable-debug. 1748dnl 1749dnl --disable-libstdcxx-debug-flags does nothing. 1750dnl + Usage: GLIBCXX_ENABLE_DEBUG_FLAGS(default flags) 1751dnl If "default flags" is an empty string, the effect is the same 1752dnl as --disable or --enable=no. 1753dnl 1754AC_DEFUN([GLIBCXX_ENABLE_DEBUG_FLAGS], [ 1755 GLIBCXX_ENABLE(libstdcxx-debug-flags,[$1],[=FLAGS], 1756 [pass compiler FLAGS when building debug library], 1757 [case "x$enable_libstdcxx_debug_flags" in 1758 xno | x) enable_libstdcxx_debug_flags= ;; 1759 x-*) ;; 1760 *) AC_MSG_ERROR(_g_switch needs compiler flags as arguments) ;; 1761 esac]) 1762 1763 # Option parsed, now set things appropriately 1764 DEBUG_FLAGS="$enable_libstdcxx_debug_flags" 1765 AC_SUBST(DEBUG_FLAGS) 1766 1767 AC_MSG_NOTICE([Debug build flags set to $DEBUG_FLAGS]) 1768]) 1769 1770 1771dnl 1772dnl Check if the user only wants a freestanding library implementation. 1773dnl 1774dnl --disable-hosted-libstdcxx will turn off most of the library build, 1775dnl installing only the headers required by [17.4.1.3] and the language 1776dnl support library. More than that will be built (to keep the Makefiles 1777dnl conveniently clean), but not installed. 1778dnl 1779dnl Sets: 1780dnl is_hosted (yes/no) 1781dnl 1782dnl Defines: 1783dnl _GLIBCXX_HOSTED (always defined, either to 1 or 0) 1784dnl 1785AC_DEFUN([GLIBCXX_ENABLE_HOSTED], [ 1786 AC_ARG_ENABLE([hosted-libstdcxx], 1787 AC_HELP_STRING([--disable-hosted-libstdcxx], 1788 [only build freestanding C++ runtime support]),, 1789 [case "$host" in 1790 arm*-*-symbianelf*) 1791 enable_hosted_libstdcxx=no 1792 ;; 1793 *) 1794 enable_hosted_libstdcxx=yes 1795 ;; 1796 esac]) 1797 if test "$enable_hosted_libstdcxx" = no; then 1798 AC_MSG_NOTICE([Only freestanding libraries will be built]) 1799 is_hosted=no 1800 hosted_define=0 1801 enable_abi_check=no 1802 enable_libstdcxx_pch=no 1803 else 1804 is_hosted=yes 1805 hosted_define=1 1806 fi 1807 GLIBCXX_CONDITIONAL(GLIBCXX_HOSTED, test $is_hosted = yes) 1808 AC_DEFINE_UNQUOTED(_GLIBCXX_HOSTED, $hosted_define, 1809 [Define to 1 if a full hosted library is built, or 0 if freestanding.]) 1810]) 1811 1812 1813dnl 1814dnl Check for template specializations for the 'long long' type. 1815dnl The result determines only whether 'long long' I/O is enabled; things 1816dnl like numeric_limits<> specializations are always available. 1817dnl 1818dnl --enable-long-long defines _GLIBCXX_USE_LONG_LONG 1819dnl --disable-long-long leaves _GLIBCXX_USE_LONG_LONG undefined 1820dnl + Usage: GLIBCXX_ENABLE_LONG_LONG[(DEFAULT)] 1821dnl Where DEFAULT is either `yes' or `no'. 1822dnl 1823AC_DEFUN([GLIBCXX_ENABLE_LONG_LONG], [ 1824 GLIBCXX_ENABLE(long-long,$1,,[enable template specializations for 'long long']) 1825 if test $enable_long_long = yes; then 1826 AC_DEFINE(_GLIBCXX_USE_LONG_LONG, 1, 1827 [Define if code specialized for long long should be used.]) 1828 fi 1829 AC_MSG_CHECKING([for enabled long long specializations]) 1830 AC_MSG_RESULT([$enable_long_long]) 1831]) 1832 1833 1834dnl 1835dnl Check for template specializations for the 'wchar_t' type. 1836dnl 1837dnl --enable-wchar_t defines _GLIBCXX_USE_WCHAR_T 1838dnl --disable-wchar_t leaves _GLIBCXX_USE_WCHAR_T undefined 1839dnl + Usage: GLIBCXX_ENABLE_WCHAR_T[(DEFAULT)] 1840dnl Where DEFAULT is either `yes' or `no'. 1841dnl 1842dnl Necessary support must also be present. 1843dnl 1844AC_DEFUN([GLIBCXX_ENABLE_WCHAR_T], [ 1845 GLIBCXX_ENABLE(wchar_t,$1,,[enable template specializations for 'wchar_t']) 1846 1847 # Test wchar.h for mbstate_t, which is needed for char_traits and fpos. 1848 AC_CHECK_HEADERS(wchar.h, ac_has_wchar_h=yes, ac_has_wchar_h=no) 1849 AC_MSG_CHECKING([for mbstate_t]) 1850 AC_TRY_COMPILE([#include <wchar.h>], 1851 [mbstate_t teststate;], 1852 have_mbstate_t=yes, have_mbstate_t=no) 1853 AC_MSG_RESULT($have_mbstate_t) 1854 if test x"$have_mbstate_t" = xyes; then 1855 AC_DEFINE(HAVE_MBSTATE_T,1,[Define if mbstate_t exists in wchar.h.]) 1856 fi 1857 1858 # Test it always, for use in GLIBCXX_ENABLE_C99, together with 1859 # ac_has_wchar_h. 1860 AC_CHECK_HEADERS(wctype.h, ac_has_wctype_h=yes, ac_has_wctype_h=no) 1861 1862 if test x"$enable_wchar_t" = x"yes"; then 1863 1864 AC_LANG_SAVE 1865 AC_LANG_CPLUSPLUS 1866 1867 if test x"$ac_has_wchar_h" = xyes && 1868 test x"$ac_has_wctype_h" = xyes; then 1869 AC_TRY_COMPILE([#include <wchar.h> 1870 #include <stddef.h> 1871 wint_t i; 1872 long l = WEOF; 1873 long j = WCHAR_MIN; 1874 long k = WCHAR_MAX; 1875 namespace test 1876 { 1877 using ::btowc; 1878 using ::fgetwc; 1879 using ::fgetws; 1880 using ::fputwc; 1881 using ::fputws; 1882 using ::fwide; 1883 using ::fwprintf; 1884 using ::fwscanf; 1885 using ::getwc; 1886 using ::getwchar; 1887 using ::mbrlen; 1888 using ::mbrtowc; 1889 using ::mbsinit; 1890 using ::mbsrtowcs; 1891 using ::putwc; 1892 using ::putwchar; 1893 using ::swprintf; 1894 using ::swscanf; 1895 using ::ungetwc; 1896 using ::vfwprintf; 1897 using ::vswprintf; 1898 using ::vwprintf; 1899 using ::wcrtomb; 1900 using ::wcscat; 1901 using ::wcschr; 1902 using ::wcscmp; 1903 using ::wcscoll; 1904 using ::wcscpy; 1905 using ::wcscspn; 1906 using ::wcsftime; 1907 using ::wcslen; 1908 using ::wcsncat; 1909 using ::wcsncmp; 1910 using ::wcsncpy; 1911 using ::wcspbrk; 1912 using ::wcsrchr; 1913 using ::wcsrtombs; 1914 using ::wcsspn; 1915 using ::wcsstr; 1916 using ::wcstod; 1917 using ::wcstok; 1918 using ::wcstol; 1919 using ::wcstoul; 1920 using ::wcsxfrm; 1921 using ::wctob; 1922 using ::wmemchr; 1923 using ::wmemcmp; 1924 using ::wmemcpy; 1925 using ::wmemmove; 1926 using ::wmemset; 1927 using ::wprintf; 1928 using ::wscanf; 1929 } 1930 ],[],[], [enable_wchar_t=no]) 1931 else 1932 enable_wchar_t=no 1933 fi 1934 1935 AC_LANG_RESTORE 1936 fi 1937 1938 if test x"$enable_wchar_t" = x"yes"; then 1939 AC_DEFINE(_GLIBCXX_USE_WCHAR_T, 1, 1940 [Define if code specialized for wchar_t should be used.]) 1941 fi 1942 1943 AC_MSG_CHECKING([for enabled wchar_t specializations]) 1944 AC_MSG_RESULT([$enable_wchar_t]) 1945]) 1946 1947 1948dnl 1949dnl Check to see if building and using a C++ precompiled header can be done. 1950dnl 1951dnl --enable-libstdcxx-pch=yes 1952dnl default, this shows intent to use stdc++.h.gch If it looks like it 1953dnl may work, after some light-hearted attempts to puzzle out compiler 1954dnl support, flip bits on in include/Makefile.am 1955dnl 1956dnl --disable-libstdcxx-pch 1957dnl turns off attempts to use or build stdc++.h.gch. 1958dnl 1959dnl Substs: 1960dnl glibcxx_PCHFLAGS 1961dnl 1962AC_DEFUN([GLIBCXX_ENABLE_PCH], [ 1963 GLIBCXX_ENABLE(libstdcxx-pch,$1,,[build pre-compiled libstdc++ headers]) 1964 if test $enable_libstdcxx_pch = yes; then 1965 AC_CACHE_CHECK([for compiler with PCH support], 1966 [glibcxx_cv_prog_CXX_pch], 1967 [ac_save_CXXFLAGS="$CXXFLAGS" 1968 CXXFLAGS="$CXXFLAGS -Werror -Winvalid-pch -Wno-deprecated" 1969 AC_LANG_SAVE 1970 AC_LANG_CPLUSPLUS 1971 echo '#include <math.h>' > conftest.h 1972 if $CXX $CXXFLAGS $CPPFLAGS -x c++-header conftest.h \ 1973 -o conftest.h.gch 1>&5 2>&1 && 1974 echo '#error "pch failed"' > conftest.h && 1975 echo '#include "conftest.h"' > conftest.cc && 1976 $CXX -c $CXXFLAGS $CPPFLAGS conftest.cc 1>&5 2>&1 ; 1977 then 1978 glibcxx_cv_prog_CXX_pch=yes 1979 else 1980 glibcxx_cv_prog_CXX_pch=no 1981 fi 1982 rm -f conftest* 1983 CXXFLAGS=$ac_save_CXXFLAGS 1984 AC_LANG_RESTORE 1985 ]) 1986 enable_libstdcxx_pch=$glibcxx_cv_prog_CXX_pch 1987 fi 1988 1989 AC_MSG_CHECKING([for enabled PCH]) 1990 AC_MSG_RESULT([$enable_libstdcxx_pch]) 1991 1992 GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_PCH, test $enable_libstdcxx_pch = yes) 1993 if test $enable_libstdcxx_pch = yes; then 1994 glibcxx_PCHFLAGS="-include bits/stdtr1c++.h" 1995 else 1996 glibcxx_PCHFLAGS="" 1997 fi 1998 AC_SUBST(glibcxx_PCHFLAGS) 1999]) 2000 2001 2002dnl 2003dnl Check for atomic builtins. 2004dnl See: 2005dnl http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html#Atomic-Builtins 2006dnl 2007dnl This checks to see if the host supports the compiler-generated 2008dnl builtins for atomic operations. Note, this is intended to be an 2009dnl all-or-nothing switch, so all the atomic operations that are used 2010dnl should be checked. 2011dnl 2012dnl Note: 2013dnl libgomp and libgfortran do this with a link test, instead of an asm test. 2014dnl see: CHECK_SYNC_FETCH_AND_ADD 2015dnl 2016dnl Defines: 2017dnl _GLIBCXX_ATOMIC_BUILTINS if the compiler on this target supports atomics. 2018dnl 2019AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS], [ 2020 AC_MSG_CHECKING([for atomic builtins]) 2021 AC_LANG_SAVE 2022 AC_LANG_CPLUSPLUS 2023 2024 # Fake what AC_TRY_COMPILE does. XXX Look at redoing this new-style. 2025 cat > conftest.$ac_ext << EOF 2026[#]line __oline__ "configure" 2027int main() 2028{ 2029 // NB: _Atomic_word not necessarily int. 2030 typedef int atomic_type; 2031 atomic_type c1; 2032 atomic_type c2; 2033 const atomic_type c3(0); 2034 if (__sync_fetch_and_add(&c1, c2) == c3) 2035 { 2036 // Do something. 2037 } 2038 return 0; 2039} 2040EOF 2041 old_CXXFLAGS="$CXXFLAGS" 2042 CXXFLAGS=-S 2043 if AC_TRY_EVAL(ac_compile); then 2044 if grep __sync_fetch_and_add conftest.s >/dev/null 2>&1 ; then 2045 enable_atomic_builtins=no 2046 else 2047 AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS, 1, 2048 [Define if builtin atomic operations are supported on this host.]) 2049 enable_atomic_builtins=yes 2050 atomicity_dir=cpu/generic/atomicity_builtins 2051 fi 2052 fi 2053 CXXFLAGS="$old_CXXFLAGS" 2054 rm -f conftest* 2055 2056 # Now, if still generic, set to mutex. 2057 if test $atomicity_dir = "cpu/generic" ; then 2058 atomicity_dir=cpu/generic/atomicity_mutex 2059 fi 2060 AC_LANG_RESTORE 2061 AC_MSG_RESULT($enable_atomic_builtins) 2062]) 2063 2064 2065dnl 2066dnl Check for exception handling support. If an explicit enable/disable 2067dnl sjlj exceptions is given, we don't have to detect. Otherwise the 2068dnl target may or may not support call frame exceptions. 2069dnl 2070dnl --enable-sjlj-exceptions forces the use of builtin setjmp. 2071dnl --disable-sjlj-exceptions forces the use of call frame unwinding. 2072dnl Neither one forces an attempt at detection. 2073dnl 2074dnl Defines: 2075dnl _GLIBCXX_SJLJ_EXCEPTIONS if the compiler is configured for it 2076dnl 2077AC_DEFUN([GLIBCXX_ENABLE_SJLJ_EXCEPTIONS], [ 2078 AC_MSG_CHECKING([for exception model to use]) 2079 AC_LANG_SAVE 2080 AC_LANG_CPLUSPLUS 2081 GLIBCXX_ENABLE(sjlj-exceptions,auto,, 2082 [force use of builtin_setjmp for exceptions], 2083 [permit yes|no|auto]) 2084 2085 if test $enable_sjlj_exceptions = auto; then 2086 # Botheration. Now we've got to detect the exception model. Link tests 2087 # against libgcc.a are problematic since we've not been given proper -L 2088 # bits for single-tree newlib and libgloss. 2089 # 2090 # Fake what AC_TRY_COMPILE does. XXX Look at redoing this new-style. 2091 cat > conftest.$ac_ext << EOF 2092[#]line __oline__ "configure" 2093struct S { ~S(); }; 2094void bar(); 2095void foo() 2096{ 2097 S s; 2098 bar(); 2099} 2100EOF 2101 old_CXXFLAGS="$CXXFLAGS" 2102 CXXFLAGS=-S 2103 if AC_TRY_EVAL(ac_compile); then 2104 if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then 2105 enable_sjlj_exceptions=yes 2106 elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then 2107 enable_sjlj_exceptions=no 2108 elif grep __cxa_end_cleanup conftest.s >/dev/null 2>&1 ; then 2109 enable_sjlj_exceptions=no 2110 fi 2111 fi 2112 CXXFLAGS="$old_CXXFLAGS" 2113 rm -f conftest* 2114 fi 2115 2116 # This is a tad weird, for hysterical raisins. We have to map 2117 # enable/disable to two different models. 2118 case $enable_sjlj_exceptions in 2119 yes) 2120 AC_DEFINE(_GLIBCXX_SJLJ_EXCEPTIONS, 1, 2121 [Define if the compiler is configured for setjmp/longjmp exceptions.]) 2122 ac_exception_model_name=sjlj 2123 ;; 2124 no) 2125 ac_exception_model_name="call frame" 2126 ;; 2127 *) 2128 AC_MSG_ERROR([unable to detect exception model]) 2129 ;; 2130 esac 2131 AC_LANG_RESTORE 2132 AC_MSG_RESULT($ac_exception_model_name) 2133]) 2134 2135 2136dnl 2137dnl Allow visibility attributes to be used on namespaces, objects, etc. 2138dnl 2139dnl --enable-visibility enables attempt to use visibility attributes. 2140dnl --disable-visibility turns off all use of visibility attributes. 2141dnl + Usage: GLIBCXX_ENABLE_VISIBILITY[(DEFAULT)] 2142dnl Where DEFAULT is 'yes'. 2143dnl 2144AC_DEFUN([GLIBCXX_ENABLE_VISIBILITY], [ 2145GLIBCXX_ENABLE(visibility,$1,,[enables visibility safe usage]) 2146 2147if test x$enable_visibility = xyes ; then 2148 dnl all hail libgfortran 2149 dnl Check whether the target supports hidden visibility. 2150 AC_CACHE_CHECK([whether the target supports hidden visibility], 2151 have_attribute_visibility, [ 2152 save_CFLAGS="$CFLAGS" 2153 CFLAGS="$CFLAGS -Werror" 2154 AC_TRY_COMPILE([void __attribute__((visibility("hidden"))) foo(void) { }], 2155 [], have_attribute_visibility=yes, 2156 have_attribute_visibility=no) 2157 CFLAGS="$save_CFLAGS"]) 2158 if test $have_attribute_visibility = no; then 2159 enable_visibility=no 2160 fi 2161fi 2162 2163GLIBCXX_CONDITIONAL(ENABLE_VISIBILITY, test $enable_visibility = yes) 2164AC_MSG_NOTICE([visibility supported: $enable_visibility]) 2165]) 2166 2167 2168dnl 2169dnl Add version tags to symbols in shared library (or not), additionally 2170dnl marking other symbols as private/local (or not). 2171dnl 2172dnl --enable-symvers=style adds a version script to the linker call when 2173dnl creating the shared library. The choice of version script is 2174dnl controlled by 'style'. 2175dnl --disable-symvers does not. 2176dnl + Usage: GLIBCXX_ENABLE_SYMVERS[(DEFAULT)] 2177dnl Where DEFAULT is either 'yes' or 'no'. Passing `yes' tries to 2178dnl choose a default style based on linker characteristics. Passing 2179dnl 'no' disables versioning. 2180dnl 2181AC_DEFUN([GLIBCXX_ENABLE_SYMVERS], [ 2182 2183GLIBCXX_ENABLE(symvers,$1,[=STYLE], 2184 [enables symbol versioning of the shared library], 2185 [permit yes|no|gnu|gnu-versioned-namespace|darwin|darwin-export]) 2186 2187# If we never went through the GLIBCXX_CHECK_LINKER_FEATURES macro, then we 2188# don't know enough about $LD to do tricks... 2189AC_REQUIRE([GLIBCXX_CHECK_LINKER_FEATURES]) 2190 2191# Turn a 'yes' into a suitable default. 2192if test x$enable_symvers = xyes ; then 2193 if test $enable_shared = no || test "x$LD" = x || test x$gcc_no_link = xyes; then 2194 enable_symvers=no 2195 else 2196 if test $with_gnu_ld = yes ; then 2197 enable_symvers=gnu 2198 else 2199 case ${target_os} in 2200 darwin*) 2201 enable_symvers=darwin ;; 2202 *) 2203 enable_symvers=no ;; 2204 esac 2205 fi 2206 fi 2207fi 2208 2209# Check to see if 'darwin' or 'darwin-export' can win. 2210if test x$enable_symvers = xdarwin-export ; then 2211 enable_symvers=darwin 2212fi 2213 2214# Check to see if 'gnu' can win. 2215if test $enable_symvers = gnu || test $enable_symvers = gnu-versioned-namespace; then 2216 # Check to see if libgcc_s exists, indicating that shared libgcc is possible. 2217 AC_MSG_CHECKING([for shared libgcc]) 2218 ac_save_CFLAGS="$CFLAGS" 2219 CFLAGS=' -lgcc_s' 2220 AC_TRY_LINK(, [return 0;], glibcxx_shared_libgcc=yes, glibcxx_shared_libgcc=no) 2221 CFLAGS="$ac_save_CFLAGS" 2222 if test $glibcxx_shared_libgcc = no; then 2223 cat > conftest.c <<EOF 2224int main (void) { return 0; } 2225EOF 2226changequote(,)dnl 2227 glibcxx_libgcc_s_suffix=`${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \ 2228 -shared -shared-libgcc -o conftest.so \ 2229 conftest.c -v 2>&1 >/dev/null \ 2230 | sed -n 's/^.* -lgcc_s\([^ ]*\) .*$/\1/p'` 2231changequote([,])dnl 2232 rm -f conftest.c conftest.so 2233 if test x${glibcxx_libgcc_s_suffix+set} = xset; then 2234 CFLAGS=" -lgcc_s$glibcxx_libgcc_s_suffix" 2235 AC_TRY_LINK(, [return 0;], glibcxx_shared_libgcc=yes) 2236 CFLAGS="$ac_save_CFLAGS" 2237 fi 2238 fi 2239 AC_MSG_RESULT($glibcxx_shared_libgcc) 2240 2241 # For GNU ld, we need at least this version. The format is described in 2242 # GLIBCXX_CHECK_LINKER_FEATURES above. 2243 glibcxx_min_gnu_ld_version=21400 2244 2245 # If no shared libgcc, can't win. 2246 if test $glibcxx_shared_libgcc != yes; then 2247 AC_MSG_WARN([=== You have requested GNU symbol versioning, but]) 2248 AC_MSG_WARN([=== you are not building a shared libgcc_s.]) 2249 AC_MSG_WARN([=== Symbol versioning will be disabled.]) 2250 enable_symvers=no 2251 elif test $with_gnu_ld != yes ; then 2252 # just fail for now 2253 AC_MSG_WARN([=== You have requested GNU symbol versioning, but]) 2254 AC_MSG_WARN([=== you are not using the GNU linker.]) 2255 AC_MSG_WARN([=== Symbol versioning will be disabled.]) 2256 enable_symvers=no 2257 elif test $glibcxx_gnu_ld_version -lt $glibcxx_min_gnu_ld_version ; then 2258 # The right tools, the right setup, but too old. Fallbacks? 2259 AC_MSG_WARN(=== Linker version $glibcxx_gnu_ld_version is too old for) 2260 AC_MSG_WARN(=== full symbol versioning support in this release of GCC.) 2261 AC_MSG_WARN(=== You would need to upgrade your binutils to version) 2262 AC_MSG_WARN(=== $glibcxx_min_gnu_ld_version or later and rebuild GCC.) 2263 AC_MSG_WARN([=== Symbol versioning will be disabled.]) 2264 enable_symvers=no 2265 fi 2266fi 2267 2268# Everything parsed; figure out what file to use. 2269case $enable_symvers in 2270 no) 2271 SYMVER_FILE=config/abi/pre/none.ver 2272 ;; 2273 gnu) 2274 SYMVER_FILE=config/abi/pre/gnu.ver 2275 AC_DEFINE(_GLIBCXX_SYMVER_GNU, 1, 2276 [Define to use GNU versioning in the shared library.]) 2277 ;; 2278 gnu-versioned-namespace) 2279 SYMVER_FILE=config/abi/pre/gnu-versioned-namespace.ver 2280 AC_DEFINE(_GLIBCXX_SYMVER_GNU_NAMESPACE, 1, 2281 [Define to use GNU namespace versioning in the shared library.]) 2282 ;; 2283 darwin) 2284 SYMVER_FILE=config/abi/pre/gnu.ver 2285 AC_DEFINE(_GLIBCXX_SYMVER_DARWIN, 1, 2286 [Define to use darwin versioning in the shared library.]) 2287 ;; 2288esac 2289 2290if test x$enable_symvers != xno ; then 2291 AC_DEFINE(_GLIBCXX_SYMVER, 1, 2292 [Define to use symbol versioning in the shared library.]) 2293fi 2294 2295AC_SUBST(SYMVER_FILE) 2296AC_SUBST(port_specific_symbol_files) 2297GLIBCXX_CONDITIONAL(ENABLE_SYMVERS, test $enable_symvers != no) 2298GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_GNU, test $enable_symvers = gnu) 2299GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_GNU_NAMESPACE, test $enable_symvers = gnu-versioned-namespace) 2300GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_DARWIN, test $enable_symvers = darwin) 2301AC_MSG_NOTICE(versioning on shared library symbols is $enable_symvers) 2302 2303# Now, set up compatibility support, if any. 2304# In addition, need this to deal with std::size_t mangling in 2305# src/compatibility.cc. In a perfect world, could use 2306# typeid(std::size_t).name()[0] to do direct substitution. 2307AC_MSG_CHECKING([for size_t as unsigned int]) 2308ac_save_CFLAGS="$CFLAGS" 2309CFLAGS="-Werror" 2310AC_TRY_COMPILE(, [__SIZE_TYPE__* stp; unsigned int* uip; stp = uip;], 2311 [glibcxx_size_t_is_i=yes], [glibcxx_size_t_is_i=no]) 2312CFLAGS=$ac_save_CFLAGS 2313if test "$glibcxx_size_t_is_i" = yes; then 2314 AC_DEFINE(_GLIBCXX_SIZE_T_IS_UINT, 1, [Define if size_t is unsigned int.]) 2315fi 2316AC_MSG_RESULT([$glibcxx_size_t_is_i]) 2317 2318AC_MSG_CHECKING([for ptrdiff_t as int]) 2319ac_save_CFLAGS="$CFLAGS" 2320CFLAGS="-Werror" 2321AC_TRY_COMPILE(, [__PTRDIFF_TYPE__* ptp; int* ip; ptp = ip;], 2322 [glibcxx_ptrdiff_t_is_i=yes], [glibcxx_ptrdiff_t_is_i=no]) 2323CFLAGS=$ac_save_CFLAGS 2324if test "$glibcxx_ptrdiff_t_is_i" = yes; then 2325 AC_DEFINE(_GLIBCXX_PTRDIFF_T_IS_INT, 1, [Define if ptrdiff_t is int.]) 2326fi 2327AC_MSG_RESULT([$glibcxx_ptrdiff_t_is_i]) 2328]) 2329 2330 2331dnl 2332dnl Setup to use the gcc gthr.h thread-specific memory and mutex model. 2333dnl We must stage the required headers so that they will be installed 2334dnl with the library (unlike libgcc, the STL implementation is provided 2335dnl solely within headers). Since we must not inject random user-space 2336dnl macro names into user-provided C++ code, we first stage into <file>-in 2337dnl and process to <file> with an output command. The reason for a two- 2338dnl stage process here is to correctly handle $srcdir!=$objdir without 2339dnl having to write complex code (the sed commands to clean the macro 2340dnl namespace are complex and fragile enough as it is). We must also 2341dnl add a relative path so that -I- is supported properly. 2342dnl 2343dnl Substs: 2344dnl glibcxx_thread_h 2345dnl 2346dnl Defines: 2347dnl HAVE_GTHR_DEFAULT 2348dnl 2349AC_DEFUN([GLIBCXX_ENABLE_THREADS], [ 2350 AC_MSG_CHECKING([for thread model used by GCC]) 2351 target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'` 2352 AC_MSG_RESULT([$target_thread_file]) 2353 2354 if test $target_thread_file != single; then 2355 AC_DEFINE(HAVE_GTHR_DEFAULT, 1, 2356 [Define if gthr-default.h exists 2357 (meaning that threading support is enabled).]) 2358 fi 2359 2360 glibcxx_thread_h=gthr-$target_thread_file.h 2361 2362 dnl Check for __GTHREADS define. 2363 gthread_file=${toplevel_srcdir}/gcc/${glibcxx_thread_h} 2364 if grep __GTHREADS $gthread_file >/dev/null 2>&1 ; then 2365 enable_thread=yes 2366 else 2367 enable_thread=no 2368 fi 2369 2370 AC_SUBST(glibcxx_thread_h) 2371]) 2372 2373 2374# Check whether LC_MESSAGES is available in <locale.h>. 2375# Ulrich Drepper <drepper@cygnus.com>, 1995. 2376# 2377# This file file be copied and used freely without restrictions. It can 2378# be used in projects which are not available under the GNU Public License 2379# but which still want to provide support for the GNU gettext functionality. 2380# Please note that the actual code is *not* freely available. 2381 2382# serial 1 2383AC_DEFUN([AC_LC_MESSAGES], [ 2384 AC_CHECK_HEADER(locale.h, [ 2385 AC_CACHE_CHECK([for LC_MESSAGES], ac_cv_val_LC_MESSAGES, 2386 [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES], 2387 ac_cv_val_LC_MESSAGES=yes, ac_cv_val_LC_MESSAGES=no)]) 2388 if test $ac_cv_val_LC_MESSAGES = yes; then 2389 AC_DEFINE(HAVE_LC_MESSAGES, 1, 2390 [Define if LC_MESSAGES is available in <locale.h>.]) 2391 fi 2392 ]) 2393]) 2394 2395# Macros from the top-level gcc directory. 2396m4_include([../config/tls.m4]) 2397 2398