1# =========================================================================== 2# http://www.gnu.org/software/autoconf-archive/ax_prog_cxx_mpi.html 3# =========================================================================== 4# 5# SYNOPSIS 6# 7# AX_PROG_CXX_MPI([MPI-WANTED-TEST[, ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]]) 8# 9# DESCRIPTION 10# 11# This macro tries to find out how to compile C++ programs that use MPI 12# (Message Passing Interface), a standard API for parallel process 13# communication (see http://www-unix.mcs.anl.gov/mpi/). The macro has to 14# be used instead of the standard macro AC_PROG_CXX and will replace the 15# standard variable CXX with the found compiler. 16# 17# MPI-WANTED-TEST is used to test whether MPI is actually wanted by the 18# user. If MPI-WANTED_TEST is omitted or if it succeeds, the macro will 19# try to find out how to use MPI, if it fails, the macro will call 20# AC_PROG_CC to find a standard C compiler instead. 21# 22# When MPI is found, ACTION-IF-FOUND will be executed, if MPI is not found 23# (or MPI-WANTED-TEST fails) ACTION-IF-NOT-FOUND is executed. If 24# ACTION-IF-FOUND is not set, the macro will define HAVE_MPI. 25# 26# The following example demonstrates usage of the macro: 27# 28# # If --with-mpi=auto is used, try to find MPI, but use standard C compiler if it is not found. 29# # If --with-mpi=yes is used, try to find MPI and fail if it isn't found. 30# # If --with-mpi=no is used, use a standard C compiler instead. 31# AC_ARG_WITH(mpi, [AS_HELP_STRING([--with-mpi], 32# [compile with MPI (parallelization) support. If none is found, 33# MPI is not used. Default: auto]) 34# ],,[with_mpi=auto]) 35# 36# AX_PROG_CXX_MPI([test x"$with_mpi" != xno],[use_mpi=yes],[ 37# use_mpi=no 38# if test x"$with_mpi" = xyes; then 39# AC_MSG_FAILURE([MPI compiler requested, but couldn't use MPI.]) 40# else 41# AC_MSG_WARN([No MPI compiler found, won't use MPI.]) 42# fi 43# ]) 44# 45# LICENSE 46# 47# Copyright (c) 2010,2011 Olaf Lenz <olenz@icp.uni-stuttgart.de> 48# 49# This program is free software: you can redistribute it and/or modify it 50# under the terms of the GNU General Public License as published by the 51# Free Software Foundation, either version 3 of the License, or (at your 52# option) any later version. 53# 54# This program is distributed in the hope that it will be useful, but 55# WITHOUT ANY WARRANTY; without even the implied warranty of 56# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General 57# Public License for more details. 58# 59# You should have received a copy of the GNU General Public License along 60# with this program. If not, see <http://www.gnu.org/licenses/>. 61# 62# As a special exception, the respective Autoconf Macro's copyright owner 63# gives unlimited permission to copy, distribute and modify the configure 64# scripts that are the output of Autoconf when processing the Macro. You 65# need not follow the terms of the GNU General Public License when using 66# or distributing such scripts, even though portions of the text of the 67# Macro appear in them. The GNU General Public License (GPL) does govern 68# all other use of the material that constitutes the Autoconf Macro. 69# 70# This special exception to the GPL applies to versions of the Autoconf 71# Macro released by the Autoconf Archive. When you make and distribute a 72# modified version of the Autoconf Macro, you may extend this special 73# exception to the GPL to apply to your modified version as well. 74 75#serial 1 76 77AC_DEFUN([AX_PROG_CXX_MPI], [ 78AC_PREREQ(2.50) 79AC_BEFORE([$0],[AC_PROG_CXX]) 80 81# Check for compiler 82# Needs to be split off into an extra macro to ensure right expansion 83# order. 84AC_REQUIRE([_AX_PROG_CXX_MPI],[_AX_PROG_CXX_MPI([$1])]) 85 86AS_IF([test x"$_ax_prog_cxx_mpi_mpi_wanted" = xno], 87 [ _ax_prog_cxx_mpi_mpi_found=no ], 88 [ 89 AC_LANG_PUSH([C++]) 90 91 # test whether MPI::Init is available 92 # We do not use AC_SEARCH_LIBS here, as it caches its outcome and 93 # thus disallows corresponding calls in the other AX_PROG_*_MPI 94 # macros. 95 for lib in NONE mpi mpich; do 96 save_LIBS=$LIBS 97 if test x"$lib" = xNONE; then 98 AC_MSG_CHECKING([for function MPI::Init]) 99 else 100 AC_MSG_CHECKING([for function MPI::Init in -l$lib]) 101 LIBS="-l$lib $LIBS" 102 fi 103 AC_LINK_IFELSE([ 104 AC_LANG_PROGRAM([ 105namespace MPI { 106char Init(); 107}; 108using MPI::Init;],[MPI::Init;])], 109 [ _ax_prog_cxx_mpi_mpi_found=yes ], 110 [ _ax_prog_cxx_mpi_mpi_found=no ]) 111 AC_MSG_RESULT($_ax_prog_cxx_mpi_mpi_found) 112 if test "x$_ax_prog_cxx_mpi_mpi_found" = "xyes"; then 113 break; 114 fi 115 LIBS=$save_LIBS 116 done 117 118 # Check for header 119 AS_IF([test x"$_ax_prog_cxx_mpi_mpi_found" = xyes], [ 120 AC_MSG_CHECKING([for mpi.h]) 121 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <mpi.h>])], 122 [ AC_MSG_RESULT(yes)], 123 [ AC_MSG_RESULT(no) 124 _ax_prog_cxx_mpi_mpi_found=no 125 ]) 126 ]) 127 AC_LANG_POP([C++]) 128]) 129 130# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: 131AS_IF([test x"$_ax_prog_cxx_mpi_mpi_found" = xyes], [ 132 ifelse([$2],,[AC_DEFINE(HAVE_MPI,1,[Define if you have the MPI library.])],[$2]) 133 : 134],[ 135 $3 136 : 137]) 138 139])dnl AX_PROG_CXX_MPI 140 141dnl _AX_PROG_CXX_MPI is an internal macro required by AX_PROG_CXX_MPI. 142dnl To ensure the right expansion order, the main function AX_PROG_CXX_MPI 143dnl has to be split into two parts. 144dnl 145dnl Known MPI C++ compilers: 146dnl mpic++ 147dnl mpicxx 148dnl mpiCC 149dnl sxmpic++ NEC SX 150dnl hcp 151dnl mpxlC_r 152dnl mpxlC 153dnl mpixlcxx_r 154dnl mpixlcxx 155dnl mpg++ 156dnl mpc++ 157dnl mpCC 158dnl cmpic++ 159dnl mpiFCC Fujitsu 160dnl CC 161dnl 162AC_DEFUN([__AX_PROG_CXX_MPI], [ 163 AC_ARG_VAR(MPICXX,[MPI C++ compiler command]) 164 ifelse([$1],,[_ax_prog_cxx_mpi_mpi_wanted=yes],[ 165 AC_MSG_CHECKING([whether to compile using MPI]) 166 if $1; then 167 _ax_prog_cxx_mpi_mpi_wanted=yes 168 else 169 _ax_prog_cxx_mpi_mpi_wanted=no 170 fi 171 AC_MSG_RESULT($_ax_prog_cxx_mpi_mpi_wanted) 172 ]) 173 if test x"$_ax_prog_cxx_mpi_mpi_wanted" = xyes; then 174 if test -z "$CXX" && test -n "$MPICXX"; then 175 CXX="$MPICXX" 176 elif test -z "$CXX"; then 177 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]) 178 fi 179 fi 180])dnl _AX_PROG_CXX_MPI 181 182AC_DEFUN([_AX_PROG_CXX_MPI], [ 183 AC_REQUIRE([__AX_PROG_CXX_MPI],[__AX_PROG_CXX_MPI([$1])]) 184dnl echo "---------CXX 3-----------------------" 185 AC_PROG_CXX 186 187 188dnl echo "---------CXX 4-----------------------" 189]) 190