From 5d2862f5139c68007f3fcf041a2a59347784bea7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com> Date: Thu, 22 Mar 2018 00:09:10 +0100 Subject: [PATCH] Version in CMakeLists.txt - added pastis version - compilation checks compatibility of version and git revision info - separates git info and version info for git-less compilation --- CMakeLists.txt | 10 +++++++--- cmake/GetPastisGitRevision.cmake | 32 +++++++++++++++++++++----------- main.cpp | 13 ++++++++----- utils/CMakeLists.txt | 14 ++++++++++++-- utils/RevisionInfo.cpp | 14 ++++++++++---- utils/RevisionInfo.hpp | 7 ++++--- utils/pastis_git_revision.hpp.in | 10 +++++----- utils/pastis_version.hpp.in | 6 ++++++ 8 files changed, 73 insertions(+), 33 deletions(-) create mode 100644 utils/pastis_version.hpp.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 77b791c43..d0d79e1cd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,13 +10,16 @@ include(CheckNotInSources) #----------------- Main configuration ----------------- #------------------------------------------------------ -project (Pastis) +project (Pastis + VERSION 0.0.2) + +set(PASTIS_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") # Rang (colors? Useless thus necessary!) -include_directories(${CMAKE_SOURCE_DIR}/packages/rang/include) +include_directories(${PASTIS_SOURCE_DIR}/packages/rang/include) # CLI11 -include_directories(${CMAKE_SOURCE_DIR}/packages/CLI11/include) +include_directories(${PASTIS_SOURCE_DIR}/packages/CLI11/include) # Kokkos add_subdirectory(${CMAKE_SOURCE_DIR}/packages/kokkos) @@ -41,3 +44,4 @@ target_link_libraries( pastis kokkos PastisUtils) + diff --git a/cmake/GetPastisGitRevision.cmake b/cmake/GetPastisGitRevision.cmake index c18a046df..6fe87b3eb 100644 --- a/cmake/GetPastisGitRevision.cmake +++ b/cmake/GetPastisGitRevision.cmake @@ -1,20 +1,30 @@ # --------------- get git revision info --------------- -# quite hugly but seems necessary -set(CMAKE_CURRENT_SOURCE_DIR ${INVOCATION_DIR}) - -list(APPEND CMAKE_MODULE_PATH "${INVOCATION_DIR}/../cmake/cmake-modules") +list(APPEND CMAKE_MODULE_PATH "${PASTIS_SOURCE_DIR}/cmake/cmake-modules") include(GetGitRevisionDescription) -git_describe(PASTIS_VERSION "--abbrev=0") -get_git_head_revision(PASTIS_HEAD PASTIS_HASH) -git_local_changes(PASTIS_HAS_LOCAL_CHANGES) +git_describe(PASTIS_GIT_TAG "--abbrev=0") +get_git_head_revision(PASTIS_GIT_HEAD PASTIS_GIT_HASH) +git_local_changes(PASTIS_GIT_HAS_LOCAL_CHANGES) -if(${PASTIS_HAS_LOCAL_CHANGES} STREQUAL "CLEAN") - set(PASTIS_IS_CLEAN true) +if(${PASTIS_GIT_HAS_LOCAL_CHANGES} STREQUAL "CLEAN") + set(PASTIS_GIT_IS_CLEAN true) else() - set(PASTIS_IS_CLEAN false) + set(PASTIS_GIT_IS_CLEAN false) +endif() + +string(FIND "${PASTIS_GIT_TAG}" "${CMAKE_PASTIS_VERSION}" FOUND_VERSION_SUBSTR) + +if("${FOUND_VERSION_SUBSTR}" STREQUAL "-1") + message("") + message ("###### CMake code version ${CMAKE_PASTIS_VERSION} and") + message ("###### git revision info ${PASTIS_GIT_TAG} do not match!") + message("") endif() # Generates revision header file candidate -configure_file("${CMAKE_CURRENT_SOURCE_DIR}/pastis_git_revision.hpp.in" "${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision" @ONLY) +configure_file("${PASTIS_SOURCE_DIR}/utils/pastis_git_revision.hpp.in" + "${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision" + @ONLY) + + diff --git a/main.cpp b/main.cpp index ed30eade2..13ef49deb 100644 --- a/main.cpp +++ b/main.cpp @@ -14,17 +14,20 @@ int main(int argc, char *argv[]) CLI11_PARSE(app, argc, argv); + std::cout << "Code version: " + << rang::style::bold << RevisionInfo::version() << rang::style::reset << '\n'; + std::cout << "-------------------- " << rang::fg::green << "git info" << rang::fg::reset <<" -------------------------" << '\n'; - std::cout << "version: " << rang::fg::reset - << rang::style::bold << RevisionInfo::version() << rang::style::reset << '\n'; - std::cout << "HEAD: " << rang::style::bold << RevisionInfo::head() << rang::style::reset << '\n'; - std::cout << "hash: " << rang::style::bold << RevisionInfo::hash() << rang::style::reset << " ("; - if (RevisionInfo::isClean()) { + std::cout << "tag: " << rang::fg::reset + << rang::style::bold << RevisionInfo::gitTag() << rang::style::reset << '\n'; + std::cout << "HEAD: " << rang::style::bold << RevisionInfo::gitHead() << rang::style::reset << '\n'; + std::cout << "hash: " << rang::style::bold << RevisionInfo::gitHash() << rang::style::reset << " ("; + if (RevisionInfo::gitIsClean()) { std::cout << rang::fgB::green << "clean" << rang::fg::reset; } else { std::cout << rang::fgB::red << "dirty" << rang::fg::reset; diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt index 0d341f975..22b66dac7 100644 --- a/utils/CMakeLists.txt +++ b/utils/CMakeLists.txt @@ -44,15 +44,24 @@ add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision.hpp add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision PRE_BUILD - COMMAND ${CMAKE_COMMAND} -DINVOCATION_DIR=${CMAKE_CURRENT_SOURCE_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/GetPastisGitRevision.cmake + COMMAND ${CMAKE_COMMAND} -DCMAKE_PASTIS_VERSION=${Pastis_VERSION} -DPASTIS_SOURCE_DIR=${PASTIS_SOURCE_DIR} -P ${PASTIS_SOURCE_DIR}/cmake/GetPastisGitRevision.cmake COMMENT "Check pastis git status" VERBATIM ) +# --------- check git revision info at build ---------- + +configure_file("${PASTIS_SOURCE_DIR}/utils/pastis_version.hpp.in" + "${CMAKE_CURRENT_BINARY_DIR}/pastis_version.hpp" + @ONLY) + + list( APPEND SOURCES - ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision.hpp) + ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision.hpp + ${CMAKE_CURRENT_BINARY_DIR}/pastis_version.hpp + ) include_directories(${CMAKE_CURRENT_BINARY_DIR}) @@ -60,3 +69,4 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR}) add_dependencies( PastisUtils PastisGitRevison) + diff --git a/utils/RevisionInfo.cpp b/utils/RevisionInfo.cpp index f9ce466f1..fd1bbc59f 100644 --- a/utils/RevisionInfo.cpp +++ b/utils/RevisionInfo.cpp @@ -1,22 +1,28 @@ #include <RevisionInfo.hpp> #include <pastis_git_revision.hpp> +#include <pastis_version.hpp> std::string RevisionInfo::version() { - return PASTIS_GIT_VERSION; + return PASTIS_VERSION; } -std::string RevisionInfo::head() +std::string RevisionInfo::gitTag() +{ + return PASTIS_GIT_TAG; +} + +std::string RevisionInfo::gitHead() { return PASTIS_GIT_HEAD; } -std::string RevisionInfo::hash() +std::string RevisionInfo::gitHash() { return PASTIS_GIT_HASH; } -bool RevisionInfo::isClean() +bool RevisionInfo::gitIsClean() { return PASTIS_GIT_IS_CLEAN; } diff --git a/utils/RevisionInfo.hpp b/utils/RevisionInfo.hpp index 4f1fee3b0..b0d547bd6 100644 --- a/utils/RevisionInfo.hpp +++ b/utils/RevisionInfo.hpp @@ -6,9 +6,10 @@ struct RevisionInfo { static std::string version(); - static std::string head(); - static std::string hash(); - static bool isClean(); + static std::string gitTag(); + static std::string gitHead(); + static std::string gitHash(); + static bool gitIsClean(); }; #endif // REVISION_INFO_HPP diff --git a/utils/pastis_git_revision.hpp.in b/utils/pastis_git_revision.hpp.in index 2d4c4523a..fe0b3e6df 100644 --- a/utils/pastis_git_revision.hpp.in +++ b/utils/pastis_git_revision.hpp.in @@ -1,10 +1,10 @@ #ifndef PASTIS_GIT_REVISION_HPP #define PASTIS_GIT_REVISION_HPP -#define PASTIS_GIT_VERSION "@PASTIS_VERSION@" -#define PASTIS_GIT_HEAD "@PASTIS_HEAD@" -#define PASTIS_GIT_HASH "@PASTIS_HASH@" -#define PASTIS_GIT_HAS_LOCAL_CHANGES "@PASTIS_HAS_LOCAL_CHANGES@" -#define PASTIS_GIT_IS_CLEAN @PASTIS_IS_CLEAN@ +#define PASTIS_GIT_TAG "@PASTIS_GIT_TAG@" +#define PASTIS_GIT_HEAD "@PASTIS_GIT_HEAD@" +#define PASTIS_GIT_HASH "@PASTIS_GIT_HASH@" +#define PASTIS_GIT_HAS_LOCAL_CHANGES "@PASTIS_GIT_HAS_LOCAL_CHANGES@" +#define PASTIS_GIT_IS_CLEAN @PASTIS_GIT_IS_CLEAN@ #endif // PASTIS_GIT_REVISION_HPP diff --git a/utils/pastis_version.hpp.in b/utils/pastis_version.hpp.in new file mode 100644 index 000000000..2d9bd8215 --- /dev/null +++ b/utils/pastis_version.hpp.in @@ -0,0 +1,6 @@ +#ifndef PASTIS_VERSION_HPP +#define PASTIS_VERSION_HPP + +#define PASTIS_VERSION "@Pastis_VERSION@" + +#endif // PASTIS_VERSION_HPP -- GitLab