dnl -*- shell-script -*- dnl dnl Copyright (c) 2004-2005 The Trustees of Indiana University. dnl All rights reserved. dnl Copyright (c) 2004-2005 The Trustees of the University of Tennessee. dnl All rights reserved. dnl Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, dnl University of Stuttgart. All rights reserved. dnl Copyright (c) 2004-2005 The Regents of the University of California. dnl All rights reserved. dnl $COPYRIGHT$ dnl dnl Additional copyrights may follow dnl dnl $HEADER$ dnl AC_DEFUN([OMPI_SETUP_CXX],[ # Modularize this setup so that sub-configure.in scripts can use this # same setup code. ompi_show_subtitle "C++ compiler and preprocessor" ompi_cxxflags_save="$CXXFLAGS" AC_PROG_CXX AC_PROG_CXXCPP BASECXX="`basename $CXX`" CXXFLAGS="$ompi_cxxflags_save" AC_DEFINE_UNQUOTED(OMPI_CXX, "$CXX", [OMPI underlying C++ compiler]) OMPI_CXX_ABSOLUTE="`which $CXX`" AC_SUBST(OMPI_CXX_ABSOLUTE) # Check for compilers that impersonate g++ AC_MSG_CHECKING([for compilers that impersonate g++]) msg= TRULY_GXX=$GXX if test "$GXX" = "yes"; then AC_TRY_COMPILE([], [ int i = 3; #if __INTEL_COMPILER #error Yes, I am lying about being g++. #endif ], [], [msg=intel]) # If we made it through unscathed, then it really is g++ if test -z "$msg"; then TRULY_GXX=yes else TRULY_GXX=no fi else # We never thought that this was GXX to begin with msg="not applicable" TRULY_GXX=no fi AC_MSG_RESULT([$msg]) # Do we want code coverage if test "$WANT_COVERAGE" = "1"; then if test "$TRULY_GXX" = "yes"; then AC_MSG_WARN([-fprofile-arcs -ftest-coverage has been added to CFLAGS (--enable-coverage)]) WANT_DEBUG=1 CXXFLAGS="-ftest-coverage -fprofile-arcs ${CXXFLAGS}" WRAPPER_EXTRA_CXXFLAGS="-ftest-coverage -fprofile-arcs ${WRAPPER_EXTRA_CXXFLAGS}" else AC_MSG_WARN([Code coverage functionality is currently available only with GCC suite]) AC_MSG_ERROR([Configure: cannot continue]) fi fi # Do we want debugging? if test "$WANT_DEBUG" = "1"; then CXXFLAGS="$CXXFLAGS -g" OMPI_UNIQ(CXXFLAGS) AC_MSG_WARN([-g has been added to CXXFLAGS (--enable-debug)]) fi # These flags are generally g++-specific; even the g++-impersonating # compilers won't accept them. OMPI_CXXFLAGS_BEFORE_PICKY="$CXXFLAGS" if test "$TRULY_GXX" = "yes" -a "$WANT_PICKY_COMPILER" = 1; then add="-g -Wall -Wundef -Wno-long-long" # see if -Wno-long-double works... AC_LANG_PUSH(C++) CXXFLAGS_orig="$CXXFLAGS" CXXFLAGS="$CXXFLAGS -Wno-long-double" AC_TRY_COMPILE([], [], add="$add -Wno-long-double") CXXFLAGS="$CXXFLAGS_orig" AC_LANG_POP(C++) CXXFLAGS="$CXXFLAGS $add" OMPI_UNIQ(CXXFLAGS) AC_MSG_WARN([$add has been added to CXXFLAGS (--enable-picky)]) unset add fi # See if this version of g++ allows -finline-functions if test "$GXX" = "yes"; then CXXFLAGS_orig="$CXXFLAGS" CXXFLAGS="$CXXFLAGS -finline-functions" add= AC_TRY_COMPILE([], [], add=" -finline-functions") CXXFLAGS="$CXXFLAGS_orig$add" OMPI_UNIQ(CXXFLAGS) AC_MSG_WARN([$add has been added to CXXFLAGS]) unset add fi # Check for special things due to C++ exceptions ENABLE_CXX_EXCEPTIONS=no HAVE_CXX_EXCEPTIONS=0 AC_ARG_ENABLE(cxx-exceptions, AC_HELP_STRING([--enable-cxx-exceptions], [enable support for C++ exceptions]), [ENABLE_CXX_EXCEPTIONS="$enableval"]) AC_MSG_CHECKING([if want C++ exception handling]) AC_MSG_RESULT([$ENABLE_CXX_EXCEPTIONS]) if test "$ENABLE_CXX_EXCEPTIONS" = "yes"; then # config/cxx_have_exceptions.m4 OMPI_CXX_HAVE_EXCEPTIONS # config/cxx_find_exception_flags.m4 OMPI_CXX_FIND_EXCEPTION_FLAGS if test "$OMPI_CXX_EXCEPTIONS" = "1"; then HAVE_CXX_EXCEPTIONS=1 CFLAGS="$CFLAGS $OMPI_CXX_EXCEPTIONS_CFLAGS" FFLAGS="$FFLAGS $OMPI_CXX_EXCEPTIONS_FFLAGS" CXXFLAGS="$CXXFLAGS $OMPI_CXX_EXCEPTIONS_CXXFLAGS" LDFLAGS="$LDFLAGS $OMPI_CXX_EXCEPTIONS_LDFLAGS" WRAPPER_EXTRA_CFLAGS="$OMPI_CXX_EXCEPTIONS_CFLAGS ${WRAPPER_EXTRA_CFLAGS}" WRAPPER_EXTRA_FFLAGS="$OMPI_CXX_EXCEPTIONS_FFLAGS ${WRAPPER_EXTRA_FFLAGS}" WRAPPER_EXTRA_CXXFLAGS="$OMPI_CXX_EXCEPTIONS_CXXFLAGS ${WRAPPER_EXTRA_CXXFLAGS}" fi fi AC_DEFINE_UNQUOTED(OMPI_HAVE_CXX_EXCEPTION_SUPPORT, $HAVE_CXX_EXCEPTIONS, [Whether or not we have compiled with C++ exceptions support]) # Find some more characteristics of the C++ compiler # config/cxx_find_template_repository.m4 OMPI_CXX_FIND_TEMPLATE_REPOSITORY # config/cxx_find_template_parameters.m4 OMPI_CXX_FIND_TEMPLATE_PARAMETERS # If we are on HP-UX, ensure that we're using aCC case "$host" in *hpux*) if test "$BASECXX" = "CC"; then AC_MSG_WARN([*** You will probably have problems compiling the MPI 2]) AC_MSG_WARN([*** C++ bindings with the HP-UX CC compiler. You should]) AC_MSG_WARN([*** probably be using the aCC compiler. Re-run configure]) AC_MSG_WARN([*** with the environment variable "CXX=aCC".]) fi ;; esac # Same rationale for g++ as with gcc in OMPI_SETUP_CC. # Note: gcc-imperonating compilers accept -O3, so there's no need for # $TRULY_GCC here. if test "$GXX" = yes; then OPTFLAGS="-O3" else OPTFLAGS="-O" fi # config/ompi_check_optflags.m4 OMPI_CHECK_OPTFLAGS("$CXXFLAGS") AC_MSG_CHECKING([for C++ optimization flags]) AC_MSG_RESULT([$co_result]) CXXFLAGS="$co_result" ])