1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
option(ENABLE_REGRESSION_TESTING "Build and copy regression testing stuff" OFF)
add_feature_info(ENABLE_REGRESSION_TESTING ENABLE_REGRESSION_TESTING "Enable regression tests")
if(ENABLE_REGRESSION_TESTING)
if(NOT BUILD_TESTING)
message(FATAL_ERROR "ENABLE_REGRESSION_TESTING needs BUILD_TESTING to be on")
endif()
option(ENABLE_EXPERIMENTAL_TESTS "Run more unstable regression tests as well" OFF)
add_feature_info(ENABLE_EXPERIMENTAL_TESTS ENABLE_EXPERIMENTAL_TESTS "Enable experimental regression tests")
find_package(LMP)
set_package_properties(LMP PROPERTIES TYPE OPTIONAL PURPOSE "Lammps binary needed to run lammps regression tests")
find_package(MDRUN_MPI)
set_package_properties(MDRUN_MPI PROPERTIES TYPE OPTIONAL PURPOSE "gromacs mpi binary needed to run parallel gromacs regression tests")
if(MDRUN_MPI_FOUND)
find_package(MPI)
set_package_properties(MPI PROPERTIES TYPE OPTIONAL PURPOSE "mpiexec binary needed to run parallel gromacs regression tests")
set(NPROCS 4 CACHE STRING "# processes for testing")
if(DEFINED MPIEXEC_MAX_NUMPROCS AND NPROCS GREATER MPIEXEC_MAX_NUMPROCS)
message(WARNING "NPROCS(${NPROCS}) bigger than MPIEXEC_MAX_NUMPROCS(${MPIEXEC_MAX_NUMPROCS}) appending '--oversubscribe'")
set(MPIEXEC_PREFLAGS "${MPIEXEC_PREFLAGS} --oversubscribe")
endif()
endif()
find_package(ESPRESSO)
set_package_properties(ESPRESSO PROPERTIES TYPE OPTIONAL PURPOSE "ESPResSo MD python module needed to run ESPResSo MD regression tests")
find_package(ESPRESSOPP)
set_package_properties(ESPRESSOPP PROPERTIES TYPE OPTIONAL PURPOSE "ESPResSo++ MD python module needed to run ESPResSo++ MD regression tests")
find_package(CMA)
set_package_properties(CMA PROPERTIES TYPE OPTIONAL PURPOSE "CMA python module needed to run CMA regression tests")
find_package(Gnuplot)
set_package_properties(Gnuplot PROPERTIES TYPE OPTIONAL PURPOSE "gnuplot needed to run CMA/simplex regression tests")
# all gmx test use tabulated interactions, which is only supported in
# gmx-2019
if(GROMACS_FOUND AND DEFINED GROMACS_VERSION AND GROMACS_VERSION VERSION_GREATER_EQUAL "2020")
unset(GROMACS_FOUND)
endif()
get_target_property(VOTCA_PATH VOTCA::csg_call VOTCA_PATH)
# GROMACS_PATH is used with BUILD_OWN_GROMACS, to have binaries during
# compile time
if(TARGET Gromacs::libgromacs)
get_target_property(GROMACS_PATH Gromacs::libgromacs GROMACS_PATH)
if(GROMACS_PATH)
set(VOTCA_PATH "${VOTCA_PATH}:${GROMACS_PATH}")
endif()
endif()
get_target_property(VOTCA_SHARE VOTCA::csg_call VOTCASHARE)
get_target_property(VOTCA_CSG_DEFAULTS VOTCA::csg_inverse VOTCA_CSG_DEFAULTS)
file(GLOB_RECURSE FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} settings.xml)
foreach(DIR ${FILES})
if(DIR MATCHES "(dlpoly|hoomd|atomistic|single_chain)")
continue()
elseif(DIR MATCHES "gromacs-(multi|remd)")
if(NOT MDRUN_MPI_FOUND OR NOT MPIEXEC OR NOT GROMACS_FOUND)
continue()
endif()
elseif(DIR MATCHES "lammps")
if(NOT LMP_FOUND)
continue()
elseif(DIR MATCHES "realtime" AND NOT Gnuplot_FOUND)
continue()
endif()
elseif(DIR MATCHES "espresso/")
if(NOT ESPRESSO_FOUND)
continue()
endif()
elseif(DIR MATCHES "espressopp/")
if(NOT ESPRESSOPP_FOUND)
continue()
endif()
elseif(DIR MATCHES "cma/")
if(NOT CMA_FOUND OR NOT Gnuplot_FOUND OR NOT GROMACS_FOUND)
continue()
endif()
elseif(DIR MATCHES "(simplex|realtime)")
if(NOT Gnuplot_FOUND OR NOT GROMACS_FOUND)
continue()
endif()
elseif(DIR MATCHES "some/broken/test")
if(NOT ENABLE_EXPERIMENTAL_TESTS)
continue()
endif()
elseif(NOT GROMACS_FOUND)
continue()
endif()
string(REGEX MATCH ^.*/ DIR ${DIR})
list(APPEND DIRS ${DIR})
endforeach(DIR)
list(REMOVE_DUPLICATES DIRS)
foreach(DIR ${DIRS})
if (NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${DIR})
# not recursive to avoid copying in-place step_* dir
file(GLOB FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${DIR}/*)
foreach(FILE ${FILES})
if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${FILE})
continue()
endif()
execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_CURRENT_SOURCE_DIR}/${FILE} ${CMAKE_CURRENT_BINARY_DIR}/${FILE})
endforeach(FILE ${FILES})
endif (NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
string(REGEX REPLACE "/$" "" DIR "${DIR}")
string(REPLACE / _ TESTNAME "regression_${DIR}")
add_test(NAME ${TESTNAME} COMMAND $<TARGET_FILE:VOTCA::csg_inverse> --options settings.xml --do-iterations 1 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${DIR})
set(CSG_MDRUN_STEPS 500)
if(DIR MATCHES "/imc($|_)")
set(CSG_MDRUN_STEPS 5000)
elseif(DIR MATCHES "spec/cma/simple")
set(CSG_MDRUN_STEPS 10000)
elseif(DIR MATCHES "/cma/")
set(CSG_MDRUN_STEPS 7500)
elseif(DIR MATCHES "/(re|simplex)($|_)")
set(CSG_MDRUN_STEPS 2500)
endif()
if(DIR MATCHES "gromacs-(multi|remd)")
set_property(TEST ${TESTNAME} PROPERTY ENVIRONMENT
"CSG_RUNTEST=yes;VOTCASHARE=${VOTCA_SHARE};CSG_MDRUN_STEPS=${CSG_MDRUN_STEPS};PATH=${VOTCA_PATH}:$ENV{PATH};VOTCA_CSG_DEFAULTS=${VOTCA_CSG_DEFAULTS}"
"CSG_MDRUN_CMD=${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} ${NPROCS} ${MPIEXEC_PREFLAGS} ${MDRUN_MPI_EXECUTABLE} ${MPIEXEC_POSTFLAGS}")
else()
set_property(TEST ${TESTNAME} PROPERTY ENVIRONMENT "CSG_RUNTEST=yes;VOTCASHARE=${VOTCA_SHARE};CSG_MDRUN_STEPS=${CSG_MDRUN_STEPS};PATH=${VOTCA_PATH}:$ENV{PATH};VOTCA_CSG_DEFAULTS=${VOTCA_CSG_DEFAULTS}")
endif()
endforeach(DIR ${DIRS})
message(STATUS "Use VOTCASHARE=${VOTCA_SHARE} PATH=${VOTCA_PATH}:\$PATH VOTCA_CSG_DEFAULTS=${VOTCA_CSG_DEFAULTS} for out-of-cmake testing")
endif()
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ DESTINATION ${CMAKE_INSTALL_DATADIR}/votca/csg-tutorials USE_SOURCE_PERMISSIONS
PATTERN ".git*" EXCLUDE PATTERN "step_*" EXCLUDE
PATTERN "CMake*" EXCLUDE PATTERN "cmake_install.cmake" EXCLUDE
PATTERN "install_manifest.txt" EXCLUDE PATTERN "*~" EXCLUDE
PATTERN "inverse.log" EXCLUDE)
|