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