dnl Substs:
dnl glibcxx_builddir (absolute path)
dnl glibcxx_srcdir (absolute path)
+dnl toplevel_builddir (absolute path)
dnl toplevel_srcdir (absolute path)
dnl with_cross_host
dnl with_newlib
[\\/$]* | ?:[\\/]*) glibcxx_srcdir=${srcdir} ;;
*) glibcxx_srcdir=`cd "$srcdir" && ${PWDCMD-pwd} || echo "$srcdir"` ;;
esac
+ toplevel_builddir=${glibcxx_builddir}/..
toplevel_srcdir=${glibcxx_srcdir}/..
AC_SUBST(glibcxx_builddir)
AC_SUBST(glibcxx_srcdir)
+ AC_SUBST(toplevel_builddir)
AC_SUBST(toplevel_srcdir)
# We use these options to decide which functions to include. They are
## (Right now, this only matters for enable_wchar_t, but nothing prevents
## other macros from doing the same. This should be automated.) -pme
- # Check for C library flavor since Linux platforms use different configuration
- # directories depending on the C library in use.
+ # Check for C library flavor since GNU/Linux platforms use different
+ # configuration directories depending on the C library in use.
AC_EGREP_CPP([_using_uclibc], [
#include <stdio.h>
#if __UCLIBC__
dnl memory (mostly useful together with shared memory allocators, see PR
dnl libstdc++/16612 for details).
dnl
-dnl --enable-fully-dynamic-string defines _GLIBCXX_FULLY_DYNAMIC_STRING
-dnl --disable-fully-dynamic-string leaves _GLIBCXX_FULLY_DYNAMIC_STRING undefined
+dnl --enable-fully-dynamic-string defines _GLIBCXX_FULLY_DYNAMIC_STRING to 1
+dnl --disable-fully-dynamic-string defines _GLIBCXX_FULLY_DYNAMIC_STRING to 0
+dnl otherwise undefined
dnl + Usage: GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING[(DEFAULT)]
dnl Where DEFAULT is either `yes' or `no'.
dnl
AC_DEFUN([GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING], [
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.])
+ enable_fully_dynamic_string_def=1
+ else
+ enable_fully_dynamic_string_def=0
fi
+ AC_DEFINE_UNQUOTED([_GLIBCXX_FULLY_DYNAMIC_STRING], [${enable_fully_dynamic_string_def}],
+ [Define to 1 if a fully dynamic basic_string is wanted, 0 to disable, undefined for platform defaults])
])
fi
# Stuff in the actual top level. Currently only used by libsupc++ to
- # get unwind* headers from the gcc dir.
- #TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/gcc -I$(toplevel_srcdir)/include'
- TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/gcc'
+ # get unwind* headers from the libgcc dir.
+ #TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/libgcc -I$(toplevel_srcdir)/include'
+ TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/libgcc'
# Now, export this to all the little Makefiles....
AC_SUBST(GLIBCXX_INCLUDES)
# Check for the existence of the <stdbool.h> header.
AC_CHECK_HEADERS(stdbool.h)
+ # Check for the existence of the <stdalign.h> header.
+ AC_CHECK_HEADERS(stdalign.h)
+
CXXFLAGS="$ac_save_CXXFLAGS"
AC_LANG_RESTORE
])
])
dnl
+dnl Check whether required C++ overloads are present in <math.h>.
+dnl
+
+AC_DEFUN([GLIBCXX_CHECK_MATH_PROTO], [
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+
+ case "$host" in
+ *-*-solaris2.*)
+ # Solaris 8 FCS only had an overload for double std::abs(double) in
+ # <iso/math_iso.h>. Patches 111721-04 (SPARC) and 112757-01 (x86)
+ # introduced the full set also found from Solaris 9 onwards.
+ AC_MSG_CHECKING([for float std::abs(float) overload])
+ AC_CACHE_VAL(glibcxx_cv_abs_float, [
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE(
+ [#include <math.h>
+ namespace std {
+ inline float abs(float __x)
+ { return __builtin_fabsf(__x); }
+ }
+ ])],
+ [glibcxx_cv_abs_float=no],
+ [glibcxx_cv_abs_float=yes]
+ )])
+
+ # autoheader cannot handle indented templates.
+ AH_VERBATIM([__CORRECT_ISO_CPP_MATH_H_PROTO1],
+ [/* Define if all C++ overloads are available in <math.h>. */
+#if __cplusplus >= 199711L
+#undef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#endif])
+ AH_VERBATIM([__CORRECT_ISO_CPP_MATH_H_PROTO2],
+ [/* Define if only double std::abs(double) is available in <math.h>. */
+#if __cplusplus >= 199711L
+#undef __CORRECT_ISO_CPP_MATH_H_PROTO2
+#endif])
+
+ if test $glibcxx_cv_abs_float = yes; then
+ AC_DEFINE(__CORRECT_ISO_CPP_MATH_H_PROTO1)
+ else
+ AC_DEFINE(__CORRECT_ISO_CPP_MATH_H_PROTO2)
+ fi
+ AC_MSG_RESULT($glibcxx_cv_abs_float)
+ ;;
+ esac
+
+ AC_LANG_RESTORE
+])
+
+dnl
+dnl Check whether required C++ overloads are present in <stdlib.h>.
+dnl
+
+AC_DEFUN([GLIBCXX_CHECK_STDLIB_PROTO], [
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+
+ case "$host" in
+ *-*-solaris2.*)
+ # Solaris 8 FCS lacked the overloads for long std::abs(long) and
+ # ldiv_t std::div(long, long) in <iso/stdlib_iso.h>. Patches 109607-02
+ # (SPARC) and 109608-02 (x86) introduced them.
+ AC_MSG_CHECKING([for long std::abs(long) overload])
+ AC_CACHE_VAL(glibcxx_cv_abs_long, [
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE(
+ [#include <stdlib.h>
+ namespace std {
+ inline long
+ abs(long __i) { return labs(__i); }
+ }
+ ])],
+ [glibcxx_cv_abs_long=no],
+ [glibcxx_cv_abs_long=yes]
+ )])
+
+ # autoheader cannot handle indented templates.
+ AH_VERBATIM([__CORRECT_ISO_CPP_STDLIB_H_PROTO],
+ [/* Define if all C++ overloads are available in <stdlib.h>. */
+#if __cplusplus >= 199711L
+#undef __CORRECT_ISO_CPP_STDLIB_H_PROTO
+#endif])
+ if test $glibcxx_cv_abs_long = yes; then
+ AC_DEFINE(__CORRECT_ISO_CPP_STDLIB_H_PROTO, 1)
+ fi
+ AC_MSG_RESULT($glibcxx_cv_abs_long)
+ ;;
+ esac
+
+ AC_LANG_RESTORE
+])
+
+dnl
dnl Check whether macros, etc are present for <system_error>
dnl
AC_DEFUN([GLIBCXX_CHECK_SYSTEM_ERROR], [
m4_pushdef([n_syserr], [1])dnl
m4_foreach([syserr], [EOWNERDEAD, ENOTRECOVERABLE, ENOLINK, EPROTO, ENODATA,
ENOSR, ENOSTR, ETIME, EBADMSG, ECANCELED,
- EOVERFLOW, ENOTSUP, EIDRM, ETXTBSY],
+ EOVERFLOW, ENOTSUP, EIDRM, ETXTBSY,
+ ECHILD, ENOSPC, EPERM,
+ ETIMEDOUT, EWOULDBLOCK],
[m4_pushdef([SYSERR], m4_toupper(syserr))dnl
AC_MSG_CHECKING([for syserr])
AC_CACHE_VAL([glibcxx_cv_system_error[]n_syserr], [
AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
GLIBCXX_ENABLE(clocale,auto,[[[=MODEL]]],
[use MODEL for target locale package],
- [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
+ [permit generic|gnu|ieee_1003.1-2001|newlib|yes|no|auto])
# Deal with gettext issues. Default to not using it (=no) until we detect
# support for it later. Let the user turn it off via --e/d, but let that
[],
[enable_nls=yes])
- # Either a known packaage, or "auto"
+ # Either a known package, or "auto"
if test $enable_clocale = no || test $enable_clocale = yes; then
enable_clocale=auto
fi
enable_clocale_flag=darwin
;;
*)
- enable_clocale_flag=generic
+ if test x"$with_newlib" = x"yes"; then
+ enable_clocale_flag=newlib
+ else
+ enable_clocale_flag=generic
+ fi
;;
esac
fi
CTIME_CC=config/locale/generic/time_members.cc
CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
;;
+ newlib)
+ AC_MSG_RESULT(newlib)
+
+ CLOCALE_H=config/locale/generic/c_locale.h
+ CLOCALE_CC=config/locale/generic/c_locale.cc
+ CCODECVT_CC=config/locale/generic/codecvt_members.cc
+ CCOLLATE_CC=config/locale/generic/collate_members.cc
+ CCTYPE_CC=config/locale/newlib/ctype_members.cc
+ CMESSAGES_H=config/locale/generic/messages_members.h
+ CMESSAGES_CC=config/locale/generic/messages_members.cc
+ CMONEY_CC=config/locale/generic/monetary_members.cc
+ CNUMERIC_CC=config/locale/generic/numeric_members.cc
+ CTIME_H=config/locale/generic/time_members.h
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
esac
# This is where the testsuite looks for locale catalogs, using the
])
dnl
+dnl Check for GNU 128-bit integer and floating point types.
+dnl
+dnl Note: also checks that the types aren't standard types.
+dnl
+dnl Defines:
+dnl _GLIBCXX_USE_INT128
+dnl _GLIBCXX_USE_FLOAT128
+dnl
+AC_DEFUN([GLIBCXX_ENABLE_INT128_FLOAT128], [
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+
+ # Fake what AC_TRY_COMPILE does, without linking as this is
+ # unnecessary for this test.
+
+ cat > conftest.$ac_ext << EOF
+[#]line __oline__ "configure"
+template<typename T1, typename T2>
+ struct same
+ { typedef T2 type; };
+
+template<typename T>
+ struct same<T, T>;
+
+int main()
+{
+ typename same<long, __int128>::type i1;
+ typename same<long long, __int128>::type i2;
+}
+EOF
+
+ AC_MSG_CHECKING([for __int128])
+ if AC_TRY_EVAL(ac_compile); then
+ AC_DEFINE(_GLIBCXX_USE_INT128, 1,
+ [Define if __int128 is supported on this host.])
+ enable_int128=yes
+ else
+ enable_int128=no
+ fi
+ AC_MSG_RESULT($enable_int128)
+ rm -f conftest*
+
+ cat > conftest.$ac_ext << EOF
+[#]line __oline__ "configure"
+template<typename T1, typename T2>
+ struct same
+ { typedef T2 type; };
+
+template<typename T>
+ struct same<T, T>;
+
+int main()
+{
+ typename same<double, __float128>::type f1;
+ typename same<long double, __float128>::type f2;
+}
+EOF
+
+ AC_MSG_CHECKING([for __float128])
+ if AC_TRY_EVAL(ac_compile); then
+ AC_DEFINE(_GLIBCXX_USE_FLOAT128, 1,
+ [Define if __float128 is supported on this host.])
+ enable_float128=yes
+ else
+ enable_float128=no
+ fi
+ AC_MSG_RESULT($enable_float128)
+ rm -f conftest*
+
+ AC_LANG_RESTORE
+])
+
+dnl
dnl Check for template specializations for the 'wchar_t' type.
dnl
dnl --enable-wchar_t defines _GLIBCXX_USE_WCHAR_T
dnl
dnl Allow visibility attributes to be used on namespaces, objects, etc.
dnl
-dnl --enable-visibility enables attempt to use visibility attributes.
-dnl --disable-visibility turns off all use of visibility attributes.
-dnl + Usage: GLIBCXX_ENABLE_VISIBILITY[(DEFAULT)]
+dnl --enable-libstdcxx-visibility enables attempt to use visibility attributes.
+dnl --disable-libstdcxx-visibility turns off all use of visibility attributes.
+dnl + Usage: GLIBCXX_ENABLE_LIBSTDCXX_VISIBILITY[(DEFAULT)]
dnl Where DEFAULT is 'yes'.
dnl
-AC_DEFUN([GLIBCXX_ENABLE_VISIBILITY], [
-GLIBCXX_ENABLE(visibility,$1,,[enables visibility safe usage])
+AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_VISIBILITY], [
+GLIBCXX_ENABLE(libstdcxx-visibility,$1,,[enables visibility safe usage])
-if test x$enable_visibility = xyes ; then
+if test x$enable_libstdcxx_visibility = xyes ; then
dnl all hail libgfortran
dnl Check whether the target supports hidden visibility.
AC_CACHE_CHECK([whether the target supports hidden visibility],
glibcxx_cv_have_attribute_visibility=no)
CFLAGS="$save_CFLAGS"])
if test $glibcxx_cv_have_attribute_visibility = no; then
- enable_visibility=no
+ enable_libstdcxx_visibility=no
fi
fi
-GLIBCXX_CONDITIONAL(ENABLE_VISIBILITY, test $enable_visibility = yes)
-AC_MSG_NOTICE([visibility supported: $enable_visibility])
+GLIBCXX_CONDITIONAL(ENABLE_VISIBILITY, test $enable_libstdcxx_visibility = yes)
+AC_MSG_NOTICE([visibility supported: $enable_libstdcxx_visibility])
])
dnl Add version tags to symbols in shared library (or not), additionally
dnl marking other symbols as private/local (or not).
dnl
+dnl Sets libtool_VERSION, and determines shared library SONAME.
+dnl
+dnl This depends on GLIBCXX CHECK_LINKER_FEATURES, but without it assumes no.
+dnl
dnl --enable-symvers=style adds a version script to the linker call when
dnl creating the shared library. The choice of version script is
dnl controlled by 'style'.
dnl --disable-symvers does not.
+dnl
dnl + Usage: GLIBCXX_ENABLE_SYMVERS[(DEFAULT)]
dnl Where DEFAULT is either 'yes' or 'no'. Passing `yes' tries to
dnl choose a default style based on linker characteristics. Passing
fi
fi
-# Everything parsed; figure out what file to use.
+# For libtool versioning info, format is CURRENT:REVISION:AGE
+libtool_VERSION=6:17:0
+
+# Everything parsed; figure out what files and settings to use.
case $enable_symvers in
no)
SYMVER_FILE=config/abi/pre/none.ver
[Define to use GNU versioning in the shared library.])
;;
gnu-versioned-namespace)
+ libtool_VERSION=7:0:0
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.])
dnl namespace are complex and fragile enough as it is). We must also
dnl add a relative path so that -I- is supported properly.
dnl
-dnl Substs:
-dnl glibcxx_thread_h
-dnl
-dnl Defines:
-dnl HAVE_GTHR_DEFAULT
-dnl
AC_DEFUN([GLIBCXX_ENABLE_THREADS], [
AC_MSG_CHECKING([for thread model used by GCC])
target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
AC_MSG_RESULT([$target_thread_file])
-
- 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).])
- fi
-
- glibcxx_thread_h=gthr-$target_thread_file.h
-
- dnl Check for __GTHREADS define.
- gthread_file=${toplevel_srcdir}/gcc/${glibcxx_thread_h}
- if grep __GTHREADS $gthread_file >/dev/null 2>&1 ; then
- enable_thread=yes
- else
- enable_thread=no
- fi
-
- AC_SUBST(glibcxx_thread_h)
])
AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -fno-exceptions -I${toplevel_srcdir}/gcc"
+ CXXFLAGS="$CXXFLAGS -fno-exceptions \
+ -I${toplevel_srcdir}/libgcc -I${toplevel_builddir}/libgcc"
target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
case $target_thread_file in
CXXFLAGS="$CXXFLAGS -DSUPPORTS_WEAK -DGTHREAD_USE_WEAK -D_PTHREADS"
esac
- AC_MSG_CHECKING([for gthreads library])
+ AC_MSG_CHECKING([whether it can be safely assumed that mutex_timedlock is available])
- AC_TRY_COMPILE([#include "gthr.h"],
+ AC_TRY_COMPILE([#include <unistd.h>],
[
- #ifndef __GTHREADS_CXX0X
+ // In case of POSIX threads check _POSIX_TIMEOUTS.
+ #if (defined(_PTHREADS) \
+ && (!defined(_POSIX_TIMEOUTS) || _POSIX_TIMEOUTS <= 0))
#error
#endif
+ ], [ac_gthread_use_mutex_timedlock=1], [ac_gthread_use_mutex_timedlock=0])
- // In case of POSIX threads check _POSIX_TIMEOUTS too.
- #if (defined(_PTHREADS) \
- && (!defined(_POSIX_TIMEOUTS) || _POSIX_TIMEOUTS <= 0))
+ AC_DEFINE_UNQUOTED(_GTHREAD_USE_MUTEX_TIMEDLOCK, $ac_gthread_use_mutex_timedlock,
+ [Define to 1 if mutex_timedlock is available.])
+
+ if test $ac_gthread_use_mutex_timedlock = 1 ; then res_mutex_timedlock=yes ;
+ else res_mutex_timedlock=no ; fi
+ AC_MSG_RESULT([$res_mutex_timedlock])
+
+ AC_MSG_CHECKING([for gthreads library])
+
+ AC_TRY_COMPILE([#include "gthr.h"],
+ [
+ #ifndef __GTHREADS_CXX0X
#error
#endif
], [ac_has_gthreads=yes], [ac_has_gthreads=no])
AC_LANG_RESTORE
])
+dnl
+dnl Check whether sysconf(_SC_NPROC_ONLN) is available in <unistd.h>, and define _GLIBCXX_USE_SC_NPROC_ONLN.
+dnl
+AC_DEFUN([GLIBCXX_CHECK_SC_NPROC_ONLN], [
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -fno-exceptions"
+
+ AC_MSG_CHECKING([for _SC_NPROC_ONLN])
+ AC_CACHE_VAL(glibcxx_cv_SC_NPROC_ONLN, [
+ GCC_TRY_COMPILE_OR_LINK(
+ [#include <unistd.h>],
+ [int n = sysconf(_SC_NPROC_ONLN);],
+ [glibcxx_cv_SC_NPROC_ONLN=yes],
+ [glibcxx_cv_SC_NPROC_ONLN=no])
+ ])
+ if test $glibcxx_cv_SC_NPROC_ONLN = yes; then
+ AC_DEFINE(_GLIBCXX_USE_SC_NPROC_ONLN, 1, [Define if _SC_NPROC_ONLN is available in <unistd.h>.])
+ fi
+ AC_MSG_RESULT($glibcxx_cv_SC_NPROC_ONLN)
+
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ AC_LANG_RESTORE
+])
+
+dnl
+dnl Check whether pthread_num_processors_np is available in <pthread.h>, and define _GLIBCXX_USE_PTHREADS_NUM_PROCESSORS_NP.
+dnl
+AC_DEFUN([GLIBCXX_CHECK_PTHREADS_NUM_PROCESSORS_NP], [
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -fno-exceptions"
+
+ AC_MSG_CHECKING([for pthreads_num_processors_np])
+ AC_CACHE_VAL(glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP, [
+ GCC_TRY_COMPILE_OR_LINK(
+ [#include <pthread.h>],
+ [int n = pthread_num_processors_np();],
+ [glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP=yes],
+ [glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP=no])
+ ])
+ if test $glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP = yes; then
+ AC_DEFINE(_GLIBCXX_USE_PTHREADS_NUM_PROCESSORS_NP, 1, [Define if pthreads_num_processors_np is available in <pthread.h>.])
+ fi
+ AC_MSG_RESULT($glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP)
+
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ AC_LANG_RESTORE
+])
+
+dnl
+dnl Check whether sysctl is available in <pthread.h>, and define _GLIBCXX_USE_SYSCTL_HW_NCPU.
+dnl
+AC_DEFUN([GLIBCXX_CHECK_SYSCTL_HW_NCPU], [
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -fno-exceptions"
+
+ AC_MSG_CHECKING([for hw.ncpu sysctl])
+ AC_CACHE_VAL(glibcxx_cv_SYSCTL_HW_NCPU, [
+ GCC_TRY_COMPILE_OR_LINK(
+ [
+ #include <stddef.h>
+ #include <sys/sysctl.h>
+ ],
+ [
+ int count;
+ size_t size = sizeof(count);
+ int mib[] = { CTL_HW, HW_NCPU };
+ sysctl(mib, 2, &count, &size, NULL, 0);
+ ],
+ [glibcxx_cv_SYSCTL_HW_NCPU=yes],
+ [glibcxx_cv_SYSCTL_HW_NCPU=no])
+ ])
+ if test $glibcxx_cv_SYSCTL_HW_NCPU = yes; then
+ AC_DEFINE(_GLIBCXX_USE_SYSCTL_HW_NCPU, 1, [Define if sysctl(), CTL_HW and HW_NCPU are available in <sys/sysctl.h>.])
+ fi
+ AC_MSG_RESULT($glibcxx_cv_SYSCTL_HW_NCPU)
+
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ AC_LANG_RESTORE
+])
# Macros from the top-level gcc directory.
m4_include([../config/gc++filt.m4])