mirror of
https://github.com/Michele-M-Media/HYPERHEN.git
synced 2026-10-22 08:32:20 -05:00
84 lines
2.4 KiB
CMake
84 lines
2.4 KiB
CMake
if(NOT DEFINED REPO_ROOT OR NOT DEFINED OUTPUT_FILE)
|
|
message(FATAL_ERROR "REPO_ROOT and OUTPUT_FILE are required")
|
|
endif()
|
|
|
|
find_program(GIT_EXECUTABLE git)
|
|
|
|
set(_git_tag "")
|
|
set(_git_sha "unknown")
|
|
set(_tag_result 1)
|
|
|
|
if(GIT_EXECUTABLE)
|
|
execute_process(
|
|
COMMAND "${GIT_EXECUTABLE}" -C "${REPO_ROOT}" describe --tags
|
|
--exact-match HEAD
|
|
RESULT_VARIABLE _tag_result
|
|
OUTPUT_VARIABLE _git_tag
|
|
ERROR_QUIET
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
execute_process(
|
|
COMMAND "${GIT_EXECUTABLE}" -C "${REPO_ROOT}" rev-parse --short=4 HEAD
|
|
RESULT_VARIABLE _sha_result
|
|
OUTPUT_VARIABLE _git_sha
|
|
ERROR_QUIET
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
if(NOT _sha_result EQUAL 0 OR _git_sha STREQUAL "")
|
|
set(_git_sha "unknown")
|
|
endif()
|
|
endif()
|
|
|
|
set(_snapshot_version "")
|
|
if(EXISTS "${REPO_ROOT}/VERSION")
|
|
file(STRINGS "${REPO_ROOT}/VERSION" _snapshot_version LIMIT_COUNT 1)
|
|
string(STRIP "${_snapshot_version}" _snapshot_version)
|
|
endif()
|
|
|
|
# VERSION is the public product version and must stay stable in notifications
|
|
# and Toolbox pages even while a release is assembled from a dirty worktree.
|
|
# Git metadata belongs in build logs, not in the user-facing brand string.
|
|
if(NOT _snapshot_version STREQUAL "")
|
|
if(_snapshot_version MATCHES "^[vV]")
|
|
set(_version "${_snapshot_version}")
|
|
else()
|
|
set(_version "v${_snapshot_version}")
|
|
endif()
|
|
elseif(_tag_result EQUAL 0 AND NOT _git_tag STREQUAL "")
|
|
if(_git_tag MATCHES "^[vV]")
|
|
set(_version "${_git_tag}")
|
|
else()
|
|
set(_version "v${_git_tag}")
|
|
endif()
|
|
elseif(NOT _git_sha STREQUAL "unknown")
|
|
set(_version "dev-${_git_sha}")
|
|
else()
|
|
set(_version "dev")
|
|
endif()
|
|
|
|
# Keep the generated value safe inside both a C string and notification JSON.
|
|
string(REGEX REPLACE "[^A-Za-z0-9._+-]" "-" _version "${_version}")
|
|
|
|
string(CONCAT _contents
|
|
"#pragma once\n\n"
|
|
"/* Generated at build time. Do not edit. */\n"
|
|
"#define HYPERHEN_VERSION \"${_version}\"\n"
|
|
"#define HYPERHEN_AUTHOR \"MICHELE MEDIA\"\n")
|
|
|
|
get_filename_component(_output_dir "${OUTPUT_FILE}" DIRECTORY)
|
|
file(MAKE_DIRECTORY "${_output_dir}")
|
|
|
|
set(_write_header TRUE)
|
|
if(EXISTS "${OUTPUT_FILE}")
|
|
file(READ "${OUTPUT_FILE}" _existing_contents)
|
|
if(_existing_contents STREQUAL _contents)
|
|
set(_write_header FALSE)
|
|
endif()
|
|
endif()
|
|
|
|
if(_write_header)
|
|
file(WRITE "${OUTPUT_FILE}" "${_contents}")
|
|
endif()
|
|
|
|
message(STATUS "HyperHEN version: ${_version}")
|