diff --git a/build/configure.ac b/build/configure.ac index 11969bd917b52e92168461b2734f73ac9c99ea32..d2e77451820a69c11b60786899c2d1af5c1ff4fc 100644 --- a/build/configure.ac +++ b/build/configure.ac @@ -1,183 +1,3 @@ -# =========================================================================== -# https://www.gnu.org/software/autoconf-archive/ax_prog_cxx_mpi.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_PROG_CXX_MPI([MPI-WANTED-TEST[, ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]]) -# -# DESCRIPTION -# -# This macro tries to find out how to compile C++ programs that use MPI -# (Message Passing Interface), a standard API for parallel process -# communication (see http://www-unix.mcs.anl.gov/mpi/). The macro has to -# be used instead of the standard macro AC_PROG_CXX and will replace the -# standard variable CXX with the found compiler. -# -# MPI-WANTED-TEST is used to test whether MPI is actually wanted by the -# user. If MPI-WANTED_TEST is omitted or if it succeeds, the macro will -# try to find out how to use MPI, if it fails, the macro will call -# AC_PROG_CC to find a standard C compiler instead. -# -# When MPI is found, ACTION-IF-FOUND will be executed, if MPI is not found -# (or MPI-WANTED-TEST fails) ACTION-IF-NOT-FOUND is executed. If -# ACTION-IF-FOUND is not set, the macro will define HAVE_MPI. -# -# The following example demonstrates usage of the macro: -# -# # If --with-mpi=auto is used, try to find MPI, but use standard C -# compiler if it is not found. -# # If --with-mpi=yes is used, try to find MPI and fail if it isn't found. -# # If --with-mpi=no is used, use a standard C compiler instead. -# AC_ARG_WITH(mpi, [AS_HELP_STRING([--with-mpi], -# [compile with MPI (parallelization) support. If none is found, -# MPI is not used. Default: auto]) -# ],,[with_mpi=auto]) -# -# AX_PROG_CXX_MPI([test x"$with_mpi" != xno],[use_mpi=yes],[ -# use_mpi=no -# if test x"$with_mpi" = xyes; then -# AC_MSG_FAILURE([MPI compiler requested, but couldn't use MPI.]) -# else -# AC_MSG_WARN([No MPI compiler found, won't use MPI.]) -# fi -# ]) -# -# LICENSE -# -# Copyright (c) 2010,2011 Olaf Lenz <olenz@icp.uni-stuttgart.de> -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see <https://www.gnu.org/licenses/>. -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 3 - -AC_DEFUN([AX_PROG_CXX_MPI], [ -AC_PREREQ(2.50) - -# Check for compiler -# Needs to be split off into an extra macro to ensure right expansion -# order. -AC_REQUIRE([_AX_PROG_CXX_MPI],[_AX_PROG_CXX_MPI([$1])]) - -AS_IF([test x"$_ax_prog_cxx_mpi_mpi_wanted" = xno], - [ _ax_prog_cxx_mpi_mpi_found=no ], - [ - AC_LANG_PUSH([C++]) - - # test whether MPI_Init() is available - # We do not use AC_SEARCH_LIBS here, as it caches its outcome and - # thus disallows corresponding calls in the other AX_PROG_*_MPI - # macros. - for lib in NONE mpi mpich; do - save_LIBS=$LIBS - if test x"$lib" = xNONE; then - AC_MSG_CHECKING([for function MPI_Init]) - else - AC_MSG_CHECKING([for function MPI_Init in -l$lib]) - LIBS="-l$lib $LIBS" - fi - AC_LINK_IFELSE([ - AC_LANG_PROGRAM([ -extern "C" { void MPI_Init(); } -],[MPI_Init();])], - [ _ax_prog_cxx_mpi_mpi_found=yes ], - [ _ax_prog_cxx_mpi_mpi_found=no ]) - AC_MSG_RESULT($_ax_prog_cxx_mpi_mpi_found) - if test "x$_ax_prog_cxx_mpi_mpi_found" = "xyes"; then - break; - fi - LIBS=$save_LIBS - done - - # Check for header - AS_IF([test x"$_ax_prog_cxx_mpi_mpi_found" = xyes], [ - AC_MSG_CHECKING([for mpi.h]) - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <mpi.h>])], - [ AC_MSG_RESULT(yes)], - [ AC_MSG_RESULT(no) - _ax_prog_cxx_mpi_mpi_found=no - ]) - ]) - AC_LANG_POP([C++]) -]) - -# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: -AS_IF([test x"$_ax_prog_cxx_mpi_mpi_found" = xyes], [ - ifelse([$2],,[AC_DEFINE(HAVE_MPI,1,[Define if you have the MPI library.])],[$2]) - : -],[ - $3 - : -]) - -])dnl AX_PROG_CXX_MPI - -dnl _AX_PROG_CXX_MPI is an internal macro required by AX_PROG_CXX_MPI. -dnl To ensure the right expansion order, the main function AX_PROG_CXX_MPI -dnl has to be split into two parts. -dnl -dnl Known MPI C++ compilers: -dnl mpic++ -dnl mpicxx -dnl mpiCC -dnl sxmpic++ NEC SX -dnl hcp -dnl mpxlC_r -dnl mpxlC -dnl mpixlcxx_r -dnl mpixlcxx -dnl mpg++ -dnl mpc++ -dnl mpCC -dnl cmpic++ -dnl mpiFCC Fujitsu -dnl CC -dnl -AC_DEFUN([_AX_PROG_CXX_MPI], [ - AC_ARG_VAR(MPICXX,[MPI C++ compiler command]) - ifelse([$1],,[_ax_prog_cxx_mpi_mpi_wanted=yes],[ - AC_MSG_CHECKING([whether to compile using MPI]) - if $1; then - _ax_prog_cxx_mpi_mpi_wanted=yes - else - _ax_prog_cxx_mpi_mpi_wanted=no - fi - AC_MSG_RESULT($_ax_prog_cxx_mpi_mpi_wanted) - ]) - if test x"$_ax_prog_cxx_mpi_mpi_wanted" = xyes; then - if test -z "$CXX" && test -n "$MPICXX"; then - CXX="$MPICXX" - else - AC_CHECK_TOOLS([CXX], [mpic++ mpicxx mpiCC sxmpic++ hcp mpxlC_r mpxlC mpixlcxx_r mpixlcxx mpg++ mpc++ mpCC cmpic++ mpiFCC CCicpc pgCC pathCC sxc++ xlC_r xlC bgxlC_r bgxlC openCC sunCC crayCC g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC]) - fi - fi - AC_PROG_CXX -])dnl _AX_PROG_CXX_MPI - # CAPABILITY TESTING MACROS m4_define( [M4_HDF5_LIB], @@ -270,19 +90,40 @@ AM_PROG_AR AC_ARG_ENABLE( [mpi], [AS_HELP_STRING([--enable-mpi], [enable MPI compilation [default=auto]])], - [AC_MSG_NOTICE([Handling explicit option.])], [ - AC_MSG_NOTICE([Handling implicit option.]) - AX_PROG_CXX_MPI() - AC_SUBST([MPIFLAGS], [-DUSE_MPI]) + if test "x$enableval" = "xno"; then + AC_PROG_CXX([g++ clang]) + AC_MSG_NOTICE([Using $CXX]) + AC_SUBST([MPIFLAGS], [""]) + elif test "x$enableval" = "xauto"; then + AC_PROG_CXX([mpicxx mpic++ mpiCC]) + if test "x$CXX" != "x"; then + AC_SUBST([MPIFLAGS], [-DUSE_MPI]) + else + AC_PROG_CXX([g++ clang]) + AC_SUBST([MPIFLAGS], [""]) + fi + elif test "x$enableval" = "xyes"; then + AC_PROG_CXX([mpicxx mpic++ mpiCC]) + if test "x$CXX" != "x"; then + AC_SUBST([MPIFLAGS], [-DUSE_MPI]) + else + AC_MSG_ERROR([MPI was requested, but no MPI compiler detected!]) + fi + fi + ], + [ + AC_PROG_CXX([mpicxx mpic++ mpiCC]) + if test "x$CXX" != "x"; then + AC_SUBST([MPIFLAGS], [-DUSE_MPI]) + else + AC_PROG_CXX([g++ clang]) + AC_SUBST([MPIFLAGS], [""]) + AC_MSG_NOTICE([Using $CXX]) + fi ] ) -AS_IF( - [test "x$CXX" = "x"], - [AC_PROG_CXX([g++ clang])], - [AC_MSG_NOTICE([Using $CXX])] -) -AC_PROG_F77([mpif90 gfortran f77]) +AC_PROG_F77([gfortran f77]) # Libtool initialization LT_INIT