ax_prog_cxx_mpi.m4 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  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. #serial 1
  75. AC_DEFUN([AX_PROG_CXX_MPI], [
  76. AC_PREREQ(2.50)
  77. # Check for compiler
  78. # Needs to be split off into an extra macro to ensure right expansion
  79. # order.
  80. AC_REQUIRE([_AX_PROG_CXX_MPI],[_AX_PROG_CXX_MPI([$1])])
  81. AS_IF([test x"$_ax_prog_cxx_mpi_mpi_wanted" = xno],
  82. [ _ax_prog_cxx_mpi_mpi_found=no ],
  83. [
  84. AC_LANG_PUSH([C++])
  85. # test whether MPI::Init is available
  86. # We do not use AC_SEARCH_LIBS here, as it caches its outcome and
  87. # thus disallows corresponding calls in the other AX_PROG_*_MPI
  88. # macros.
  89. for lib in NONE mpi mpich; do
  90. save_LIBS=$LIBS
  91. if test x"$lib" = xNONE; then
  92. AC_MSG_CHECKING([for function MPI::Init])
  93. else
  94. AC_MSG_CHECKING([for function MPI::Init in -l$lib])
  95. LIBS="-l$lib $LIBS"
  96. fi
  97. AC_LINK_IFELSE([
  98. AC_LANG_PROGRAM([
  99. namespace MPI {
  100. char Init();
  101. };
  102. using MPI::Init;],[MPI::Init;])],
  103. [ _ax_prog_cxx_mpi_mpi_found=yes ],
  104. [ _ax_prog_cxx_mpi_mpi_found=no ])
  105. AC_MSG_RESULT($_ax_prog_cxx_mpi_mpi_found)
  106. if test "x$_ax_prog_cxx_mpi_mpi_found" = "xyes"; then
  107. break;
  108. fi
  109. LIBS=$save_LIBS
  110. done
  111. # Check for header
  112. AS_IF([test x"$_ax_prog_cxx_mpi_mpi_found" = xyes], [
  113. AC_MSG_CHECKING([for mpi.h])
  114. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <mpi.h>])],
  115. [ AC_MSG_RESULT(yes)],
  116. [ AC_MSG_RESULT(no)
  117. _ax_prog_cxx_mpi_mpi_found=no
  118. ])
  119. ])
  120. AC_LANG_POP([C++])
  121. ])
  122. # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
  123. AS_IF([test x"$_ax_prog_cxx_mpi_mpi_found" = xyes], [
  124. ifelse([$2],,[AC_DEFINE(HAVE_MPI,1,[Define if you have the MPI library.])],[$2])
  125. :
  126. ],[
  127. $3
  128. :
  129. ])
  130. ])dnl AX_PROG_CXX_MPI
  131. dnl _AX_PROG_CXX_MPI is an internal macro required by AX_PROG_CXX_MPI.
  132. dnl To ensure the right expansion order, the main function AX_PROG_CXX_MPI
  133. dnl has to be split into two parts.
  134. dnl
  135. dnl Known MPI C++ compilers:
  136. dnl mpic++
  137. dnl mpicxx
  138. dnl mpiCC
  139. dnl sxmpic++ NEC SX
  140. dnl hcp
  141. dnl mpxlC_r
  142. dnl mpxlC
  143. dnl mpixlcxx_r
  144. dnl mpixlcxx
  145. dnl mpg++
  146. dnl mpc++
  147. dnl mpCC
  148. dnl cmpic++
  149. dnl mpiFCC Fujitsu
  150. dnl CC
  151. dnl
  152. AC_DEFUN([_AX_PROG_CXX_MPI], [
  153. AC_ARG_VAR(MPICXX,[MPI C++ compiler command])
  154. ifelse([$1],,[_ax_prog_cxx_mpi_mpi_wanted=yes],[
  155. AC_MSG_CHECKING([whether to compile using MPI])
  156. if $1; then
  157. _ax_prog_cxx_mpi_mpi_wanted=yes
  158. else
  159. _ax_prog_cxx_mpi_mpi_wanted=no
  160. fi
  161. AC_MSG_RESULT($_ax_prog_cxx_mpi_mpi_wanted)
  162. ])
  163. if test x"$_ax_prog_cxx_mpi_mpi_wanted" = xyes; then
  164. if test -z "$CXX" && test -n "$MPICXX"; then
  165. CXX="$MPICXX"
  166. else
  167. 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])
  168. fi
  169. fi
  170. AC_PROG_CXX
  171. ])dnl _AX_PROG_CXX_MPI