From e59d3260b973da71d98f00892f7534d1e7f13541 Mon Sep 17 00:00:00 2001
From: Fabian Sauter <sauter.fabian@mailbox.org>
Date: Sun, 22 Sep 2024 13:10:01 +0200
Subject: [PATCH] Setting deb version based on CMake version

---
 .github/workflows/build-deb.yml | 10 ++++++++--
 CMakeLists.txt                  |  8 ++++++++
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/build-deb.yml b/.github/workflows/build-deb.yml
index 56794b2a6..2b7627022 100644
--- a/.github/workflows/build-deb.yml
+++ b/.github/workflows/build-deb.yml
@@ -26,13 +26,19 @@ jobs:
       run: sudo apt install -y libssl-dev libcurl4-openssl-dev
     - name: "Install building tools"
       run: sudo apt install -y cmake debmake devscripts debhelper
-
+      # Set version number
     - name: Set version based on input
       if: ${{ inputs.version }}
       run: echo "RELEASE_VERSION=${{ inputs.version }}" >> "$GITHUB_ENV"
     - name: Set version based on ref
       if: ${{ !inputs.version }}
-      run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> "$GITHUB_ENV"
+      run: |
+        mkdir -p cpr/build
+        pushd cpr/build
+        cmake .. -DCPR_BUILD_VERSION_OUTPUT_ONLY=ON
+        echo "RELEASE_VERSION=$(cat version.txt)" >> $GITHUB_ENV
+        popd
+        rm -rf cpr/build
     - name: Print Version
       run: echo "deb version will be '${{ env.RELEASE_VERSION }}'"
       # Build package of runtime library
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ea6991f77..7d2d83941 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -66,6 +66,7 @@ cpr_option(CPR_ENABLE_CPPCHECK "Set to ON to enable Cppcheck static analysis. Re
 cpr_option(CPR_BUILD_TESTS "Set to ON to build cpr tests." OFF)
 cpr_option(CPR_BUILD_TESTS_SSL "Set to ON to build cpr ssl tests" ${CPR_BUILD_TESTS})
 cpr_option(CPR_BUILD_TESTS_PROXY "Set to ON to build proxy tests. They fail in case there is no valid proxy server available in proxy_tests.cpp" OFF)
+cpr_option(CPR_BUILD_VERSION_OUTPUT_ONLY "Set to ON to only export the version into 'build/version.txt' and exit" OFF)
 cpr_option(CPR_SKIP_CA_BUNDLE_SEARCH "Skip searching for Certificate Authority certs. Turn ON for systems like iOS where file access is restricted and prevents https from working." OFF)
 cpr_option(CPR_USE_BOOST_FILESYSTEM "Set to ON to use the Boost.Filesystem library. This is useful, on, e.g., Apple platforms, where std::filesystem may not always be available when targeting older OS versions." OFF)
 cpr_option(CPR_DEBUG_SANITIZER_FLAG_THREAD "Enables the ThreadSanitizer for debug builds." OFF)
@@ -75,6 +76,13 @@ cpr_option(CPR_DEBUG_SANITIZER_FLAG_UB "Enables the UndefinedBehaviorSanitizer f
 cpr_option(CPR_DEBUG_SANITIZER_FLAG_ALL "Enables all sanitizers for debug builds except the ThreadSanitizer since it is incompatible with the other sanitizers." OFF)
 message(STATUS "=======================================================")
 
+# Save the project version as txt file for deb and NuGet builds
+if(CPR_BUILD_VERSION_OUTPUT_ONLY)
+    message(STATUS "Printing version and exiting...")
+    file(WRITE "${CMAKE_BINARY_DIR}/version.txt" "${PROJECT_VERSION}")
+    return()
+endif()
+
 if (CPR_FORCE_USE_SYSTEM_CURL)
     message(WARNING "The variable CPR_FORCE_USE_SYSTEM_CURL is deprecated, please use CPR_USE_SYSTEM_CURL instead")
     set(CPR_USE_SYSTEM_CURL ${CPR_FORCE_USE_SYSTEM_CURL})