lib: add version script

This commit is contained in:
2 * r + 2 * t 2025-08-29 14:48:38 +10:00
parent 84cd315aa0
commit 416a41affe
5 changed files with 60 additions and 4 deletions

View file

@ -12,6 +12,18 @@ if(NOT DEFINED VERSION)
endif() endif()
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}") string(REGEX REPLACE "^v" "" VERSION "${VERSION}")
project(caelestia-shell VERSION ${VERSION} LANGUAGES CXX) project(caelestia-shell VERSION ${VERSION} LANGUAGES CXX)
@ -20,6 +32,7 @@ set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") 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_LIBDIR "usr/lib/caelestia" CACHE STRING "Library install dir")
set(INSTALL_QMLDIR "usr/lib/qt6/qml" CACHE STRING "QML 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") set(INSTALL_QSCONFDIR "etc/xdg/quickshell/caelestia" CACHE STRING "Quickshell config install dir")

View file

@ -3,6 +3,16 @@ find_package(PkgConfig REQUIRED)
pkg_check_modules(PIPEWIRE REQUIRED libpipewire-0.3) pkg_check_modules(PIPEWIRE REQUIRED libpipewire-0.3)
pkg_check_modules(AUBIO REQUIRED aubio) 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 # Beat detector
add_executable(beat_detector beat-detector.cpp) add_executable(beat_detector beat-detector.cpp)
target_include_directories(beat_detector PRIVATE ${PIPEWIRE_INCLUDE_DIRS} ${AUBIO_INCLUDE_DIRS}) target_include_directories(beat_detector PRIVATE ${PIPEWIRE_INCLUDE_DIRS} ${AUBIO_INCLUDE_DIRS})

26
assets/cpp/version.cpp Normal file
View file

@ -0,0 +1,26 @@
#include <iostream>
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;
}

View file

@ -30,6 +30,7 @@
packages = forAllSystems (pkgs: rec { packages = forAllSystems (pkgs: rec {
caelestia-shell = pkgs.callPackage ./nix { caelestia-shell = pkgs.callPackage ./nix {
rev = self.rev or self.dirtyRev;
quickshell = inputs.quickshell.packages.${pkgs.system}.default.override { quickshell = inputs.quickshell.packages.${pkgs.system}.default.override {
withX11 = false; withX11 = false;
withI3 = false; withI3 = false;

View file

@ -1,4 +1,5 @@
{ {
rev,
lib, lib,
stdenv, stdenv,
makeWrapper, makeWrapper,
@ -64,6 +65,12 @@
fontDirectories = [material-symbols rubik nerd-fonts.caskaydia-cove]; 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 { assets = stdenv.mkDerivation {
name = "caelestia-assets"; name = "caelestia-assets";
src = ./../assets/cpp; src = ./../assets/cpp;
@ -71,7 +78,7 @@
nativeBuildInputs = [cmake ninja pkg-config]; nativeBuildInputs = [cmake ninja pkg-config];
buildInputs = [aubio pipewire]; buildInputs = [aubio pipewire];
cmakeFlags = [(lib.cmakeFeature "INSTALL_LIBDIR" "${placeholder "out"}/lib")]; cmakeFlags = [(lib.cmakeFeature "INSTALL_LIBDIR" "${placeholder "out"}/lib")] ++ cmakeVersionFlags;
}; };
plugin = stdenv.mkDerivation { plugin = stdenv.mkDerivation {
@ -82,7 +89,7 @@
buildInputs = [qt6.qtbase qt6.qtdeclarative]; buildInputs = [qt6.qtbase qt6.qtdeclarative];
dontWrapQtApps = true; dontWrapQtApps = true;
cmakeFlags = [(lib.cmakeFeature "INSTALL_QMLDIR" qt6.qtbase.qtQmlPrefix)]; cmakeFlags = [(lib.cmakeFeature "INSTALL_QMLDIR" qt6.qtbase.qtQmlPrefix)] ++ cmakeVersionFlags;
}; };
in in
stdenv.mkDerivation { stdenv.mkDerivation {
@ -96,11 +103,10 @@ in
cmakeBuildType = "Release"; cmakeBuildType = "Release";
cmakeFlags = [ cmakeFlags = [
(lib.cmakeFeature "VERSION" version)
(lib.cmakeBool "DONT_BUILD_PLUGIN" true) (lib.cmakeBool "DONT_BUILD_PLUGIN" true)
(lib.cmakeBool "DONT_BUILD_ASSETS" true) (lib.cmakeBool "DONT_BUILD_ASSETS" true)
(lib.cmakeFeature "INSTALL_QSCONFDIR" "${placeholder "out"}/share/caelestia-shell") (lib.cmakeFeature "INSTALL_QSCONFDIR" "${placeholder "out"}/share/caelestia-shell")
]; ] ++ cmakeVersionFlags;
prePatch = '' prePatch = ''
substituteInPlace assets/pam.d/fprint \ substituteInPlace assets/pam.d/fprint \