Please find below a proposed patch that addresses this bug: http://public.kitware.com/Bug/view.php?id=15182 (FindMPI.cmake fails to properly detect Intel MPI 5.0.1). Because the return code is unreliable for the Intel MPI compile wrappers (e.g.: 'mpiicpc -showme:compile'), the output text must be interrogated for possible issues. My choice of "undefined reference" may not be the best choice, but it works for all of my test cases.
I have tested this patch with OpenMPI, MPICH2 and Intel MPI on RHEL 6.4 and RHEL 6.4. I have also tested it on Win7 with VS2013 using Microsoft HPC Pack 2008 R2 MPI. Would anyone like to provide feedback or test this modification? What do I need to do to get this into release code? -kt Kelly Thompson ====================================================================================== --- a/Modules/FindMPI.cmake +++ b/Modules/FindMPI.cmake @@ -226,6 +226,13 @@ function (interrogate_mpi_compiler lang try_libs) ERROR_VARIABLE MPI_COMPILE_CMDLINE ERROR_STRIP_TRAILING_WHITESPACE RESULT_VARIABLE MPI_COMPILER_RETURN) + # Intel MPI will return a zero return code even when the + # argument to the MPI compiler wrapper is unknown. Attempt to + # catch this case. + if( "${MPI_COMPILE_CMDLINE}" MATCHES "undefined reference" ) + set( MPI_COMPILER_RETURN 255 ) + endif() + if (MPI_COMPILER_RETURN EQUAL 0) # If we appear to have -showme:compile, then we should # also have -showme:link. Try it. @@ -264,7 +271,15 @@ function (interrogate_mpi_compiler lang try_libs) RESULT_VARIABLE MPI_COMPILER_RETURN) endif() + # Intel MPI will return a zero return code even when the + # argument to the MPI compiler wrapper is unknown. Attempt to + # catch this case. + if( "${MPI_COMPILE_CMDLINE}" MATCHES "undefined reference" ) + set( MPI_COMPILER_RETURN 255 ) + endif() + # MVAPICH uses -compile-info and -link-info. Try them. + # Intel and Cray MPICH2 flavors will likely follow this path. if (NOT MPI_COMPILER_RETURN EQUAL 0) execute_process( COMMAND ${MPI_${lang}_COMPILER} -compile-info @@ -378,7 +393,6 @@ function (interrogate_mpi_compiler lang try_libs) # Extract the set of libraries to link against from the link command # line string(REGEX MATCHALL "(^| )-l([^\" ]+|\"[^\"]+\")" MPI_LIBNAMES "${MPI_LINK_CMDLINE}") - # add the compiler implicit directories because some compilers # such as the intel compiler have libraries that show up # in the showme list that can only be found in the implicit @@ -588,6 +602,7 @@ foreach (lang C CXX Fortran) HINTS ${_MPI_BASE_DIR}/bin PATHS ${_MPI_PREFIX_PATH} ) + interrogate_mpi_compiler(${lang} ${try_libs}) mark_as_advanced(MPI_${lang}_COMPILER)
-- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: http://public.kitware.com/mailman/listinfo/cmake-developers