@ -353,10 +353,41 @@ Replacing `noexecstack` with `execstack`."
set ( CMAKE_Fortran_MODULE_DIRECTORY ${ CMAKE_BINARY_DIR } /modules )
file ( MAKE_DIRECTORY ${ CMAKE_Fortran_MODULE_DIRECTORY } )
# B u i l d t h e l i s t o f d i r e c t o r i e s t h a t m a y c o n t a i n m p i . m o d / M P I . m o d .
# M P I C H s h i p s m p i . m o d u n d e r i t s i n c l u d e / dir ( already in
# M P I _ F o r t r a n _ I N C L U D E _ P A T H ) , w h i l e O p e n M P I s h i p s i t u n d e r l i b / a n d l e a v e s
# M P I _ F o r t r a n _ I N C L U D E _ P A T H e m p t y , s o w e a l s o q u e r y t h e c o m p i l e r w r a p p e r a n d
# p r o b e l i b / a n d i n c l u d e / n e x t t o i t .
set ( _mpi_mod_dirs ${ MPI_Fortran_INCLUDE_PATH } )
# A s k t h e w r a p p e r directly ( OpenMPI understands --showme:{inc,lib}dirs;
# o t h e r w r a p p e r s s i m p l y e r r o r o u t a n d a r e i g n o r e d ) .
foreach ( _showme --showme:incdirs --showme:libdirs )
execute_process (
C O M M A N D " $ { C M A K E _ F o r t r a n _ C O M P I L E R } " $ { _ s h o w m e }
O U T P U T _ V A R I A B L E _ s h o w m e _ o u t
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E
E R R O R _ Q U I E T )
if ( _showme_out )
separate_arguments ( _showme_list UNIX_COMMAND "${_showme_out}" )
list ( APPEND _mpi_mod_dirs ${ _showme_list } )
endif ( )
endforeach ( )
# F a l l b a c k : l i b / a n d i n c l u d e / r e l a t i v e t o t h e M P I F o r t r a n c o m p i l e r w r a p p e r .
get_filename_component ( _mpi_fc_path "${CMAKE_Fortran_COMPILER}" REALPATH )
get_filename_component ( _mpi_fc_bin "${_mpi_fc_path}" DIRECTORY )
get_filename_component ( _mpi_fc_root "${_mpi_fc_bin}" DIRECTORY )
list ( APPEND _mpi_mod_dirs "${_mpi_fc_root}/lib" "${_mpi_fc_root}/include" )
if ( _mpi_mod_dirs )
list ( REMOVE_DUPLICATES _mpi_mod_dirs )
endif ( )
# T r y t o c o p y m p i . m o d o r M P I . m o d i n t o m o d u l e d i r e c t o r y
set ( _mpi_mod_found FALSE )
foreach ( _mpi_mod_name mpi.mod MPI.mod )
foreach ( _mpi_inc ${ MPI_Fortran_INCLUDE_PATH } )
foreach ( _mpi_inc ${ _mpi_mod_dirs } )
if ( EXISTS "${_mpi_inc}/${_mpi_mod_name}" )
file ( COPY "${_mpi_inc}/${_mpi_mod_name}" DESTINATION "${CMAKE_Fortran_MODULE_DIRECTORY}" )
message ( STATUS "Copied ${_mpi_mod_name} from ${_mpi_inc}" )
@ -370,7 +401,7 @@ Replacing `noexecstack` with `execstack`."
endforeach ( )
if ( NOT _mpi_mod_found )
message ( WARNING "mpi.mod not found in MPI include paths; assuming it is built-in to mpifort .")
message ( WARNING "mpi.mod not found in MPI include /lib paths; assuming it is built-in to the MPI Fortran compiler .")
endif ( )
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -