diff --git a/CMakeLists.txt b/CMakeLists.txt index 77b791c436b0d8cd0f2a104f8ecf69067978ec65..d0d79e1cd34c471051c424689b3b4b104b8fad33 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 c18a046df85aa7c8f748e0f3388af9009d7ccc49..6fe87b3eb00692f97df344246eb2addae2886c87 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 ed30eade2e6ee7672488ff94b1a721098dc74cee..13ef49debdd76aec997cc518ecdc0c090e609a0c 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 0d341f975b60d939df181daebba9dea878d253b4..22b66dac791d924c29bed5d908e89bc3c1e13e99 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 f9ce466f1f83a4056c95e208e80571946c7396d2..fd1bbc59f16e1bb78ddcaaa66cd8a1f73fad47d9 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 4f1fee3b0e3f36c8f01ebaec78fc3c2b7c0bd4bc..b0d547bd6ace63bc0690e336ee0fb150de959660 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 2d4c4523a1def34bdc87b67b5fac03ae3682b02f..fe0b3e6df860b7d8c28a0d52957f9fbc815c36df 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 0000000000000000000000000000000000000000..2d9bd821530f46102f493b795bbc9c2bbf2dc27a --- /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