From 416a41affeaecf1ac6720fde4bae5d33e5ec3d75 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Fri, 29 Aug 2025 14:48:38 +1000 Subject: lib: add version script --- CMakeLists.txt | 13 +++++++++++++ assets/cpp/CMakeLists.txt | 10 ++++++++++ assets/cpp/version.cpp | 26 ++++++++++++++++++++++++++ flake.nix | 1 + nix/default.nix | 14 ++++++++++---- 5 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 assets/cpp/version.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 513e9de..a814315 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,6 +12,18 @@ if(NOT DEFINED VERSION) endif() endif() +if(NOT DEFINED GIT_REVISION) + execute_process(COMMAND git rev-parse HEAD + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" + OUTPUT_VARIABLE GIT_REVISION + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + if("${GIT_REVISION}" STREQUAL "") + message(FATAL_ERROR "GIT_REVISION is not set and failed to get from git") + endif() +endif() + string(REGEX REPLACE "^v" "" VERSION "${VERSION}") project(caelestia-shell VERSION ${VERSION} LANGUAGES CXX) @@ -20,6 +32,7 @@ set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") +set(DISTRIBUTOR "Unset" CACHE STRING "Distributor") set(INSTALL_LIBDIR "usr/lib/caelestia" CACHE STRING "Library install dir") set(INSTALL_QMLDIR "usr/lib/qt6/qml" CACHE STRING "QML install dir") set(INSTALL_QSCONFDIR "etc/xdg/quickshell/caelestia" CACHE STRING "Quickshell config install dir") diff --git a/assets/cpp/CMakeLists.txt b/assets/cpp/CMakeLists.txt index ef12370..18beabf 100644 --- a/assets/cpp/CMakeLists.txt +++ b/assets/cpp/CMakeLists.txt @@ -3,6 +3,16 @@ find_package(PkgConfig REQUIRED) pkg_check_modules(PIPEWIRE REQUIRED libpipewire-0.3) pkg_check_modules(AUBIO REQUIRED aubio) +# Version +add_executable(version version.cpp) +target_compile_definitions(version PRIVATE + PROJECT_NAME="${PROJECT_NAME}" + VERSION="${VERSION}" + GIT_REVISION="${GIT_REVISION}" + DISTRIBUTOR="${DISTRIBUTOR}" +) +install(TARGETS version DESTINATION ${INSTALL_LIBDIR}) + # Beat detector add_executable(beat_detector beat-detector.cpp) target_include_directories(beat_detector PRIVATE ${PIPEWIRE_INCLUDE_DIRS} ${AUBIO_INCLUDE_DIRS}) diff --git a/assets/cpp/version.cpp b/assets/cpp/version.cpp new file mode 100644 index 0000000..e1a0cf3 --- /dev/null +++ b/assets/cpp/version.cpp @@ -0,0 +1,26 @@ +#include + +int main(int argc, char* argv[]) { + if (argc > 1) { + std::string arg = argv[1]; + + if (arg == "-t" || arg == "--terse") { + std::cout << PROJECT_NAME << std::endl; + std::cout << VERSION << std::endl; + std::cout << GIT_REVISION << std::endl; + std::cout << DISTRIBUTOR << std::endl; + } else if (arg == "-s" || arg == "--short") { + std::cout << PROJECT_NAME << " " << VERSION << ", revision " << GIT_REVISION << ", distrubuted by: " << DISTRIBUTOR << std::endl; + } else { + std::cout << "Usage: " << argv[0] << " [-t | --terse] [-s | --short]" << std::endl; + return arg != "-h" && arg != "--help"; + } + } else { + std::cout << "Project: " << PROJECT_NAME << std::endl; + std::cout << "Version: " << VERSION << std::endl; + std::cout << "Git revision: " << GIT_REVISION << std::endl; + std::cout << "Distributor: " << DISTRIBUTOR << std::endl; + } + + return 0; +} diff --git a/flake.nix b/flake.nix index df68a37..deb00c7 100644 --- a/flake.nix +++ b/flake.nix @@ -30,6 +30,7 @@ packages = forAllSystems (pkgs: rec { caelestia-shell = pkgs.callPackage ./nix { + rev = self.rev or self.dirtyRev; quickshell = inputs.quickshell.packages.${pkgs.system}.default.override { withX11 = false; withI3 = false; diff --git a/nix/default.nix b/nix/default.nix index a022a4a..3fd5325 100644 --- a/nix/default.nix +++ b/nix/default.nix @@ -1,4 +1,5 @@ { + rev, lib, stdenv, makeWrapper, @@ -64,6 +65,12 @@ fontDirectories = [material-symbols rubik nerd-fonts.caskaydia-cove]; }; + cmakeVersionFlags = [ + (lib.cmakeFeature "VERSION" version) + (lib.cmakeFeature "GIT_REVISION" rev) + (lib.cmakeFeature "DISTRIBUTOR" "Nix Flake") + ]; + assets = stdenv.mkDerivation { name = "caelestia-assets"; src = ./../assets/cpp; @@ -71,7 +78,7 @@ nativeBuildInputs = [cmake ninja pkg-config]; buildInputs = [aubio pipewire]; - cmakeFlags = [(lib.cmakeFeature "INSTALL_LIBDIR" "${placeholder "out"}/lib")]; + cmakeFlags = [(lib.cmakeFeature "INSTALL_LIBDIR" "${placeholder "out"}/lib")] ++ cmakeVersionFlags; }; plugin = stdenv.mkDerivation { @@ -82,7 +89,7 @@ buildInputs = [qt6.qtbase qt6.qtdeclarative]; dontWrapQtApps = true; - cmakeFlags = [(lib.cmakeFeature "INSTALL_QMLDIR" qt6.qtbase.qtQmlPrefix)]; + cmakeFlags = [(lib.cmakeFeature "INSTALL_QMLDIR" qt6.qtbase.qtQmlPrefix)] ++ cmakeVersionFlags; }; in stdenv.mkDerivation { @@ -96,11 +103,10 @@ in cmakeBuildType = "Release"; cmakeFlags = [ - (lib.cmakeFeature "VERSION" version) (lib.cmakeBool "DONT_BUILD_PLUGIN" true) (lib.cmakeBool "DONT_BUILD_ASSETS" true) (lib.cmakeFeature "INSTALL_QSCONFDIR" "${placeholder "out"}/share/caelestia-shell") - ]; + ] ++ cmakeVersionFlags; prePatch = '' substituteInPlace assets/pam.d/fprint \ -- cgit v1.2.3-freya