You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

83 lines
3.3 KiB

# 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)
message(WARNING "include/Version.cmake: Can't find lsb_release in your path. Setting DISTRO_CODENAME to unknown.")
set(DISTRO_CODENAME unknown)
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(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 (uncommited 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} log -n 1 --pretty=format:"%h" HEAD
OUTPUT_VARIABLE HASH
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
string(REPLACE "\"" "" HASH ${HASH})
if(status_code)
string(CONCAT HASH ${HASH} "-dirty")
endif()
# get HEAD commit date
execute_process(COMMAND ${GIT_EXECUTABLE} log -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 "nogitfound")
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()