evmc/buildinfo/buildinfo.cmake
Paweł Bylica 6ee4682924 Squashed 'cmake/cable/' changes from 5fd6d89..caeabb3
caeabb3 CableBuildInfo: Specify gitinfo.txt byproduct
69a5abc CableBuildInfo: Remove broken debug logs
a5a1829 CableCompilerSettings: Enabled conversion warnings by default
0790aec README: Add section about git subtree
4056c71 Add the project name to every file
612d1b2 Add cxx11-c99 toolchain file

git-subtree-dir: cmake/cable
git-subtree-split: caeabb3a9f054f5c0b5076aa958968c42f7a5df4
2018-05-11 16:58:08 +02:00

63 lines
2.2 KiB
CMake

# Cable: CMake Bootstrap Library.
# Copyright 2018 Pawel Bylica.
# Licensed under the Apache License, Version 2.0. See the LICENSE file.
string(TOLOWER ${SYSTEM_NAME} SYSTEM_NAME)
string(TOLOWER ${SYSTEM_PROCESSOR} SYSTEM_PROCESSOR)
string(TOLOWER ${COMPILER_ID} COMPILER_ID)
string(TOLOWER ${BUILD_TYPE} BUILD_TYPE)
string(TIMESTAMP TIMESTAMP)
# Read the git info from a file. The gitinfo is suppose to update the file
# only if the information has changed.
file(READ ${BINARY_DIR}/gitinfo.txt GIT_INFO)
# The output of `git describe --always --long --tags --match=v*`.
string(REGEX MATCH "(v(.+)-([0-9]+)-g)?([0-9a-f]+)(-dirty)?" match "${GIT_INFO}")
if(NOT match)
message(WARNING "Cannot parse git describe: ${GIT_INFO}")
endif()
set(GIT_LATEST_PROJECT_VERSION ${CMAKE_MATCH_2})
set(GIT_LATEST_PROJECT_VERSION_DISTANCE ${CMAKE_MATCH_3})
set(GIT_COMMIT_HASH ${CMAKE_MATCH_4})
if(CMAKE_MATCH_5)
set(GIT_DIRTY TRUE)
set(dirty_msg " (dirty)")
else()
set(GIT_DIRTY FALSE)
endif()
if(GIT_COMMIT_HASH)
string(SUBSTRING ${GIT_COMMIT_HASH} 0 8 abbrev)
set(version_commit "+commit.${abbrev}")
if(GIT_DIRTY)
set(version_commit "${version_commit}.dirty")
endif()
endif()
if(${PROJECT_VERSION} STREQUAL "${GIT_LATEST_PROJECT_VERSION}")
if(${GIT_LATEST_PROJECT_VERSION_DISTANCE} GREATER 0)
set(PROJECT_VERSION "${PROJECT_VERSION}-${GIT_LATEST_PROJECT_VERSION_DISTANCE}${version_commit}")
endif()
else()
if(GIT_LATEST_PROJECT_VERSION)
message(WARNING "Git project version mismatch: '${GIT_LATEST_PROJECT_VERSION}' vs '${PROJECT_VERSION}'")
endif()
set(PROJECT_VERSION "${PROJECT_VERSION}${version_commit}")
endif()
message(
" Project Version: ${PROJECT_VERSION}\n"
" System Name: ${SYSTEM_NAME}\n"
" System Processor: ${SYSTEM_PROCESSOR}\n"
" Compiler ID: ${COMPILER_ID}\n"
" Compiler Version: ${COMPILER_VERSION}\n"
" Build Type: ${BUILD_TYPE}\n"
" Git Info: ${GIT_LATEST_PROJECT_VERSION} ${GIT_LATEST_PROJECT_VERSION_DISTANCE} ${GIT_COMMIT_HASH}${dirty_msg}\n"
" Timestamp: ${TIMESTAMP}"
)
configure_file(${CMAKE_CURRENT_LIST_DIR}/buildinfo.c.in ${BINARY_DIR}/${NAME}.c)