cmake_minimum_required(VERSION 3.8) project(TestFindMPI NONE) include(CTest) macro(source_code_mapper_helper LANG_NAME) if("${LANG_NAME}" STREQUAL "C") set(MPITEST_SOURCE_FILE "main.c") elseif("${LANG_NAME}" STREQUAL "CXX") configure_file("main.c" "main.cxx" COPYONLY) set(MPITEST_SOURCE_FILE "main.cxx") elseif("${LANG_NAME}" STREQUAL "Fortran") set(MPITEST_SOURCE_FILE "main.f90") endif() endmacro() foreach(c C CXX Fortran) if("${MPI_TEST_${c}}") message("Testing ${c}") enable_language(${c}) endif() endforeach() set(MPI_CXX_SKIP_MPICXX TRUE) set(MPI_CXX_VALIDATE_SKIP_MPICXX TRUE) find_package(MPI REQUIRED) foreach(c C CXX Fortran) if(NOT "${MPI_TEST_${c}}") continue() endif() if(${c} STREQUAL CXX AND MPI_MPICXX_FOUND) message(FATAL_ERROR "Could not suppress MPI-2 C++ bindings for this MPI.") endif() source_code_mapper_helper(${c}) add_executable(test_tgt_${c} ${MPITEST_SOURCE_FILE}) target_link_libraries(test_tgt_${c} MPI::MPI_${c}) add_test(NAME test_tgt_${c} COMMAND test_tgt_${c}) add_executable(test_var_${c} ${MPITEST_SOURCE_FILE}) target_include_directories(test_var_${c} PRIVATE "${MPI_${c}_INCLUDE_PATH}") target_link_libraries(test_var_${c} PRIVATE "${MPI_${c}_LINK_FLAGS}" "${MPI_${c}_LIBRARIES}") set(copied_MPI_${c}_OPTIONS "${MPI_${c}_COMPILE_FLAGS}") separate_arguments(copied_MPI_${c}_OPTIONS) target_compile_options(test_var_${c} PRIVATE "${copied_MPI_${c}_OPTIONS}") add_test(NAME test_var_${c} COMMAND test_var_${c}) endforeach()