# DIRECTORIES_TO_CHECKSUM - List of directories to hash
# VERSION_CMAKEIN - path to an input template file
# VERSION_OUT - path to the output file
+# HAVE_FUNCTIONING_PYTHON - Whether the python used can do the checking.
#
# The following a possible additional definitions
# PYTHON_EXECUTABLE - Needed to run checking stage of current tree
# version of GROMACS is in use.
set(RELEASE_CHECKSUM_FILE "${PROJECT_SOURCE_DIR}/src/reference_checksum")
if(NOT VERSION_STRING_OF_FORK OR "${VERSION_STRING_OF_FORK}" STREQUAL "")
- if(EXISTS ${RELEASE_CHECKSUM_FILE} AND PYTHON_EXECUTABLE)
+ if(EXISTS ${RELEASE_CHECKSUM_FILE} AND HAVE_FULL_FUNCTIONING_PYTHON)
file(READ ${RELEASE_CHECKSUM_FILE} GMX_RELEASE_SOURCE_FILE_CHECKSUM)
string(STRIP ${GMX_RELEASE_SOURCE_FILE_CHECKSUM} GMX_RELEASE_SOURCE_FILE_CHECKSUM)
set(CHECKSUM_RESULT_FILE "${CMAKE_CURRENT_BINARY_DIR}/computed_checksum")
set(GMX_VERSION_STRING_FULL "${GMX_VERSION_STRING_FULL}-MODIFIED")
message(STATUS "The source code for this GROMACS installation is different from the officially released version.")
endif()
- elseif(PYTHON_EXECUTABLE)
+ elseif(HAVE_FULL_FUNCTIONING_PYTHON)
set(GMX_VERSION_STRING_FULL "${GMX_VERSION_STRING_FULL}-UNCHECKED")
set(GMX_RELEASE_SOURCE_FILE_CHECKSUM "NoChecksumFile")
set(GMX_CURRENT_SOURCE_FILE_CHECKSUM "NoChecksumFile")
set(GMX_VERSION_STRING_FULL "${GMX_VERSION_STRING_FULL}-UNCHECKED")
set(GMX_RELEASE_SOURCE_FILE_CHECKSUM "NoPythonAvailable")
set(GMX_CURRENT_SOURCE_FILE_CHECKSUM "NoPythonAvailable")
- message(STATUS "Could not calculate checksum of source files without Python")
+ message(STATUS "Could not calculate checksum of source files without functioning Python")
endif()
endif()
else()
endif()
include(gmxCustomCommandUtilities)
-
+include(FindPythonModule)
# The first two are also for use outside this file, encapsulating the details
# of how to use the generated VersionInfo.cmake.
set(VERSION_INFO_CMAKE_FILE ${PROJECT_BINARY_DIR}/VersionInfo.cmake)
# step 1, so they get regenerated only when the static version info
# changes.
+# Check if we have all necessary python modules available
+if (Python3_Interpreter_FOUND)
+ set(HAVE_FULL_FUNCTIONING_PYTHON Python3_Interpreter_FOUND)
+ foreach(module argparse hashlib hmac os stat re) # add further modules if necessary
+ find_python_module(${module} QUIET)
+ string(TOUPPER ${module} module_upper)
+ if(NOT PYTHONMODULE_${module_upper})
+ message(STATUS
+ "Python module ${module} not found - disabling checksum validation")
+ unset(HAVE_FULL_FUNCTIONING_PYTHON)
+ endif()
+ endforeach()
+endif()
+
# Configure information known at this time into a partially filled
# version info file.
set(VERSION_INFO_CMAKEIN_FILE_PARTIAL
OUTPUT ${VERSION_INFO_CMAKE_FILE}
COMMAND ${CMAKE_COMMAND}
-D PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}
+ -D HAVE_FULL_FUNCTIONING_PYTHON=${HAVE_FULL_FUNCTIONING_PYTHON}
-D PROJECT_VERSION=${GMX_VERSION_STRING}
-D PROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR}
-D DIRECTORIES_TO_CHECKSUM=${DIRECTORIES_TO_CHECKSUM_STRING}
# not been tampered with.
# Note: The RUN_ALWAYS here is to regenerate the hash file only, it does not
# mean that the target is run in all builds
-if (Python3_Interpreter_FOUND)
+if (HAVE_FULL_FUNCTIONING_PYTHON)
# We need the full path to the directories after passing it through
set(FULL_PATH_DIRECTORIES "")
foreach(DIR ${SET_OF_DIRECTORIES_TO_CHECKSUM})