-
dnl
dnl GLIBCXX_CONDITIONAL (NAME, SHELL-TEST)
dnl
# Keep these sync'd with the list in Makefile.am. The first provides an
# expandable list at autoconf time; the second provides an expandable list
# (i.e., shell variable) at configure time.
- m4_define([glibcxx_SUBDIRS],[include libmath libsupc++ src doc po testsuite])
+ m4_define([glibcxx_SUBDIRS],[include libsupc++ python src doc po testsuite])
SUBDIRS='glibcxx_SUBDIRS'
# These need to be absolute paths, yet at the same time need to
# set from the top level.
AC_ARG_WITH([target-subdir],
AC_HELP_STRING([--with-target-subdir=SUBDIR],
- [configuring in a subdirectory]))
+ [configuring in a subdirectory]))
AC_ARG_WITH([cross-host],
AC_HELP_STRING([--with-cross-host=HOST],
- [configuring with a cross compiler]))
+ [configuring with a cross compiler]))
AC_ARG_WITH([newlib],
AC_HELP_STRING([--with-newlib],
- [assume newlib as a system C library]))
-
- # We're almost certainly being configured before anything else which uses
- # C++, so all of our AC_PROG_* discoveries will be cached. It's vital that
- # we not cache the value of CXX that we "discover" here, because it's set
- # to something unique for us and libjava. Other target libraries need to
- # find CXX for themselves. We yank the rug out from under the normal AC_*
- # process by sneakily renaming the cache variable. This also lets us debug
- # the value of "our" CXX in postmortems.
- #
- # We must also force CXX to /not/ be a precious variable, otherwise the
- # wrong (non-multilib-adjusted) value will be used in multilibs. This
- # little trick also affects CPPFLAGS, CXXFLAGS, and LDFLAGS. And as a side
- # effect, CXXFLAGS is no longer automagically subst'd, so we have to do
- # that ourselves. Un-preciousing AC_PROG_CC also affects CC and CFLAGS.
- #
- # -fno-builtin must be present here so that a non-conflicting form of
- # std::exit can be guessed by AC_PROG_CXX, and used in later tests.
-
- m4_define([ac_cv_prog_CXX],[glibcxx_cv_prog_CXX])
- m4_rename([_AC_ARG_VAR_PRECIOUS],[glibcxx_PRECIOUS])
- m4_define([_AC_ARG_VAR_PRECIOUS],[])
- save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -fno-builtin"
- AC_PROG_CC
- AC_PROG_CXX
- CXXFLAGS="$save_CXXFLAGS"
- m4_rename([glibcxx_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
- AC_SUBST(CFLAGS)
- AC_SUBST(CXXFLAGS)
+ [assume newlib as a system C library]))
# Will set LN_S to either 'ln -s', 'ln', or 'cp -p' (if linking isn't
# available). Uncomment the next line to force a particular method.
# which are themselves conditionally expanded.
## (Right now, this only matters for enable_wchar_t, but nothing prevents
## other macros from doing the same. This should be automated.) -pme
- need_libmath=no
- # Check for uClibc since Linux platforms use different configuration
+ # Check for C library flavor since Linux platforms use different configuration
# directories depending on the C library in use.
AC_EGREP_CPP([_using_uclibc], [
#include <stdio.h>
#endif
], uclibc=yes, uclibc=no)
+ AC_EGREP_CPP([_using_bionic], [
+ #include <stdio.h>
+ #if __BIONIC__
+ _using_bionic
+ #endif
+ ], bionic=yes, bionic=no)
+
# Find platform-specific directories containing configuration info.
# Also possibly modify flags used elsewhere, as needed by the platform.
GLIBCXX_CHECK_HOST
dnl LD (as a side effect of testing)
dnl Sets:
dnl with_gnu_ld
+dnl glibcxx_ld_is_gold (set to "no" or "yes")
dnl glibcxx_gnu_ld_version (possibly)
dnl
dnl The last will be a single integer, e.g., version 1.23.45.0.67.89 will
# Start by getting the version number. I think the libtool test already
# does some of this, but throws away the result.
+ glibcxx_ld_is_gold=no
if test x"$with_gnu_ld" = x"yes"; then
AC_MSG_CHECKING([for ld version])
changequote(,)
- ldver=`$LD --version 2>/dev/null | head -1 | \
- sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'`
+ if $LD --version 2>/dev/null | grep 'GNU gold' >/dev/null 2>&1; then
+ glibcxx_ld_is_gold=yes
+ fi
+ ldver=`$LD --version 2>/dev/null |
+ sed -e 's/GNU gold /GNU ld /;s/GNU ld version /GNU ld /;s/GNU ld ([^)]*) /GNU ld /;s/GNU ld \([0-9.][0-9.]*\).*/\1/; q'`
changequote([,])
glibcxx_gnu_ld_version=`echo $ldver | \
- $AWK -F. '{ if (NF<3) [$]3=0; print ([$]1*100+[$]2)*100+[$]3 }'`
+ $AWK -F. '{ if (NF<3) [$]3=0; print ([$]1*100+[$]2)*100+[$]3 }'`
AC_MSG_RESULT($glibcxx_gnu_ld_version)
fi
# Set --gc-sections.
- glibcxx_gcsections_min_ld=21602
- if test x"$with_gnu_ld" = x"yes" &&
+ glibcxx_have_gc_sections=no
+ if test "$glibcxx_ld_is_gold" = "yes"; then
+ if $LD --help 2>/dev/null | grep gc-sections >/dev/null 2>&1; then
+ glibcxx_have_gc_sections=yes
+ fi
+ else
+ glibcxx_gcsections_min_ld=21602
+ if test x"$with_gnu_ld" = x"yes" &&
test $glibcxx_gnu_ld_version -gt $glibcxx_gcsections_min_ld ; then
-
+ glibcxx_have_gc_sections=yes
+ fi
+ fi
+ if test "$glibcxx_have_gc_sections" = "yes"; then
# Sufficiently young GNU ld it is! Joy and bunny rabbits!
# NB: This flag only works reliably after 2.16.1. Configure tests
# for this are difficult, so hard wire a value that should work.
dnl Used only in testsuite_hooks.h. Called from GLIBCXX_CONFIGURE_TESTSUITE.
dnl
dnl Defines:
-dnl _GLIBCXX_RES_LIMITS if we can set artificial resource limits
+dnl _GLIBCXX_RES_LIMITS if we can set artificial resource limits
dnl various HAVE_LIMIT_* for individual limit names
dnl
AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT_ancilliary], [
[ int f = RLIMIT_$1 ; ],
[glibcxx_mresult=1], [glibcxx_mresult=0])
AC_DEFINE_UNQUOTED(HAVE_LIMIT_$1, $glibcxx_mresult,
- [Only used in build directory testsuite_hooks.h.])
+ [Only used in build directory testsuite_hooks.h.])
if test $glibcxx_mresult = 1 ; then res=yes ; else res=no ; fi
AC_MSG_RESULT($res)
])
AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT], [
setrlimit_have_headers=yes
AC_CHECK_HEADERS(unistd.h sys/time.h sys/resource.h,
- [],
- [setrlimit_have_headers=no])
+ [],
+ [setrlimit_have_headers=no])
# If don't have the headers, then we can't run the tests now, and we
# won't be seeing any of these during testsuite compilation.
if test $setrlimit_have_headers = yes; then
GLIBCXX_CHECK_SETRLIMIT_ancilliary(FSIZE)
# Check for rlimit, setrlimit.
- AC_CACHE_VAL(ac_setrlimit, [
+ AC_CACHE_VAL(glibcxx_cv_setrlimit, [
AC_TRY_COMPILE(
- [#include <unistd.h>
- #include <sys/time.h>
- #include <sys/resource.h>
- ],
- [struct rlimit r;
- setrlimit(0, &r);],
- [ac_setrlimit=yes], [ac_setrlimit=no])
+ [#include <unistd.h>
+ #include <sys/time.h>
+ #include <sys/resource.h>
+ ],
+ [struct rlimit r;
+ setrlimit(0, &r);],
+ [glibcxx_cv_setrlimit=yes], [glibcxx_cv_setrlimit=no])
])
fi
AC_MSG_CHECKING([for testsuite resource limits support])
- if test $setrlimit_have_headers = yes && test $ac_setrlimit = yes; then
+ if test $setrlimit_have_headers = yes && test $glibcxx_cv_setrlimit = yes; then
ac_res_limits=yes
AC_DEFINE(_GLIBCXX_RES_LIMITS, 1,
- [Define if using setrlimit to set resource limits during
- "make check"])
+ [Define if using setrlimit to set resource limits during
+ "make check"])
else
ac_res_limits=no
fi
dnl Define HAVE_S_ISREG / HAVE_S_IFREG appropriately.
dnl
AC_DEFUN([GLIBCXX_CHECK_S_ISREG_OR_S_IFREG], [
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -fno-exceptions"
+
AC_MSG_CHECKING([for S_ISREG or S_IFREG])
AC_CACHE_VAL(glibcxx_cv_S_ISREG, [
- AC_TRY_LINK(
+ GCC_TRY_COMPILE_OR_LINK(
[#include <sys/stat.h>],
[struct stat buffer;
fstat(0, &buffer);
[glibcxx_cv_S_ISREG=no])
])
AC_CACHE_VAL(glibcxx_cv_S_IFREG, [
- AC_TRY_LINK(
+ GCC_TRY_COMPILE_OR_LINK(
[#include <sys/stat.h>],
[struct stat buffer;
fstat(0, &buffer);
])
res=no
if test $glibcxx_cv_S_ISREG = yes; then
- AC_DEFINE(HAVE_S_ISREG, 1,
- [Define if S_IFREG is available in <sys/stat.h>.])
+ AC_DEFINE(HAVE_S_ISREG, 1,
+ [Define if S_IFREG is available in <sys/stat.h>.])
res=S_ISREG
elif test $glibcxx_cv_S_IFREG = yes; then
AC_DEFINE(HAVE_S_IFREG, 1,
- [Define if S_IFREG is available in <sys/stat.h>.])
+ [Define if S_IFREG is available in <sys/stat.h>.])
res=S_IFREG
fi
AC_MSG_RESULT($res)
+
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ AC_LANG_RESTORE
])
dnl Check whether poll is available in <poll.h>, and define HAVE_POLL.
dnl
AC_DEFUN([GLIBCXX_CHECK_POLL], [
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -fno-exceptions"
+
AC_MSG_CHECKING([for poll])
AC_CACHE_VAL(glibcxx_cv_POLL, [
- AC_TRY_LINK(
+ GCC_TRY_COMPILE_OR_LINK(
[#include <poll.h>],
[struct pollfd pfd[1];
pfd[0].events = POLLIN;
AC_DEFINE(HAVE_POLL, 1, [Define if poll is available in <poll.h>.])
fi
AC_MSG_RESULT($glibcxx_cv_POLL)
+
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ AC_LANG_RESTORE
])
dnl Check whether writev is available in <sys/uio.h>, and define HAVE_WRITEV.
dnl
AC_DEFUN([GLIBCXX_CHECK_WRITEV], [
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -fno-exceptions"
+
AC_MSG_CHECKING([for writev])
AC_CACHE_VAL(glibcxx_cv_WRITEV, [
- AC_TRY_LINK(
+ GCC_TRY_COMPILE_OR_LINK(
[#include <sys/uio.h>],
[struct iovec iov[2];
writev(0, iov, 0);],
AC_DEFINE(HAVE_WRITEV, 1, [Define if writev is available in <sys/uio.h>.])
fi
AC_MSG_RESULT($glibcxx_cv_WRITEV)
+
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ AC_LANG_RESTORE
])
dnl
dnl Check whether int64_t is available in <stdint.h>, and define HAVE_INT64_T.
+dnl Also check whether int64_t is actually a typedef to long or long long.
dnl
AC_DEFUN([GLIBCXX_CHECK_INT64_T], [
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+
AC_MSG_CHECKING([for int64_t])
AC_CACHE_VAL(glibcxx_cv_INT64_T, [
AC_TRY_COMPILE(
[glibcxx_cv_INT64_T=yes],
[glibcxx_cv_INT64_T=no])
])
+
if test $glibcxx_cv_INT64_T = yes; then
AC_DEFINE(HAVE_INT64_T, 1, [Define if int64_t is available in <stdint.h>.])
+ AC_MSG_RESULT($glibcxx_cv_INT64_T)
+
+ AC_MSG_CHECKING([for int64_t as long])
+ AC_CACHE_VAL(glibcxx_cv_int64_t_long, [
+ AC_TRY_COMPILE(
+ [#include <stdint.h>
+ template<typename, typename> struct same { enum { value = -1 }; };
+ template<typename Tp> struct same<Tp, Tp> { enum { value = 1 }; };
+ int array[same<int64_t, long>::value];], [],
+ [glibcxx_cv_int64_t_long=yes], [glibcxx_cv_int64_t_long=no])
+ ])
+
+ if test $glibcxx_cv_int64_t_long = yes; then
+ AC_DEFINE(HAVE_INT64_T_LONG, 1, [Define if int64_t is a long.])
+ AC_MSG_RESULT($glibcxx_cv_int64_t_long)
+ fi
+
+ AC_MSG_CHECKING([for int64_t as long long])
+ AC_CACHE_VAL(glibcxx_cv_int64_t_long_long, [
+ AC_TRY_COMPILE(
+ [#include <stdint.h>
+ template<typename, typename> struct same { enum { value = -1 }; };
+ template<typename Tp> struct same<Tp, Tp> { enum { value = 1 }; };
+ int array[same<int64_t, long long>::value];], [],
+ [glibcxx_cv_int64_t_long_long=yes], [glibcxx_cv_int64_t_long_long=no])
+ ])
+
+ if test $glibcxx_cv_int64_t_long_long = yes; then
+ AC_DEFINE(HAVE_INT64_T_LONG_LONG, 1, [Define if int64_t is a long long.])
+ AC_MSG_RESULT($glibcxx_cv_int64_t_long_long)
+ fi
fi
- AC_MSG_RESULT($glibcxx_cv_INT64_T)
+
+ AC_LANG_RESTORE
])
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -fno-exceptions"
+ CXXFLAGS="$CXXFLAGS -fno-exceptions"
AC_MSG_CHECKING([for LFS support])
AC_CACHE_VAL(glibcxx_cv_LFS, [
- AC_TRY_LINK(
+ GCC_TRY_COMPILE_OR_LINK(
[#include <unistd.h>
#include <stdio.h>
#include <sys/stat.h>
GLIBCXX_ENABLE(fully-dynamic-string,$1,,[do not put empty strings in per-process static memory])
if test $enable_fully_dynamic_string = yes; then
AC_DEFINE(_GLIBCXX_FULLY_DYNAMIC_STRING, 1,
- [Define if a fully dynamic basic_string is wanted.])
+ [Define if a fully dynamic basic_string is wanted.])
fi
])
dnl GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE must be done before this.
dnl
dnl Sets:
-dnl enable_abi_check
+dnl enable_abi_check
dnl GLIBCXX_TEST_WCHAR_T
dnl GLIBCXX_TEST_THREAD
dnl Substs:
test $enable_symvers != no; then
case "$host" in
*-*-cygwin*)
- enable_abi_check=no ;;
+ enable_abi_check=no ;;
*)
- enable_abi_check=yes ;;
+ enable_abi_check=yes ;;
esac
else
# Only build this as native, since automake does not understand
# CXX_FOR_BUILD.
enable_abi_check=no
fi
-
+
# Export file names for ABI checking.
- baseline_dir="$glibcxx_srcdir/config/abi/post/${abi_baseline_pair}\$(MULTISUBDIR)"
+ baseline_dir="$glibcxx_srcdir/config/abi/post/${abi_baseline_pair}"
AC_SUBST(baseline_dir)
])
+dnl
+dnl Does any necessary configuration of the documentation directory.
+dnl
+dnl XSLTPROC must be set before this
+dnl
+dnl Sets:
+dnl glibcxx_stylesheets
+dnl Substs:
+dnl XSL_STYLE_DIR
+dnl
+AC_DEFUN([GLIBCXX_CONFIGURE_DOCBOOK], [
+
+AC_MSG_CHECKING([for stylesheets used in generation of documentation])
+glibcxx_stylesheets=no
+if test x${XSLTPROC} = xyes && echo '<title/>' | xsltproc --noout --nonet --xinclude http://docbook.sourceforge.net/release/xsl-ns/current/xhtml-1_1/docbook.xsl - 2>/dev/null; then
+ glibcxx_stylesheets=yes
+fi
+AC_MSG_RESULT($glibcxx_stylesheets)
+
+AC_MSG_CHECKING([for local stylesheet directory])
+glibcxx_local_stylesheets=no
+if test x"$glibcxx_stylesheets" = x"yes"; then
+ if test -d /usr/share/sgml/docbook/xsl-ns-stylesheets; then
+ glibcxx_local_stylesheets=yes
+ XSL_STYLE_DIR=/usr/share/sgml/docbook/xsl-ns-stylesheets
+ fi
+ if test -d /usr/share/xml/docbook/stylesheet/docbook-xsl-ns; then
+ glibcxx_local_stylesheets=yes
+ XSL_STYLE_DIR=/usr/share/xml/docbook/stylesheet/docbook-xsl-ns
+ fi
+fi
+AC_MSG_RESULT($glibcxx_local_stylesheets)
+
+if test x"$glibcxx_local_stylesheets" = x"yes"; then
+ AC_SUBST(XSL_STYLE_DIR)
+ AC_MSG_NOTICE($XSL_STYLE_DIR)
+else
+ glibcxx_stylesheets=no
+fi
+])
+
+
dnl
dnl Set up *_INCLUDES variables for all sundry Makefile.am's.
dnl
AC_MSG_CHECKING([for gxx-include-dir])
AC_ARG_WITH([gxx-include-dir],
AC_HELP_STRING([--with-gxx-include-dir=DIR],
- [installation directory for include files]),
+ [installation directory for include files]),
[case "$withval" in
yes) AC_MSG_ERROR([Missing directory for --with-gxx-include-dir]) ;;
no) gxx_include_dir=no ;;
AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
AC_ARG_ENABLE([version-specific-runtime-libs],
AC_HELP_STRING([--enable-version-specific-runtime-libs],
- [Specify that runtime libraries should be installed in a compiler-specific directory]),
+ [Specify that runtime libraries should be installed in a compiler-specific directory]),
[case "$enableval" in
yes) version_specific_libs=yes ;;
no) version_specific_libs=no ;;
# Default case for install directory for include files.
if test $version_specific_libs = no && test $gxx_include_dir = no; then
gxx_include_dir='include/c++/${gcc_version}'
- if test -n "$with_cross_host" &&
- test x"$with_cross_host" != x"no"; then
+ if test -n "$with_cross_host" &&
+ test x"$with_cross_host" != x"no"; then
gxx_include_dir='${prefix}/${target_alias}/'"$gxx_include_dir"
else
gxx_include_dir='${prefix}/'"$gxx_include_dir"
dnl
m4_define([GLIBCXX_ENABLE],[dnl
m4_define([_g_switch],[--enable-$1])dnl
-m4_define([_g_help],[AC_HELP_STRING(_g_switch$3,[$4 @<:@default=$2@:>@])])dnl
- AC_ARG_ENABLE($1,_g_help,
+m4_define([_g_help],[AC_HELP_STRING([_g_switch$3],[$4 @<:@default=$2@:>@])])dnl
+ AC_ARG_ENABLE([$1],m4_dquote(_g_help),
m4_bmatch([$5],
[^permit ],
[[
case "$enableval" in
m4_bpatsubst([$5],[permit ])) ;;
*) AC_MSG_ERROR(Unknown argument to enable/disable $1) ;;
- dnl Idea for future: generate a URL pointing to
- dnl "onlinedocs/configopts.html#whatever"
+ dnl Idea for future: generate a URL pointing to
+ dnl "onlinedocs/configopts.html#whatever"
esac
]],
[^$],
# Check for the existence of <math.h> functions used if C99 is enabled.
AC_MSG_CHECKING([for ISO C99 support in <math.h>])
- AC_CACHE_VAL(ac_c99_math, [
+ AC_CACHE_VAL(glibcxx_cv_c99_math, [
GCC_TRY_COMPILE_OR_LINK(
[#include <math.h>
volatile double d1, d2;
i = islessgreater(d1, d2);
i = islessgreater(d1, d2);
i = isunordered(d1, d2);
- ],[ac_c99_math=yes], [ac_c99_math=no])
+ ],[glibcxx_cv_c99_math=yes], [glibcxx_cv_c99_math=no])
])
- AC_MSG_RESULT($ac_c99_math)
- if test x"$ac_c99_math" = x"yes"; then
+ AC_MSG_RESULT($glibcxx_cv_c99_math)
+ if test x"$glibcxx_cv_c99_math" = x"yes"; then
AC_DEFINE(_GLIBCXX_USE_C99_MATH, 1,
- [Define if C99 functions or macros in <math.h> should be imported
- in <cmath> in namespace std.])
+ [Define if C99 functions or macros in <math.h> should be imported
+ in <cmath> in namespace std.])
fi
# Check for the existence of <complex.h> complex math functions.
# to the library function is emitted.
AC_CHECK_HEADERS(tgmath.h, ac_has_tgmath_h=yes, ac_has_tgmath_h=no)
AC_CHECK_HEADERS(complex.h, ac_has_complex_h=yes, ac_has_complex_h=no)
- ac_c99_complex=no;
+ glibcxx_cv_c99_complex=no;
if test x"$ac_has_complex_h" = x"yes"; then
AC_MSG_CHECKING([for ISO C99 support in <complex.h>])
GCC_TRY_COMPILE_OR_LINK(
tmpf = ctanf(tmpf);
tmpf = ctanhf(tmpf);
tmpf = cpowf(tmpf, tmpf);
+ tmpf = cprojf(tmpf);
d = cabs(tmpd);
d = carg(tmpd);
tmpd = ccos(tmpd);
tmpd = ctan(tmpd);
tmpd = ctanh(tmpd);
tmpd = cpow(tmpd, tmpd);
+ tmpd = cproj(tmpd);
ld = cabsl(tmpld);
ld = cargl(tmpld);
tmpld = ccosl(tmpld);
tmpld = ctanl(tmpld);
tmpld = ctanhl(tmpld);
tmpld = cpowl(tmpld, tmpld);
- ],[ac_c99_complex=yes], [ac_c99_complex=no])
+ tmpld = cprojl(tmpld);
+ ],[glibcxx_cv_c99_complex=yes], [glibcxx_cv_c99_complex=no])
fi
- AC_MSG_RESULT($ac_c99_complex)
- if test x"$ac_c99_complex" = x"yes"; then
+ AC_MSG_RESULT($glibcxx_cv_c99_complex)
+ if test x"$glibcxx_cv_c99_complex" = x"yes"; then
AC_DEFINE(_GLIBCXX_USE_C99_COMPLEX, 1,
- [Define if C99 functions in <complex.h> should be used in
- <complex>. Using compiler builtins for these functions requires
- corresponding C99 library functions to be present.])
+ [Define if C99 functions in <complex.h> should be used in
+ <complex>. Using compiler builtins for these functions requires
+ corresponding C99 library functions to be present.])
fi
# Check for the existence in <stdio.h> of vscanf, et. al.
AC_MSG_CHECKING([for ISO C99 support in <stdio.h>])
- AC_CACHE_VAL(ac_c99_stdio, [
+ AC_CACHE_VAL(glibcxx_cv_c99_stdio, [
GCC_TRY_COMPILE_OR_LINK(
[#include <stdio.h>
#include <stdarg.h>
void foo(char* fmt, ...)
{
va_list args; va_start(args, fmt);
- vfscanf(stderr, "%i", args);
+ vfscanf(stderr, "%i", args);
vscanf("%i", args);
vsnprintf(fmt, 0, "%i", args);
vsscanf(fmt, "%i", args);
}],
[snprintf("12", 0, "%i");],
- [ac_c99_stdio=yes], [ac_c99_stdio=no])
+ [glibcxx_cv_c99_stdio=yes], [glibcxx_cv_c99_stdio=no])
])
- AC_MSG_RESULT($ac_c99_stdio)
+ AC_MSG_RESULT($glibcxx_cv_c99_stdio)
# Check for the existence in <stdlib.h> of lldiv_t, et. al.
AC_MSG_CHECKING([for ISO C99 support in <stdlib.h>])
- AC_CACHE_VAL(ac_c99_stdlib, [
+ AC_CACHE_VAL(glibcxx_cv_c99_stdlib, [
GCC_TRY_COMPILE_OR_LINK(
[#include <stdlib.h>
volatile float f;
ll = mydivt.rem;
ll = atoll("10");
_Exit(0);
- ],[ac_c99_stdlib=yes], [ac_c99_stdlib=no])
+ ],[glibcxx_cv_c99_stdlib=yes], [glibcxx_cv_c99_stdlib=no])
])
- AC_MSG_RESULT($ac_c99_stdlib)
+ AC_MSG_RESULT($glibcxx_cv_c99_stdlib)
# Check for the existence in <wchar.h> of wcstold, etc.
- ac_c99_wchar=no;
+ glibcxx_cv_c99_wchar=no;
if test x"$ac_has_wchar_h" = xyes &&
test x"$ac_has_wctype_h" = xyes; then
- AC_MSG_CHECKING([for ISO C99 support in <wchar.h>])
+ AC_MSG_CHECKING([for ISO C99 support in <wchar.h>])
AC_TRY_COMPILE([#include <wchar.h>
- namespace test
- {
+ namespace test
+ {
using ::wcstold;
using ::wcstoll;
using ::wcstoull;
}
- ],[],[ac_c99_wchar=yes], [ac_c99_wchar=no])
+ ],[],[glibcxx_cv_c99_wchar=yes], [glibcxx_cv_c99_wchar=no])
# Checks for wide character functions that may not be present.
# Injection of these is wrapped with guard macros.
# NB: only put functions here, instead of immediately above, if
# absolutely necessary.
AC_TRY_COMPILE([#include <wchar.h>
- namespace test { using ::vfwscanf; } ], [],
+ namespace test { using ::vfwscanf; } ], [],
[AC_DEFINE(HAVE_VFWSCANF,1,
[Defined if vfwscanf exists.])],[])
AC_TRY_COMPILE([#include <wchar.h>
- namespace test { using ::vswscanf; } ], [],
+ namespace test { using ::vswscanf; } ], [],
[AC_DEFINE(HAVE_VSWSCANF,1,
[Defined if vswscanf exists.])],[])
AC_TRY_COMPILE([#include <wchar.h>
- namespace test { using ::vwscanf; } ], [],
+ namespace test { using ::vwscanf; } ], [],
[AC_DEFINE(HAVE_VWSCANF,1,[Defined if vwscanf exists.])],[])
AC_TRY_COMPILE([#include <wchar.h>
- namespace test { using ::wcstof; } ], [],
+ namespace test { using ::wcstof; } ], [],
[AC_DEFINE(HAVE_WCSTOF,1,[Defined if wcstof exists.])],[])
AC_TRY_COMPILE([#include <wctype.h>],
- [ wint_t t; int i = iswblank(t);],
+ [ wint_t t; int i = iswblank(t);],
[AC_DEFINE(HAVE_ISWBLANK,1,
[Defined if iswblank exists.])],[])
- AC_MSG_RESULT($ac_c99_wchar)
+ AC_MSG_RESULT($glibcxx_cv_c99_wchar)
fi
# Option parsed, now set things appropriately.
- if test x"$ac_c99_math" = x"no" ||
- test x"$ac_c99_complex" = x"no" ||
- test x"$ac_c99_stdio" = x"no" ||
- test x"$ac_c99_stdlib" = x"no" ||
- test x"$ac_c99_wchar" = x"no"; then
+ if test x"$glibcxx_cv_c99_math" = x"no" ||
+ test x"$glibcxx_cv_c99_complex" = x"no" ||
+ test x"$glibcxx_cv_c99_stdio" = x"no" ||
+ test x"$glibcxx_cv_c99_stdlib" = x"no" ||
+ test x"$glibcxx_cv_c99_wchar" = x"no"; then
enable_c99=no;
else
AC_DEFINE(_GLIBCXX_USE_C99, 1,
LIBS="$ac_save_LIBS"
CXXFLAGS="$ac_save_CXXFLAGS"
AC_LANG_RESTORE
- fi
+ fi
AC_MSG_CHECKING([for fully enabled ISO C99 support])
AC_MSG_RESULT($enable_c99)
])
+dnl
+dnl Check for clock_gettime, nanosleep and sched_yield, used in the
+dnl implementation of 20.8.5 [time.clock], and 30.2.2 [thread.thread.this]
+dnl in the current C++0x working draft.
+dnl
+dnl --enable-libstdcxx-time
+dnl --enable-libstdcxx-time=yes
+dnl checks for the availability of monotonic and realtime clocks,
+dnl nanosleep and sched_yield in libc and libposix4 and, in case, links
+dnl the latter
+dnl --enable-libstdcxx-time=rt
+dnl also searches (and, in case, links) librt. Note that this is
+dnl not always desirable because, in glibc, for example, in turn it
+dnl triggers the linking of libpthread too, which activates locking,
+dnl a large overhead for single-thread programs.
+dnl --enable-libstdcxx-time=no
+dnl --disable-libstdcxx-time
+dnl disables the checks completely
+dnl
+AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME], [
+
+ AC_MSG_CHECKING([for clock_gettime, nanosleep and sched_yield])
+ GLIBCXX_ENABLE(libstdcxx-time,$1,[[[=KIND]]],
+ [use KIND for check type],
+ [permit yes|no|rt])
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -fno-exceptions"
+ ac_save_LIBS="$LIBS"
+
+ ac_has_clock_monotonic=no
+ ac_has_clock_realtime=no
+ AC_MSG_RESULT($enable_libstdcxx_time)
+
+ if test x"$enable_libstdcxx_time" != x"no"; then
+
+ if test x"$enable_libstdcxx_time" = x"rt"; then
+ AC_SEARCH_LIBS(clock_gettime, [rt posix4])
+ AC_SEARCH_LIBS(nanosleep, [rt posix4])
+ else
+ AC_SEARCH_LIBS(clock_gettime, [posix4])
+ AC_SEARCH_LIBS(nanosleep, [posix4])
+ fi
+
+ case "$ac_cv_search_clock_gettime" in
+ -l*) GLIBCXX_LIBS=$ac_cv_search_clock_gettime
+ ;;
+ esac
+ case "$ac_cv_search_nanosleep" in
+ -l*) GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_nanosleep"
+ ;;
+ esac
+
+ AC_SEARCH_LIBS(sched_yield, [rt posix4])
+
+ case "$ac_cv_search_sched_yield" in
+ -lposix4*)
+ GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_sched_yield"
+ AC_DEFINE(_GLIBCXX_USE_SCHED_YIELD, 1,
+ [ Defined if sched_yield is available. ])
+ ;;
+ -lrt*)
+ if test x"$enable_libstdcxx_time" = x"rt"; then
+ GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_sched_yield"
+ AC_DEFINE(_GLIBCXX_USE_SCHED_YIELD, 1,
+ [ Defined if sched_yield is available. ])
+ fi
+ ;;
+ *)
+ AC_DEFINE(_GLIBCXX_USE_SCHED_YIELD, 1,
+ [ Defined if sched_yield is available. ])
+ ;;
+ esac
+
+ AC_CHECK_HEADERS(unistd.h, ac_has_unistd_h=yes, ac_has_unistd_h=no)
+
+ if test x"$ac_has_unistd_h" = x"yes"; then
+ AC_MSG_CHECKING([for monotonic clock])
+ AC_TRY_LINK(
+ [#include <unistd.h>
+ #include <time.h>
+ ],
+ [#if _POSIX_TIMERS > 0 && defined(_POSIX_MONOTONIC_CLOCK)
+ timespec tp;
+ #endif
+ clock_gettime(CLOCK_MONOTONIC, &tp);
+ ], [ac_has_clock_monotonic=yes], [ac_has_clock_monotonic=no])
+
+ AC_MSG_RESULT($ac_has_clock_monotonic)
+
+ AC_MSG_CHECKING([for realtime clock])
+ AC_TRY_LINK(
+ [#include <unistd.h>
+ #include <time.h>
+ ],
+ [#if _POSIX_TIMERS > 0
+ timespec tp;
+ #endif
+ clock_gettime(CLOCK_REALTIME, &tp);
+ ], [ac_has_clock_realtime=yes], [ac_has_clock_realtime=no])
+
+ AC_MSG_RESULT($ac_has_clock_realtime)
+
+ AC_MSG_CHECKING([for nanosleep])
+ AC_TRY_LINK(
+ [#include <unistd.h>
+ #include <time.h>
+ ],
+ [#if _POSIX_TIMERS > 0
+ timespec tp;
+ #endif
+ nanosleep(&tp, 0);
+ ], [ac_has_nanosleep=yes], [ac_has_nanosleep=no])
+
+ AC_MSG_RESULT($ac_has_nanosleep)
+ fi
+ fi
+
+ if test x"$ac_has_clock_monotonic" = x"yes"; then
+ AC_DEFINE(_GLIBCXX_USE_CLOCK_MONOTONIC, 1,
+ [ Defined if clock_gettime has monotonic clock support. ])
+ fi
+
+ if test x"$ac_has_clock_realtime" = x"yes"; then
+ AC_DEFINE(_GLIBCXX_USE_CLOCK_REALTIME, 1,
+ [ Defined if clock_gettime has realtime clock support. ])
+ fi
+
+ if test x"$ac_has_nanosleep" = x"yes"; then
+ AC_DEFINE(_GLIBCXX_USE_NANOSLEEP, 1,
+ [ Defined if nanosleep is available. ])
+ fi
+
+ AC_SUBST(GLIBCXX_LIBS)
+
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ LIBS="$ac_save_LIBS"
+ AC_LANG_RESTORE
+])
+
+dnl
+dnl Check for gettimeofday, used in the implementation of 20.8.5
+dnl [time.clock] in the current C++0x working draft.
+dnl
+AC_DEFUN([GLIBCXX_CHECK_GETTIMEOFDAY], [
+
+ AC_MSG_CHECKING([for gettimeofday])
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -fno-exceptions"
+
+ ac_has_gettimeofday=no;
+ AC_CHECK_HEADERS(sys/time.h, ac_has_sys_time_h=yes, ac_has_sys_time_h=no)
+ if test x"$ac_has_sys_time_h" = x"yes"; then
+ AC_MSG_CHECKING([for gettimeofday])
+ GCC_TRY_COMPILE_OR_LINK([#include <sys/time.h>],
+ [timeval tv; gettimeofday(&tv, 0);],
+ [ac_has_gettimeofday=yes], [ac_has_gettimeofday=no])
+
+ AC_MSG_RESULT($ac_has_gettimeofday)
+ fi
+
+ if test x"$ac_has_gettimeofday" = x"yes"; then
+ AC_DEFINE(_GLIBCXX_USE_GETTIMEOFDAY, 1,
+ [ Defined if gettimeofday is available. ])
+ fi
+
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ AC_LANG_RESTORE
+])
+
dnl
dnl Check for ISO/IEC 9899:1999 "C99" support to ISO/IEC DTR 19768 "TR1"
dnl facilities in Chapter 8, "C compatibility".
if test x"$ac_has_complex_h" = x"yes"; then
AC_MSG_CHECKING([for ISO C99 support to TR1 in <complex.h>])
AC_TRY_COMPILE([#include <complex.h>],
- [typedef __complex__ float float_type; float_type tmpf;
- cacosf(tmpf);
- casinf(tmpf);
- catanf(tmpf);
- cacoshf(tmpf);
- casinhf(tmpf);
- catanhf(tmpf);
+ [typedef __complex__ float float_type; float_type tmpf;
+ cacosf(tmpf);
+ casinf(tmpf);
+ catanf(tmpf);
+ cacoshf(tmpf);
+ casinhf(tmpf);
+ catanhf(tmpf);
typedef __complex__ double double_type; double_type tmpd;
- cacos(tmpd);
- casin(tmpd);
- catan(tmpd);
- cacosh(tmpd);
- casinh(tmpd);
- catanh(tmpd);
+ cacos(tmpd);
+ casin(tmpd);
+ catan(tmpd);
+ cacosh(tmpd);
+ casinh(tmpd);
+ catanh(tmpd);
typedef __complex__ long double ld_type; ld_type tmpld;
- cacosl(tmpld);
- casinl(tmpld);
- catanl(tmpld);
- cacoshl(tmpld);
- casinhl(tmpld);
- catanhl(tmpld);
+ cacosl(tmpld);
+ casinl(tmpld);
+ catanl(tmpld);
+ cacoshl(tmpld);
+ casinhl(tmpld);
+ catanhl(tmpld);
],[ac_c99_complex_tr1=yes], [ac_c99_complex_tr1=no])
fi
AC_MSG_RESULT($ac_c99_complex_tr1)
if test x"$ac_c99_complex_tr1" = x"yes"; then
AC_DEFINE(_GLIBCXX_USE_C99_COMPLEX_TR1, 1,
- [Define if C99 functions in <complex.h> should be used in
- <tr1/complex>. Using compiler builtins for these functions
+ [Define if C99 functions in <complex.h> should be used in
+ <tr1/complex>. Using compiler builtins for these functions
requires corresponding C99 library functions to be present.])
fi
# Check for the existence of <ctype.h> functions.
AC_MSG_CHECKING([for ISO C99 support to TR1 in <ctype.h>])
- AC_CACHE_VAL(ac_c99_ctype_tr1, [
+ AC_CACHE_VAL(glibcxx_cv_c99_ctype_tr1, [
AC_TRY_COMPILE([#include <ctype.h>],
- [int ch;
- int ret;
- ret = isblank(ch);
- ],[ac_c99_ctype_tr1=yes], [ac_c99_ctype_tr1=no])
+ [int ch;
+ int ret;
+ ret = isblank(ch);
+ ],[glibcxx_cv_c99_ctype_tr1=yes],
+ [glibcxx_cv_c99_ctype_tr1=no])
])
- AC_MSG_RESULT($ac_c99_ctype_tr1)
- if test x"$ac_c99_ctype_tr1" = x"yes"; then
+ AC_MSG_RESULT($glibcxx_cv_c99_ctype_tr1)
+ if test x"$glibcxx_cv_c99_ctype_tr1" = x"yes"; then
AC_DEFINE(_GLIBCXX_USE_C99_CTYPE_TR1, 1,
- [Define if C99 functions in <ctype.h> should be imported in
+ [Define if C99 functions in <ctype.h> should be imported in
<tr1/cctype> in namespace std::tr1.])
fi
if test x"$ac_has_fenv_h" = x"yes"; then
AC_MSG_CHECKING([for ISO C99 support to TR1 in <fenv.h>])
AC_TRY_COMPILE([#include <fenv.h>],
- [int except, mode;
- fexcept_t* pflag;
- fenv_t* penv;
- int ret;
- ret = feclearexcept(except);
- ret = fegetexceptflag(pflag, except);
- ret = feraiseexcept(except);
- ret = fesetexceptflag(pflag, except);
- ret = fetestexcept(except);
- ret = fegetround();
- ret = fesetround(mode);
- ret = fegetenv(penv);
- ret = feholdexcept(penv);
- ret = fesetenv(penv);
- ret = feupdateenv(penv);
+ [int except, mode;
+ fexcept_t* pflag;
+ fenv_t* penv;
+ int ret;
+ ret = feclearexcept(except);
+ ret = fegetexceptflag(pflag, except);
+ ret = feraiseexcept(except);
+ ret = fesetexceptflag(pflag, except);
+ ret = fetestexcept(except);
+ ret = fegetround();
+ ret = fesetround(mode);
+ ret = fegetenv(penv);
+ ret = feholdexcept(penv);
+ ret = fesetenv(penv);
+ ret = feupdateenv(penv);
],[ac_c99_fenv_tr1=yes], [ac_c99_fenv_tr1=no])
fi
AC_MSG_RESULT($ac_c99_fenv_tr1)
if test x"$ac_c99_fenv_tr1" = x"yes"; then
AC_DEFINE(_GLIBCXX_USE_C99_FENV_TR1, 1,
- [Define if C99 functions in <fenv.h> should be imported in
+ [Define if C99 functions in <fenv.h> should be imported in
<tr1/cfenv> in namespace std::tr1.])
fi
# Check for the existence of <stdint.h> types.
AC_MSG_CHECKING([for ISO C99 support to TR1 in <stdint.h>])
- AC_CACHE_VAL(ac_c99_stdint_tr1, [
- AC_TRY_COMPILE([#include <stdint.h>],
- [typedef int8_t my_int8_t;
- typedef int16_t my_int16_t;
- typedef int32_t my_int32_t;
- typedef int64_t my_int64_t;
- typedef int_fast8_t my_int_fast8_t;
- typedef int_fast16_t my_int_fast16_t;
- typedef int_fast32_t my_int_fast32_t;
- typedef int_fast64_t my_int_fast64_t;
- typedef int_least8_t my_int_least8_t;
- typedef int_least16_t my_int_least16_t;
- typedef int_least32_t my_int_least32_t;
- typedef int_least64_t my_int_least64_t;
+ AC_CACHE_VAL(glibcxx_cv_c99_stdint_tr1, [
+ AC_TRY_COMPILE([#define __STDC_LIMIT_MACROS
+ #define __STDC_CONSTANT_MACROS
+ #include <stdint.h>],
+ [typedef int8_t my_int8_t;
+ my_int8_t i8 = INT8_MIN;
+ i8 = INT8_MAX;
+ typedef int16_t my_int16_t;
+ my_int16_t i16 = INT16_MIN;
+ i16 = INT16_MAX;
+ typedef int32_t my_int32_t;
+ my_int32_t i32 = INT32_MIN;
+ i32 = INT32_MAX;
+ typedef int64_t my_int64_t;
+ my_int64_t i64 = INT64_MIN;
+ i64 = INT64_MAX;
+ typedef int_fast8_t my_int_fast8_t;
+ my_int_fast8_t if8 = INT_FAST8_MIN;
+ if8 = INT_FAST8_MAX;
+ typedef int_fast16_t my_int_fast16_t;
+ my_int_fast16_t if16 = INT_FAST16_MIN;
+ if16 = INT_FAST16_MAX;
+ typedef int_fast32_t my_int_fast32_t;
+ my_int_fast32_t if32 = INT_FAST32_MIN;
+ if32 = INT_FAST32_MAX;
+ typedef int_fast64_t my_int_fast64_t;
+ my_int_fast64_t if64 = INT_FAST64_MIN;
+ if64 = INT_FAST64_MAX;
+ typedef int_least8_t my_int_least8_t;
+ my_int_least8_t il8 = INT_LEAST8_MIN;
+ il8 = INT_LEAST8_MAX;
+ typedef int_least16_t my_int_least16_t;
+ my_int_least16_t il16 = INT_LEAST16_MIN;
+ il16 = INT_LEAST16_MAX;
+ typedef int_least32_t my_int_least32_t;
+ my_int_least32_t il32 = INT_LEAST32_MIN;
+ il32 = INT_LEAST32_MAX;
+ typedef int_least64_t my_int_least64_t;
+ my_int_least64_t il64 = INT_LEAST64_MIN;
+ il64 = INT_LEAST64_MAX;
typedef intmax_t my_intmax_t;
+ my_intmax_t im = INTMAX_MAX;
+ im = INTMAX_MIN;
typedef intptr_t my_intptr_t;
- typedef uint8_t my_uint8_t;
- typedef uint16_t my_uint16_t;
- typedef uint32_t my_uint32_t;
- typedef uint64_t my_uint64_t;
- typedef uint_fast8_t my_uint_fast8_t;
- typedef uint_fast16_t my_uint_fast16_t;
- typedef uint_fast32_t my_uint_fast32_t;
- typedef uint_fast64_t my_uint_fast64_t;
- typedef uint_least8_t my_uint_least8_t;
- typedef uint_least16_t my_uint_least16_t;
- typedef uint_least32_t my_uint_least32_t;
- typedef uint_least64_t my_uint_least64_t;
+ my_intptr_t ip = INTPTR_MAX;
+ ip = INTPTR_MIN;
+ typedef uint8_t my_uint8_t;
+ my_uint8_t ui8 = UINT8_MAX;
+ ui8 = UINT8_MAX;
+ typedef uint16_t my_uint16_t;
+ my_uint16_t ui16 = UINT16_MAX;
+ ui16 = UINT16_MAX;
+ typedef uint32_t my_uint32_t;
+ my_uint32_t ui32 = UINT32_MAX;
+ ui32 = UINT32_MAX;
+ typedef uint64_t my_uint64_t;
+ my_uint64_t ui64 = UINT64_MAX;
+ ui64 = UINT64_MAX;
+ typedef uint_fast8_t my_uint_fast8_t;
+ my_uint_fast8_t uif8 = UINT_FAST8_MAX;
+ uif8 = UINT_FAST8_MAX;
+ typedef uint_fast16_t my_uint_fast16_t;
+ my_uint_fast16_t uif16 = UINT_FAST16_MAX;
+ uif16 = UINT_FAST16_MAX;
+ typedef uint_fast32_t my_uint_fast32_t;
+ my_uint_fast32_t uif32 = UINT_FAST32_MAX;
+ uif32 = UINT_FAST32_MAX;
+ typedef uint_fast64_t my_uint_fast64_t;
+ my_uint_fast64_t uif64 = UINT_FAST64_MAX;
+ uif64 = UINT_FAST64_MAX;
+ typedef uint_least8_t my_uint_least8_t;
+ my_uint_least8_t uil8 = UINT_LEAST8_MAX;
+ uil8 = UINT_LEAST8_MAX;
+ typedef uint_least16_t my_uint_least16_t;
+ my_uint_least16_t uil16 = UINT_LEAST16_MAX;
+ uil16 = UINT_LEAST16_MAX;
+ typedef uint_least32_t my_uint_least32_t;
+ my_uint_least32_t uil32 = UINT_LEAST32_MAX;
+ uil32 = UINT_LEAST32_MAX;
+ typedef uint_least64_t my_uint_least64_t;
+ my_uint_least64_t uil64 = UINT_LEAST64_MAX;
+ uil64 = UINT_LEAST64_MAX;
typedef uintmax_t my_uintmax_t;
+ my_uintmax_t uim = UINTMAX_MAX;
+ uim = UINTMAX_MAX;
typedef uintptr_t my_uintptr_t;
- ],[ac_c99_stdint_tr1=yes], [ac_c99_stdint_tr1=no])
+ my_uintptr_t uip = UINTPTR_MAX;
+ uip = UINTPTR_MAX;
+ ],[glibcxx_cv_c99_stdint_tr1=yes],
+ [glibcxx_cv_c99_stdint_tr1=no])
])
- AC_MSG_RESULT($ac_c99_stdint_tr1)
- if test x"$ac_c99_stdint_tr1" = x"yes"; then
+ AC_MSG_RESULT($glibcxx_cv_c99_stdint_tr1)
+ if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
AC_DEFINE(_GLIBCXX_USE_C99_STDINT_TR1, 1,
- [Define if C99 types in <stdint.h> should be imported in
+ [Define if C99 types in <stdint.h> should be imported in
<tr1/cstdint> in namespace std::tr1.])
fi
# Check for the existence of <math.h> functions.
AC_MSG_CHECKING([for ISO C99 support to TR1 in <math.h>])
- AC_CACHE_VAL(ac_c99_math_tr1, [
+ AC_CACHE_VAL(glibcxx_cv_c99_math_tr1, [
AC_TRY_COMPILE([#include <math.h>],
- [typedef double_t my_double_t;
- typedef float_t my_float_t;
- acosh(0.0);
- acoshf(0.0f);
- acoshl(0.0l);
- asinh(0.0);
- asinhf(0.0f);
- asinhl(0.0l);
- atanh(0.0);
- atanhf(0.0f);
- atanhl(0.0l);
- cbrt(0.0);
- cbrtf(0.0f);
- cbrtl(0.0l);
- copysign(0.0, 0.0);
- copysignf(0.0f, 0.0f);
- copysignl(0.0l, 0.0l);
- erf(0.0);
- erff(0.0f);
- erfl(0.0l);
- erfc(0.0);
- erfcf(0.0f);
- erfcl(0.0l);
- exp2(0.0);
- exp2f(0.0f);
- exp2l(0.0l);
- expm1(0.0);
- expm1f(0.0f);
- expm1l(0.0l);
- fdim(0.0, 0.0);
- fdimf(0.0f, 0.0f);
- fdiml(0.0l, 0.0l);
- fma(0.0, 0.0, 0.0);
- fmaf(0.0f, 0.0f, 0.0f);
- fmal(0.0l, 0.0l, 0.0l);
- fmax(0.0, 0.0);
- fmaxf(0.0f, 0.0f);
- fmaxl(0.0l, 0.0l);
- fmin(0.0, 0.0);
- fminf(0.0f, 0.0f);
- fminl(0.0l, 0.0l);
- hypot(0.0, 0.0);
- hypotf(0.0f, 0.0f);
- hypotl(0.0l, 0.0l);
- ilogb(0.0);
- ilogbf(0.0f);
- ilogbl(0.0l);
- lgamma(0.0);
- lgammaf(0.0f);
- lgammal(0.0l);
- llrint(0.0);
- llrintf(0.0f);
- llrintl(0.0l);
- llround(0.0);
- llroundf(0.0f);
- llroundl(0.0l);
- log1p(0.0);
- log1pf(0.0f);
- log1pl(0.0l);
- log2(0.0);
- log2f(0.0f);
- log2l(0.0l);
- logb(0.0);
- logbf(0.0f);
- logbl(0.0l);
- lrint(0.0);
- lrintf(0.0f);
- lrintl(0.0l);
- lround(0.0);
- lroundf(0.0f);
- lroundl(0.0l);
- nan(0);
- nanf(0);
- nanl(0);
- nearbyint(0.0);
- nearbyintf(0.0f);
- nearbyintl(0.0l);
- nextafter(0.0, 0.0);
- nextafterf(0.0f, 0.0f);
- nextafterl(0.0l, 0.0l);
- nexttoward(0.0, 0.0);
- nexttowardf(0.0f, 0.0f);
- nexttowardl(0.0l, 0.0l);
- remainder(0.0, 0.0);
- remainderf(0.0f, 0.0f);
- remainderl(0.0l, 0.0l);
- remquo(0.0, 0.0, 0);
- remquo(0.0f, 0.0f, 0);
- remquo(0.0l, 0.0l, 0);
- rint(0.0);
- rintf(0.0f);
- rintl(0.0l);
- round(0.0);
- roundf(0.0f);
- roundl(0.0l);
- scalbln(0.0, 0l);
- scalblnf(0.0f, 0l);
- scalblnl(0.0l, 0l);
- scalbn(0.0, 0);
- scalbnf(0.0f, 0);
- scalbnl(0.0l, 0);
- tgamma(0.0);
- tgammaf(0.0f);
- tgammal(0.0l);
- trunc(0.0);
- truncf(0.0f);
- truncl(0.0l);
- ],[ac_c99_math_tr1=yes], [ac_c99_math_tr1=no])
+ [typedef double_t my_double_t;
+ typedef float_t my_float_t;
+ acosh(0.0);
+ acoshf(0.0f);
+ acoshl(0.0l);
+ asinh(0.0);
+ asinhf(0.0f);
+ asinhl(0.0l);
+ atanh(0.0);
+ atanhf(0.0f);
+ atanhl(0.0l);
+ cbrt(0.0);
+ cbrtf(0.0f);
+ cbrtl(0.0l);
+ copysign(0.0, 0.0);
+ copysignf(0.0f, 0.0f);
+ copysignl(0.0l, 0.0l);
+ erf(0.0);
+ erff(0.0f);
+ erfl(0.0l);
+ erfc(0.0);
+ erfcf(0.0f);
+ erfcl(0.0l);
+ exp2(0.0);
+ exp2f(0.0f);
+ exp2l(0.0l);
+ expm1(0.0);
+ expm1f(0.0f);
+ expm1l(0.0l);
+ fdim(0.0, 0.0);
+ fdimf(0.0f, 0.0f);
+ fdiml(0.0l, 0.0l);
+ fma(0.0, 0.0, 0.0);
+ fmaf(0.0f, 0.0f, 0.0f);
+ fmal(0.0l, 0.0l, 0.0l);
+ fmax(0.0, 0.0);
+ fmaxf(0.0f, 0.0f);
+ fmaxl(0.0l, 0.0l);
+ fmin(0.0, 0.0);
+ fminf(0.0f, 0.0f);
+ fminl(0.0l, 0.0l);
+ hypot(0.0, 0.0);
+ hypotf(0.0f, 0.0f);
+ hypotl(0.0l, 0.0l);
+ ilogb(0.0);
+ ilogbf(0.0f);
+ ilogbl(0.0l);
+ lgamma(0.0);
+ lgammaf(0.0f);
+ lgammal(0.0l);
+ llrint(0.0);
+ llrintf(0.0f);
+ llrintl(0.0l);
+ llround(0.0);
+ llroundf(0.0f);
+ llroundl(0.0l);
+ log1p(0.0);
+ log1pf(0.0f);
+ log1pl(0.0l);
+ log2(0.0);
+ log2f(0.0f);
+ log2l(0.0l);
+ logb(0.0);
+ logbf(0.0f);
+ logbl(0.0l);
+ lrint(0.0);
+ lrintf(0.0f);
+ lrintl(0.0l);
+ lround(0.0);
+ lroundf(0.0f);
+ lroundl(0.0l);
+ nan(0);
+ nanf(0);
+ nanl(0);
+ nearbyint(0.0);
+ nearbyintf(0.0f);
+ nearbyintl(0.0l);
+ nextafter(0.0, 0.0);
+ nextafterf(0.0f, 0.0f);
+ nextafterl(0.0l, 0.0l);
+ nexttoward(0.0, 0.0);
+ nexttowardf(0.0f, 0.0f);
+ nexttowardl(0.0l, 0.0l);
+ remainder(0.0, 0.0);
+ remainderf(0.0f, 0.0f);
+ remainderl(0.0l, 0.0l);
+ remquo(0.0, 0.0, 0);
+ remquof(0.0f, 0.0f, 0);
+ remquol(0.0l, 0.0l, 0);
+ rint(0.0);
+ rintf(0.0f);
+ rintl(0.0l);
+ round(0.0);
+ roundf(0.0f);
+ roundl(0.0l);
+ scalbln(0.0, 0l);
+ scalblnf(0.0f, 0l);
+ scalblnl(0.0l, 0l);
+ scalbn(0.0, 0);
+ scalbnf(0.0f, 0);
+ scalbnl(0.0l, 0);
+ tgamma(0.0);
+ tgammaf(0.0f);
+ tgammal(0.0l);
+ trunc(0.0);
+ truncf(0.0f);
+ truncl(0.0l);
+ ],[glibcxx_cv_c99_math_tr1=yes], [glibcxx_cv_c99_math_tr1=no])
])
- AC_MSG_RESULT($ac_c99_math_tr1)
- if test x"$ac_c99_math_tr1" = x"yes"; then
+ AC_MSG_RESULT($glibcxx_cv_c99_math_tr1)
+ if test x"$glibcxx_cv_c99_math_tr1" = x"yes"; then
AC_DEFINE(_GLIBCXX_USE_C99_MATH_TR1, 1,
- [Define if C99 functions or macros in <math.h> should be imported
- in <tr1/cmath> in namespace std::tr1.])
+ [Define if C99 functions or macros in <math.h> should be imported
+ in <tr1/cmath> in namespace std::tr1.])
fi
# Check for the existence of <inttypes.h> functions (NB: doesn't make
- # sense if the previous check fails, per C99, 7.8/1).
+ # sense if the glibcxx_cv_c99_stdint_tr1 check fails, per C99, 7.8/1).
ac_c99_inttypes_tr1=no;
- if test x"$ac_c99_stdint_tr1" = x"yes"; then
+ if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
AC_MSG_CHECKING([for ISO C99 support to TR1 in <inttypes.h>])
AC_TRY_COMPILE([#include <inttypes.h>],
- [intmax_t i, numer, denom, base;
- const char* s;
- char** endptr;
- intmax_t ret = imaxabs(i);
- imaxdiv_t dret = imaxdiv(numer, denom);
- ret = strtoimax(s, endptr, base);
- uintmax_t uret = strtoumax(s, endptr, base);
- ],[ac_c99_inttypes_tr1=yes], [ac_c99_inttypes_tr1=no])
+ [intmax_t i, numer, denom, base;
+ const char* s;
+ char** endptr;
+ intmax_t ret = imaxabs(i);
+ imaxdiv_t dret = imaxdiv(numer, denom);
+ ret = strtoimax(s, endptr, base);
+ uintmax_t uret = strtoumax(s, endptr, base);
+ ],[ac_c99_inttypes_tr1=yes], [ac_c99_inttypes_tr1=no])
fi
AC_MSG_RESULT($ac_c99_inttypes_tr1)
if test x"$ac_c99_inttypes_tr1" = x"yes"; then
AC_DEFINE(_GLIBCXX_USE_C99_INTTYPES_TR1, 1,
- [Define if C99 functions in <inttypes.h> should be imported in
- <tr1/cinttypes> in namespace std::tr1.])
+ [Define if C99 functions in <inttypes.h> should be imported in
+ <tr1/cinttypes> in namespace std::tr1.])
fi
- # Check for the existence of the <stdbool.h> header.
+ # Check for the existence of whcar_t <inttypes.h> functions (NB: doesn't
+ # make sense if the glibcxx_cv_c99_stdint_tr1 check fails, per C99, 7.8/1).
+ ac_c99_inttypes_wchar_t_tr1=no;
+ if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
+ AC_MSG_CHECKING([for wchar_t ISO C99 support to TR1 in <inttypes.h>])
+ AC_TRY_COMPILE([#include <inttypes.h>],
+ [intmax_t base;
+ const wchar_t* s;
+ wchar_t** endptr;
+ intmax_t ret = wcstoimax(s, endptr, base);
+ uintmax_t uret = wcstoumax(s, endptr, base);
+ ],[ac_c99_inttypes_wchar_t_tr1=yes],
+ [ac_c99_inttypes_wchar_t_tr1=no])
+ fi
+ AC_MSG_RESULT($ac_c99_inttypes_wchar_t_tr1)
+ if test x"$ac_c99_inttypes_wchar_t_tr1" = x"yes"; then
+ AC_DEFINE(_GLIBCXX_USE_C99_INTTYPES_WCHAR_T_TR1, 1,
+ [Define if wchar_t C99 functions in <inttypes.h> should be
+ imported in <tr1/cinttypes> in namespace std::tr1.])
+ fi
+
+ # Check for the existence of the <stdbool.h> header.
AC_CHECK_HEADERS(stdbool.h)
CXXFLAGS="$ac_save_CXXFLAGS"
])
dnl
-dnl Check whether "dev/random" and "dev/urandom" are available for the
+dnl Check whether "/dev/random" and "/dev/urandom" are available for the
dnl random_device of "TR1" (Chapter 5.1, "Random number generation").
dnl
AC_DEFUN([GLIBCXX_CHECK_RANDOM_TR1], [
- AC_MSG_CHECKING([for "dev/random" and "dev/urandom" for TR1 random_device])
- AC_CACHE_VAL(ac_random_tr1, [
- AC_TRY_RUN([#include <stdio.h>
- int main()
- {
- return !(fopen("/dev/random", "r")
- && fopen("/dev/urandom", "r"));
- }
- ],
- [ac_random_tr1=yes], [ac_random_tr1=no],
- [ac_random_tr1=no])
+ AC_MSG_CHECKING([for "/dev/random" and "/dev/urandom" for TR1 random_device])
+ AC_CACHE_VAL(glibcxx_cv_random_tr1, [
+ if test -r /dev/random && test -r /dev/urandom; then
+ glibcxx_cv_random_tr1=yes;
+ else
+ glibcxx_cv_random_tr1=no;
+ fi
])
- AC_MSG_RESULT($ac_random_tr1)
- if test x"$ac_random_tr1" = x"yes"; then
+ AC_MSG_RESULT($glibcxx_cv_random_tr1)
+
+ if test x"$glibcxx_cv_random_tr1" = x"yes"; then
AC_DEFINE(_GLIBCXX_USE_RANDOM_TR1, 1,
- [Define if dev/random and dev/urandom are available for
+ [Define if /dev/random and /dev/urandom are available for
the random_device of TR1 (Chapter 5.1).])
fi
])
dnl
-dnl Check whether macros, etc are present for <system_error>
+dnl Compute the EOF, SEEK_CUR, and SEEK_END integer constants.
dnl
-AC_DEFUN([GLIBCXX_CHECK_SYSTEM_ERROR], [
-
- AC_MSG_CHECKING([for EOWNERDEAD])
- AC_CACHE_VAL(ac_system_error1, [
- AC_TRY_COMPILE([#include <errno.h>], [ int i = EOWNERDEAD; ],
- [ac_system_error1=yes], [ac_system_error1=no])
- ])
- AC_MSG_RESULT($ac_system_error1)
- if test x"$ac_system_error1" = x"yes"; then
- AC_DEFINE(HAVE_EOWNERDEAD, 1, [Define if EOWNERDEAD exists.])
- fi
-
- AC_MSG_CHECKING([for ENOTRECOVERABLE])
- AC_CACHE_VAL(ac_system_error2, [
- AC_TRY_COMPILE([#include <errno.h>], [ int i = ENOTRECOVERABLE; ],
- [ac_system_error2=yes], [ac_system_error2=no])
- ])
- AC_MSG_RESULT($ac_system_error2)
- if test x"$ac_system_error2" = x"yes"; then
- AC_DEFINE(HAVE_ENOTRECOVERABLE, 1, [Define if ENOTRECOVERABLE exists.])
- fi
-
- AC_MSG_CHECKING([for ENOLINK])
- AC_CACHE_VAL(ac_system_error3, [
- AC_TRY_COMPILE([#include <errno.h>], [ int i = ENOLINK; ],
- [ac_system_error3=yes], [ac_system_error3=no])
- ])
- AC_MSG_RESULT($ac_system_error3)
- if test x"$ac_system_error3" = x"yes"; then
- AC_DEFINE(HAVE_ENOLINK, 1, [Define if ENOLINK exists.])
- fi
-
- AC_MSG_CHECKING([for EPROTO])
- AC_CACHE_VAL(ac_system_error_4, [
- AC_TRY_COMPILE([#include <errno.h>], [ int i = EPROTO; ],
- [ac_system_error_4=yes], [ac_system_error_4=no])
- ])
- AC_MSG_RESULT($ac_system_error_4)
- if test x"$ac_system_error_4" = x"yes"; then
- AC_DEFINE(HAVE_EPROTO, 1, [Define if EPROTO exists.])
- fi
-
- AC_MSG_CHECKING([for ENODATA])
- AC_CACHE_VAL(ac_system_error_5, [
- AC_TRY_COMPILE([#include <errno.h>], [ int i = ENODATA; ],
- [ac_system_error_5=yes], [ac_system_error_5=no])
- ])
- AC_MSG_RESULT($ac_system_error_5)
- if test x"$ac_system_error_5" = x"yes"; then
- AC_DEFINE(HAVE_ENODATA, 1, [Define if ENODATA exists.])
- fi
+AC_DEFUN([GLIBCXX_COMPUTE_STDIO_INTEGER_CONSTANTS], [
- AC_MSG_CHECKING([for ENOSR])
- AC_CACHE_VAL(ac_system_error_6, [
- AC_TRY_COMPILE([#include <errno.h>], [ int i = ENOSR; ],
- [ac_system_error_6=yes], [ac_system_error_6=no])
+ AC_CACHE_CHECK([for the value of EOF], glibcxx_cv_stdio_eof, [
+ AC_COMPUTE_INT([glibcxx_cv_stdio_eof], [[EOF]],
+ [#include <stdio.h>],
+ [AC_MSG_ERROR([computing EOF failed])])
])
- AC_MSG_RESULT($ac_system_error_6)
- if test x"$ac_system_error_6" = x"yes"; then
- AC_DEFINE(HAVE_ENOSR, 1, [Define if ENOSR exists.])
- fi
+ AC_DEFINE_UNQUOTED(_GLIBCXX_STDIO_EOF, $glibcxx_cv_stdio_eof,
+ [Define to the value of the EOF integer constant.])
- AC_MSG_CHECKING([for ENOSTR])
- AC_CACHE_VAL(ac_system_error_7, [
- AC_TRY_COMPILE([#include <errno.h>], [ int i = ENOSTR; ],
- [ac_system_error_7=yes], [ac_system_error_7=no])
+ AC_CACHE_CHECK([for the value of SEEK_CUR], glibcxx_cv_stdio_seek_cur, [
+ AC_COMPUTE_INT([glibcxx_cv_stdio_seek_cur], [[SEEK_CUR]],
+ [#include <stdio.h>],
+ [AC_MSG_ERROR([computing SEEK_CUR failed])])
])
- AC_MSG_RESULT($ac_system_error_7)
- if test x"$ac_system_error_7" = x"yes"; then
- AC_DEFINE(HAVE_ENOSTR, 1, [Define if ENOSTR exists.])
- fi
+ AC_DEFINE_UNQUOTED(_GLIBCXX_STDIO_SEEK_CUR, $glibcxx_cv_stdio_seek_cur,
+ [Define to the value of the SEEK_CUR integer constant.])
- AC_MSG_CHECKING([for ETIME])
- AC_CACHE_VAL(ac_system_error_8, [
- AC_TRY_COMPILE([#include <errno.h>], [ int i = ETIME; ],
- [ac_system_error_8=yes], [ac_system_error_8=no])
+ AC_CACHE_CHECK([for the value of SEEK_END], glibcxx_cv_stdio_seek_end, [
+ AC_COMPUTE_INT([glibcxx_cv_stdio_seek_end], [[SEEK_END]],
+ [#include <stdio.h>],
+ [AC_MSG_ERROR([computing SEEK_END failed])])
])
- AC_MSG_RESULT($ac_system_error_8)
- if test x"$ac_system_error_8" = x"yes"; then
- AC_DEFINE(HAVE_ETIME, 1, [Define if ETIME exists.])
- fi
-
- AC_MSG_CHECKING([for sys_nerr])
- AC_CACHE_VAL(ac_system_error9, [
- AC_TRY_COMPILE([#include <errno.h> ], [ int i = sys_nerr; ],
- [ac_system_error9=yes], [ac_system_error9=no])
- ])
- AC_MSG_RESULT($ac_system_error9)
- if test x"$ac_system_error9" = x"yes"; then
- AC_DEFINE(HAVE_SYS_NERR, 1, [Define if sys_nerr exists.])
- fi
-
- AC_MSG_CHECKING([for EBADMSG])
- AC_CACHE_VAL(ac_system_error_10, [
- AC_TRY_COMPILE([#include <errno.h>], [ int i = EBADMSG; ],
- [ac_system_error_10=yes], [ac_system_error_10=no])
- ])
- AC_MSG_RESULT($ac_system_error_10)
- if test x"$ac_system_error_10" = x"yes"; then
- AC_DEFINE(HAVE_EBADMSG, 1, [Define if EBADMSG exists.])
- fi
-
- AC_MSG_CHECKING([for ECANCELED])
- AC_CACHE_VAL(ac_system_error_11, [
- AC_TRY_COMPILE([#include <errno.h>], [ int i = ECANCELED; ],
- [ac_system_error_11=yes], [ac_system_error_11=no])
- ])
- AC_MSG_RESULT($ac_system_error_11)
- if test x"$ac_system_error_11" = x"yes"; then
- AC_DEFINE(HAVE_ECANCELED, 1, [Define if ECANCELED exists.])
- fi
-
- AC_MSG_CHECKING([for EOVERFLOW])
- AC_CACHE_VAL(ac_system_error_12, [
- AC_TRY_COMPILE([#include <errno.h>], [ int i = EOVERFLOW; ],
- [ac_system_error_12=yes], [ac_system_error_12=no])
- ])
- AC_MSG_RESULT($ac_system_error_12)
- if test x"$ac_system_error_12" = x"yes"; then
- AC_DEFINE(HAVE_EOVERFLOW, 1, [Define if EOVERFLOW exists.])
- fi
-
- AC_MSG_CHECKING([for ENOTSUP])
- AC_CACHE_VAL(ac_system_error_13, [
- AC_TRY_COMPILE([#include <errno.h>], [ int i = ENOTSUP; ],
- [ac_system_error_13=yes], [ac_system_error_13=no])
- ])
- AC_MSG_RESULT($ac_system_error_13)
- if test x"$ac_system_error_13" = x"yes"; then
- AC_DEFINE(HAVE_ENOTSUP, 1, [Define if ENOTSUP exists.])
- fi
+ AC_DEFINE_UNQUOTED(_GLIBCXX_STDIO_SEEK_END, $glibcxx_cv_stdio_seek_end,
+ [Define to the value of the SEEK_END integer constant.])
+])
- AC_MSG_CHECKING([for EIDRM])
- AC_CACHE_VAL(ac_system_error_14, [
- AC_TRY_COMPILE([#include <errno.h>], [ int i = EIDRM; ],
- [ac_system_error_14=yes], [ac_system_error_14=no])
- ])
- AC_MSG_RESULT($ac_system_error_14)
- if test x"$ac_system_error_14" = x"yes"; then
- AC_DEFINE(HAVE_EIDRM, 1, [Define if EIDRM exists.])
- fi
+dnl
+dnl Check whether macros, etc are present for <system_error>
+dnl
+AC_DEFUN([GLIBCXX_CHECK_SYSTEM_ERROR], [
- AC_MSG_CHECKING([for ETXTBSY])
- AC_CACHE_VAL(ac_system_error_15, [
- AC_TRY_COMPILE([#include <errno.h>], [ int i = ETXTBSY; ],
- [ac_system_error_15=yes], [ac_system_error_15=no])
- ])
- AC_MSG_RESULT($ac_system_error_15)
- if test x"$ac_system_error_15" = x"yes"; then
- AC_DEFINE(HAVE_ETXTBSY, 1, [Define if ETXTBSY exists.])
- fi
+m4_pushdef([n_syserr], [1])dnl
+m4_foreach([syserr], [EOWNERDEAD, ENOTRECOVERABLE, ENOLINK, EPROTO, ENODATA,
+ ENOSR, ENOSTR, ETIME, EBADMSG, ECANCELED,
+ EOVERFLOW, ENOTSUP, EIDRM, ETXTBSY],
+[m4_pushdef([SYSERR], m4_toupper(syserr))dnl
+AC_MSG_CHECKING([for syserr])
+AC_CACHE_VAL([glibcxx_cv_system_error[]n_syserr], [
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <errno.h>]],
+ [int i = syserr;])],
+ [glibcxx_cv_system_error[]n_syserr=yes],
+ [glibcxx_cv_system_error[]n_syserr=no])
+])
+AC_MSG_RESULT([$glibcxx_cv_system_error[]n_syserr])
+if test x"$glibcxx_cv_system_error[]n_syserr" = x"yes"; then
+ AC_DEFINE([HAVE_]SYSERR, 1, [Define if ]syserr[ exists.])
+fi
+m4_define([n_syserr], m4_incr(n_syserr))dnl
+m4_popdef([SYSERR])dnl
+])
+m4_popdef([n_syserr])dnl
])
dnl
dnl Where DEFAULT is either 'c' or 'c_std' or 'c_global'.
dnl
AC_DEFUN([GLIBCXX_ENABLE_CHEADERS], [
- GLIBCXX_ENABLE(cheaders,$1,[=KIND],
+ GLIBCXX_ENABLE(cheaders,$1,[[[=KIND]]],
[construct "C" headers for g++], [permit c|c_std|c_global])
AC_MSG_NOTICE("C" header strategy set to $enable_cheaders)
c_compatibility=yes
fi
- if test $enable_cheaders = c_global || test $enable_cheaders = c_std; then
- c_extra=yes
- fi
-
AC_SUBST(C_INCLUDE_DIR)
GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C, test $enable_cheaders = c)
GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C_STD, test $enable_cheaders = c_std)
GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C_GLOBAL, test $enable_cheaders = c_global)
GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_COMPATIBILITY, test $c_compatibility = yes)
- GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_EXTRA, test $c_extra = yes)
])
dnl Default is generic.
dnl
AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
- GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@],
+ GLIBCXX_ENABLE(clocale,auto,[[[=MODEL]]],
[use MODEL for target locale package],
[permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
AC_HELP_STRING([--enable-nls],[use Native Language Support (default)]),
[],
[enable_nls=yes])
-
+
# Either a known packaage, or "auto"
if test $enable_clocale = no || test $enable_clocale = yes; then
enable_clocale=auto
if test $enable_clocale_flag = auto; then
case ${target_os} in
linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
- enable_clocale_flag=gnu
- ;;
+ enable_clocale_flag=gnu
+ ;;
darwin* | freebsd*)
- enable_clocale_flag=darwin
+ enable_clocale_flag=darwin
;;
*)
- enable_clocale_flag=generic
- ;;
+ enable_clocale_flag=generic
+ ;;
esac
fi
if test $enable_clocale_flag = gnu; then
AC_EGREP_CPP([_GLIBCXX_ok], [
#include <features.h>
- #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
+ #if (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined(__UCLIBC__)
_GLIBCXX_ok
#endif
], enable_clocale_flag=gnu, enable_clocale_flag=generic)
- if test $enable_clocale = auto; then
- # Test for bugs early in glibc-2.2.x series
- AC_TRY_RUN([
- #define _GNU_SOURCE 1
- #include <locale.h>
- #include <string.h>
- #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
- extern __typeof(newlocale) __newlocale;
- extern __typeof(duplocale) __duplocale;
- extern __typeof(strcoll_l) __strcoll_l;
- #endif
- int main()
- {
- const char __one[] = "Äuglein Augmen";
- const char __two[] = "Äuglein";
- int i;
- int j;
- __locale_t loc;
- __locale_t loc_dup;
- loc = __newlocale(1 << LC_ALL, "de_DE", 0);
- loc_dup = __duplocale(loc);
- i = __strcoll_l(__one, __two, loc);
- j = __strcoll_l(__one, __two, loc_dup);
- return 0;
- }
- ],
- [enable_clocale_flag=gnu],[enable_clocale_flag=generic],
- [enable_clocale_flag=generic])
- fi
-
# Set it to scream when it hurts.
- ac_save_CFLAGS="$CFLAGS"
+ ac_save_CFLAGS="$CFLAGS"
CFLAGS="-Wimplicit-function-declaration -Werror"
# Use strxfrm_l if available.
AC_TRY_COMPILE([#define _GNU_SOURCE 1
#include <string.h>
#include <locale.h>],
- [char s[128]; __locale_t loc; strxfrm_l(s, "C", 5, loc);],
- AC_DEFINE(HAVE_STRXFRM_L, 1,
- [Define if strxfrm_l is available in <string.h>.]),)
-
+ [char s[128]; __locale_t loc; strxfrm_l(s, "C", 5, loc);],
+ AC_DEFINE(HAVE_STRXFRM_L, 1,
+ [Define if strxfrm_l is available in <string.h>.]),)
+
# Use strerror_l if available.
AC_TRY_COMPILE([#define _GNU_SOURCE 1
#include <string.h>
#include <locale.h>],
- [__locale_t loc; strerror_l(5, loc);],
- AC_DEFINE(HAVE_STRERROR_L, 1,
- [Define if strerror_l is available in <string.h>.]),)
+ [__locale_t loc; strerror_l(5, loc);],
+ AC_DEFINE(HAVE_STRERROR_L, 1,
+ [Define if strerror_l is available in <string.h>.]),)
CFLAGS="$ac_save_CFLAGS"
fi
# Perhaps use strerror_r if available, and strerror_l isn't.
- ac_save_CFLAGS="$CFLAGS"
+ ac_save_CFLAGS="$CFLAGS"
CFLAGS="-Wimplicit-function-declaration -Werror"
AC_TRY_COMPILE([#define _GNU_SOURCE 1
#include <string.h>
#include <locale.h>],
- [char s[128]; strerror_r(5, s, 128);],
- AC_DEFINE(HAVE_STRERROR_R, 1,
- [Define if strerror_r is available in <string.h>.]),)
+ [char s[128]; strerror_r(5, s, 128);],
+ AC_DEFINE(HAVE_STRERROR_R, 1,
+ [Define if strerror_r is available in <string.h>.]),)
CFLAGS="$ac_save_CFLAGS"
# Set configure bits for specified locale package
CTIME_CC=config/locale/generic/time_members.cc
CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
;;
-
+
gnu)
AC_MSG_RESULT(gnu)
# Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
- USE_NLS=yes
+ USE_NLS=yes
fi
# Export the build objects.
for ling in $ALL_LINGUAS; do \
- glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
- glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
+ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
+ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
done
AC_SUBST(glibcxx_MOFILES)
AC_SUBST(glibcxx_POFILES)
AC_SEARCH_LIBS(gettext, intl, [], USE_NLS=no)
fi
if test $USE_NLS = yes; then
- AC_DEFINE(_GLIBCXX_USE_NLS, 1,
- [Define if NLS translations are to be used.])
+ AC_DEFINE(_GLIBCXX_USE_NLS, 1,
+ [Define if NLS translations are to be used.])
fi
AC_SUBST(USE_NLS)
dnl
AC_DEFUN([GLIBCXX_ENABLE_ALLOCATOR], [
AC_MSG_CHECKING([for std::allocator base class])
- GLIBCXX_ENABLE(libstdcxx-allocator,auto,[=KIND],
+ GLIBCXX_ENABLE(libstdcxx-allocator,auto,[[[=KIND]]],
[use KIND for target std::allocator base],
[permit new|malloc|mt|bitmap|pool|yes|no|auto])
if test $enable_libstdcxx_allocator_flag = auto; then
case ${target_os} in
linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
- enable_libstdcxx_allocator_flag=new
- ;;
+ enable_libstdcxx_allocator_flag=new
+ ;;
*)
- enable_libstdcxx_allocator_flag=new
- ;;
+ enable_libstdcxx_allocator_flag=new
+ ;;
esac
fi
AC_MSG_RESULT($enable_libstdcxx_allocator_flag)
-
+
# Set configure bits for specified locale package
case ${enable_libstdcxx_allocator_flag} in
pool)
ALLOCATOR_H=config/allocator/pool_allocator_base.h
ALLOCATOR_NAME=__gnu_cxx::__pool_alloc
- ;;
+ ;;
esac
AC_SUBST(ALLOCATOR_H)
GLIBCXX_ENABLE(concept-checks,$1,,[use Boost-derived template checks])
if test $enable_concept_checks = yes; then
AC_DEFINE(_GLIBCXX_CONCEPT_CHECKS, 1,
- [Define to use concept checking code from the boost libraries.])
+ [Define to use concept checking code from the boost libraries.])
fi
])
+dnl
+dnl Use extern templates.
+dnl
+dnl --enable-extern-template defines _GLIBCXX_EXTERN_TEMPLATE to 1
+dnl --disable-extern-template defines _GLIBCXX_EXTERN_TEMPLATE to 0
+
+dnl + Usage: GLIBCXX_ENABLE_TEMPLATE[(DEFAULT)]
+dnl Where DEFAULT is `yes' or `no'.
+dnl
+AC_DEFUN([GLIBCXX_ENABLE_EXTERN_TEMPLATE], [
+
+ GLIBCXX_ENABLE(extern-template,$1,,[enable extern template])
+
+ AC_MSG_CHECKING([for extern template support])
+ AC_MSG_RESULT([$enable_extern_template])
+
+ GLIBCXX_CONDITIONAL(ENABLE_EXTERN_TEMPLATE, test $enable_extern_template = yes)
+])
+
dnl
dnl Check for parallel mode pre-requisites, including OpenMP support.
dnl
dnl
AC_DEFUN([GLIBCXX_ENABLE_PARALLEL], [
- # NB: libstdc++ may be configured before libgomp: can't check for the actual
- # dependencies (omp.h and libgomp).
enable_parallel=no;
- if test -f $glibcxx_builddir/../libgomp/omp.h; then
+
+ # See if configured libgomp/omp.h exists. (libgomp may be in
+ # noconfigdirs but not explicitly disabled.)
+ if echo " ${TARGET_CONFIGDIRS} " | grep " libgomp " > /dev/null 2>&1 ; then
enable_parallel=yes;
else
- AC_MSG_NOTICE([$glibcxx_builddir/../libgomp/omp.h not found])
+ AC_MSG_NOTICE([target-libgomp not built])
fi
- # Check to see if it's explicitly disabled.
-# GLIBCXX_ENABLE(libgomp,$1,,[enable code depending on libgomp],
-# [permit yes|no])
-
-# if test x$enable_libgomp = xno; then
-# enable_parallel=no
-# fi
-
AC_MSG_CHECKING([for parallel mode support])
AC_MSG_RESULT([$enable_parallel])
GLIBCXX_CONDITIONAL(ENABLE_PARALLEL, test $enable_parallel = yes)
dnl
AC_DEFUN([GLIBCXX_ENABLE_CSTDIO], [
AC_MSG_CHECKING([for underlying I/O to use])
- GLIBCXX_ENABLE(cstdio,stdio,[=PACKAGE],
+ GLIBCXX_ENABLE(cstdio,stdio,[[[=PACKAGE]]],
[use target-specific I/O package], [permit stdio])
# Now that libio has been removed, you can have any color you want as long
if test -n "$enable_cxx_flags"; then
for f in $enable_cxx_flags; do
case "$f" in
- -fhonor-std) ;;
- -*) ;;
- *) # and we're trying to pass /what/ exactly?
- AC_MSG_ERROR([compiler flags start with a -]) ;;
+ -fhonor-std) ;;
+ -*) ;;
+ *) # and we're trying to pass /what/ exactly?
+ AC_MSG_ERROR([compiler flags start with a -]) ;;
esac
done
fi
AC_DEFUN([GLIBCXX_ENABLE_HOSTED], [
AC_ARG_ENABLE([hosted-libstdcxx],
AC_HELP_STRING([--disable-hosted-libstdcxx],
- [only build freestanding C++ runtime support]),,
+ [only build freestanding C++ runtime support]),,
[case "$host" in
- arm*-*-symbianelf*)
+ arm*-*-symbianelf*)
enable_hosted_libstdcxx=no
;;
- *)
+ *)
enable_hosted_libstdcxx=yes
;;
esac])
AC_DEFUN([GLIBCXX_ENABLE_LONG_LONG], [
GLIBCXX_ENABLE(long-long,$1,,[enable template specializations for 'long long'])
if test $enable_long_long = yes; then
- AC_DEFINE(_GLIBCXX_USE_LONG_LONG, 1,
- [Define if code specialized for long long should be used.])
+ AC_DEFINE(_GLIBCXX_USE_LONG_LONG, 1,
+ [Define if code specialized for long long should be used.])
fi
AC_MSG_CHECKING([for enabled long long specializations])
AC_MSG_RESULT([$enable_long_long])
])
+dnl
+dnl Check for decimal floating point.
+dnl See:
+dnl http://gcc.gnu.org/onlinedocs/gcc/Decimal-Float.html#Decimal-Float
+dnl
+dnl This checks to see if the host supports decimal floating point types.
+dnl
+dnl Defines:
+dnl _GLIBCXX_USE_DECIMAL_FLOAT
+dnl
+AC_DEFUN([GLIBCXX_ENABLE_DECIMAL_FLOAT], [
+
+ # Fake what AC_TRY_COMPILE does, without linking as this is
+ # unnecessary for this test.
+
+ cat > conftest.$ac_ext << EOF
+[#]line __oline__ "configure"
+int main()
+{
+ _Decimal32 d1;
+ _Decimal64 d2;
+ _Decimal128 d3;
+ return 0;
+}
+EOF
+
+ AC_MSG_CHECKING([for ISO/IEC TR 24733 ])
+ if AC_TRY_EVAL(ac_compile); then
+ AC_DEFINE(_GLIBCXX_USE_DECIMAL_FLOAT, 1,
+ [Define if ISO/IEC TR 24733 decimal floating point types are supported on this host.])
+ enable_dfp=yes
+ else
+ enable_dfp=no
+ fi
+ AC_MSG_RESULT($enable_dfp)
+ rm -f conftest*
+])
+
dnl
dnl Check for template specializations for the 'wchar_t' type.
dnl
# Test it always, for use in GLIBCXX_ENABLE_C99, together with
# ac_has_wchar_h.
AC_CHECK_HEADERS(wctype.h, ac_has_wctype_h=yes, ac_has_wctype_h=no)
-
+
if test x"$enable_wchar_t" = x"yes"; then
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
-
+
if test x"$ac_has_wchar_h" = xyes &&
test x"$ac_has_wctype_h" = xyes; then
AC_TRY_COMPILE([#include <wchar.h>
- #include <stddef.h>
- wint_t i;
+ #include <stddef.h>
+ wint_t i;
long l = WEOF;
long j = WCHAR_MIN;
long k = WCHAR_MAX;
- namespace test
- {
+ namespace test
+ {
using ::btowc;
using ::fgetwc;
using ::fgetws;
using ::fputwc;
using ::fputws;
using ::fwide;
- using ::fwprintf;
+ using ::fwprintf;
using ::fwscanf;
using ::getwc;
using ::getwchar;
- using ::mbrlen;
- using ::mbrtowc;
- using ::mbsinit;
- using ::mbsrtowcs;
+ using ::mbrlen;
+ using ::mbrtowc;
+ using ::mbsinit;
+ using ::mbsrtowcs;
using ::putwc;
using ::putwchar;
- using ::swprintf;
- using ::swscanf;
+ using ::swprintf;
+ using ::swscanf;
using ::ungetwc;
- using ::vfwprintf;
- using ::vswprintf;
- using ::vwprintf;
- using ::wcrtomb;
- using ::wcscat;
- using ::wcschr;
- using ::wcscmp;
- using ::wcscoll;
- using ::wcscpy;
- using ::wcscspn;
- using ::wcsftime;
+ using ::vfwprintf;
+ using ::vswprintf;
+ using ::vwprintf;
+ using ::wcrtomb;
+ using ::wcscat;
+ using ::wcschr;
+ using ::wcscmp;
+ using ::wcscoll;
+ using ::wcscpy;
+ using ::wcscspn;
+ using ::wcsftime;
using ::wcslen;
- using ::wcsncat;
- using ::wcsncmp;
- using ::wcsncpy;
+ using ::wcsncat;
+ using ::wcsncmp;
+ using ::wcsncpy;
using ::wcspbrk;
- using ::wcsrchr;
- using ::wcsrtombs;
- using ::wcsspn;
+ using ::wcsrchr;
+ using ::wcsrtombs;
+ using ::wcsspn;
using ::wcsstr;
- using ::wcstod;
- using ::wcstok;
+ using ::wcstod;
+ using ::wcstok;
using ::wcstol;
- using ::wcstoul;
- using ::wcsxfrm;
- using ::wctob;
+ using ::wcstoul;
+ using ::wcsxfrm;
+ using ::wctob;
using ::wmemchr;
using ::wmemcmp;
using ::wmemcpy;
using ::wmemmove;
using ::wmemset;
- using ::wprintf;
- using ::wscanf;
+ using ::wprintf;
+ using ::wscanf;
}
],[],[], [enable_wchar_t=no])
else
if test x"$enable_wchar_t" = x"yes"; then
AC_DEFINE(_GLIBCXX_USE_WCHAR_T, 1,
- [Define if code specialized for wchar_t should be used.])
+ [Define if code specialized for wchar_t should be used.])
fi
AC_MSG_CHECKING([for enabled wchar_t specializations])
AC_LANG_CPLUSPLUS
echo '#include <math.h>' > conftest.h
if $CXX $CXXFLAGS $CPPFLAGS -x c++-header conftest.h \
- -o conftest.h.gch 1>&5 2>&1 &&
- echo '#error "pch failed"' > conftest.h &&
- echo '#include "conftest.h"' > conftest.cc &&
+ -o conftest.h.gch 1>&5 2>&1 &&
+ echo '#error "pch failed"' > conftest.h &&
+ echo '#include "conftest.h"' > conftest.cc &&
$CXX -c $CXXFLAGS $CPPFLAGS conftest.cc 1>&5 2>&1 ;
then
- glibcxx_cv_prog_CXX_pch=yes
+ glibcxx_cv_prog_CXX_pch=yes
else
- glibcxx_cv_prog_CXX_pch=no
+ glibcxx_cv_prog_CXX_pch=no
fi
rm -f conftest*
CXXFLAGS=$ac_save_CXXFLAGS
dnl http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html#Atomic-Builtins
dnl
dnl This checks to see if the host supports the compiler-generated
-dnl builtins for atomic operations. Note, this is intended to be an
-dnl all-or-nothing switch, so all the atomic operations that are used
-dnl should be checked.
+dnl builtins for atomic operations for various integral sizes. Note, this
+dnl is intended to be an all-or-nothing switch, so all the atomic operations
+dnl that are used should be checked.
dnl
dnl Note:
-dnl libgomp and libgfortran do this with a link test, instead of an asm test.
-dnl see: CHECK_SYNC_FETCH_AND_ADD
+dnl libgomp and libgfortran use a link test, see CHECK_SYNC_FETCH_AND_ADD.
dnl
dnl Defines:
-dnl _GLIBCXX_ATOMIC_BUILTINS if the compiler on this target supports atomics.
+dnl _GLIBCXX_ATOMIC_BUILTINS_1
+dnl _GLIBCXX_ATOMIC_BUILTINS_2
+dnl _GLIBCXX_ATOMIC_BUILTINS_4
+dnl _GLIBCXX_ATOMIC_BUILTINS_8
dnl
AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS], [
- AC_MSG_CHECKING([for atomic builtins])
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
+ old_CXXFLAGS="$CXXFLAGS"
+
+ # Do link tests if possible, instead asm tests, limited to some platforms
+ # see discussion in PR target/40134, PR libstdc++/40133 and the thread
+ # starting at http://gcc.gnu.org/ml/gcc-patches/2009-07/msg00322.html
+ atomic_builtins_link_tests=no
+ if test x$gcc_no_link != xyes; then
+ # Can do link tests. Limit to some tested platforms
+ case "$host" in
+ *-*-linux* | *-*-uclinux* | *-*-kfreebsd*-gnu | *-*-gnu*)
+ atomic_builtins_link_tests=yes
+ ;;
+ esac
+ fi
+
+ if test x$atomic_builtins_link_tests = xyes; then
+
+ # Do link tests.
+
+ CXXFLAGS="$CXXFLAGS -fno-exceptions"
+
+ AC_MSG_CHECKING([for atomic builtins for bool])
+ AC_CACHE_VAL(glibcxx_cv_atomic_bool, [
+ AC_TRY_LINK(
+ [ ],
+ [typedef bool atomic_type;
+ atomic_type c1;
+ atomic_type c2;
+ const atomic_type c3(0);
+ __sync_fetch_and_add(&c1, c2);
+ __sync_val_compare_and_swap(&c1, c3, c2);
+ __sync_lock_test_and_set(&c1, c3);
+ __sync_lock_release(&c1);
+ __sync_synchronize();],
+ [glibcxx_cv_atomic_bool=yes],
+ [glibcxx_cv_atomic_bool=no])
+ ])
+ if test $glibcxx_cv_atomic_bool = yes; then
+ AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_1, 1,
+ [Define if builtin atomic operations for bool are supported on this host.])
+ fi
+ AC_MSG_RESULT($glibcxx_cv_atomic_bool)
+
+ AC_MSG_CHECKING([for atomic builtins for short])
+ AC_CACHE_VAL(glibcxx_cv_atomic_short, [
+ AC_TRY_LINK(
+ [ ],
+ [typedef short atomic_type;
+ atomic_type c1;
+ atomic_type c2;
+ const atomic_type c3(0);
+ __sync_fetch_and_add(&c1, c2);
+ __sync_val_compare_and_swap(&c1, c3, c2);
+ __sync_lock_test_and_set(&c1, c3);
+ __sync_lock_release(&c1);
+ __sync_synchronize();],
+ [glibcxx_cv_atomic_short=yes],
+ [glibcxx_cv_atomic_short=no])
+ ])
+ if test $glibcxx_cv_atomic_short = yes; then
+ AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_2, 1,
+ [Define if builtin atomic operations for short are supported on this host.])
+ fi
+ AC_MSG_RESULT($glibcxx_cv_atomic_short)
+
+ AC_MSG_CHECKING([for atomic builtins for int])
+ AC_CACHE_VAL(glibcxx_cv_atomic_int, [
+ AC_TRY_LINK(
+ [ ],
+ [typedef int atomic_type;
+ atomic_type c1;
+ atomic_type c2;
+ const atomic_type c3(0);
+ __sync_fetch_and_add(&c1, c2);
+ __sync_val_compare_and_swap(&c1, c3, c2);
+ __sync_lock_test_and_set(&c1, c3);
+ __sync_lock_release(&c1);
+ __sync_synchronize();],
+ [glibcxx_cv_atomic_int=yes],
+ [glibcxx_cv_atomic_int=no])
+ ])
+ if test $glibcxx_cv_atomic_int = yes; then
+ AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_4, 1,
+ [Define if builtin atomic operations for int are supported on this host.])
+ fi
+ AC_MSG_RESULT($glibcxx_cv_atomic_int)
+
+ AC_MSG_CHECKING([for atomic builtins for long long])
+ AC_CACHE_VAL(glibcxx_cv_atomic_long_long, [
+ AC_TRY_LINK(
+ [ ],
+ [typedef long long atomic_type;
+ atomic_type c1;
+ atomic_type c2;
+ const atomic_type c3(0);
+ __sync_fetch_and_add(&c1, c2);
+ __sync_val_compare_and_swap(&c1, c3, c2);
+ __sync_lock_test_and_set(&c1, c3);
+ __sync_lock_release(&c1);
+ __sync_synchronize();],
+ [glibcxx_cv_atomic_long_long=yes],
+ [glibcxx_cv_atomic_long_long=no])
+ ])
+ if test $glibcxx_cv_atomic_long_long = yes; then
+ AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_8, 1,
+ [Define if builtin atomic operations for long long are supported on this host.])
+ fi
+ AC_MSG_RESULT($glibcxx_cv_atomic_long_long)
+
+ else
+
+ # Do asm tests.
+
+ # Compile unoptimized.
+ CXXFLAGS='-O0 -S'
+
+ # Fake what AC_TRY_COMPILE does.
- # Fake what AC_TRY_COMPILE does. XXX Look at redoing this new-style.
cat > conftest.$ac_ext << EOF
[#]line __oline__ "configure"
int main()
{
- // NB: _Atomic_word not necessarily int.
+ typedef bool atomic_type;
+ atomic_type c1;
+ atomic_type c2;
+ const atomic_type c3(0);
+ __sync_fetch_and_add(&c1, c2);
+ __sync_val_compare_and_swap(&c1, c3, c2);
+ __sync_lock_test_and_set(&c1, c3);
+ __sync_lock_release(&c1);
+ __sync_synchronize();
+ return 0;
+}
+EOF
+
+ AC_MSG_CHECKING([for atomic builtins for bool])
+ if AC_TRY_EVAL(ac_compile); then
+ if grep __sync_ conftest.s >/dev/null 2>&1 ; then
+ glibcxx_cv_atomic_bool=no
+ else
+ AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_1, 1,
+ [Define if builtin atomic operations for bool are supported on this host.])
+ glibcxx_cv_atomic_bool=yes
+ fi
+ fi
+ AC_MSG_RESULT($glibcxx_cv_atomic_bool)
+ rm -f conftest*
+
+ cat > conftest.$ac_ext << EOF
+[#]line __oline__ "configure"
+int main()
+{
+ typedef short atomic_type;
+ atomic_type c1;
+ atomic_type c2;
+ const atomic_type c3(0);
+ __sync_fetch_and_add(&c1, c2);
+ __sync_val_compare_and_swap(&c1, c3, c2);
+ __sync_lock_test_and_set(&c1, c3);
+ __sync_lock_release(&c1);
+ __sync_synchronize();
+ return 0;
+}
+EOF
+
+ AC_MSG_CHECKING([for atomic builtins for short])
+ if AC_TRY_EVAL(ac_compile); then
+ if grep __sync_ conftest.s >/dev/null 2>&1 ; then
+ glibcxx_cv_atomic_short=no
+ else
+ AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_2, 1,
+ [Define if builtin atomic operations for short are supported on this host.])
+ glibcxx_cv_atomic_short=yes
+ fi
+ fi
+ AC_MSG_RESULT($glibcxx_cv_atomic_short)
+ rm -f conftest*
+
+ cat > conftest.$ac_ext << EOF
+[#]line __oline__ "configure"
+int main()
+{
+ // NB: _Atomic_word not necessarily int.
typedef int atomic_type;
atomic_type c1;
atomic_type c2;
const atomic_type c3(0);
- if (__sync_fetch_and_add(&c1, c2) == c3)
- {
- // Do something.
- }
- return 0;
+ __sync_fetch_and_add(&c1, c2);
+ __sync_val_compare_and_swap(&c1, c3, c2);
+ __sync_lock_test_and_set(&c1, c3);
+ __sync_lock_release(&c1);
+ __sync_synchronize();
+ return 0;
}
EOF
- old_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS=-S
+
+ AC_MSG_CHECKING([for atomic builtins for int])
if AC_TRY_EVAL(ac_compile); then
- if grep __sync_fetch_and_add conftest.s >/dev/null 2>&1 ; then
- enable_atomic_builtins=no
+ if grep __sync_ conftest.s >/dev/null 2>&1 ; then
+ glibcxx_cv_atomic_int=no
else
- AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS, 1,
- [Define if builtin atomic operations are supported on this host.])
- enable_atomic_builtins=yes
- atomicity_dir=cpu/generic/atomicity_builtins
+ AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_4, 1,
+ [Define if builtin atomic operations for int are supported on this host.])
+ glibcxx_cv_atomic_int=yes
fi
fi
- CXXFLAGS="$old_CXXFLAGS"
+ AC_MSG_RESULT($glibcxx_cv_atomic_int)
rm -f conftest*
- # Now, if still generic, set to mutex.
+ cat > conftest.$ac_ext << EOF
+[#]line __oline__ "configure"
+int main()
+{
+ typedef long long atomic_type;
+ atomic_type c1;
+ atomic_type c2;
+ const atomic_type c3(0);
+ __sync_fetch_and_add(&c1, c2);
+ __sync_val_compare_and_swap(&c1, c3, c2);
+ __sync_lock_test_and_set(&c1, c3);
+ __sync_lock_release(&c1);
+ __sync_synchronize();
+ return 0;
+}
+EOF
+
+ AC_MSG_CHECKING([for atomic builtins for long long])
+ if AC_TRY_EVAL(ac_compile); then
+ if grep __sync_ conftest.s >/dev/null 2>&1 ; then
+ glibcxx_cv_atomic_long_long=no
+ else
+ AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_8, 1,
+ [Define if builtin atomic operations for long long are supported on this host.])
+ glibcxx_cv_atomic_long_long=yes
+ fi
+ fi
+ AC_MSG_RESULT($glibcxx_cv_atomic_long_long)
+ rm -f conftest*
+
+ fi
+
+ CXXFLAGS="$old_CXXFLAGS"
+ AC_LANG_RESTORE
+
+ # Set atomicity_dir to builtins if either of above tests pass.
+ if test $glibcxx_cv_atomic_int = yes || test $glibcxx_cv_atomic_bool = yes ; then
+ atomicity_dir=cpu/generic/atomicity_builtins
+ fi
+
+ # If still generic, set to mutex.
if test $atomicity_dir = "cpu/generic" ; then
- atomicity_dir=cpu/generic/atomicity_mutex
+ atomicity_dir=cpu/generic/atomicity_mutex
+ AC_MSG_WARN([No native atomic operations are provided for this platform.])
+ if test "x$target_thread_file" = xsingle; then
+ AC_MSG_WARN([They cannot be faked when thread support is disabled.])
+ AC_MSG_WARN([Thread-safety of certain classes is not guaranteed.])
+ else
+ AC_MSG_WARN([They will be faked using a mutex.])
+ AC_MSG_WARN([Performance of certain classes will degrade as a result.])
+ fi
fi
- AC_LANG_RESTORE
- AC_MSG_RESULT($enable_atomic_builtins)
+
])
CXXFLAGS=-S
if AC_TRY_EVAL(ac_compile); then
if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
- enable_sjlj_exceptions=yes
+ enable_sjlj_exceptions=yes
elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then
- enable_sjlj_exceptions=no
+ enable_sjlj_exceptions=no
elif grep __cxa_end_cleanup conftest.s >/dev/null 2>&1 ; then
- enable_sjlj_exceptions=no
+ enable_sjlj_exceptions=no
fi
fi
CXXFLAGS="$old_CXXFLAGS"
case $enable_sjlj_exceptions in
yes)
AC_DEFINE(_GLIBCXX_SJLJ_EXCEPTIONS, 1,
- [Define if the compiler is configured for setjmp/longjmp exceptions.])
+ [Define if the compiler is configured for setjmp/longjmp exceptions.])
ac_exception_model_name=sjlj
;;
no)
dnl all hail libgfortran
dnl Check whether the target supports hidden visibility.
AC_CACHE_CHECK([whether the target supports hidden visibility],
- have_attribute_visibility, [
+ glibcxx_cv_have_attribute_visibility, [
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Werror"
AC_TRY_COMPILE([void __attribute__((visibility("hidden"))) foo(void) { }],
- [], have_attribute_visibility=yes,
- have_attribute_visibility=no)
+ [], glibcxx_cv_have_attribute_visibility=yes,
+ glibcxx_cv_have_attribute_visibility=no)
CFLAGS="$save_CFLAGS"])
- if test $have_attribute_visibility = no; then
+ if test $glibcxx_cv_have_attribute_visibility = no; then
enable_visibility=no
fi
fi
dnl
AC_DEFUN([GLIBCXX_ENABLE_SYMVERS], [
-GLIBCXX_ENABLE(symvers,$1,[=STYLE],
+GLIBCXX_ENABLE(symvers,$1,[[[=STYLE]]],
[enables symbol versioning of the shared library],
- [permit yes|no|gnu|gnu-versioned-namespace|darwin|darwin-export])
+ [permit yes|no|gnu|gnu-versioned-namespace|darwin|darwin-export|sun])
# If we never went through the GLIBCXX_CHECK_LINKER_FEATURES macro, then we
# don't know enough about $LD to do tricks...
AC_REQUIRE([GLIBCXX_CHECK_LINKER_FEATURES])
+# Sun style symbol versions needs GNU c++filt for make_sunver.pl to work
+# with extern "C++" in version scripts.
+AC_REQUIRE([GCC_PROG_GNU_CXXFILT])
# Turn a 'yes' into a suitable default.
if test x$enable_symvers = xyes ; then
enable_symvers=no
else
if test $with_gnu_ld = yes ; then
- enable_symvers=gnu
+ case ${target_os} in
+ hpux*)
+ enable_symvers=no ;;
+ *)
+ enable_symvers=gnu ;;
+ esac
else
case ${target_os} in
- darwin*)
+ darwin*)
enable_symvers=darwin ;;
- *)
- enable_symvers=no ;;
+ # Sun symbol versioning exists since Solaris 2.5.
+ solaris2.[[5-9]]* | solaris2.1[[0-9]]*)
+ # make_sunver.pl needs GNU c++filt to support extern "C++" in
+ # version scripts, so disable symbol versioning if none can be
+ # found.
+ if test -z "$ac_cv_path_CXXFILT"; then
+ AC_MSG_WARN([=== You have requested Sun symbol versioning, but])
+ AC_MSG_WARN([=== no GNU c++filt could be found.])
+ AC_MSG_WARN([=== Symbol versioning will be disabled.])
+ enable_symvers=no
+ else
+ enable_symvers=sun
+ fi
+ ;;
+ *)
+ enable_symvers=no ;;
esac
fi
fi
enable_symvers=darwin
fi
+# Check if 'sun' was requested on non-Solaris 2 platforms.
+if test x$enable_symvers = xsun ; then
+ case ${target_os} in
+ solaris2*)
+ # All fine.
+ ;;
+ *)
+ # Unlikely to work.
+ AC_MSG_WARN([=== You have requested Sun symbol versioning, but])
+ AC_MSG_WARN([=== you are not targetting Solaris 2.])
+ AC_MSG_WARN([=== Symbol versioning will be disabled.])
+ enable_symvers=no
+ ;;
+ esac
+fi
+
# Check to see if 'gnu' can win.
-if test $enable_symvers = gnu || test $enable_symvers = gnu-versioned-namespace; then
+if test $enable_symvers = gnu ||
+ test $enable_symvers = gnu-versioned-namespace ||
+ test $enable_symvers = sun; then
# Check to see if libgcc_s exists, indicating that shared libgcc is possible.
AC_MSG_CHECKING([for shared libgcc])
ac_save_CFLAGS="$CFLAGS"
AC_MSG_WARN([=== you are not building a shared libgcc_s.])
AC_MSG_WARN([=== Symbol versioning will be disabled.])
enable_symvers=no
+ elif test $with_gnu_ld != yes && test $enable_symvers = sun; then
+ : All interesting versions of Sun ld support sun style symbol versioning.
elif test $with_gnu_ld != yes ; then
# just fail for now
AC_MSG_WARN([=== You have requested GNU symbol versioning, but])
AC_MSG_WARN([=== you are not using the GNU linker.])
AC_MSG_WARN([=== Symbol versioning will be disabled.])
enable_symvers=no
+ elif test $glibcxx_ld_is_gold = yes ; then
+ : All versions of gold support symbol versioning.
elif test $glibcxx_gnu_ld_version -lt $glibcxx_min_gnu_ld_version ; then
# The right tools, the right setup, but too old. Fallbacks?
AC_MSG_WARN(=== Linker version $glibcxx_gnu_ld_version is too old for)
;;
gnu)
SYMVER_FILE=config/abi/pre/gnu.ver
- AC_DEFINE(_GLIBCXX_SYMVER_GNU, 1,
- [Define to use GNU versioning in the shared library.])
+ AC_DEFINE(_GLIBCXX_SYMVER_GNU, 1,
+ [Define to use GNU versioning in the shared library.])
;;
gnu-versioned-namespace)
SYMVER_FILE=config/abi/pre/gnu-versioned-namespace.ver
- AC_DEFINE(_GLIBCXX_SYMVER_GNU_NAMESPACE, 1,
- [Define to use GNU namespace versioning in the shared library.])
+ AC_DEFINE(_GLIBCXX_SYMVER_GNU_NAMESPACE, 1,
+ [Define to use GNU namespace versioning in the shared library.])
;;
darwin)
SYMVER_FILE=config/abi/pre/gnu.ver
- AC_DEFINE(_GLIBCXX_SYMVER_DARWIN, 1,
- [Define to use darwin versioning in the shared library.])
+ AC_DEFINE(_GLIBCXX_SYMVER_DARWIN, 1,
+ [Define to use darwin versioning in the shared library.])
+ ;;
+ sun)
+ SYMVER_FILE=config/abi/pre/gnu.ver
+ AC_DEFINE(_GLIBCXX_SYMVER_SUN, 1,
+ [Define to use Sun versioning in the shared library.])
;;
esac
[Define to use symbol versioning in the shared library.])
fi
+AC_CACHE_CHECK([whether the target supports .symver directive],
+ glibcxx_cv_have_as_symver_directive, [
+ AC_TRY_COMPILE([void foo (void); __asm (".symver foo, bar@SYMVER");],
+ [], glibcxx_cv_have_as_symver_directive=yes,
+ glibcxx_cv_have_as_symver_directive=no)])
+if test $glibcxx_cv_have_as_symver_directive = yes; then
+ AC_DEFINE(HAVE_AS_SYMVER_DIRECTIVE, 1,
+ [Define to 1 if the target assembler supports .symver directive.])
+fi
+
AC_SUBST(SYMVER_FILE)
AC_SUBST(port_specific_symbol_files)
GLIBCXX_CONDITIONAL(ENABLE_SYMVERS, test $enable_symvers != no)
GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_GNU, test $enable_symvers = gnu)
GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_GNU_NAMESPACE, test $enable_symvers = gnu-versioned-namespace)
GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_DARWIN, test $enable_symvers = darwin)
+GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_SUN, test $enable_symvers = sun)
AC_MSG_NOTICE(versioning on shared library symbols is $enable_symvers)
+if test $enable_symvers != no ; then
+ case ${target_os} in
+ # The Solaris 2 runtime linker doesn't support the GNU extension of
+ # binding the same symbol to different versions
+ solaris2*)
+ symvers_renaming=no ;;
+ # Other platforms with GNU symbol versioning (GNU/Linux, more?) do.
+ *)
+ AC_DEFINE(HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT, 1,
+ [Define to 1 if the target runtime linker supports binding the same symbol to different versions.])
+ symvers_renaming=yes ;;
+ esac
+else
+ symvers_renaming=no
+fi
+GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_SOL2, test $symvers_renaming = no)
+
# Now, set up compatibility support, if any.
# In addition, need this to deal with std::size_t mangling in
# src/compatibility.cc. In a perfect world, could use
AC_MSG_CHECKING([for size_t as unsigned int])
ac_save_CFLAGS="$CFLAGS"
CFLAGS="-Werror"
-AC_TRY_COMPILE(, [__SIZE_TYPE__* stp; unsigned int* uip; stp = uip;],
- [glibcxx_size_t_is_i=yes], [glibcxx_size_t_is_i=no])
+AC_TRY_COMPILE(, [__SIZE_TYPE__* stp; unsigned int* uip; stp = uip;],
+ [glibcxx_size_t_is_i=yes], [glibcxx_size_t_is_i=no])
CFLAGS=$ac_save_CFLAGS
if test "$glibcxx_size_t_is_i" = yes; then
AC_DEFINE(_GLIBCXX_SIZE_T_IS_UINT, 1, [Define if size_t is unsigned int.])
AC_MSG_CHECKING([for ptrdiff_t as int])
ac_save_CFLAGS="$CFLAGS"
CFLAGS="-Werror"
-AC_TRY_COMPILE(, [__PTRDIFF_TYPE__* ptp; int* ip; ptp = ip;],
- [glibcxx_ptrdiff_t_is_i=yes], [glibcxx_ptrdiff_t_is_i=no])
+AC_TRY_COMPILE(, [__PTRDIFF_TYPE__* ptp; int* ip; ptp = ip;],
+ [glibcxx_ptrdiff_t_is_i=yes], [glibcxx_ptrdiff_t_is_i=no])
CFLAGS=$ac_save_CFLAGS
if test "$glibcxx_ptrdiff_t_is_i" = yes; then
AC_DEFINE(_GLIBCXX_PTRDIFF_T_IS_INT, 1, [Define if ptrdiff_t is int.])
if test $target_thread_file != single; then
AC_DEFINE(HAVE_GTHR_DEFAULT, 1,
- [Define if gthr-default.h exists
- (meaning that threading support is enabled).])
+ [Define if gthr-default.h exists
+ (meaning that threading support is enabled).])
fi
glibcxx_thread_h=gthr-$target_thread_file.h
])
+dnl
+dnl Check if gthread implementation defines the types and functions
+dnl required by the c++0x thread library. Conforming gthread
+dnl implementations can define __GTHREADS_CXX0X to enable use with c++0x.
+dnl
+AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -fno-exceptions -I${toplevel_srcdir}/gcc"
+
+ target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
+ case $target_thread_file in
+ posix)
+ CXXFLAGS="$CXXFLAGS -DSUPPORTS_WEAK -DGTHREAD_USE_WEAK -D_PTHREADS"
+ esac
+
+ AC_MSG_CHECKING([for gthreads library])
+
+ AC_TRY_COMPILE([#include "gthr.h"],
+ [
+ #ifndef __GTHREADS_CXX0X
+ #error
+ #endif
+
+ // In case of POSIX threads check _POSIX_TIMEOUTS too.
+ #if (defined(_PTHREADS) \
+ && (!defined(_POSIX_TIMEOUTS) || _POSIX_TIMEOUTS <= 0))
+ #error
+ #endif
+ ], [ac_has_gthreads=yes], [ac_has_gthreads=no])
+
+ AC_MSG_RESULT([$ac_has_gthreads])
+
+ if test x"$ac_has_gthreads" = x"yes"; then
+ AC_DEFINE(_GLIBCXX_HAS_GTHREADS, 1,
+ [Define if gthreads library is available.])
+ fi
+
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ AC_LANG_RESTORE
+])
+
+
# Check whether LC_MESSAGES is available in <locale.h>.
# Ulrich Drepper <drepper@cygnus.com>, 1995.
#
AC_DEFUN([AC_LC_MESSAGES], [
AC_CHECK_HEADER(locale.h, [
AC_CACHE_CHECK([for LC_MESSAGES], ac_cv_val_LC_MESSAGES,
- [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
+ [AC_TRY_COMPILE([#include <locale.h>], [return LC_MESSAGES],
ac_cv_val_LC_MESSAGES=yes, ac_cv_val_LC_MESSAGES=no)])
if test $ac_cv_val_LC_MESSAGES = yes; then
- AC_DEFINE(HAVE_LC_MESSAGES, 1,
- [Define if LC_MESSAGES is available in <locale.h>.])
+ AC_DEFINE(HAVE_LC_MESSAGES, 1,
+ [Define if LC_MESSAGES is available in <locale.h>.])
fi
])
])
# Macros from the top-level gcc directory.
+m4_include([../config/gc++filt.m4])
m4_include([../config/tls.m4])
-