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