From 81e11987a25ccb87b2ca89a9492d0465b486fb88 Mon Sep 17 00:00:00 2001 From: "Markus F.X.J. Oberhumer" Date: Wed, 2 Nov 2022 10:35:40 +0100 Subject: [PATCH] all: add UPX_VERSION_GIT_DESCRIBE --- CMakeLists.txt | 17 +++++++++++++++++ src/help.cpp | 10 ++++++---- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f10e37a1..339c141f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,6 +23,7 @@ endif() # determine git revision set(GITREV_SHORT "") set(GITREV_PLUS "") +set(GIT_DESCRIBE "") find_package(Git) if(GIT_FOUND AND NOT UPX_CONFIG_DISABLE_GITREV) execute_process( @@ -41,12 +42,25 @@ if(GIT_FOUND AND NOT UPX_CONFIG_DISABLE_GITREV) else() set(GITREV_SHORT "") endif() + execute_process( + RESULT_VARIABLE result + COMMAND "${GIT_EXECUTABLE}" describe --match "v*.*.*" --tags --dirty + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_VARIABLE GIT_DESCRIBE + ) + if(GIT_DESCRIBE MATCHES "^v?([0-9]+\\.[0-9]+\\.[0-9]+)-([0-9]+)-g(.+)$") + set(GIT_DESCRIBE "${CMAKE_MATCH_1}-devel.${CMAKE_MATCH_2}+git-${CMAKE_MATCH_3}") + endif() endif() if(NOT IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/.git") # extra check set(GITREV_SHORT "") endif() if(GITREV_SHORT) message(STATUS "UPX_VERSION_GITREV = \"${GITREV_SHORT}${GITREV_PLUS}\"") + if(GIT_DESCRIBE) + message(STATUS "UPX_VERSION_GIT_DESCRIBE = \"${GIT_DESCRIBE}\"") + endif() else() message(STATUS "UPX_VERSION_GITREV: not set") endif() @@ -142,6 +156,9 @@ target_include_directories(${t} PRIVATE vendor) target_compile_definitions(${t} PRIVATE $<$:DEBUG=1>) if(GITREV_SHORT) target_compile_definitions(${t} PRIVATE UPX_VERSION_GITREV="${GITREV_SHORT}${GITREV_PLUS}") + if(GIT_DESCRIBE) + target_compile_definitions(${t} PRIVATE UPX_VERSION_GIT_DESCRIBE="${GIT_DESCRIBE}") + endif() endif() if(NOT UPX_CONFIG_DISABLE_SANITIZE AND NOT MSVC) # default sanitizer for Debug builds diff --git a/src/help.cpp b/src/help.cpp index d8a641ee..7c9c0d9e 100644 --- a/src/help.cpp +++ b/src/help.cpp @@ -382,11 +382,13 @@ void show_version(bool one_line) FILE *fp = stdout; const char *v; - fprintf(fp, "upx %s\n", UPX_VERSION_STRING -#if defined(UPX_VERSION_GITREV) - "-git-" UPX_VERSION_GITREV +#if defined(UPX_VERSION_GIT_DESCRIBE) + fprintf(fp, "upx %s\n", UPX_VERSION_GIT_DESCRIBE); +#elif defined(UPX_VERSION_GITREV) + fprintf(fp, "upx %s\n", UPX_VERSION_STRING "-git-" UPX_VERSION_GITREV); +#else + fprintf(fp, "upx %s\n", UPX_VERSION_STRING); #endif - ); if (one_line) return; #if (WITH_NRV)