mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
93 lines
3.8 KiB
CMake
93 lines
3.8 KiB
CMake
# - Write version information into the source code
|
|
#
|
|
# Add an unconditional target to the Makefile which checks the current
|
|
# SHA of the source directory and write to a header file if and *only*
|
|
# if this has changed (thus we avoid unnecessary rebuilds). By having
|
|
# this in the Makefile, we get updated version information even though
|
|
# we haven't done any reconfiguring.
|
|
#
|
|
# The time it takes to probe the VCS for this information and write it
|
|
# to the miniature file in negligable.
|
|
#
|
|
# If the build type is Debug, then we only write a static version
|
|
# information as it gets tiresome to rebuild the project everytime one
|
|
# makes changes to any of the unit tests.
|
|
|
|
string (TOUPPER "${CMAKE_BUILD_TYPE}" cmake_build_type_upper_)
|
|
if (cmake_build_type_upper_ MATCHES DEBUG)
|
|
file (WRITE "${PROJECT_BINARY_DIR}/project-version.h"
|
|
"#define PROJECT_VERSION \"${${project}_LABEL} (debug)\"\n"
|
|
)
|
|
else ()
|
|
if (NOT GIT_FOUND)
|
|
find_package (Git)
|
|
endif ()
|
|
|
|
# if git is *still* not found means it is not present on the
|
|
# system, so there is "no" way we can update the SHA. notice
|
|
# that this is a slightly different version of the label than
|
|
# above.
|
|
if (NOT GIT_FOUND)
|
|
file (WRITE "${PROJECT_BINARY_DIR}/project-version.h"
|
|
"#define PROJECT_VERSION \"${${project}_LABEL}\"\n"
|
|
)
|
|
else ()
|
|
add_custom_target (update-version ALL
|
|
COMMAND ${CMAKE_COMMAND}
|
|
-DCMAKE_HOME_DIRECTORY=${CMAKE_HOME_DIRECTORY}
|
|
-DGIT_EXECUTABLE=${GIT_EXECUTABLE}
|
|
-DPROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR}
|
|
-DPROJECT_BINARY_DIR=${PROJECT_BINARY_DIR}
|
|
-DPROJECT_LABEL=${${project}_LABEL}
|
|
-P ${PROJECT_SOURCE_DIR}/cmake/Scripts/WriteVerSHA.cmake
|
|
COMMENT "Updating version information"
|
|
)
|
|
|
|
# the target above gets built every time thanks to the "ALL" modifier,
|
|
# but it must also be done before the main library so it can pick up
|
|
# any changes it does.
|
|
if (${project}_TARGET)
|
|
add_dependencies (${${project}_TARGET} update-version)
|
|
endif ()
|
|
endif ()
|
|
endif ()
|
|
|
|
# safety precaution: check that we don't have version number mismatch.
|
|
|
|
# first get the name of the module (e.g. "core")
|
|
set (_module_regexp "([^-]+)-(.*)")
|
|
string (REGEX REPLACE "${_module_regexp}" "\\1" _suite_name "${project}")
|
|
string (REGEX REPLACE "${_module_regexp}" "\\2" _module_name "${project}")
|
|
|
|
# if we have a version number it must be in this file, e.g. opm/core/version.h
|
|
set (_rel_ver_h "${${project}_DIR}/${_module_name}/version.h")
|
|
set (_version_h "${PROJECT_SOURCE_DIR}/${_rel_ver_h}")
|
|
|
|
# not all modules have version files, so only check if they do
|
|
if (EXISTS "${_version_h}")
|
|
# uppercase versions which is used in the file
|
|
string (TOUPPER "${_suite_name}" _suite_upper)
|
|
string (TOUPPER "${_module_name}" _module_upper)
|
|
|
|
# scan the files for version define for major version
|
|
set (_major_regexp "#define[ ]+${_suite_upper}_${_module_upper}_VERSION_MAJOR[ ]+([0-9]*)")
|
|
file (STRINGS "${_version_h}" _version_h_major REGEX "${_major_regexp}")
|
|
string (REGEX REPLACE "${_major_regexp}" "\\1" _version_h_major "${_version_h_major}")
|
|
|
|
# exactly the same, but minor version (making a macro is more lines...)
|
|
set (_minor_regexp "#define[ ]+${_suite_upper}_${_module_upper}_VERSION_MINOR[ ]+([0-9]*)")
|
|
file (STRINGS "${_version_h}" _version_h_minor REGEX "${_minor_regexp}")
|
|
string (REGEX REPLACE "${_minor_regexp}" "\\1" _version_h_minor "${_version_h_minor}")
|
|
|
|
# compare what we got from the file with what we have defined here
|
|
if (NOT (("${_version_h_major}" EQUAL "${${project}_VERSION_MAJOR}")
|
|
AND ("${_version_h_minor}" EQUAL "${${project}_VERSION_MINOR}")))
|
|
set (_proj_ver "${${project}_VERSION_MAJOR}.${${project}_VERSION_MINOR}")
|
|
set (_file_ver "${_version_h_major}.${_version_h_minor}")
|
|
message (AUTHOR_WARNING
|
|
"Version in build system (dune.module) is \"${_proj_ver}\", "
|
|
"but version in source (${_rel_ver_h}) is \"${_file_ver}\""
|
|
)
|
|
endif ()
|
|
endif ()
|