diff --git a/patches/gromacs-2023.5.diff/cmake/gmxVersionInfo.cmake b/patches/gromacs-2023.5.diff/cmake/gmxVersionInfo.cmake deleted file mode 100644 index 32d7239cec..0000000000 --- a/patches/gromacs-2023.5.diff/cmake/gmxVersionInfo.cmake +++ /dev/null @@ -1,471 +0,0 @@ -# -# This file is part of the GROMACS molecular simulation package. -# -# Copyright 2014- The GROMACS Authors -# and the project initiators Erik Lindahl, Berk Hess and David van der Spoel. -# Consult the AUTHORS/COPYING files and https://www.gromacs.org for details. -# -# GROMACS is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public License -# as published by the Free Software Foundation; either version 2.1 -# of the License, or (at your option) any later version. -# -# GROMACS is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with GROMACS; if not, see -# https://www.gnu.org/licenses, or write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -# -# If you want to redistribute modifications to GROMACS, please -# consider that scientific software is very special. Version -# control is crucial - bugs must be traceable. We will be happy to -# consider code for inclusion in the official distribution, but -# derived work must not be called official GROMACS. Details are found -# in the README & COPYING files - if they are missing, get the -# official version at https://www.gromacs.org. -# -# To help us fund GROMACS development, we humbly ask that you cite -# the research papers on the package. Check out https://www.gromacs.org. - -# Sets version information variables and provides CMake functions for -# generating files based on them -# -# The following variables are derived from variables initialized by -# https://cmake.org/cmake/help/latest/command/project.html#command:project -# GMX_VERSION_MAJOR Major version number. -# GMX_VERSION_PATCH Patch version number. -# Should always be defined: zero for, e.g., 2016. -# -# This script provides the following basic version variables that need to be -# maintained manually: -# GMX_VERSION_SUFFIX String suffix to add to numeric version string. -# "-dev" is automatically added when not building from a source package, -# and does not need to be kept here. This mechanism is not quite enough -# for building a tarball, but setting the CMake cache variable -# GMX_BUILD_TARBALL=on will suppress the addition of "-dev" to the -# version string. -# LIBRARY_SOVERSION_MAJOR so major version for the built libraries. -# Should be increased for each binary incompatible release. In GROMACS, -# the typical policy is to increase it at the start of the development -# cycle for each major/minor version change, but not for patch releases, -# even if the latter may not always be fully binary compatible. -# Table of historical values -# GROMACS 5.0 0 -# GROMACS 5.1 1 -# GROMACS 2016 2 -# GROMACS 2018 3 -# GROMACS 2019 4 -# GROMACS 2020 5 -# GROMACS 2021 6 -# GROMACS 2022 7 -# GROMACS 2023 8 -# LIBRARY_SOVERSION_MINOR so minor version for the built libraries. -# Should be increased for each release that changes only the implementation. -# In GROMACS, the typical policy is to increase it for each patch version -# change, even if they may not always be fully binary compatible. -# If it is somehow clear that the ABI implementation has not changed -# in a patch release, this variable should not increase. Release candidate -# and beta versions will not increase this number, since nobody should -# write code against such versions. -# LIBRARY_VERSION Full library version. -# REGRESSIONTEST_BRANCH For builds not from source packages, name of the -# regressiontests branch at gerrit.gromacs.org whose HEAD can test this -# code, *if* this code is recent enough (i.e., contains all changes from -# the corresponding code branch that affects the regression test -# results). Even after a release branch is forked for the source -# repository, the correct regressiontests branch can still be main, -# because we do not fork it until behaviour needs to change. -# REGRESSIONTEST_MD5SUM -# The MD5 checksum of the regressiontest tarball. Only used when building -# from a source package. -# GMX_SOURCE_DOI_ID -# ID collected from Zenodo connected to the doi for a released version -# used to identify the source when building an official released version. -# This ID is used for the source code tarball. -# GMX_MANUAL_DOI_ID -# Same as above, but for the reference manual. -# They are collected into a single section below. -# The following variables are set based on these: -# GMX_VERSION String composed from GMX_VERSION_* numeric variables -# above. Example: 4.6.1, 5.0, 2016 -# GMX_VERSION_STRING String with GMX_VERSION suffixed with the given -# suffix and possibly "-dev" for builds not from a source package. -# GMX_VERSION_NUMERIC Numeric version number (e.g., 40601 for 4.6.1, 20160001 for 2016.1). -# GMX_API_VERSION Numeric API version. -# This is currently set automatically to GMX_VERSION_NUMERIC, but may -# become manually maintained in the future if there will be releases -# where the API does not change, but programs/libraries do. -# In such a case, this should be the first version where the current API -# appeared. -# REGRESSIONTEST_VERSION For source packages, version number of the -# matching regressiontests tarball. Not used for builds not from source -# packages. -# The latter two are used to generate gromacs/version.h to allow software -# written against the GROMACS API to provide some #ifdef'ed code to support -# multiple GROMACS versions. -# -# This script also declares machinery to generate and obtain version -# information from a git repository. This is enabled by default if the source -# tree is a git, but can be disabled with -# GMX_GIT_VERSION_INFO Advanced CMake variable to disable git -# version info generation. -# If the version generation is disabled, then the source and manual doi -# will be based on the stored values for the ID. -# The main interface to this machinery is the gmx_configure_version_file() -# CMake function. The signature is -# gmx_configure_version_file( -# [REMOTE_HASH] -# [TARGET ] -# [COMMENT ]) -# Specify the input and output files as for configure_file(). -# The configuration is done with configure_file(... @ONLY) with -# the following variables defined (as well as all the -# GMX_VERSION* variables from above): -# GMX_VERSION_STRING_FULL -# GMX_VERSION_FULL_HASH -# GMX_VERSION_CENTRAL_BASE_HASH -# The output file is created during build time, so any dependent -# targets should specify it as a dependency. -# REMOTE_HASH Currently, this has no effect, but it signifies that the -# file is using the CENTRAL_BASE_HASH variable. -# This variable is much more expensive to initialize than the -# others, so this allows local changes in this file to only -# compute that value when required if that becomes necessary. -# TARGET By default, this function uses add_custom_command() to -# generate the output file. If TARGET is specified, then -# add_custom_target() is used to create a target with the given -# name that runs this custom command. Use this if -# the same file will be used for multiple downstream targets, -# or if the explicit target for the file is otherwise -# necessary. -# COMMENT Set a custom comment to be shown when building the rule -# (see add_custom_command(... COMMENT )). -# As an alternative to using this script, also the following variables are -# provided (can be useful when generating more complex CMake scripts that do -# build-time tasks): -# VERSION_INFO_CMAKE_SCRIPT -# Absolute path to a CMake script that can be included using include() -# to declare the GMX_VERSION_* variables documented for -# gmx_configure_version_file(). -# VERSION_INFO_DEPS -# If a custom command depends on VERSION_INFO_CMAKE_SCRIPT, then it -# should add ${VERSION_INFO_DEPS} to its DEPENDS list to get the -# appropriate dependencies. -# TODO: If someone wants to add a custom target that depends on -# VERSION_INFO_CMAKE_SCRIPT, a separate variable may be needed for those -# dependencies. -# -# The version string printed by 'gmx -version' (and also printed in the startup -# header) can provide useful information for, e.g., diagnosing bug reports and -# identifying what exact version the user was using. The following formats are -# possible (with examples given for a particular version): -# 2018.1 Plain version number without any suffix signifies a build from -# a released source tarball. -# 2018.1-dev '-dev' suffix signifies all other builds. If there is no other -# information, either the user built the code outside any git -# repository, or disabled the version info generation. -# 2018.1-dev-YYYYMMDD-1234abc -# The YYYYMMDD part shows the commit date (not author date) of -# the HEAD commit from which the code was built. The abbreviated -# hash is the hash of that commit (the full hash is available in -# 'gmx -version' output). -# If the HEAD hash is not identified as coming from branches in -# "authoritative" GROMACS repositories, 'gmx -version' will show -# the nearest ancestor commit that is identified as such (but see -# the '-local' and '-unknown' suffixes below). -# 2018.1-dev-YYYYMMDD-1234abc-dirty -# As above, but there were local modifications in the source tree -# when the code was built. -# 2018.1-dev-YYYYMMDD-1234abc-unknown -# As above, but there were no remotes in the repository that -# could be identified as "authoritative" GROMACS repositories. -# This happens if the code is not cloned from git.gromacs.org -# or gerrit.gromacs.org. -# 2018.1-dev-YYYYMMDD-1234abc-local -# As above, but there were no commits in the recent history of -# the branch that could be identified as coming from -# "authoritative" GROMACS repositories. This should be -# relatively rare. -# -# Other variables set here are not intended for use outside this file. -# The scripts gmxGenerateVersionInfo.cmake and gmxConfigureVersionInfo.cmake -# are used internally by this machinery, as well as VersionInfo.cmake.cmakein. - -##################################################################### -# Derived version info. -# Ref https://cmake.org/cmake/help/latest/command/project.html#command:project -set(GMX_VERSION_MAJOR ${Gromacs_VERSION_MAJOR}) -set(GMX_VERSION_PATCH ${Gromacs_VERSION_MINOR}) - -##################################################################### -# Manually maintained version info - -# The suffix is used mainly for betas and release -# candidates, where it signifies the most recent such release from -# this branch; it will be empty before the first such release, as well -# as after the final release is out. -set(GMX_VERSION_SUFFIX "") - -# Conventionally with libtool, any ABI change must change the major -# version number, the minor version number should change if it's just -# the implementation that has been altered, and the third number -# counts the number of old major versions that will still run if -# linked to this library (i.e. it is not a patch number). See the -# above descriptions of LIBRARY_SOVERSION_* for policy for changes -# here. The important thing is to minimize the chance of third-party -# code being able to dynamically link with a version of libgromacs -# that might not work. -set(LIBRARY_SOVERSION_MAJOR 8) -set(LIBRARY_SOVERSION_MINOR 0) -set(LIBRARY_VERSION ${LIBRARY_SOVERSION_MAJOR}.${LIBRARY_SOVERSION_MINOR}.0) - -##################################################################### -# General version management based on manually set numbers - -if (GMX_VERSION_PATCH) - set(GMX_VERSION "${GMX_VERSION_MAJOR}.${GMX_VERSION_PATCH}") -else() - set(GMX_VERSION "${GMX_VERSION_MAJOR}") -endif() -# Set REGRESSIONTEST_VERSION before further modification to version info. -set(REGRESSIONTEST_VERSION "${GMX_VERSION}${GMX_VERSION_SUFFIX}") - -# Initialize version string. -# Note: Forks that use the suffixing feature later change GMX_VERSION_STRING -# Ref: https://gitlab.com/gromacs/gromacs/-/merge_requests/2587 -set(GMX_VERSION_STRING "${REGRESSIONTEST_VERSION}") -set(REGRESSIONTEST_BRANCH "release-2023") -# Follow the relevant part of the release checklist at -# https://gitlab.com/gromacs/gromacs/-/wikis/Release-checklist#how-to-build-a-regressiontests-tarball -# in order to have it build the regressiontests tarball with all the -# right version naming. The version number and suffix goes into the -# directory name within the regressiontests tarball, which affects the -# md5sum of the tarball. The matching md5sum has to go here, and if it -# isn't right the real release workflow will report a failure. -set(REGRESSIONTEST_MD5SUM "f697cb2624e332aa6a4ea990990a4682" CACHE INTERNAL "MD5 sum of the regressiontests tarball for this GROMACS version") - -# If you are making a custom fork of GROMACS, please describe your -# fork, perhaps with its version number, in the value of -# GMX_VERSION_STRING_OF_FORK here. This string will appear in the -# header of log files that mdrun writes. This will help you, your -# users, your system administrators, your maintainers and the -# maintainers of GROMACS core understand how to troubleshoot and -# reproduce potential problems. -# -# If you are distributing a patch to GROMACS, then this change would -# be great as part of your patch. Otherwise for personal use, you can -# also just set a CMake cache variable. -set(GMX_VERSION_STRING_OF_FORK plumed-2.9.0-dev CACHE INTERNAL - "Version string for forks of GROMACS to set to describe themselves") -mark_as_advanced(GMX_VERSION_STRING_OF_FORK) -if (GMX_VERSION_STRING_OF_FORK) - # Remove dashes from GMX_VERSION_STRING_OF_FORK to avoid confusing pkg-config. Issue #4363 - string(REPLACE "-" "_" _VERSION_STRING_OF_FORK_CLEAN "${GMX_VERSION_STRING_OF_FORK}") - set(GMX_VERSION_STRING "${GMX_VERSION_STRING}-${_VERSION_STRING_OF_FORK_CLEAN}") -endif() - -option(GMX_BUILD_TARBALL "Build tarball without -dev version suffix" OFF) -mark_as_advanced(GMX_BUILD_TARBALL) -if (NOT SOURCE_IS_SOURCE_DISTRIBUTION AND - NOT GMX_BUILD_TARBALL) - set(GMX_VERSION_STRING "${GMX_VERSION_STRING}-dev") -endif() - -math(EXPR GMX_VERSION_NUMERIC - "${GMX_VERSION_MAJOR}*10000 + ${GMX_VERSION_PATCH}") -set(GMX_API_VERSION ${GMX_VERSION_NUMERIC}) - -# Set those values only in release versions, after getting the identifiers -# from Zenodo for the manual and source code -# Has to be done by hand before every final release -# Use force to override anything given as a cmake command line input -# Actual input depends on the GMX_VERSION_STRING_OF_FORK variable being set or not. -# If it is set, we always default to an empty string, otherwise to the value set for the release build. -if (GMX_VERSION_STRING_OF_FORK) - set(GMX_MANUAL_DOI_INTERNAL "") - set(GMX_SOURCE_DOI_INTERNAL "") -else() - set(GMX_MANUAL_DOI_INTERNAL "10.5281/zenodo.7588711") # Set correct doi string here - set(GMX_SOURCE_DOI_INTERNAL "10.5281/zenodo.7588619") # Set correct doi string here -endif() -set(GMX_MANUAL_DOI ${GMX_MANUAL_DOI_INTERNAL} CACHE INTERNAL "reserved doi for GROMACS manual" FORCE) -set(GMX_SOURCE_DOI ${GMX_SOURCE_DOI_INTERNAL} CACHE INTERNAL "reserved doi for GROMACS source code" FORCE) - -##################################################################### -# git version info management - -# There can be clusters where git and CMake can run on nodes where the other is -# not available, accessing the same source tree. -# Should be unlikely, but doesn't hurt to check. -set(_git_info_default OFF) -if (SOURCE_IS_GIT_REPOSITORY) - find_package(Git) - if (GIT_FOUND) - set(_git_info_default ON) - endif() -endif() -option(GMX_GIT_VERSION_INFO "Generate git version information" ${_git_info_default}) -mark_as_advanced(GMX_GIT_VERSION_INFO) -# Detect preconditions for version info generation if it is requested. -if (GMX_GIT_VERSION_INFO) - if (NOT SOURCE_IS_GIT_REPOSITORY) - message(FATAL_ERROR - "Cannot generate git version information from source tree not under git. " - "Set GMX_GIT_VERSION_INFO=OFF to proceed.") - endif() - # We need at least git v1.5.3 be able to parse git's date output. - if (NOT GIT_FOUND OR GIT_VERSION_STRING VERSION_LESS "1.5.3") - message(FATAL_ERROR - "No compatible git version found (>= 1.5.3 required). " - "Won't be able to generate development version information. " - "Set GMX_GIT_VERSION_INFO=OFF to proceed.") - endif() -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) -set(VERSION_INFO_DEPS ${VERSION_INFO_CMAKE_FILE}) -# Capture the location of the necessary files in internal variables for use in -# the function below. -set(VERSION_INFO_CMAKEIN_FILE ${CMAKE_CURRENT_LIST_DIR}/VersionInfo.cmake.cmakein) -set(VERSION_INFO_CONFIGURE_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/gmxConfigureVersionInfo.cmake) - -# Rules to create the VersionInfo.cmake file. -# For git info, the sequence is: -# 1. (configure time) VersionInfo.cmake.cmakein -> VersionInfo-partial.cmake.cmakein -# - Set all variables that are known at configure time. -# 2. (build time) VersionInfo-partial.cmake.cmakein -> VersionInfo.cmake -# - Set variables that may change as result of repository state changes -# (i.e., everything that requires running git). -# - Runs every time as a git-version-info target, but the output file -# timestamp only changes if its contents actually change. -# - Depending on the native build system, this may run once per build -# or once per each time it is required for step 3. -# 3. (build time) VersionInfo.cmake -> other files -# - Set variables in files specified with gmx_configure_version_file() -# using the values generated in step 2. -# - Each file runs as a custom command that depends on the previous -# steps, and runs only if the VersionInfo.cmake file is newer than the -# output file. -# Without git info, the sequence is: -# 1. (configure time) VersionInfo.cmake.cmakein -> VersionInfo.cmake -# - Everything is known at configure time, so the output is generated -# immediately with all variables set (git info will be empty). -# 2. (build time) VersionInfo.cmake -> other files -# - As with git info, processes files from gmx_configure_version_file(). -# - These are again custom commands that depend on the output from -# step 1, so they get regenerated only when the static version info -# changes. -# -# Note that VersionInfo-partial.cmake is also used to transfer version -# information between GitLab CI jobs for release and documentation builds. - -# 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) - # Leave these to be substituted by the custom target below. - # 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\@") - # 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 - # properly when the git hash changes, but the build system does not. - # All targets added by gmx_configure_version_file() use the information - # from this script to get their variables from, removing the need to run - # git multiple times and simplifying reuse for other purposes. - gmx_add_custom_output_target(git-version-info RUN_ALWAYS - OUTPUT ${VERSION_INFO_CMAKE_FILE} - COMMAND ${CMAKE_COMMAND} - -D GIT_EXECUTABLE=${GIT_EXECUTABLE} - -D PROJECT_VERSION=${GMX_VERSION_STRING} - -D PROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR} - -D VERSION_CMAKEIN=${VERSION_INFO_CMAKEIN_FILE_PARTIAL} - -D VERSION_OUT=${VERSION_INFO_CMAKE_FILE} - -P ${CMAKE_CURRENT_LIST_DIR}/gmxGenerateVersionInfo.cmake - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - COMMENT "Generating git version information") - list(APPEND VERSION_INFO_DEPS git-version-info) -else() - # Leave these to be substituted by the custom target below. - # Specific for building from source tarball. - 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 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}/gmxGenerateVersionInfoWithoutGit.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) - -# The main user-visible interface to the machinery. -# See documentation at the top of the script. -function (gmx_configure_version_file INFILE OUTFILE) - include(CMakeParseArguments) - set(_options REMOTE_HASH) - set(_one_value_args COMMENT TARGET) - set(_multi_value_args EXTRA_VARS) - cmake_parse_arguments( - ARG "${_options}" "${_one_value_args}" "${_multi_value_args}" ${ARGN}) - if (ARG_UNPARSED_ARGUMENTS) - message(FATAL_ERROR "Unknown arguments: ${ARG_UNPARSED_ARGUMENTS}") - endif() - # Some callers may pass partial paths that do not really make sense, - # so create a default comment that only contains the actual file name. - get_filename_component(_basename ${OUTFILE} NAME) - set(_comment "Generating ${_basename}") - if (ARG_COMMENT) - set(_comment ${ARG_COMMENT}) - endif() - # Mimic configure_file() - if (NOT IS_ABSOLUTE ${INFILE}) - set(INFILE ${CMAKE_CURRENT_SOURCE_DIR}/${INFILE}) - endif() - # Create command-line definitions for the requested variables - set(_extra_var_defines) - foreach(_var ${ARG_EXTRA_VARS}) - list(APPEND _extra_var_defines -D "${_var}=${${_var}}") - endforeach() - # The touch command is necessary to ensure that after the target is run, - # the timestamp is newer than in the input files. - add_custom_command(OUTPUT ${OUTFILE} - COMMAND ${CMAKE_COMMAND} - -D VERSION_VARIABLES=${VERSION_INFO_CMAKE_FILE} - -D VERSION_CMAKEIN=${INFILE} - -D VERSION_OUT=${OUTFILE} - ${_extra_var_defines} - -P ${VERSION_INFO_CONFIGURE_SCRIPT} - COMMAND ${CMAKE_COMMAND} -E touch ${OUTFILE} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - DEPENDS ${INFILE} ${VERSION_INFO_DEPS} ${VERSION_INFO_CONFIGURE_SCRIPT} - COMMENT "${_comment}" - VERBATIM) - if (ARG_TARGET) - add_custom_target(${ARG_TARGET} DEPENDS ${OUTFILE} VERBATIM) - gmx_set_custom_target_output(${ARG_TARGET} ${OUTFILE}) - endif() -endfunction() diff --git a/patches/gromacs-2023.5.diff/cmake/gmxVersionInfo.cmake.preplumed b/patches/gromacs-2023.5.diff/cmake/gmxVersionInfo.cmake.preplumed deleted file mode 100644 index 22da2adc01..0000000000 --- a/patches/gromacs-2023.5.diff/cmake/gmxVersionInfo.cmake.preplumed +++ /dev/null @@ -1,471 +0,0 @@ -# -# This file is part of the GROMACS molecular simulation package. -# -# Copyright 2014- The GROMACS Authors -# and the project initiators Erik Lindahl, Berk Hess and David van der Spoel. -# Consult the AUTHORS/COPYING files and https://www.gromacs.org for details. -# -# GROMACS is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public License -# as published by the Free Software Foundation; either version 2.1 -# of the License, or (at your option) any later version. -# -# GROMACS is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with GROMACS; if not, see -# https://www.gnu.org/licenses, or write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -# -# If you want to redistribute modifications to GROMACS, please -# consider that scientific software is very special. Version -# control is crucial - bugs must be traceable. We will be happy to -# consider code for inclusion in the official distribution, but -# derived work must not be called official GROMACS. Details are found -# in the README & COPYING files - if they are missing, get the -# official version at https://www.gromacs.org. -# -# To help us fund GROMACS development, we humbly ask that you cite -# the research papers on the package. Check out https://www.gromacs.org. - -# Sets version information variables and provides CMake functions for -# generating files based on them -# -# The following variables are derived from variables initialized by -# https://cmake.org/cmake/help/latest/command/project.html#command:project -# GMX_VERSION_MAJOR Major version number. -# GMX_VERSION_PATCH Patch version number. -# Should always be defined: zero for, e.g., 2016. -# -# This script provides the following basic version variables that need to be -# maintained manually: -# GMX_VERSION_SUFFIX String suffix to add to numeric version string. -# "-dev" is automatically added when not building from a source package, -# and does not need to be kept here. This mechanism is not quite enough -# for building a tarball, but setting the CMake cache variable -# GMX_BUILD_TARBALL=on will suppress the addition of "-dev" to the -# version string. -# LIBRARY_SOVERSION_MAJOR so major version for the built libraries. -# Should be increased for each binary incompatible release. In GROMACS, -# the typical policy is to increase it at the start of the development -# cycle for each major/minor version change, but not for patch releases, -# even if the latter may not always be fully binary compatible. -# Table of historical values -# GROMACS 5.0 0 -# GROMACS 5.1 1 -# GROMACS 2016 2 -# GROMACS 2018 3 -# GROMACS 2019 4 -# GROMACS 2020 5 -# GROMACS 2021 6 -# GROMACS 2022 7 -# GROMACS 2023 8 -# LIBRARY_SOVERSION_MINOR so minor version for the built libraries. -# Should be increased for each release that changes only the implementation. -# In GROMACS, the typical policy is to increase it for each patch version -# change, even if they may not always be fully binary compatible. -# If it is somehow clear that the ABI implementation has not changed -# in a patch release, this variable should not increase. Release candidate -# and beta versions will not increase this number, since nobody should -# write code against such versions. -# LIBRARY_VERSION Full library version. -# REGRESSIONTEST_BRANCH For builds not from source packages, name of the -# regressiontests branch at gerrit.gromacs.org whose HEAD can test this -# code, *if* this code is recent enough (i.e., contains all changes from -# the corresponding code branch that affects the regression test -# results). Even after a release branch is forked for the source -# repository, the correct regressiontests branch can still be main, -# because we do not fork it until behaviour needs to change. -# REGRESSIONTEST_MD5SUM -# The MD5 checksum of the regressiontest tarball. Only used when building -# from a source package. -# GMX_SOURCE_DOI_ID -# ID collected from Zenodo connected to the doi for a released version -# used to identify the source when building an official released version. -# This ID is used for the source code tarball. -# GMX_MANUAL_DOI_ID -# Same as above, but for the reference manual. -# They are collected into a single section below. -# The following variables are set based on these: -# GMX_VERSION String composed from GMX_VERSION_* numeric variables -# above. Example: 4.6.1, 5.0, 2016 -# GMX_VERSION_STRING String with GMX_VERSION suffixed with the given -# suffix and possibly "-dev" for builds not from a source package. -# GMX_VERSION_NUMERIC Numeric version number (e.g., 40601 for 4.6.1, 20160001 for 2016.1). -# GMX_API_VERSION Numeric API version. -# This is currently set automatically to GMX_VERSION_NUMERIC, but may -# become manually maintained in the future if there will be releases -# where the API does not change, but programs/libraries do. -# In such a case, this should be the first version where the current API -# appeared. -# REGRESSIONTEST_VERSION For source packages, version number of the -# matching regressiontests tarball. Not used for builds not from source -# packages. -# The latter two are used to generate gromacs/version.h to allow software -# written against the GROMACS API to provide some #ifdef'ed code to support -# multiple GROMACS versions. -# -# This script also declares machinery to generate and obtain version -# information from a git repository. This is enabled by default if the source -# tree is a git, but can be disabled with -# GMX_GIT_VERSION_INFO Advanced CMake variable to disable git -# version info generation. -# If the version generation is disabled, then the source and manual doi -# will be based on the stored values for the ID. -# The main interface to this machinery is the gmx_configure_version_file() -# CMake function. The signature is -# gmx_configure_version_file( -# [REMOTE_HASH] -# [TARGET ] -# [COMMENT ]) -# Specify the input and output files as for configure_file(). -# The configuration is done with configure_file(... @ONLY) with -# the following variables defined (as well as all the -# GMX_VERSION* variables from above): -# GMX_VERSION_STRING_FULL -# GMX_VERSION_FULL_HASH -# GMX_VERSION_CENTRAL_BASE_HASH -# The output file is created during build time, so any dependent -# targets should specify it as a dependency. -# REMOTE_HASH Currently, this has no effect, but it signifies that the -# file is using the CENTRAL_BASE_HASH variable. -# This variable is much more expensive to initialize than the -# others, so this allows local changes in this file to only -# compute that value when required if that becomes necessary. -# TARGET By default, this function uses add_custom_command() to -# generate the output file. If TARGET is specified, then -# add_custom_target() is used to create a target with the given -# name that runs this custom command. Use this if -# the same file will be used for multiple downstream targets, -# or if the explicit target for the file is otherwise -# necessary. -# COMMENT Set a custom comment to be shown when building the rule -# (see add_custom_command(... COMMENT )). -# As an alternative to using this script, also the following variables are -# provided (can be useful when generating more complex CMake scripts that do -# build-time tasks): -# VERSION_INFO_CMAKE_SCRIPT -# Absolute path to a CMake script that can be included using include() -# to declare the GMX_VERSION_* variables documented for -# gmx_configure_version_file(). -# VERSION_INFO_DEPS -# If a custom command depends on VERSION_INFO_CMAKE_SCRIPT, then it -# should add ${VERSION_INFO_DEPS} to its DEPENDS list to get the -# appropriate dependencies. -# TODO: If someone wants to add a custom target that depends on -# VERSION_INFO_CMAKE_SCRIPT, a separate variable may be needed for those -# dependencies. -# -# The version string printed by 'gmx -version' (and also printed in the startup -# header) can provide useful information for, e.g., diagnosing bug reports and -# identifying what exact version the user was using. The following formats are -# possible (with examples given for a particular version): -# 2018.1 Plain version number without any suffix signifies a build from -# a released source tarball. -# 2018.1-dev '-dev' suffix signifies all other builds. If there is no other -# information, either the user built the code outside any git -# repository, or disabled the version info generation. -# 2018.1-dev-YYYYMMDD-1234abc -# The YYYYMMDD part shows the commit date (not author date) of -# the HEAD commit from which the code was built. The abbreviated -# hash is the hash of that commit (the full hash is available in -# 'gmx -version' output). -# If the HEAD hash is not identified as coming from branches in -# "authoritative" GROMACS repositories, 'gmx -version' will show -# the nearest ancestor commit that is identified as such (but see -# the '-local' and '-unknown' suffixes below). -# 2018.1-dev-YYYYMMDD-1234abc-dirty -# As above, but there were local modifications in the source tree -# when the code was built. -# 2018.1-dev-YYYYMMDD-1234abc-unknown -# As above, but there were no remotes in the repository that -# could be identified as "authoritative" GROMACS repositories. -# This happens if the code is not cloned from git.gromacs.org -# or gerrit.gromacs.org. -# 2018.1-dev-YYYYMMDD-1234abc-local -# As above, but there were no commits in the recent history of -# the branch that could be identified as coming from -# "authoritative" GROMACS repositories. This should be -# relatively rare. -# -# Other variables set here are not intended for use outside this file. -# The scripts gmxGenerateVersionInfo.cmake and gmxConfigureVersionInfo.cmake -# are used internally by this machinery, as well as VersionInfo.cmake.cmakein. - -##################################################################### -# Derived version info. -# Ref https://cmake.org/cmake/help/latest/command/project.html#command:project -set(GMX_VERSION_MAJOR ${Gromacs_VERSION_MAJOR}) -set(GMX_VERSION_PATCH ${Gromacs_VERSION_MINOR}) - -##################################################################### -# Manually maintained version info - -# The suffix is used mainly for betas and release -# candidates, where it signifies the most recent such release from -# this branch; it will be empty before the first such release, as well -# as after the final release is out. -set(GMX_VERSION_SUFFIX "") - -# Conventionally with libtool, any ABI change must change the major -# version number, the minor version number should change if it's just -# the implementation that has been altered, and the third number -# counts the number of old major versions that will still run if -# linked to this library (i.e. it is not a patch number). See the -# above descriptions of LIBRARY_SOVERSION_* for policy for changes -# here. The important thing is to minimize the chance of third-party -# code being able to dynamically link with a version of libgromacs -# that might not work. -set(LIBRARY_SOVERSION_MAJOR 8) -set(LIBRARY_SOVERSION_MINOR 0) -set(LIBRARY_VERSION ${LIBRARY_SOVERSION_MAJOR}.${LIBRARY_SOVERSION_MINOR}.0) - -##################################################################### -# General version management based on manually set numbers - -if (GMX_VERSION_PATCH) - set(GMX_VERSION "${GMX_VERSION_MAJOR}.${GMX_VERSION_PATCH}") -else() - set(GMX_VERSION "${GMX_VERSION_MAJOR}") -endif() -# Set REGRESSIONTEST_VERSION before further modification to version info. -set(REGRESSIONTEST_VERSION "${GMX_VERSION}${GMX_VERSION_SUFFIX}") - -# Initialize version string. -# Note: Forks that use the suffixing feature later change GMX_VERSION_STRING -# Ref: https://gitlab.com/gromacs/gromacs/-/merge_requests/2587 -set(GMX_VERSION_STRING "${REGRESSIONTEST_VERSION}") -set(REGRESSIONTEST_BRANCH "release-2023") -# Follow the relevant part of the release checklist at -# https://gitlab.com/gromacs/gromacs/-/wikis/Release-checklist#how-to-build-a-regressiontests-tarball -# in order to have it build the regressiontests tarball with all the -# right version naming. The version number and suffix goes into the -# directory name within the regressiontests tarball, which affects the -# md5sum of the tarball. The matching md5sum has to go here, and if it -# isn't right the real release workflow will report a failure. -set(REGRESSIONTEST_MD5SUM "f697cb2624e332aa6a4ea990990a4682" CACHE INTERNAL "MD5 sum of the regressiontests tarball for this GROMACS version") - -# If you are making a custom fork of GROMACS, please describe your -# fork, perhaps with its version number, in the value of -# GMX_VERSION_STRING_OF_FORK here. This string will appear in the -# header of log files that mdrun writes. This will help you, your -# users, your system administrators, your maintainers and the -# maintainers of GROMACS core understand how to troubleshoot and -# reproduce potential problems. -# -# If you are distributing a patch to GROMACS, then this change would -# be great as part of your patch. Otherwise for personal use, you can -# also just set a CMake cache variable. -set(GMX_VERSION_STRING_OF_FORK "" CACHE INTERNAL - "Version string for forks of GROMACS to set to describe themselves") -mark_as_advanced(GMX_VERSION_STRING_OF_FORK) -if (GMX_VERSION_STRING_OF_FORK) - # Remove dashes from GMX_VERSION_STRING_OF_FORK to avoid confusing pkg-config. Issue #4363 - string(REPLACE "-" "_" _VERSION_STRING_OF_FORK_CLEAN "${GMX_VERSION_STRING_OF_FORK}") - set(GMX_VERSION_STRING "${GMX_VERSION_STRING}-${_VERSION_STRING_OF_FORK_CLEAN}") -endif() - -option(GMX_BUILD_TARBALL "Build tarball without -dev version suffix" OFF) -mark_as_advanced(GMX_BUILD_TARBALL) -if (NOT SOURCE_IS_SOURCE_DISTRIBUTION AND - NOT GMX_BUILD_TARBALL) - set(GMX_VERSION_STRING "${GMX_VERSION_STRING}-dev") -endif() - -math(EXPR GMX_VERSION_NUMERIC - "${GMX_VERSION_MAJOR}*10000 + ${GMX_VERSION_PATCH}") -set(GMX_API_VERSION ${GMX_VERSION_NUMERIC}) - -# Set those values only in release versions, after getting the identifiers -# from Zenodo for the manual and source code -# Has to be done by hand before every final release -# Use force to override anything given as a cmake command line input -# Actual input depends on the GMX_VERSION_STRING_OF_FORK variable being set or not. -# If it is set, we always default to an empty string, otherwise to the value set for the release build. -if (GMX_VERSION_STRING_OF_FORK) - set(GMX_MANUAL_DOI_INTERNAL "") - set(GMX_SOURCE_DOI_INTERNAL "") -else() - set(GMX_MANUAL_DOI_INTERNAL "10.5281/zenodo.7588711") # Set correct doi string here - set(GMX_SOURCE_DOI_INTERNAL "10.5281/zenodo.7588619") # Set correct doi string here -endif() -set(GMX_MANUAL_DOI ${GMX_MANUAL_DOI_INTERNAL} CACHE INTERNAL "reserved doi for GROMACS manual" FORCE) -set(GMX_SOURCE_DOI ${GMX_SOURCE_DOI_INTERNAL} CACHE INTERNAL "reserved doi for GROMACS source code" FORCE) - -##################################################################### -# git version info management - -# There can be clusters where git and CMake can run on nodes where the other is -# not available, accessing the same source tree. -# Should be unlikely, but doesn't hurt to check. -set(_git_info_default OFF) -if (SOURCE_IS_GIT_REPOSITORY) - find_package(Git) - if (GIT_FOUND) - set(_git_info_default ON) - endif() -endif() -option(GMX_GIT_VERSION_INFO "Generate git version information" ${_git_info_default}) -mark_as_advanced(GMX_GIT_VERSION_INFO) -# Detect preconditions for version info generation if it is requested. -if (GMX_GIT_VERSION_INFO) - if (NOT SOURCE_IS_GIT_REPOSITORY) - message(FATAL_ERROR - "Cannot generate git version information from source tree not under git. " - "Set GMX_GIT_VERSION_INFO=OFF to proceed.") - endif() - # We need at least git v1.5.3 be able to parse git's date output. - if (NOT GIT_FOUND OR GIT_VERSION_STRING VERSION_LESS "1.5.3") - message(FATAL_ERROR - "No compatible git version found (>= 1.5.3 required). " - "Won't be able to generate development version information. " - "Set GMX_GIT_VERSION_INFO=OFF to proceed.") - endif() -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) -set(VERSION_INFO_DEPS ${VERSION_INFO_CMAKE_FILE}) -# Capture the location of the necessary files in internal variables for use in -# the function below. -set(VERSION_INFO_CMAKEIN_FILE ${CMAKE_CURRENT_LIST_DIR}/VersionInfo.cmake.cmakein) -set(VERSION_INFO_CONFIGURE_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/gmxConfigureVersionInfo.cmake) - -# Rules to create the VersionInfo.cmake file. -# For git info, the sequence is: -# 1. (configure time) VersionInfo.cmake.cmakein -> VersionInfo-partial.cmake.cmakein -# - Set all variables that are known at configure time. -# 2. (build time) VersionInfo-partial.cmake.cmakein -> VersionInfo.cmake -# - Set variables that may change as result of repository state changes -# (i.e., everything that requires running git). -# - Runs every time as a git-version-info target, but the output file -# timestamp only changes if its contents actually change. -# - Depending on the native build system, this may run once per build -# or once per each time it is required for step 3. -# 3. (build time) VersionInfo.cmake -> other files -# - Set variables in files specified with gmx_configure_version_file() -# using the values generated in step 2. -# - Each file runs as a custom command that depends on the previous -# steps, and runs only if the VersionInfo.cmake file is newer than the -# output file. -# Without git info, the sequence is: -# 1. (configure time) VersionInfo.cmake.cmakein -> VersionInfo.cmake -# - Everything is known at configure time, so the output is generated -# immediately with all variables set (git info will be empty). -# 2. (build time) VersionInfo.cmake -> other files -# - As with git info, processes files from gmx_configure_version_file(). -# - These are again custom commands that depend on the output from -# step 1, so they get regenerated only when the static version info -# changes. -# -# Note that VersionInfo-partial.cmake is also used to transfer version -# information between GitLab CI jobs for release and documentation builds. - -# 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) - # Leave these to be substituted by the custom target below. - # 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\@") - # 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 - # properly when the git hash changes, but the build system does not. - # All targets added by gmx_configure_version_file() use the information - # from this script to get their variables from, removing the need to run - # git multiple times and simplifying reuse for other purposes. - gmx_add_custom_output_target(git-version-info RUN_ALWAYS - OUTPUT ${VERSION_INFO_CMAKE_FILE} - COMMAND ${CMAKE_COMMAND} - -D GIT_EXECUTABLE=${GIT_EXECUTABLE} - -D PROJECT_VERSION=${GMX_VERSION_STRING} - -D PROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR} - -D VERSION_CMAKEIN=${VERSION_INFO_CMAKEIN_FILE_PARTIAL} - -D VERSION_OUT=${VERSION_INFO_CMAKE_FILE} - -P ${CMAKE_CURRENT_LIST_DIR}/gmxGenerateVersionInfo.cmake - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - COMMENT "Generating git version information") - list(APPEND VERSION_INFO_DEPS git-version-info) -else() - # Leave these to be substituted by the custom target below. - # Specific for building from source tarball. - 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 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}/gmxGenerateVersionInfoWithoutGit.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) - -# The main user-visible interface to the machinery. -# See documentation at the top of the script. -function (gmx_configure_version_file INFILE OUTFILE) - include(CMakeParseArguments) - set(_options REMOTE_HASH) - set(_one_value_args COMMENT TARGET) - set(_multi_value_args EXTRA_VARS) - cmake_parse_arguments( - ARG "${_options}" "${_one_value_args}" "${_multi_value_args}" ${ARGN}) - if (ARG_UNPARSED_ARGUMENTS) - message(FATAL_ERROR "Unknown arguments: ${ARG_UNPARSED_ARGUMENTS}") - endif() - # Some callers may pass partial paths that do not really make sense, - # so create a default comment that only contains the actual file name. - get_filename_component(_basename ${OUTFILE} NAME) - set(_comment "Generating ${_basename}") - if (ARG_COMMENT) - set(_comment ${ARG_COMMENT}) - endif() - # Mimic configure_file() - if (NOT IS_ABSOLUTE ${INFILE}) - set(INFILE ${CMAKE_CURRENT_SOURCE_DIR}/${INFILE}) - endif() - # Create command-line definitions for the requested variables - set(_extra_var_defines) - foreach(_var ${ARG_EXTRA_VARS}) - list(APPEND _extra_var_defines -D "${_var}=${${_var}}") - endforeach() - # The touch command is necessary to ensure that after the target is run, - # the timestamp is newer than in the input files. - add_custom_command(OUTPUT ${OUTFILE} - COMMAND ${CMAKE_COMMAND} - -D VERSION_VARIABLES=${VERSION_INFO_CMAKE_FILE} - -D VERSION_CMAKEIN=${INFILE} - -D VERSION_OUT=${OUTFILE} - ${_extra_var_defines} - -P ${VERSION_INFO_CONFIGURE_SCRIPT} - COMMAND ${CMAKE_COMMAND} -E touch ${OUTFILE} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - DEPENDS ${INFILE} ${VERSION_INFO_DEPS} ${VERSION_INFO_CONFIGURE_SCRIPT} - COMMENT "${_comment}" - VERBATIM) - if (ARG_TARGET) - add_custom_target(${ARG_TARGET} DEPENDS ${OUTFILE} VERBATIM) - gmx_set_custom_target_output(${ARG_TARGET} ${OUTFILE}) - endif() -endfunction()