From 40920f3ec35a37c41c9236bdc943c2d88ca1527b Mon Sep 17 00:00:00 2001 From: "Kirill A. Korinsky" Date: Wed, 7 Dec 2022 02:55:27 +0100 Subject: [PATCH] Prevent creating malformed version Let assume that I run a cmake with option `-DNETGEN_VERSION_GIT="v6.2.2204"` (or without this option at all) to avoid calling `git` which won't work when I've downloaded sources from GitHub as `.zip` file. If I try to compile sources and run it, it fails with error like: ``` libc++abi: terminating with uncaught exception of type std::invalid_argument: stoi: no conversion ``` after some digging I've discovered that `netgen_version.hpp` looks like: ``` #ifndef NETGEN_VERSION_HPP_INCLUDED #define NETGEN_VERSION_HPP_INCLUDED #define NETGEN_VERSION "6.2.0-v6.2.0.0-v6.2.0.0" #define NETGEN_VERSION_MAJOR 6 #define NETGEN_VERSION_MINOR 2 #define NETGEN_VERSION_PATCH 0 #define NETGEN_VERSION_TWEAK v6.2.0.0 #define NETGEN_VERSION_HASH "v6.2.0.0" #endif // NETGEN_VERSION_HPP_INCLUDED ``` This is happened because `string(REGEX REPLACE` copied original string to target and replaces it by regex. If regex doesn't match => it still copied an original value. So, this commit prevented this mess from happened. --- cmake/generate_version_file.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/generate_version_file.cmake b/cmake/generate_version_file.cmake index c4a579d1..c47b6039 100644 --- a/cmake/generate_version_file.cmake +++ b/cmake/generate_version_file.cmake @@ -39,7 +39,7 @@ string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.[0-9]+\\-[0-9]+\\-([0-9a-z]+).*" "\\1" set(NETGEN_VERSION_SHORT ${NETGEN_VERSION_MAJOR}.${NETGEN_VERSION_MINOR}.${NETGEN_VERSION_PATCH}) set(NETGEN_VERSION_LONG ${NETGEN_VERSION_SHORT}-${NETGEN_VERSION_TWEAK}-${NETGEN_VERSION_HASH}) -if(NETGEN_VERSION_TWEAK) +if(NETGEN_VERSION_TWEAK AND NOT NETGEN_VERSION_TWEAK STREQUAL git_version_string) # no release version - nightly build set(NETGEN_VERSION ${NETGEN_VERSION_LONG}) else()