mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Import CMake support from OPM-Core
This commit is contained in:
102
cmake/Modules/UseVCSInfo.cmake
Normal file
102
cmake/Modules/UseVCSInfo.cmake
Normal file
@@ -0,0 +1,102 @@
|
||||
# - Get version control information from source tree
|
||||
#
|
||||
# Sets the following variables
|
||||
#
|
||||
# VCS_SYSTEM Currently, this will only be "git", or empty if
|
||||
# no source code control system is found.
|
||||
#
|
||||
# VCS_SHA1 Hash code of the last commit. If this is empty,
|
||||
# then no source code repository was found.
|
||||
#
|
||||
# VCS_DECOR Characters that denotes any local modifications:
|
||||
# "*" - Unstaged local changes
|
||||
# "+" - Staged, but not committed, local changes
|
||||
# "%" - Untracked local files
|
||||
function (vcs_info)
|
||||
# if we haven't located git yet, then do it now
|
||||
if (NOT GIT_FOUND)
|
||||
find_package (Git)
|
||||
endif (NOT GIT_FOUND)
|
||||
|
||||
# if git is not installed (unpacked tarball), then just state that
|
||||
# the version practically is unknown
|
||||
set (VCS_DECOR "")
|
||||
if (GIT_FOUND)
|
||||
set (VCS_SYSTEM "git")
|
||||
|
||||
# assume that we have a .git subdirectory under the source directory;
|
||||
# if we have a bare repository, then we won't be able to build in there
|
||||
# and we won't be able to identify the git dir to use from only a work
|
||||
# tree, so we handle that like a regular unpacked tarball
|
||||
|
||||
# exec_program is used because execute_process is buggy on common
|
||||
# platforms (notable CMake 2.8.7 in Ubuntu Precise 12.04)
|
||||
|
||||
# get hash code
|
||||
exec_program (
|
||||
${GIT_EXECUTABLE} ${PROJECT_SOURCE_DIR}
|
||||
ARGS rev-parse --short --verify HEAD
|
||||
OUTPUT_VARIABLE VCS_SHA1
|
||||
RETURN_VALUE has_sha
|
||||
)
|
||||
|
||||
# exec_program mashes together output and error
|
||||
if (NOT ${has_sha} EQUAL 0)
|
||||
set (VCS_SHA1 "")
|
||||
endif (NOT ${has_sha} EQUAL 0)
|
||||
|
||||
# only proceed if we actually found a source tree in there
|
||||
if (VCS_SHA1)
|
||||
# check for unstaged local changes
|
||||
exec_program (
|
||||
${GIT_EXECUTABLE} ${PROJECT_SOURCE_DIR}
|
||||
ARGS diff --no-ext-diff --quiet --exit-code
|
||||
RETURN_VALUE dirty
|
||||
OUTPUT_VARIABLE _dummy
|
||||
)
|
||||
if (NOT ${dirty} EQUAL 0)
|
||||
list (APPEND VCS_DECOR "*")
|
||||
endif (NOT ${dirty} EQUAL 0)
|
||||
|
||||
# check for staged local changes
|
||||
exec_program (
|
||||
${GIT_EXECUTABLE} ${PROJECT_SOURCE_DIR}
|
||||
ARGS diff-index --no-ext-diff --cached --quiet --exit-code HEAD --
|
||||
RETURN_VALUE staged
|
||||
OUTPUT_VARIABLE _dummy
|
||||
)
|
||||
if (NOT ${staged} EQUAL 0)
|
||||
list (APPEND VCS_DECOR "+")
|
||||
endif (NOT ${staged} EQUAL 0)
|
||||
|
||||
# check for untracked files
|
||||
exec_program (
|
||||
${GIT_EXECUTABLE} ${PROJECT_SOURCE_DIR}
|
||||
ARGS ls-files --others --exclude-standard
|
||||
OUTPUT_VARIABLE untracked
|
||||
)
|
||||
if (untracked)
|
||||
list (APPEND VCS_DECOR "%")
|
||||
endif (untracked)
|
||||
|
||||
# convert list to regular string
|
||||
string (REPLACE ";" "" VCS_DECOR "${VCS_DECOR}")
|
||||
endif (VCS_SHA1)
|
||||
else (GIT_FOUND)
|
||||
set (VCS_SYSTEM "")
|
||||
set (VCS_SHA1 "")
|
||||
set (VCS_DECOR "")
|
||||
endif (GIT_FOUND)
|
||||
|
||||
# diagnostic output
|
||||
if (VCS_SYSTEM AND VCS_SHA1)
|
||||
message (STATUS "Source code repository: ${VCS_SYSTEM} ${VCS_SHA1}${VCS_DECOR}")
|
||||
else (VCS_SYSTEM AND VCS_SHA1)
|
||||
message (STATUS "Source code repository: not found!")
|
||||
endif (VCS_SYSTEM AND VCS_SHA1)
|
||||
|
||||
# export to parent context
|
||||
set (VCS_SYSTEM "${VCS_SYSTEM}" PARENT_SCOPE)
|
||||
set (VCS_SHA1 "${VCS_SHA1}" PARENT_SCOPE)
|
||||
set (VCS_DECOR "${VCS_DECOR}" PARENT_SCOPE)
|
||||
endfunction (vcs_info)
|
||||
Reference in New Issue
Block a user