Merge branch release-2020 into master
[alexxy/gromacs.git] / cmake / gmxVersionInfo.cmake
index 26ea22f6f74273174e751fa66e7fd4d85bb9a3e2..66bdd6e3157c1b7149d7cc25fabd78a0093221b9 100644 (file)
@@ -262,7 +262,7 @@ set(REGRESSIONTEST_BRANCH "refs/heads/master")
 # build the regressiontests tarball with all the right naming. The
 # naming affects the md5sum that has to go here, and if it isn't right
 # release workflow will report a failure.
-set(REGRESSIONTEST_MD5SUM "2fe8e35878bc9ee3cf60e92d5b250175" CACHE INTERNAL "MD5 sum of the regressiontests tarball for this GROMACS version")
+set(REGRESSIONTEST_MD5SUM "b032e4517195b1f8cd9db87cee1b30df" CACHE INTERNAL "MD5 sum of the regressiontests tarball for this GROMACS version")
 
 math(EXPR GMX_VERSION_NUMERIC
      "${GMX_VERSION_MAJOR}*10000 + ${GMX_VERSION_PATCH}")
@@ -335,6 +335,8 @@ set(VERSION_INFO_CONFIGURE_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/gmxConfigureVersionI
 # A set of directories to scan for calculating the hash of source files.
 set(SET_OF_DIRECTORIES_TO_CHECKSUM  "${PROJECT_SOURCE_DIR}/src")
 list(APPEND SET_OF_DIRECTORIES_TO_CHECKSUM "${PROJECT_SOURCE_DIR}/python_packaging")
+# Due to the limitations for passing a list as arguments, we make the directories a string here
+string(REPLACE ";" ":" DIRECTORIES_TO_CHECKSUM_STRING "${SET_OF_DIRECTORIES_TO_CHECKSUM}")
 # Try to find python for the checksumming script
 set(PythonInterp_FIND_QUIETLY ON)
 find_package(PythonInterp 3.5)
@@ -365,18 +367,19 @@ find_package(PythonInterp 3.5)
 #        - These are again custom commands that depend on the output from
 #          step 1, so they get regenerated only when the static version info
 #          changes.
+
+# Configure information known at this time into a partially filled
+# version info file.
+set(VERSION_INFO_CMAKEIN_FILE_PARTIAL
+    ${PROJECT_BINARY_DIR}/VersionInfo-partial.cmake.cmakein)
+# Leave these to be substituted by the targets below.
+set(GMX_VERSION_STRING_FULL       "\@GMX_VERSION_STRING_FULL\@")
+
 if (GMX_GIT_VERSION_INFO)
-    # Configure information known at this time into a partially filled
-    # version info file.
-    set(VERSION_INFO_CMAKEIN_FILE_PARTIAL
-        ${PROJECT_BINARY_DIR}/VersionInfo-partial.cmake.cmakein)
     # Leave these to be substituted by the custom target below.
-    set(GMX_VERSION_STRING_FULL       "\@GMX_VERSION_STRING_FULL\@")
+    # Specific for building from git.
     set(GMX_VERSION_FULL_HASH         "\@GMX_VERSION_FULL_HASH\@")
     set(GMX_VERSION_CENTRAL_BASE_HASH "\@GMX_VERSION_CENTRAL_BASE_HASH\@")
-    configure_file(${VERSION_INFO_CMAKEIN_FILE}
-                   ${VERSION_INFO_CMAKEIN_FILE_PARTIAL}
-                   @ONLY)
     # If generating the version info, create a target that runs on every build
     # and does the actual git calls, storing the results into a CMake script.
     # This needs to be run at build time to update the version information
@@ -397,54 +400,28 @@ if (GMX_GIT_VERSION_INFO)
         COMMENT "Generating git version information")
     list(APPEND VERSION_INFO_DEPS git-version-info)
 else()
-    # If the version info is static, just generate the CMake script with the
-    # version variables during the CMake run.
-    set(GMX_VERSION_STRING_FULL       ${GMX_VERSION_STRING})
-    set(GMX_VERSION_FULL_HASH         "")
-    set(GMX_VERSION_CENTRAL_BASE_HASH "")
-    # To notify the user during compilation and at runtime that the build source
-    # has not been modified after unpacking the source tarball, the contents are hashed
-    # to be compared to a hash computed during the release process. If the hash matches
-    # all is fine and the user gets a message in the log file indicating that.
-    # If either the release hash file is missing, or if the hash does not match
-    # a different message is printed to indicate that the source has been changed
-    # compared to the version actually released. This is not needed in case a build
-    # is done in git, as we have the information there already.
-    # This is not done if the user has explicitly set an additional custom version string with
-    # -DGMX_VERSION_STRING_OF_FORK, as this indicates that they are knowing that a custom
-    # version of GROMACS is in use.
-    set(RELEASE_CHECKSUM_FILE "${PROJECT_SOURCE_DIR}/src/reference_checksum")
-    if(NOT GMX_VERSION_STRING_OF_FORK OR "${GMX_VERSION_STRING_OF_FORK}" STREQUAL "")
-        if(EXISTS ${RELEASE_CHECKSUM_FILE} AND PythonInterp_FOUND)
-            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")
-            execute_process(COMMAND ${PYTHON_EXECUTABLE} 
-                                    ${PROJECT_SOURCE_DIR}/admin/createFileHash.py
-                                    -s ${SET_OF_DIRECTORIES_TO_CHECKSUM}
-                                    -o ${CHECKSUM_RESULT_FILE}
-                            WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
-                            OUTPUT_QUIET)
-                        file(READ ${CHECKSUM_RESULT_FILE} GMX_CURRENT_SOURCE_FILE_CHECKSUM)
-            string(STRIP ${GMX_CURRENT_SOURCE_FILE_CHECKSUM} GMX_CURRENT_SOURCE_FILE_CHECKSUM)
-            if(NOT ${GMX_RELEASE_SOURCE_FILE_CHECKSUM} STREQUAL ${GMX_CURRENT_SOURCE_FILE_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(PythonInterp_FOUND)
-            set(GMX_VERSION_STRING_FULL "${GMX_VERSION_STRING_FULL}-UNCHECKED")
-            set(GMX_RELEASE_SOURCE_FILE_CHECKSUM "NoChecksumFile")
-            set(GMX_CURRENT_SOURCE_FILE_CHECKSUM "NoChecksumFile")
-            message(WARNING "Could not valdiate the GROMACS source due to missing reference checksum file.")
-        else()
-            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")
-        endif()
-    endif()
-    configure_file(${VERSION_INFO_CMAKEIN_FILE} ${VERSION_INFO_CMAKE_FILE})
+    # Leave these to be substituted by the custom target below.
+    # Specific for building from source tarball.
+    set(GMX_RELEASE_SOURCE_FILE_CHECKSUM "\@GMX_RELEASE_SOURCE_FILE_CHECKSUM\@")
+    set(GMX_CURRENT_SOURCE_FILE_CHECKSUM "\@GMX_CURRENT_SOURCE_FILE_CHECKSUM\@")
+    gmx_add_custom_output_target(release-version-info RUN_ALWAYS
+        OUTPUT ${VERSION_INFO_CMAKE_FILE}
+        COMMAND ${CMAKE_COMMAND}
+            -D PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}
+            -D PROJECT_VERSION=${GMX_VERSION_STRING}
+            -D PROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR}
+            -D DIRECTORIES_TO_CHECKSUM=${DIRECTORIES_TO_CHECKSUM_STRING}
+            -D VERSION_CMAKEIN=${VERSION_INFO_CMAKEIN_FILE_PARTIAL}
+            -D VERSION_OUT=${VERSION_INFO_CMAKE_FILE}
+            -D VERSION_STRING_OF_FORK=${GMX_VERSION_STRING_OF_FORK}
+            -P ${CMAKE_CURRENT_LIST_DIR}/gmxGenerateVersionInfoRelease.cmake
+        WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+        COMMENT "Generating release version information")
+    list(APPEND VERSION_INFO_DEPS release-version-info)
 endif()
+configure_file(${VERSION_INFO_CMAKEIN_FILE}
+               ${VERSION_INFO_CMAKEIN_FILE_PARTIAL}
+               @ONLY)
 unset(GMX_VERSION_STRING_FULL)
 unset(GMX_VERSION_FULL_HASH)
 unset(GMX_VERSION_CENTRAL_BASE_HASH)