From 40ed7c3353f4e06ca39e03c019ccb2591adeb83a Mon Sep 17 00:00:00 2001 From: Christof Date: Sat, 1 Nov 2025 22:46:29 +0100 Subject: [PATCH 1/5] Extract the version calculation from git from the main CMake file, so the NixOS build can run after determining the version and removing the .git tree. --- .github/workflows/builds-ubuntu.yml | 3 ++- .github/workflows/builds-ubuntu24.yml | 3 ++- .github/workflows/builds-windows.yml | 3 ++- CMakeLists.txt | 6 ++++++ Makefile | 5 +++-- The-Orm/CMakeLists.txt | 13 +------------ cmake/calc_version.cmake | 12 ++++++++++++ {The-Orm => cmake}/gitversion.cmake | 0 8 files changed, 28 insertions(+), 17 deletions(-) create mode 100644 cmake/calc_version.cmake rename {The-Orm => cmake}/gitversion.cmake (100%) diff --git a/.github/workflows/builds-ubuntu.yml b/.github/workflows/builds-ubuntu.yml index fadebd4e..dc30d985 100644 --- a/.github/workflows/builds-ubuntu.yml +++ b/.github/workflows/builds-ubuntu.yml @@ -31,7 +31,8 @@ jobs: SENTRY_DSN: ${{ secrets.SENTRY_DSN }} shell: bash run: | - cmake -S . -B builds -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=off -DPYTHON_VERSION_TO_EMBED=3.12 -DSENTRY_CRASH_REPORTING=ON -DSENTRY_DSN=$SENTRY_DSN + export KNOBKRAFT_EXTERNAL_VERSION="$(cmake -P cmake/calc_version.cmake)" + cmake -S . -B builds -DKNOBKRAFT_EXTERNAL_VERSION=$KNOBKRAFT_EXTERNAL_VERSION -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=off -DPYTHON_VERSION_TO_EMBED=3.12 -DSENTRY_CRASH_REPORTING=ON -DSENTRY_DSN=$SENTRY_DSN - name: CMake build run: cmake --build builds --target package -- -j4 diff --git a/.github/workflows/builds-ubuntu24.yml b/.github/workflows/builds-ubuntu24.yml index 71a6131f..25fe35b3 100644 --- a/.github/workflows/builds-ubuntu24.yml +++ b/.github/workflows/builds-ubuntu24.yml @@ -39,7 +39,8 @@ jobs: SENTRY_DSN: ${{ secrets.SENTRY_DSN }} shell: bash run: | - CC=gcc-14 CXX=g++-14 cmake -S . -B builds -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=off -DPYTHON_VERSION_TO_EMBED=3.12 -DSENTRY_CRASH_REPORTING=ON -DSENTRY_DSN=$SENTRY_DSN + export KNOBKRAFT_EXTERNAL_VERSION="$(cmake -P cmake/calc_version.cmake)" + CC=gcc-14 CXX=g++-14 cmake -S . -B builds -DKNOBKRAFT_EXTERNAL_VERSION=$KNOBKRAFT_EXTERNAL_VERSION -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=off -DPYTHON_VERSION_TO_EMBED=3.12 -DSENTRY_CRASH_REPORTING=ON -DSENTRY_DSN=$SENTRY_DSN - name: CMake build run: | diff --git a/.github/workflows/builds-windows.yml b/.github/workflows/builds-windows.yml index 04f767a9..1d291011 100644 --- a/.github/workflows/builds-windows.yml +++ b/.github/workflows/builds-windows.yml @@ -48,7 +48,8 @@ jobs: SENTRY_DSN: ${{ secrets.SENTRY_DSN }} shell: bash run: | - cmake -S . -B Builds -G "Visual Studio 17 2022" -A x64 -DCRASH_REPORTING=ON -DSENTRY_DSN=$SENTRY_DSN -DSPARKLE_UPDATES=ON + export KNOBKRAFT_EXTERNAL_VERSION="$(cmake -P cmake/calc_version.cmake)" + cmake -S . -B Builds -G "Visual Studio 17 2022" -A x64 -DKNOBKRAFT_EXTERNAL_VERSION=$KNOBKRAFT_EXTERNAL_VERSION -DCRASH_REPORTING=ON -DSENTRY_DSN=$SENTRY_DSN -DSPARKLE_UPDATES=ON - name: Run Python tests first run: | diff --git a/CMakeLists.txt b/CMakeLists.txt index b98ab0ee..35ccf624 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,6 +39,12 @@ option(ASAN "Use Address Sanitization for Debug version (Windows only for now)" # Gin requests C++ 20. set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) +if(UNIX AND NOT APPLE) + # Linux settings allowing NixOs to be built + set(CMAKE_AR "gcc-ar") + set(CMAKE_CXX_ARCHIVE_CREATE " qcs ") + set(CMAKE_CXX_ARCHIVE_FINISH true +ENDIF() add_definitions(-D_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING) # To avoid dependency on WebKit. This also came with MacOS, but as webkit is heavyweight, it is probably a good idea to turn it off for all diff --git a/Makefile b/Makefile index 61c4ca9f..6fa4a942 100644 --- a/Makefile +++ b/Makefile @@ -34,8 +34,9 @@ all: configure build sign-dmg verify-signed apple: notarize staple verify-notarization configure: - @echo "Configuring build for type $(BUILD_TYPE) in directory $(BUILD_DIR), using Python from $(PYTHON_TO_USE)" - cmake -S . -B $(BUILD_DIR) -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DPYTHON_EXECUTABLE=$(PYTHON_TO_USE) -DCODESIGN_CERTIFICATE_NAME="$(APPLE_DEVELOPER_IDENTITY)" + export KNOBKRAFT_EXTERNAL_VERSION="$(cmake -P cmake/calc_version.cmake)" + @echo "Configuring build for type $(BUILD_TYPE) in directory $(BUILD_DIR), using Python from $(PYTHON_TO_USE). Version is $KNOBKRAFT_EXTERNAL_VERSION" + cmake -S . -B $(BUILD_DIR) -DKNOBKRAFT_EXTERNAL_VERSION=$KNOBKRAFT_EXTERNAL_VERSION -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DPYTHON_EXECUTABLE=$(PYTHON_TO_USE) -DCODESIGN_CERTIFICATE_NAME="$(APPLE_DEVELOPER_IDENTITY)" .PHONY: build build $(KNOBKRAFT_DMG): diff --git a/The-Orm/CMakeLists.txt b/The-Orm/CMakeLists.txt index 1c7186ed..0917766d 100644 --- a/The-Orm/CMakeLists.txt +++ b/The-Orm/CMakeLists.txt @@ -6,19 +6,8 @@ cmake_minimum_required(VERSION 3.14) -# Get the version from our sub cmakefile -execute_process( - COMMAND ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_LIST_DIR}/gitversion.cmake" - ERROR_VARIABLE PROJECT_VERSION - ERROR_STRIP_TRAILING_WHITESPACE -) -# Cleanup output -string(REGEX REPLACE "^[[:space:]]+|[[:space:]]+$" "" PROJECT_VERSION "${PROJECT_VERSION}") -string(REGEX REPLACE "\n$" "" PROJECT_VERSION "${PROJECT_VERSION}") -message(STATUS "Project version is '${PROJECT_VERSION}'") - # Start project -project(KnobKraftOrm VERSION ${PROJECT_VERSION}) +project(KnobKraftOrm VERSION ${KNOBKRAFT_EXTERNAL_VERSION}) # Now you can use PROJECT_DEV_TAG in your CMake scripts or in your code to handle the "-dev" part. # For example, you could add a preprocessor definition that your code could use: diff --git a/cmake/calc_version.cmake b/cmake/calc_version.cmake new file mode 100644 index 00000000..04f0bac9 --- /dev/null +++ b/cmake/calc_version.cmake @@ -0,0 +1,12 @@ +# Get the version from our sub cmakefile +execute_process( + COMMAND ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_LIST_DIR}/gitversion.cmake" + ERROR_VARIABLE PROJECT_VERSION + ERROR_STRIP_TRAILING_WHITESPACE +) + +# Cleanup output +string(REGEX REPLACE "^[[:space:]]+|[[:space:]]+$" "" PROJECT_VERSION "${PROJECT_VERSION}") +string(REGEX REPLACE "\n$" "" PROJECT_VERSION "${PROJECT_VERSION}") +message("${PROJECT_VERSION}") + diff --git a/The-Orm/gitversion.cmake b/cmake/gitversion.cmake similarity index 100% rename from The-Orm/gitversion.cmake rename to cmake/gitversion.cmake From da9d27f084eb180d6ab0858e9eb4a3e2f6609606 Mon Sep 17 00:00:00 2001 From: Christof Date: Sat, 1 Nov 2025 23:10:28 +0100 Subject: [PATCH 2/5] Fix syntax errors --- CMakeLists.txt | 2 +- Makefile | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 35ccf624..787eec8c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,7 +43,7 @@ if(UNIX AND NOT APPLE) # Linux settings allowing NixOs to be built set(CMAKE_AR "gcc-ar") set(CMAKE_CXX_ARCHIVE_CREATE " qcs ") - set(CMAKE_CXX_ARCHIVE_FINISH true + set(CMAKE_CXX_ARCHIVE_FINISH true) ENDIF() add_definitions(-D_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING) diff --git a/Makefile b/Makefile index 6fa4a942..9c16b96b 100644 --- a/Makefile +++ b/Makefile @@ -34,9 +34,9 @@ all: configure build sign-dmg verify-signed apple: notarize staple verify-notarization configure: - export KNOBKRAFT_EXTERNAL_VERSION="$(cmake -P cmake/calc_version.cmake)" - @echo "Configuring build for type $(BUILD_TYPE) in directory $(BUILD_DIR), using Python from $(PYTHON_TO_USE). Version is $KNOBKRAFT_EXTERNAL_VERSION" - cmake -S . -B $(BUILD_DIR) -DKNOBKRAFT_EXTERNAL_VERSION=$KNOBKRAFT_EXTERNAL_VERSION -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DPYTHON_EXECUTABLE=$(PYTHON_TO_USE) -DCODESIGN_CERTIFICATE_NAME="$(APPLE_DEVELOPER_IDENTITY)" + export KNOBKRAFT_EXTERNAL_VERSION="$(cmake -P cmake/calc_version.cmake)" + @echo "Configuring build for type $(BUILD_TYPE) in directory $(BUILD_DIR), using Python from $(PYTHON_TO_USE). Version is $KNOBKRAFT_EXTERNAL_VERSION" + cmake -S . -B $(BUILD_DIR) -DKNOBKRAFT_EXTERNAL_VERSION=$KNOBKRAFT_EXTERNAL_VERSION -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DPYTHON_EXECUTABLE=$(PYTHON_TO_USE) -DCODESIGN_CERTIFICATE_NAME="$(APPLE_DEVELOPER_IDENTITY)" .PHONY: build build $(KNOBKRAFT_DMG): From 305a0ae40c251f68ede9b948635a912c3bb1f2e4 Mon Sep 17 00:00:00 2001 From: Christof Date: Sat, 1 Nov 2025 23:14:21 +0100 Subject: [PATCH 3/5] Using the wrong editor for a Makefile can make you look stupid --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 9c16b96b..d1944e5c 100644 --- a/Makefile +++ b/Makefile @@ -34,9 +34,9 @@ all: configure build sign-dmg verify-signed apple: notarize staple verify-notarization configure: - export KNOBKRAFT_EXTERNAL_VERSION="$(cmake -P cmake/calc_version.cmake)" - @echo "Configuring build for type $(BUILD_TYPE) in directory $(BUILD_DIR), using Python from $(PYTHON_TO_USE). Version is $KNOBKRAFT_EXTERNAL_VERSION" - cmake -S . -B $(BUILD_DIR) -DKNOBKRAFT_EXTERNAL_VERSION=$KNOBKRAFT_EXTERNAL_VERSION -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DPYTHON_EXECUTABLE=$(PYTHON_TO_USE) -DCODESIGN_CERTIFICATE_NAME="$(APPLE_DEVELOPER_IDENTITY)" + export KNOBKRAFT_EXTERNAL_VERSION="$(cmake -P cmake/calc_version.cmake)" + @echo "Configuring build for type $(BUILD_TYPE) in directory $(BUILD_DIR), using Python from $(PYTHON_TO_USE). Version is $KNOBKRAFT_EXTERNAL_VERSION" + cmake -S . -B $(BUILD_DIR) -DKNOBKRAFT_EXTERNAL_VERSION=$KNOBKRAFT_EXTERNAL_VERSION -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DPYTHON_EXECUTABLE=$(PYTHON_TO_USE) -DCODESIGN_CERTIFICATE_NAME="$(APPLE_DEVELOPER_IDENTITY)" .PHONY: build build $(KNOBKRAFT_DMG): From c294a1c97e7c2089d3f21d9489a8fdcb6969408c Mon Sep 17 00:00:00 2001 From: Christof Date: Sat, 1 Nov 2025 23:18:38 +0100 Subject: [PATCH 4/5] Fix version calculation script --- cmake/calc_version.cmake | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/cmake/calc_version.cmake b/cmake/calc_version.cmake index 04f0bac9..0de4f34e 100644 --- a/cmake/calc_version.cmake +++ b/cmake/calc_version.cmake @@ -1,12 +1,31 @@ # Get the version from our sub cmakefile execute_process( COMMAND ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_LIST_DIR}/gitversion.cmake" - ERROR_VARIABLE PROJECT_VERSION + OUTPUT_VARIABLE PROJECT_VERSION + ERROR_VARIABLE PROJECT_VERSION_ERROR + RESULT_VARIABLE PROJECT_VERSION_RESULT + OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE ) -# Cleanup output +if(NOT PROJECT_VERSION_RESULT EQUAL 0) + if(PROJECT_VERSION_ERROR) + message(FATAL_ERROR "Version calculation failed: ${PROJECT_VERSION_ERROR}") + else() + message(FATAL_ERROR "Version calculation failed with exit code ${PROJECT_VERSION_RESULT}") + endif() +endif() + +# Strip CMake's status prefix and surrounding whitespace +string(REGEX REPLACE "^--[ \t]*" "" PROJECT_VERSION "${PROJECT_VERSION}") string(REGEX REPLACE "^[[:space:]]+|[[:space:]]+$" "" PROJECT_VERSION "${PROJECT_VERSION}") -string(REGEX REPLACE "\n$" "" PROJECT_VERSION "${PROJECT_VERSION}") -message("${PROJECT_VERSION}") + +if(PROJECT_VERSION STREQUAL "") + message(FATAL_ERROR "Version calculation returned an empty string") +endif() + +# Emit plain text so shell captures are clean +execute_process( + COMMAND ${CMAKE_COMMAND} -E echo "${PROJECT_VERSION}" +) From ca7d0efca5f4cfaa8385084c6656b64035ccf992 Mon Sep 17 00:00:00 2001 From: Christof Date: Sat, 1 Nov 2025 23:26:55 +0100 Subject: [PATCH 5/5] More parsing goodies? --- cmake/calc_version.cmake | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cmake/calc_version.cmake b/cmake/calc_version.cmake index 0de4f34e..96119e61 100644 --- a/cmake/calc_version.cmake +++ b/cmake/calc_version.cmake @@ -17,7 +17,9 @@ if(NOT PROJECT_VERSION_RESULT EQUAL 0) endif() # Strip CMake's status prefix and surrounding whitespace -string(REGEX REPLACE "^--[ \t]*" "" PROJECT_VERSION "${PROJECT_VERSION}") +# Drop any CMake status lines like "-- Found Git: ..." +string(REGEX REPLACE "(^|\n)--[^\n]*" "" PROJECT_VERSION "${PROJECT_VERSION}") +# Trim whitespace string(REGEX REPLACE "^[[:space:]]+|[[:space:]]+$" "" PROJECT_VERSION "${PROJECT_VERSION}") if(PROJECT_VERSION STREQUAL "")