Some checks failed
eden-license / license-header (pull_request) Failing after 24s
Signed-off-by: crueter <crueter@eden-emu.dev>
80 lines
2 KiB
CMake
80 lines
2 KiB
CMake
# SPDX-FileCopyrightText: 2025 crueter
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
# loosely based on Ryan Pavlik's work
|
|
find_package(Git QUIET)
|
|
|
|
# commit: git rev-parse HEAD
|
|
# tag: git describe --tags --abbrev=0
|
|
# branch: git rev-parse --abbrev-ref=HEAD
|
|
|
|
function(run_git_command variable)
|
|
if(NOT GIT_FOUND)
|
|
set(${variable} "GIT-NOTFOUND" PARENT_SCOPE)
|
|
return()
|
|
endif()
|
|
|
|
execute_process(COMMAND
|
|
"${GIT_EXECUTABLE}"
|
|
${ARGN}
|
|
WORKING_DIRECTORY
|
|
"${CMAKE_SOURCE_DIR}"
|
|
RESULT_VARIABLE
|
|
res
|
|
OUTPUT_VARIABLE
|
|
out
|
|
ERROR_QUIET
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
|
if(NOT res EQUAL 0)
|
|
set(out "${out}-${res}-NOTFOUND")
|
|
endif()
|
|
|
|
set(${variable} "${out}" PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
function(trim var)
|
|
string(REGEX REPLACE "\n" "" new "${${var}}")
|
|
set(${var} ${new} PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
set(TAG_FILE ${CMAKE_SOURCE_DIR}/GIT-TAG)
|
|
set(REF_FILE ${CMAKE_SOURCE_DIR}/GIT-REFSPEC)
|
|
set(COMMIT_FILE ${CMAKE_SOURCE_DIR}/GIT-COMMIT)
|
|
set(RELEASE_FILE ${CMAKE_SOURCE_DIR}/GIT-RELEASE)
|
|
|
|
if (EXISTS ${REF_FILE} AND EXISTS ${COMMIT_FILE})
|
|
file(READ ${REF_FILE} GIT_REFSPEC)
|
|
file(READ ${COMMIT_FILE} GIT_COMMIT)
|
|
else()
|
|
run_git_command(GIT_COMMIT rev-parse HEAD)
|
|
run_git_command(GIT_REFSPEC rev-parse --abbrev-ref HEAD)
|
|
|
|
if (GIT_REFSPEC MATCHES "NOTFOUND")
|
|
set(GIT_REFSPEC 1.0.0)
|
|
set(GIT_COMMIT stable)
|
|
endif()
|
|
endif()
|
|
|
|
if (EXISTS ${TAG_FILE})
|
|
file(READ ${TAG_FILE} GIT_TAG)
|
|
else()
|
|
run_git_command(GIT_TAG describe --tags --abbrev=0)
|
|
if (GIT_TAG MATCHES "NOTFOUND")
|
|
set(GIT_TAG "${GIT_REFSPEC}")
|
|
endif()
|
|
endif()
|
|
|
|
if (EXISTS ${RELEASE_FILE})
|
|
file(READ ${RELEASE_FILE} GIT_RELEASE)
|
|
trim(GIT_RELEASE)
|
|
message(STATUS "[GetSCMRev] Git release: ${GIT_RELEASE}")
|
|
endif()
|
|
|
|
trim(GIT_REFSPEC)
|
|
trim(GIT_COMMIT)
|
|
trim(GIT_TAG)
|
|
|
|
message(STATUS "[GetSCMRev] Git commit: ${GIT_COMMIT}")
|
|
message(STATUS "[GetSCMRev] Git tag: ${GIT_TAG}")
|
|
message(STATUS "[GetSCMRev] Git refspec: ${GIT_REFSPEC}")
|