From 0d2f17a98406f1f3f882071f0bc9bd8d4397918d Mon Sep 17 00:00:00 2001 From: Wolfgang Bangerth Date: Tue, 8 Sep 2009 13:42:24 +0000 Subject: [PATCH] Check for a compiler bug on Mac OS X. git-svn-id: https://svn.dealii.org/trunk@19414 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/aclocal.m4 | 52 ++++++++++++++++- deal.II/base/include/base/config.h.in | 4 -- deal.II/configure | 83 +++++++++++++++++++++++++++ deal.II/configure.in | 1 + 4 files changed, 135 insertions(+), 5 deletions(-) diff --git a/deal.II/aclocal.m4 b/deal.II/aclocal.m4 index 41a65ee521..bd9aae2f17 100644 --- a/deal.II/aclocal.m4 +++ b/deal.II/aclocal.m4 @@ -4425,7 +4425,7 @@ AC_DEFUN(DEAL_II_CHECK_WSYNTH_AND_STD_COMPLEX, dnl dnl ------------------------------------------------------------- -dnl Older gcc version appear to frown upon the way we write the +dnl Older gcc versions appear to frown upon the way we write the dnl IsBlockMatrix template. If that's the case, dnl remove the -Wctor-dtor-privacy flag. dnl @@ -4475,6 +4475,56 @@ AC_DEFUN(DEAL_II_CHECK_CTOR_DTOR_PRIVACY, dnl ]) + +dnl ------------------------------------------------------------- +dnl On Mac OS X, gcc appears to have a bug that prevents us from +dnl compiling a bit of code that involves boost::bind. Check for +dnl that. +dnl +dnl Usage: DEAL_II_CHECK_BOOST_BIND_COMPILER_BUG +dnl +dnl ------------------------------------------------------------- +AC_DEFUN(DEAL_II_CHECK_BOOST_BIND_COMPILER_BUG, dnl +[ + if test "x$GXX" = "xyes" ; then + AC_MSG_CHECKING(for boost::bind compiler internal error) + AC_LANG(C++) + CXXFLAGS="$CXXFLAGSG -I./contrib/boost/include" + AC_TRY_COMPILE( + [ +#include +#include +#include + +template +void bug_function (number test) +{ + std::cout << test << std::endl; +} + ], + [ + std::complex double_val (1., 2.); + boost::bind(&bug_function >, + double_val)(); + + std::complex float_val (1., 2.); + boost::bind(&bug_function >, + float_val)(); + ], + [ + AC_MSG_RESULT(no) + ], + [ + AC_MSG_RESULT(yes) + AC_DEFINE(DEAL_II_BOOST_BIND_COMPILER_BUG, 1, + [Defined if the compiler gets an internal error compiling + some code that involves boost::bind]) + ]) + fi +]) + + + dnl ------------------------------------------------------------- dnl Check for boost option and find pre-installed boost dnl ------------------------------------------------------------- diff --git a/deal.II/base/include/base/config.h.in b/deal.II/base/include/base/config.h.in index 4c9b5d5aa0..7c4b302021 100644 --- a/deal.II/base/include/base/config.h.in +++ b/deal.II/base/include/base/config.h.in @@ -470,10 +470,6 @@ header file. */ #undef HAVE_THYRA_AZTECOOLINEAROPWITHSOLVEFACTORY_HPP -/* Define to 1 if you have the header - file. */ -#undef HAVE_THYRA_DEFAULTBLOCKEDLINEAROPDECL_HPP - /* Define to 1 if you have the header file. */ #undef HAVE_THYRA_DEFAULTBLOCKEDLINEAROP_HPP diff --git a/deal.II/configure b/deal.II/configure index 12af1f698d..3a241c776e 100755 --- a/deal.II/configure +++ b/deal.II/configure @@ -8163,6 +8163,89 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test "x$GXX" = "xyes" ; then + { echo "$as_me:$LINENO: checking for boost::bind compiler internal error" >&5 +echo $ECHO_N "checking for boost::bind compiler internal error... $ECHO_C" >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + CXXFLAGS="$CXXFLAGSG -I./contrib/boost/include" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include + +template +void bug_function (number test) +{ + std::cout << test << std::endl; +} + +int +main () +{ + + std::complex double_val (1., 2.); + boost::bind(&bug_function >, + double_val)(); + + std::complex float_val (1., 2.); + boost::bind(&bug_function >, + float_val)(); + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + +cat >>confdefs.h <<\_ACEOF +#define DEAL_II_BOOST_BIND_COMPILER_BUG 1 +_ACEOF + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + + { echo "$as_me:$LINENO: checking for const member deduction bug" >&5 echo $ECHO_N "checking for const member deduction bug... $ECHO_C" >&6; } ac_ext=cpp diff --git a/deal.II/configure.in b/deal.II/configure.in index 8b2f316c64..76a936b3cc 100644 --- a/deal.II/configure.in +++ b/deal.II/configure.in @@ -188,6 +188,7 @@ DEAL_II_CHECK_TEMPL_OP_DISAMBIGUATION_BUG DEAL_II_CHECK_ARRAY_CONDITIONAL_DECAY_BUG DEAL_II_CHECK_ARRAY_ARG_BUG DEAL_II_CHECK_EXPLICIT_CONSTRUCTOR_BUG +DEAL_II_CHECK_BOOST_BIND_COMPILER_BUG DEAL_II_CHECK_CONST_MEMBER_DEDUCTION_BUG DEAL_II_CHECK_TYPE_QUALIFIER_BUG DEAL_II_CHECK_WSYNTH_AND_STD_COMPLEX -- 2.39.5