1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
# Adopted from https://github.com/xbmc/xbmc
# Distro name and codename
if(NOT DISTRO_CODENAME)
find_program(LSB_RELEASE_CMD lsb_release)
if(NOT LSB_RELEASE_CMD)
if (WIN32)
set (DISTRO_CODENAME "Windows")
else ()
message(WARNING "include/Version.cmake: Can't find lsb_release in your path. Setting DISTRO_CODENAME to unknown.")
set(DISTRO_CODENAME unknown)
endif ()
else()
execute_process(COMMAND ${LSB_RELEASE_CMD} -cs
OUTPUT_VARIABLE DISTRO_CODENAME
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND ${LSB_RELEASE_CMD} -is
OUTPUT_VARIABLE DISTRO_NAME
OUTPUT_STRIP_TRAILING_WHITESPACE)
endif()
endif()
# Parses git info and sets variables used to identify the build
# Arguments:
# stamp variable name to return
# Optional Arguments:
# FULL: generate git HEAD commit in the form of 'YYYYMMDD-hash'
# if git tree is dirty, value is set in the form of 'YYYYMMDD-hash-dirty'
# if no git tree is found, value is set in the form of 'YYYYMMDD-nogitfound'
# if FULL is not given, stamp is generated following the same process as above
# but without 'YYYYMMDD'
# On return:
# Variable is set with generated stamp to PARENT_SCOPE
function(core_find_git_rev stamp)
# allow manual setting GIT_VERSION
if(DEFINED GIT_VERSION)
set(${stamp} ${GIT_VERSION} PARENT_SCOPE)
else()
find_package(Git)
if(GIT_FOUND AND EXISTS ${CMAKE_SOURCE_DIR}/.git)
# get tree status i.e. clean working tree vs dirty (uncommitted or unstashed changes, etc.)
execute_process(COMMAND ${GIT_EXECUTABLE} update-index --ignore-submodules -q --refresh
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
execute_process(COMMAND ${GIT_EXECUTABLE} diff-files --ignore-submodules --quiet --
RESULT_VARIABLE status_code
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
if(NOT status_code)
execute_process(COMMAND ${GIT_EXECUTABLE} diff-index --ignore-submodules --quiet HEAD --
RESULT_VARIABLE status_code
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
endif()
# get HEAD commit SHA-1
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --short=8 HEAD
OUTPUT_VARIABLE HASH
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
string(REPLACE "\"" "" HASH ${HASH})
string(STRIP ${HASH} HASH)
if(status_code)
string(CONCAT HASH ${HASH} "-dirty")
endif()
message(${HASH})
# get HEAD commit date
execute_process(COMMAND ${GIT_EXECUTABLE} log --no-show-signature -1 --pretty=format:"%cd" --date=short HEAD
OUTPUT_VARIABLE DATE
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
string(REPLACE "\"" "" DATE ${DATE})
string(REPLACE "-" "" DATE ${DATE})
else()
if(EXISTS ${CMAKE_SOURCE_DIR}/BUILDDATE)
file(STRINGS ${CMAKE_SOURCE_DIR}/BUILDDATE DATE LIMIT_INPUT 8)
else()
string(TIMESTAMP DATE "%Y%m%d" UTC)
endif()
if(EXISTS ${CMAKE_SOURCE_DIR}/VERSION)
file(STRINGS ${CMAKE_SOURCE_DIR}/VERSION HASH LIMIT_INPUT 16)
else()
set(HASH "")
endif()
endif()
cmake_parse_arguments(arg "FULL" "" "" ${ARGN})
if(arg_FULL)
set(${stamp} ${DATE}-${HASH} PARENT_SCOPE)
else()
set(${stamp} ${HASH} PARENT_SCOPE)
endif()
endif()
endfunction()
|