File: CMakeLists.txt

package info (click to toggle)
votca 2025.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 132,420 kB
  • sloc: xml: 345,964; cpp: 80,067; python: 15,957; sh: 4,580; perl: 2,169; javascript: 202; makefile: 34
file content (127 lines) | stat: -rw-r--r-- 6,299 bytes parent folder | download | duplicates (2)
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)