mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-20 11:48:25 -06:00
103 lines
3.1 KiB
CMake
103 lines
3.1 KiB
CMake
# - 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)
|