summaryrefslogtreecommitdiff
path: root/libstdc++-v3/acinclude.m4
diff options
context:
space:
mode:
authorbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>2000-04-21 20:33:34 +0000
committerbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>2000-04-21 20:33:34 +0000
commitb9e8095bd7c7b1492baf175e1ebf336dc3ff6e4d (patch)
treee72cc26bb321e8bf90f4e68330674848db54eddf /libstdc++-v3/acinclude.m4
parent61dfea14dbc2e4d8b70a6f1df61bce8aa70340ce (diff)
downloadgcc-b9e8095bd7c7b1492baf175e1ebf336dc3ff6e4d.tar.gz
2000-04-21 Benjamin Kosnik <bkoz@redhat.com>
* libstdc++-v3: New directory. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33317 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/acinclude.m4')
-rw-r--r--libstdc++-v3/acinclude.m4881
1 files changed, 881 insertions, 0 deletions
diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
new file mode 100644
index 00000000000..8b9a4547390
--- /dev/null
+++ b/libstdc++-v3/acinclude.m4
@@ -0,0 +1,881 @@
+dnl
+dnl Initialize configure bits.
+dnl
+dnl Define OPTLEVEL='-O2' if new inlining code present.
+dnl
+dnl GLIBCPP_CONFIGURE
+AC_DEFUN(GLIBCPP_CONFIGURE, [
+ dnl Default to --enable-multilib
+ AC_ARG_ENABLE(multilib,
+ [ --enable-multilib build hella library versions (default)],
+ [case "${enableval}" in
+ yes) multilib=yes ;;
+ no) multilib=no ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
+ esac], [multilib=yes])dnl
+
+ dnl We may get other options which we dont document:
+ dnl --with-target-subdir, --with-multisrctop, --with-multisubdir
+ if test "[$]{srcdir}" = "."; then
+ if test "[$]{with_target_subdir}" != "."; then
+ glibcpp_basedir="[$]{srcdir}/[$]{with_multisrctop}../$1"
+ else
+ glibcpp_basedir="[$]{srcdir}/[$]{with_multisrctop}$1"
+ fi
+ else
+ glibcpp_basedir="[$]{srcdir}/$1"
+ fi
+ AC_SUBST(glibcpp_basedir)
+
+ AC_CANONICAL_HOST
+
+ AM_INIT_AUTOMAKE(libstdc++, 2.90.8)
+
+# FIXME: We temporarily define our own version of AC_PROG_CC. This is
+# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We
+# are probably using a cross compiler, which will not be able to fully
+# link an executable. This should really be fixed in autoconf
+# itself.
+
+AC_DEFUN(LIB_AC_PROG_CC,
+[AC_BEFORE([$0], [AC_PROG_CPP])dnl
+dnl Fool anybody using AC_PROG_CC.
+AC_PROVIDE([AC_PROG_CC])
+AC_CHECK_PROG(CC, gcc, gcc)
+if test -z "$CC"; then
+ AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
+ test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
+fi
+
+AC_PROG_CC_GNU
+
+if test $ac_cv_prog_gcc = yes; then
+ GCC=yes
+dnl Check whether -g works, even if CFLAGS is set, in case the package
+dnl plays around with CFLAGS (such as to build both debugging and
+dnl normal versions of a library), tasteless as that idea is.
+ ac_test_CFLAGS="${CFLAGS+set}"
+ ac_save_CFLAGS="$CFLAGS"
+ CFLAGS=
+ AC_PROG_CC_G
+ if test "$ac_test_CFLAGS" = set; then
+ CFLAGS="$ac_save_CFLAGS"
+ elif test $ac_cv_prog_cc_g = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-O2"
+ fi
+else
+ GCC=
+ test "${CFLAGS+set}" = set || CFLAGS="-g"
+fi
+])
+
+LIB_AC_PROG_CC
+
+# Likewise for AC_PROG_CXX.
+AC_DEFUN(LIB_AC_PROG_CXX,
+[AC_BEFORE([$0], [AC_PROG_CXXCPP])dnl
+dnl Fool anybody using AC_PROG_CXX.
+AC_PROVIDE([AC_PROG_CXX])
+AC_CHECK_PROGS(CXX, $CCC c++ g++ gcc CC cxx cc++, gcc)
+test -z "$CXX" && AC_MSG_ERROR([no acceptable c++ found in \$PATH])
+
+AC_PROG_CXX_GNU
+
+if test $ac_cv_prog_gxx = yes; then
+ GXX=yes
+dnl Check whether -g works, even if CXXFLAGS is set, in case the package
+dnl plays around with CXXFLAGS (such as to build both debugging and
+dnl normal versions of a library), tasteless as that idea is.
+ ac_test_CXXFLAGS="${CXXFLAGS+set}"
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS=
+ AC_PROG_CXX_G
+ if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ elif test $ac_cv_prog_cxx_g = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-O2"
+ fi
+else
+ GXX=
+ test "${CXXFLAGS+set}" = set || CXXFLAGS="-g"
+fi
+])
+
+LIB_AC_PROG_CXX
+
+# AC_CHECK_TOOL does AC_REQUIRE (AC_CANONICAL_BUILD). If we dont
+# run it explicitly here, it will be run implicitly before
+# LIBGCJ_CONFIGURE, which doesn't work because that means that it will
+# be run before AC_CANONICAL_HOST.
+AC_CANONICAL_BUILD
+
+AC_CHECK_TOOL(AS, as)
+AC_CHECK_TOOL(AR, ar)
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+
+AC_PROG_INSTALL
+
+AM_MAINTAINER_MODE
+
+# We need AC_EXEEXT to keep automake happy in cygnus mode. However,
+# at least currently, we never actually build a program, so we never
+# need to use $(EXEEXT). Moreover, the test for EXEEXT normally
+# fails, because we are probably configuring with a cross compiler
+# which cant create executables. So we include AC_EXEEXT to keep
+# automake happy, but we dont execute it, since we dont care about
+# the result.
+if false; then
+ AC_EXEEXT
+fi
+
+# configure.host sets the following important variables
+# glibcpp_cflags - host specific C compiler flags
+# glibcpp_cxxflags - host specific C++ compiler flags
+
+glibcpp_cflags=
+glibcpp_cxxflags=
+
+. [$]{glibcpp_basedir}/configure.host
+
+case [$]{glibcpp_basedir} in
+/* | [A-Za-z]:[/\\]*) libgcj_flagbasedir=[$]{glibcpp_basedir} ;;
+*) glibcpp_flagbasedir='[$](top_builddir)/'[$]{glibcpp_basedir} ;;
+esac
+
+GLIBCPP_CFLAGS="[$]{glibcpp_cflags}"
+GLIBCPP_CXXFLAGS="[$]{glibcpp_cxxflags}"
+AC_SUBST(GLIBCPP_CFLAGS)
+AC_SUBST(GLIBCPP_CXXFLAGS)
+])
+
+
+dnl
+dnl Check to see if g++ can compile this library.
+dnl
+dnl Define OPTLEVEL='-O2' if new inlining code present.
+dnl
+dnl GLIBCPP_CHECK_COMPILER_VERSION
+AC_DEFUN(GLIBCPP_CHECK_COMPILER_VERSION, [
+ AC_MSG_CHECKING([for g++ that will successfullly compile this code])
+ AC_EGREP_CPP([ok], [
+ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
+ ok
+ #endif
+ ], gpp_satisfactory=yes, AC_MSG_ERROR("please upgrade to gcc-2.95 or above"))
+ AC_MSG_RESULT($gpp_satisfactory)
+
+ AC_MSG_CHECKING([for g++ that supports new inlining mechanism])
+ AC_EGREP_CPP([ok], [
+ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 95)
+ ok
+ #endif
+ ], [OPTLEVEL='-O2'
+ WERRORSUPPRESS=
+ ], [OPTLEVEL=
+ WERRORSUPPRESS=-Wno-error
+ ])
+ if test "$OPTLEVEL" = ""; then
+ AC_MSG_RESULT(no)
+ else
+ AC_MSG_RESULT(yes)
+ fi
+ AC_SUBST(OPTLEVEL)
+ AC_SUBST(WERRORSUPPRESS)
+])
+
+
+dnl
+dnl Check to see what builtin math functions are supported
+dnl
+dnl Define _GLIBCPP_HAS_BUILTIN_SINF if __builtin_sinf
+dnl Define _GLIBCPP_HAS_BUILTIN_COSF if __builtin_cosf
+dnl Define _GLIBCPP_HAS_BUILTIN_FABSF if __builtin_fabsf
+dnl Define _GLIBCPP_HAS_BUILTIN_SQRTF if __builtin_sqrtf
+dnl
+dnl GLIBCPP_CHECK_BUILTIN_MATH_SUPPORT
+AC_DEFUN(GLIBCPP_CHECK_BUILTIN_MATH_SUPPORT, [
+ dnl Test for builtin math functions.
+ AC_MSG_CHECKING([for __builtin_sinf])
+ AC_TRY_COMPILE([#include <math.h>],
+ [float foo(void) { __builtin_sinf(0.0); }],
+ use_builtin_sinf=yes, use_builtin_sinf=no)
+ AC_MSG_RESULT($use_builtin_sinf)
+ if test $use_builtin_sinf = "yes"; then
+ AC_DEFINE(_GLIBCPP_HAS_BUILTIN_SINF)
+ fi
+
+ AC_MSG_CHECKING([for __builtin_cosf])
+ AC_TRY_COMPILE([#include <math.h>],
+ [float foo(void) { __builtin_cosf(0.0); }],
+ use_builtin_cosf=yes, use_builtin_cosf=no)
+ AC_MSG_RESULT($use_builtin_cosf)
+ if test $use_builtin_cosf = "yes"; then
+ AC_DEFINE(_GLIBCPP_HAS_BUILTIN_COSF)
+ fi
+
+ AC_MSG_CHECKING([for __builtin_fabsf])
+ AC_TRY_COMPILE([#include <math.h>],
+ [float foo(void) { __builtin_fabsf(0.0); }],
+ use_builtin_fabsf=yes, use_builtin_fabsf=no)
+ AC_MSG_RESULT($use_builtin_fabsf)
+ if test $use_builtin_fabsf = "yes"; then
+ AC_DEFINE(_GLIBCPP_HAS_BUILTIN_FABSF)
+ fi
+
+ AC_MSG_CHECKING([for __builtin_sqrtf])
+ AC_TRY_COMPILE([#include <math.h>],
+ [float foo(void) { __builtin_sqrtf(0.0); }],
+ use_builtin_sqrtf=yes, use_builtin_sqrtf=no)
+ AC_MSG_RESULT($use_builtin_sqrtf)
+ if test $use_builtin_sqrtf = "yes"; then
+ AC_DEFINE(_GLIBCPP_HAS_BUILTIN_SQRTF)
+ fi
+])
+
+
+dnl
+dnl Check to see what architecture we are compiling for. If it's
+dnl supported, use special hand-crafted routines to provide thread
+dnl primitives.
+dnl
+dnl Depending on what is found, select various configure/cpu/*/atomicity.h
+dnl If not found, select configure/cpu/generic/atomicity.h
+dnl
+dnl GLIBCPP_CHECK_CPU
+AC_DEFUN(GLIBCPP_CHECK_CPU, [
+ AC_MSG_CHECKING([for cpu primitives directory])
+ case "$target_cpu" in
+ alpha*)
+ cpu_include_dir="config/cpu/alpha"
+ ;;
+ arm*)
+ cpu_include_dir="config/cpu/arm"
+ ;;
+ i486 | i586 | i686 | i786)
+ cpu_include_dir="config/cpu/i386"
+ ;;
+ powerpc | rs6000)
+ cpu_include_dir="config/cpu/powerpc"
+ ;;
+ sparc64 | ultrasparc)
+ cpu_include_dir="config/cpu/sparc/sparc64"
+ ;;
+ sparc*)
+ cpu_include_dir="config/cpu/sparc/sparc32"
+ ;;
+ *)
+ cpu_include_dir="config/cpu/generic"
+ ;;
+ esac
+ AC_MSG_RESULT($cpu_include_dir)
+ AC_SUBST(cpu_include_dir)
+])
+
+
+dnl
+dnl Check to see what the underlying c library's interface to ctype looks
+dnl like. Bits of locale rely on things like isspace, toupper, etc. This
+dnl stuff makes sure the right bits from the clibrary get called.
+dnl
+dnl Depending on what is found, select various configure/*/bits/ctype_base.h
+dnl Depending on what is found, select various configure/*/ctype.cc
+dnl
+dnl GLIBCPP_CHECK_CTYPE
+AC_DEFUN(GLIBCPP_CHECK_CTYPE, [
+ AC_CHECK_HEADER(ctype.h, [
+
+ dnl If doesn't match any specified, go with defaults.
+ ctype_default=yes
+
+ dnl Test for <ctype> functionality -- gnu-linux
+ AC_MSG_CHECKING([for gnu-linux <ctype>])
+ AC_TRY_COMPILE([#include <ctype.h>],
+ [int
+ foo (int a)
+ { return _ISspace + _ISprint + _IScntrl + _ISupper + _ISlower + _ISalpha \
+ + _ISdigit + _ISpunct + _ISxdigit + _ISalnum + _ISgraph \
+ + __ctype_tolower[a] + __ctype_toupper[a] + __ctype_b[a];}], \
+ ctype_linux=yes, ctype_linux=no)
+ AC_MSG_RESULT($ctype_linux)
+ if test $ctype_linux = "yes"; then
+ ctype_include_dir="config/gnu-linux"
+ ctype_default=no
+ fi
+
+ dnl Test for <ctype> functionality -- solaris 2.6 and 2.7
+ if test $ctype_default = "yes"; then
+ AC_MSG_CHECKING([for solaris 2.6 or 2.7 <ctype>])
+ AC_TRY_COMPILE([#include <ctype.h>],
+ [int
+ foo (int a)
+ { return _ISSPACE + _ISPRINT + _ISCNTRL + _ISUPPER + _ISLOWER + _ISALPHA \
+ + _ISDIGIT + _ISPUNCT + _ISXDIGIT + _ISALNUM + _ISGRAPH \
+ + __trans_lower[a] + __trans_upper[a] + __ctype_mask[a];}], \
+ ctype_solaris=yes, ctype_solaris=no)
+ AC_MSG_RESULT($ctype_solaris)
+
+ if test $ctype_solaris = "yes"; then
+ AC_MSG_CHECKING([ for version])
+ AC_LANG_CPLUSPLUS
+ AC_TRY_COMPILE([#include <ctype.h>],
+ [typedef long* __to_type; __to_type const& _M_toupper = __trans_upper;],\
+ ctype_solaris26=yes, ctype_solaris26=no)
+ AC_LANG_C
+ if test $ctype_solaris26 = "yes"; then
+ ctype_include_dir="config/solaris/solaris2.6"
+ AC_MSG_RESULT("solaris2.6")
+ ctype_default=no
+ else
+ ctype_include_dir="config/solaris/solaris2.7"
+ AC_MSG_RESULT("solaris2.7")
+ ctype_default=no
+ fi
+ fi
+ fi
+
+ dnl Test for <ctype> functionality -- solaris 2.5.1
+ if test $ctype_default = "yes"; then
+ AC_MSG_CHECKING([for solaris 2.5.1 <ctype>])
+ AC_TRY_COMPILE([#include <ctype.h>],
+ [int
+ foo (int a)
+ { return _U + _L + _N + _S + _P + _C + _X + _B \
+ + __ctype[a];}], \
+ ctype_solaris25=yes, ctype_solaris25=no)
+ AC_MSG_RESULT($ctype_solaris25)
+ if test $ctype_solaris25 = "yes"; then
+ ctype_include_dir="config/solaris/solaris2.5"
+ ctype_default=no
+ fi
+ fi
+
+ dnl Test for <ctype> functionality -- aix
+ if test $ctype_default = "yes"; then
+ AC_MSG_CHECKING([for aix <ctype>])
+ AC_TRY_COMPILE([#include <ctype.h>],
+ [int
+ foo (int a)
+ { return _ISSPACE + _ISPRINT + _ISCNTRL + _ISUPPER + _ISLOWER + _ISALPHA \
+ + _ISDIGIT + _ISPUNCT + _ISXDIGIT + _ISALNUM + _ISGRAPH \
+ + _VALC('a') + _IS('c', 0);}], \
+ ctype_aix=yes, ctype_aix=no)
+ AC_MSG_RESULT($ctype_aix)
+ if test $ctype_aix = "yes"; then
+ ctype_include_dir="config/aix"
+ ctype_default=no
+ fi
+ fi
+
+ dnl Test for <ctype> functionality -- newlib
+ if test $ctype_default = "yes"; then
+ AC_MSG_CHECKING([for newlib <ctype>])
+ AC_TRY_COMPILE([#include <ctype.h>],
+ [int
+ foo (int a)
+ { return _U + _L + _N + _S + _P + _C + _X + _B \
+ + _ctype_[a];}], \
+ ctype_newlib=yes, ctype_newlib=no)
+ AC_MSG_RESULT($ctype_newlib)
+ if test $ctype_newlib = "yes"; then
+ ctype_include_dir="config/newlib"
+ ctype_default=no
+ fi
+ fi
+
+ if test $ctype_default = "yes"; then
+ ctype_include_dir="config/generic"
+ AC_MSG_WARN("Using default ctype headers.")
+ fi
+ AC_SUBST(ctype_include_dir)
+ ])
+])
+
+
+dnl
+dnl Check to see what the underlying c library or math library is like.
+dnl
+dnl Define HAVE_CARGF etc if "cargf" is found.
+dnl
+dnl GLIBCPP_CHECK_MATH_SUPPORT
+AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
+ AC_CHECK_LIB(m, sin, libm="-lm")
+ save_LIBS="$LIBS"
+ LIBS="$LIBS $libm"
+
+ dnl Check for complex versions of math functions of platform.
+ AC_CHECK_HEADERS([complex.h])
+ AC_REPLACE_MATHFUNCS(ccos ccosf ccosh ccoshf cexp cexpf c_log c_logf \
+ clog10 clog10f cpow cpowf csin csinf csinh csinhf csqrt csqrtf \
+ ctan ctanf ctanh ctanhf \
+ carg cargf nan hypot hypotf atan2f expf copysignf)
+
+ dnl We compile the long double complex functions only if the function
+ dnl provides the non-complex functions.
+ USE_LONG_DOUBLE=no
+ AC_CHECK_FUNC(sinl,
+ USE_LONG_DOUBLE=yes
+ AC_REPLACE_MATHFUNCS(ccoshl ccosl cexpl cpowl csinhl csinl \
+ csqrtl ctanhl ctanl cargl hypotl signbitl c_logl clog10l))
+ AC_SUBST(USE_LONG_DOUBLE)
+
+ dnl Check to see if basic C math functions have faster float versions.
+ AC_CHECK_FUNCS(modf isnan isnanf isnanl isinf isinff isinfl copysign \
+ copysignl cosf coshf logf log10f powf sinf sinhf sqrtf tanf tanhf \
+ strtof strtold fabsf sincos sincosf sincosl finite finite fqfinite \
+ fpclass qfpclass)
+
+#Some runtimes have these functions with a preceding underscore. Please
+# keep this sync'd with the one above. And if you add any new symbol,
+# please add the corresponding block in the @BOTTOM@ section of
+# acconfig.h.
+AC_CHECK_FUNCS(_modf _isnan _isnanf _isnanl _isinf _isinff _isinfl _copysign \
+_copysignl _cosf _coshf _logf _log10f _powf _sinf _sinhf _sqrtf _tanf _tanhf \
+_strtof _strtold _fabsf _sincos _sincosf _sincosl _finite _finitef _qfinite \
+_fpclass _qfpclass)
+
+LIBS="$save_LIBS"
+])
+
+
+dnl
+dnl Check to see if this target can enable the wchar_t parts of libstdc++.
+dnl
+dnl Define _GLIBCPP_USE_WCHAR_T if all the bits are found
+dnl Define _GLIBCPP_NEED_MBSTATE_T if mbstate_t is not in wchar.h
+dnl Define _GLIBCPP_HAS_WCHAR_MIN_MAX if WCHAR_MIN, WCHAR_MAX in wchar.h
+dnl
+dnl GLIBCPP_CHECK_WCHAR_T_SUPPORT
+AC_DEFUN(GLIBCPP_CHECK_WCHAR_T_SUPPORT, [
+ AC_CHECK_HEADER(wchar.h,[
+ dnl Test wchar.h for mbstate_t, which is needed for char_traits and others.
+ AC_MSG_CHECKING([for native mbstate_t])
+ AC_TRY_COMPILE([#include <wchar.h>],
+ [mbstate_t teststate;],
+ use_native_mbstatet=yes, use_native_mbstatet=no)
+ AC_MSG_RESULT($use_native_mbstatet)
+ if test $use_native_mbstatet = "no"; then
+ AC_DEFINE(_GLIBCPP_NEED_MBSTATE_T)
+ fi
+
+ dnl Test wchar.h for WCHAR_MIN, WCHAR_MAX, which is needed before
+ dnl numeric_limits can instantiate type_traits<wchar_t>
+ AC_MSG_CHECKING([for WCHAR_MIN and WCHAR_MAX])
+ AC_TRY_COMPILE([#include <wchar.h>],
+ [int i = WCHAR_MIN; int j = WCHAR_MAX;],
+ has_wchar_minmax=yes, has_wchar_minmax=no)
+ AC_MSG_RESULT($has_wchar_minmax)
+ if test $has_wchar_minmax = "yes"; then
+ AC_DEFINE(_GLIBCPP_HAS_WCHAR_MIN_MAX)
+ fi
+
+ # Test wchar.h for WEOF, which is what we use to determine whether
+ # to specialize for wchar_t or not.
+ AC_MSG_CHECKING([for WEOF])
+ AC_TRY_COMPILE([
+ #include <wchar.h>
+ #include <stddef.h>],
+ [wint_t i = WEOF;],
+ has_weof=yes, has_weof=no)
+ AC_MSG_RESULT($has_weof)
+
+ dnl Tests for wide character functions.
+ AC_REPLACE_STRINGFUNCS(wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset)
+
+ AC_MSG_CHECKING([for wide character support])
+ if test $has_weof = "yes" && test $has_wchar_minmax = "yes"; then
+ AC_DEFINE(_GLIBCPP_USE_WCHAR_T)
+ AC_MSG_RESULT(ok)
+ else
+ AC_MSG_RESULT("not specializing for wchar_t")
+ fi
+ ],[
+ AC_MSG_WARN([<wchar.h> not found])
+ AC_DEFINE(_GLIBCPP_NEED_MBSTATE_T)
+ ])
+])
+
+
+dnl
+dnl Check to see if this version of GNU C++ is afflicted by bugs in
+dnl __complex__ float support.
+dnl
+dnl Define _GLIBCPP_BUGGY_FLOAT_COMPLEX if buggy.
+dnl
+dnl GLIBCPP_CHECK_COMPLEX_FLOAT_SUPPORT
+AC_DEFUN(GLIBCPP_CHECK_COMPLEX_FLOAT_SUPPORT, [
+ AC_REQUIRE([AC_PROG_CXX])
+ AC_MSG_CHECKING([for GNU C++ __complex__ float support])
+ AC_CACHE_VAL(glibcpp_cv_float_complex, [
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ rm -f conftest.h
+ cat > conftest.h <<EOB
+ //
+ // Check for buggy __complex__ that causes ICE in most versions of egcs
+ // and gcc-2.95.x on certain platforms (eg., x86-win32).
+ //
+ // See http://egcs.cygnus.com/ml/gcc-bugs/1999-07/msg00845.html for
+ // more info on the bug itself.
+ //
+ struct
+ float_complex
+ {
+ __complex__ float m_value;
+ float_complex (float = 0.0f, float = 0.0f);
+ float_complex (__complex__ float val) : m_value (val) {}
+ float_complex foo (const float_complex &val)
+ { return float_complex (~val.m_value); }
+ };
+EOB
+ AC_TRY_COMPILE([#include "conftest.h"], ,
+ glibcpp_cv_float_complex=ok,
+ glibcpp_cv_float_complex=buggy
+ )
+ AC_LANG_RESTORE
+ ])
+ AC_MSG_RESULT($glibcpp_cv_float_complex)
+ if test $glibcpp_cv_float_complex = buggy; then
+ AC_DEFINE(_GLIBCPP_BUGGY_FLOAT_COMPLEX)
+ fi
+])
+
+
+dnl
+dnl
+dnl Check to see if this version of GNU C++ is afflicted by bugs in
+dnl __complex__ support.Check for buggy __complex__ that will cause ICE in
+dnl gcc-2.95.x when using the library, unless we define the default copy
+dnl ctor in the specializations of complex<>.
+dnl
+dnl Define _GLIBCPP_BUGGY_COMPLEX if buggy.
+dnl
+dnl GLIBCPP_CHECK_COMPLEX_SUPPORT
+AC_DEFUN(GLIBCPP_CHECK_COMPLEX_SUPPORT, [
+ AC_REQUIRE([AC_PROG_CXX])
+ AC_MSG_CHECKING([for GNU C++ __complex__ support])
+ AC_CACHE_VAL(glibcpp_cv_complex, [
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_TRY_COMPILE([struct dcomplex { __complex__ double x; }; \
+ dcomplex f(const dcomplex& x) { return dcomplex(x); }], \
+ [ dcomplex x; f(x); ],
+ glibcpp_cv_complex=ok,
+ glibcpp_cv_complex=buggy
+ )
+ AC_LANG_RESTORE
+ ])
+ AC_MSG_RESULT($glibcpp_cv_complex)
+ if test $glibcpp_cv_complex = buggy; then
+ AC_DEFINE(_GLIBCPP_BUGGY_COMPLEX)
+ fi
+])
+
+
+dnl
+dnl Check for certain special build configurations.
+dnl
+dnl GLIBCPP_ENABLE_DEBUG
+dnl --enable-debug sets '-ggdb -O0'.
+dnl --disable-debug sets '-g' and whatever optimization options the
+dnl compiler can handle.
+dnl + Perhaps --enable-maintainer-mode should automatically turn this on?
+dnl + Perhaps -D/-U of NDEBUG, DEBUG, DEBUG_ASSERT, ...?
+dnl + Usage: GLIBCPP_ENABLE_DEBUG[(DEFAULT)]
+dnl Where DEFAULT is either `yes' or `no'. If ommitted, it
+dnl defaults to `no'.
+AC_DEFUN(GLIBCPP_ENABLE_DEBUG, [dnl
+define([GLIBCPP_ENABLE_DEBUG_DEFAULT], ifelse($1, yes, yes, no))dnl
+AC_ARG_ENABLE(debug,
+changequote(<<, >>)dnl
+<< --enable-debug extra debugging, turn off optimization [default=>>GLIBCPP_ENABLE_DEBUG_DEFAULT],
+changequote([, ])dnl
+[case "$enableval" in
+ yes) enable_debug=yes ;;
+ no) enable_debug=no ;;
+ *) AC_MSG_ERROR([Unknown argument to enable/disable extra debugging]) ;;
+ esac],
+enable_debug=GLIBCPP_ENABLE_DEBUG_DEFAULT)dnl
+dnl Option parsed, now set things appropriately
+case "$enable_debug" in
+ yes) DEBUGFLAGS='-ggdb -O0'
+ ;;
+ no) DEBUGFLAGS='-g'
+ ;;
+esac
+AC_SUBST(DEBUGFLAGS)
+])
+
+
+dnl
+dnl Check for certain special build configurations.
+dnl
+dnl GLIBCPP_ENABLE_NAMESPACES
+dnl --enable-namespaces sets '-fhonor-std' and defines _GLIBCPP_USE_NAMESPACES
+dnl --disable-namespaces sets '-fno-honor-std' (the macro should be
+dnl undefined by default in whatever.h.in).
+dnl + Eventually, this will go away.
+dnl + Usage: GLIBCPP_ENABLE_NAMESPACES[(DEFAULT)]
+dnl Where DEFAULT is either `yes' or `no'. If ommitted, it
+dnl defaults to `no'.
+AC_DEFUN(GLIBCPP_ENABLE_NAMESPACES, [dnl
+define([GLIBCPP_ENABLE_NAMESPACES_DEFAULT], ifelse($1, yes, yes, no))dnl
+AC_ARG_ENABLE(namespaces,
+changequote(<<, >>)dnl
+<< --enable-namespaces turns on 'std' [default=>>GLIBCPP_ENABLE_NAMESPACES_DEFAULT],
+changequote([, ])dnl
+[case "$enableval" in
+ yes) enable_namespaces=yes ;;
+ no) enable_namespaces=no ;;
+ *) AC_MSG_ERROR([Unknown argument to enable/disable namespaces]) ;;
+ esac],
+enable_namespaces=GLIBCPP_ENABLE_NAMESPACES_DEFAULT)dnl
+dnl Option parsed, now set things appropriately
+case "$enable_namespaces" in
+ yes) NAMESPACES='-fhonor-std'
+ AC_DEFINE(_GLIBCPP_USE_NAMESPACES)
+ ;;
+ no) NAMESPACES='-fno-honor-std'
+ ;;
+esac
+AC_SUBST(NAMESPACES)
+])
+
+
+dnl
+dnl Check for instructions to automatically rebuild libgcc.a. Requires,
+dnl of course, the location of the gcc objdir. Note that if --disable-
+dnl namespaces is in effect, rebuilding libgcc.a is an expensive no-op.
+dnl
+dnl GLIBCPP_ENABLE_RELIBGCC
+dnl --enable-libgcc-rebuild=/absolute/path/to/gcc/objdir sets GCC_OBJDIR
+dnl (presumably in the top-level Makefile) to /absol.../objdir
+dnl --disable-libgcc-rebuild will not touch libgcc.a at all (maybe print
+dnl a warning if this is given along with --enable-namespaces), by
+dnl setting GCC_OBJDIR to `no'.
+dnl + Doing this by default is going to be interesting. What default
+dnl "on" value can there be?
+dnl + Usage: GLIBCPP_ENABLE_RELIBGCC[(DEFAULT)]
+dnl The default path should be ../.. if bundled with GCC source.
+dnl If ommitted, it defaults to `no'.
+dnl
+AC_DEFUN(GLIBCPP_ENABLE_RELIBGCC, [dnl
+define([GLIBCPP_ENABLE_RELIBGCC_DEFAULT], ifelse($1,, no, $1))dnl
+AC_ARG_ENABLE(libgcc-rebuild,
+changequote(<<, >>)dnl
+<< --enable-libgcc-rebuild=DIR also rebuild libgcc.a; DIR is
+ the GCC objdir; see install.html>>,
+changequote([, ])dnl
+[case "$enableval" in
+ yes) AC_MSG_ERROR([--enable-libgcc-rebuild needs a pathname]) ;;
+ no) enable_libgcc_rebuild=no ;;
+ *) if test -d "$enableval" && test -d "${enableval}/gcc" && \
+ test -d "${enableval}/libiberty"
+ then
+ enable_libgcc_rebuild="$enableval"
+ else
+ AC_MSG_ERROR(["$enableval" does not appear to be the GCC objdir])
+ fi
+ ;;
+ esac],
+enable_libgcc_rebuild=GLIBCPP_ENABLE_RELIBGCC_DEFAULT)dnl
+GCC_OBJDIR="$enable_libgcc_rebuild"
+AC_SUBST(GCC_OBJDIR)
+])
+
+
+dnl
+dnl Check for certain special build configurations.
+dnl
+dnl GLIBCPP_ENABLE_CSTDIO
+dnl --enable-cstdio=libio sets config/c_io_libio.h and friends
+dnl
+dnl default is libio
+dnl
+AC_DEFUN(GLIBCPP_ENABLE_CSTDIO, [
+ AC_MSG_CHECKING([for cstdio to use])
+ AC_ARG_ENABLE(cstdio,
+ [ --enable-cstdio enable GNU libio for target io package. (default)
+ --enable-cstdio=LIB use LIB target-speific io package.],
+ if test x$enable_cstdio = xno; then
+ enable_cstdio=libio
+ fi,
+ enable_cstdio=libio)
+
+ enable_cstdio_flag=$enable_cstdio
+
+ dnl Check if a valid thread package
+ case x${enable_cstdio_flag} in
+ xlibio | x | xno | xnone | xyes)
+ # default
+ CSTDIO_H=c_io_libio.h
+ CSTDIO_CC=c_io_libio.cc
+ AC_MSG_RESULT(libio)
+
+ # see if we are on a system with libio native (ie, linux)
+ AC_CHECK_HEADER(libio.h, has_libio=yes, has_libio=no)
+ if test $has_libio = "yes"; then
+ BUILD_LIBIO_INCLUDE=
+ need_libio=no
+ else
+ BUILD_LIBIO_INCLUDE='-I../libio'
+ need_libio=yes
+ fi
+ AC_SUBST(BUILD_LIBIO_INCLUDE)
+ ;;
+ xwince)
+ CSTDIO_H=c_io_wince.h
+ CSTDIO_CC=c_io_wince.cc
+ AC_MSG_RESULT(wince)
+
+ need_libio=no
+ BUILD_LIBIO_INCLUDE=
+ AC_SUBST(BUILD_LIBIO_INCLUDE)
+ ;;
+ *)
+ echo "$enable_cstdio is an unknown io package" 1>&2
+ exit 1
+ ;;
+ esac
+ AC_SUBST(CSTDIO_H)
+ AC_SUBST(CSTDIO_CC)
+ AM_CONDITIONAL(GLIBCPP_NEED_LIBIO, test "$need_libio" = yes)
+])
+
+
+dnl
+dnl Check for certain special build configurations.
+dnl
+dnl GLIBCPP_ENABLE_THREADS
+dnl --enable-threads=posix sets config/threads-posix.h et. al.
+dnl
+dnl default is no threads
+dnl
+AC_DEFUN(GLIBCPP_ENABLE_THREADS, [
+ dnl Note this comes from the gcc/config.in and libjava/config.in
+ dnl Efforts should be made to keep this in sync.
+ AC_MSG_CHECKING([for threads package to use])
+ AC_ARG_ENABLE(threads,
+ [ --enable-threads enable thread usage for target GCC.
+ --enable-threads=LIB use LIB thread package for target GCC.],
+ if test x$enable_threads = xno; then
+ enable_threads=''
+ fi,
+ enable_threads='')
+
+ enable_threads_flag=$enable_threads
+
+ dnl Check if a valid thread package
+ case x${enable_threads_flag} in
+ x | xno | xnone)
+ # No threads
+ target_thread_file='single'
+ ;;
+ xyes)
+ # default
+ target_thread_file=''
+ ;;
+ xdecosf1 | xirix | xmach | xos2 | xposix | xpthreads | xsingle | \
+ xsolaris | xwin32 | xdce | xvxworks)
+ target_thread_file=$enable_threads_flag
+ ;;
+ *)
+ echo "$enable_threads is an unknown thread package" 1>&2
+ exit 1
+ ;;
+ esac
+
+ dnl Check for thread package actually supported in libstdc++
+ case "$target_thread_file" in
+ no | none | single)
+ THREADS=none
+ ;;
+ posix | pthreads)
+ THREADS=posix
+ case "$host" in
+ *-*-linux*)
+ ;;
+ esac
+ ;;
+ decosf1 | irix | mach | os2 | solaris | win32 | dce | vxworks)
+ AC_MSG_ERROR(thread package $THREADS not yet supported)
+ ;;
+ *)
+ AC_MSG_ERROR($THREADS is an unknown thread package)
+ ;;
+ esac
+ AC_MSG_RESULT($THREADS)
+
+ THREADLIBS=
+ THREADINCS=
+ THREADDEPS=
+ THREADOBJS=
+ THREADH=
+ THREADSPEC=
+ case "$THREADS" in
+ posix)
+ AC_CHECK_HEADER(pthread.h, [have_pthread_h=yes], [have_pthread_h=])
+ THREADLIBS=-lpthread
+ THREADSPEC=-lpthread
+ dnl Not presently used
+ dnl THREADOBJS=threads-posix.lo
+ THREADH=threads-posix.h
+ ;;
+ none)
+ dnl Not presently used
+ dnl THREADOBJS=threads-no.lo
+ THREADH=threads-no.h
+ ;;
+ esac
+ AC_SUBST(THREADLIBS)
+ AC_SUBST(THREADINCS)
+ AC_SUBST(THREADDEPS)
+ AC_SUBST(THREADOBJS)
+ AC_SUBST(THREADSPEC)
+])
+
+
+dnl
+dnl Check for certain special build configurations.
+dnl
+dnl GLIBCPP_ENABLE_LONG_LONG
+dnl --enable-long-long defines _GLIBCPP_USE_LONG_LONG
+dnl --disable-long-long leaves _GLIBCPP_USE_LONG_LONG undefined
+dnl + Usage: GLIBCPP_ENABLE_LONG_LONG[(DEFAULT)]
+dnl Where DEFAULT is either `yes' or `no'. If ommitted, it
+dnl defaults to `no'.
+dnl
+dnl GLIBCPP_ENABLE_LONG_LONG
+AC_DEFUN(GLIBCPP_ENABLE_LONG_LONG, [dnl
+ define([GLIBCPP_ENABLE_LONG_LONG_DEFAULT], ifelse($1, yes, yes, no))dnl
+ AC_ARG_ENABLE(long-long,
+ changequote(<<, >>)dnl
+ <<--enable-long_long turns on 'long long' [default=>>GLIBCPP_ENABLE_LONG_LONG_DEFAULT],
+ changequote([, ])dnl
+ [case "$enableval" in
+ yes) enable_long_long=yes ;;
+ no) enable_long_long=no ;;
+ *) AC_MSG_ERROR([Unknown argument to enable/disable long long]) ;;
+ esac],
+ enable_long_long=GLIBCPP_ENABLE_LONG_LONG_DEFAULT)dnl
+ dnl Option parsed, now set things appropriately
+ case "$enable_long_long" in
+ yes) AC_DEFINE(_GLIBCPP_USE_LONG_LONG)
+ ;;
+ esac
+])
+
+
+
+
+
+
+
+
+
+
+
+