libbpg/x265/source/cmake/version.cmake
2015-10-27 11:46:00 +01:00

90 lines
3 KiB
CMake

if(CMAKE_VERSION VERSION_LESS "2.8.10")
find_program(HG_EXECUTABLE hg)
else()
find_package(Hg QUIET)
endif()
find_package(Git QUIET) # present in 2.8.8
# defaults, in case everything below fails
set(X265_VERSION "unknown")
set(X265_LATEST_TAG "0.0")
set(X265_TAG_DISTANCE "0")
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../.hg_archival.txt)
# read the lines of the archive summary file to extract the version
file(READ ${CMAKE_CURRENT_SOURCE_DIR}/../.hg_archival.txt archive)
STRING(REGEX REPLACE "\n" ";" archive "${archive}")
foreach(f ${archive})
string(FIND "${f}" ": " pos)
string(SUBSTRING "${f}" 0 ${pos} key)
string(SUBSTRING "${f}" ${pos} -1 value)
string(SUBSTRING "${value}" 2 -1 value)
set(hg_${key} ${value})
endforeach()
if(DEFINED hg_tag)
set(X265_VERSION ${hg_tag})
set(X265_LATEST_TAG ${hg_tag})
set(X265_TAG_DISTANCE "0")
elseif(DEFINED hg_node)
string(SUBSTRING "${hg_node}" 0 16 hg_id)
set(X265_VERSION "${hg_latesttag}+${hg_latesttagdistance}-${hg_id}")
endif()
elseif(HG_EXECUTABLE AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../.hg)
if(EXISTS "${HG_EXECUTABLE}.bat")
# mercurial source installs on Windows require .bat extension
set(HG_EXECUTABLE "${HG_EXECUTABLE}.bat")
endif()
message(STATUS "hg found at ${HG_EXECUTABLE}")
execute_process(COMMAND
${HG_EXECUTABLE} log -r. --template "{latesttag}"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE X265_LATEST_TAG
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
execute_process(COMMAND
${HG_EXECUTABLE} log -r. --template "{latesttagdistance}"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE X265_TAG_DISTANCE
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
execute_process(
COMMAND
${HG_EXECUTABLE} log -r. --template "{node|short}"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE HG_REVISION_ID
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(X265_LATEST_TAG MATCHES "^r")
string(SUBSTRING ${X265_LATEST_TAG} 1 -1 X265_LATEST_TAG)
endif()
if(X265_TAG_DISTANCE STREQUAL "0")
set(X265_VERSION "${X265_LATEST_TAG}")
else()
set(X265_VERSION "${X265_LATEST_TAG}+${X265_TAG_DISTANCE}-${HG_REVISION_ID}")
endif()
elseif(GIT_EXECUTABLE AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../.git)
execute_process(
COMMAND
${GIT_EXECUTABLE} describe --tags --abbrev=0
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE X265_LATEST_TAG
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
execute_process(
COMMAND
${GIT_EXECUTABLE} describe --tags
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE X265_VERSION
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
endif()
message(STATUS "x265 version ${X265_VERSION}")