From b657239e12902a858f1c6fc862f1e6d5413f71bb Mon Sep 17 00:00:00 2001 From: Julian Wollrath Date: Mon, 17 Aug 2026 15:15:13 +0200 Subject: [PATCH] Generate version via git describe --- .gitignore | 3 +++ CMakeLists.txt | 10 ++++++++- .../CMakeMacroParseArguments.cmake | 0 .../CMakeParseArguments.cmake | 0 FindROOT.cmake => cmake/FindROOT.cmake | 0 cmake/GenerateVersion.cmake | 21 +++++++++++++++++++ musrSim.cc | 10 ++++++--- version.h.in | 2 ++ 8 files changed, 42 insertions(+), 4 deletions(-) rename CMakeMacroParseArguments.cmake => cmake/CMakeMacroParseArguments.cmake (100%) rename CMakeParseArguments.cmake => cmake/CMakeParseArguments.cmake (100%) rename FindROOT.cmake => cmake/FindROOT.cmake (100%) create mode 100644 cmake/GenerateVersion.cmake create mode 100644 version.h.in diff --git a/.gitignore b/.gitignore index 2cdd71a..17d82fb 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,9 @@ *.o *.obj +# Generated headers +version.h + # Precompiled Headers *.gch *.pch diff --git a/CMakeLists.txt b/CMakeLists.txt index 1fba1b1..d2f01f7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) -include(FindROOT.cmake) +include(cmake/FindROOT.cmake) # Find Geant4, activating all available UI and visualization drivers by default. option(WITH_GEANT4_UIVIS "Build with Geant4 UI and visualization drivers" ON) @@ -21,6 +21,12 @@ else() find_package(Geant4 REQUIRED) endif() +add_custom_target(version + ${CMAKE_COMMAND} -D SRC=${CMAKE_SOURCE_DIR}/version.h.in + -D DST=${CMAKE_SOURCE_DIR}/version.h + -P ${CMAKE_SOURCE_DIR}/cmake/GenerateVersion.cmake + ) + add_executable(musrSim musrSim.cc src/F04ElementField.cc @@ -54,6 +60,8 @@ add_executable(musrSim src/yields.cc ) +add_dependencies(musrSim version) + target_include_directories(musrSim PRIVATE ${PROJECT_SOURCE_DIR}/include diff --git a/CMakeMacroParseArguments.cmake b/cmake/CMakeMacroParseArguments.cmake similarity index 100% rename from CMakeMacroParseArguments.cmake rename to cmake/CMakeMacroParseArguments.cmake diff --git a/CMakeParseArguments.cmake b/cmake/CMakeParseArguments.cmake similarity index 100% rename from CMakeParseArguments.cmake rename to cmake/CMakeParseArguments.cmake diff --git a/FindROOT.cmake b/cmake/FindROOT.cmake similarity index 100% rename from FindROOT.cmake rename to cmake/FindROOT.cmake diff --git a/cmake/GenerateVersion.cmake b/cmake/GenerateVersion.cmake new file mode 100644 index 0000000..4fa9ce9 --- /dev/null +++ b/cmake/GenerateVersion.cmake @@ -0,0 +1,21 @@ +# Thanks to https://www.marcusfolkesson.se/blog/git-version-in-cmake/ +find_package(Git) + +if(GIT_EXECUTABLE) + get_filename_component(WORKING_DIR ${SRC} DIRECTORY) + execute_process( + COMMAND ${GIT_EXECUTABLE} describe --tags --dirty + WORKING_DIRECTORY ${WORKING_DIR} + OUTPUT_VARIABLE MUSRSIM_VERSION + RESULT_VARIABLE ERROR_CODE + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + +endif() + +if(FOO_VERSION STREQUAL "") + set(FOO_VERSION 0.0.0-unknown) + message(WARNING "Failed to determine version from Git tags. Using default version \"${FOO_VERSION}\".") +endif() + +configure_file(${SRC} ${DST} @ONLY) diff --git a/musrSim.cc b/musrSim.cc index c09bf73..25b653f 100644 --- a/musrSim.cc +++ b/musrSim.cc @@ -1,3 +1,5 @@ +#include "version.h" + #include "musrDetectorConstruction.hh" #include "musrPhysicsList.hh" #include "musrPrimaryGeneratorAction.hh" @@ -33,6 +35,11 @@ int main(int argc, char **argv) { G4String steeringFileName; + + G4cout << "\n\n*************************************************************" << G4endl; + G4cout << " musrSim version " << MUSRSIM_VERSION << " for Geant 11.4" << G4endl; + G4cout << " WWW: https://www.psi.ch/lmu/geant4-simulations\n" << G4endl; + if (argc > 1) { steeringFileName = argv[1]; } else { @@ -40,9 +47,6 @@ int main(int argc, char **argv) return 1; } - G4cout << "\n\n*************************************************************" << G4endl; - G4cout << " musrSim version 1.0.6 for Geant 11.4" << G4endl; - G4cout << " WWW: https://www.psi.ch/lmu/geant4-simulations" << G4endl; // choose the Random engine G4Random::setTheEngine(new CLHEP::HepJamesRandom); diff --git a/version.h.in b/version.h.in new file mode 100644 index 0000000..c78c10c --- /dev/null +++ b/version.h.in @@ -0,0 +1,2 @@ +#pragma once +#define MUSRSIM_VERSION "@MUSRSIM_VERSION@"