From 5bebf939e76c0a680e76ba5ca0257d1348e8ac46 Mon Sep 17 00:00:00 2001 From: Sergey Yakubov <sergey.yakubov@desy.de> Date: Fri, 28 Sep 2018 14:59:04 +0200 Subject: [PATCH] started versioning for c++ code --- .gitignore | 4 ++++ CMakeLists.txt | 2 ++ CMakeModules/prepare_version.cmake | 7 ++++++ common/cpp/CMakeLists.txt | 3 ++- common/cpp/include/common/version.h.in | 17 ++++++++++++++ common/go/src/asapo_common/version/version.go | 23 +++++++++++++++++++ .../asapo_common/version/version_lib.go.in | 7 ++++++ .../dummy_data_producer.cpp | 1 + .../worker/getnext_broker/getnext_broker.cpp | 1 + .../worker/process_folder/process_folder.cpp | 3 +++ producer/api/include/asapo_producer.h | 2 ++ .../src/main_eventmon.cpp | 3 +++ receiver/src/main.cpp | 2 ++ worker/api/cpp/include/asapo_worker.h | 1 + 14 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 CMakeModules/prepare_version.cmake create mode 100644 common/cpp/include/common/version.h.in create mode 100644 common/go/src/asapo_common/version/version.go create mode 100644 common/go/src/asapo_common/version/version_lib.go.in diff --git a/.gitignore b/.gitignore index 1e7857733..005f5fbce 100644 --- a/.gitignore +++ b/.gitignore @@ -132,3 +132,7 @@ asapo_tools/pkg # *.rpm +#version files + +common/cpp/include/common/version.h +common/go/src/asapo_common/version/version_lib.go \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 65114f8c5..b1159c604 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,7 @@ ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "GNU") SET(BUILD_SHARED_LIBS OFF) ENDIF(WIN32) + #TODO: Better way then GLOBAL PROPERTY IF(WIN32) find_package(Threads REQUIRED) @@ -88,3 +89,4 @@ if(BUILD_DOCS) include(doxygen) endif() +include(prepare_version) \ No newline at end of file diff --git a/CMakeModules/prepare_version.cmake b/CMakeModules/prepare_version.cmake new file mode 100644 index 000000000..f0704fcad --- /dev/null +++ b/CMakeModules/prepare_version.cmake @@ -0,0 +1,7 @@ +execute_process(COMMAND git describe --tags --dirty OUTPUT_VARIABLE VERSION) +string(STRIP ${VERSION} VERSION) + +string(TIMESTAMP TIMESTAMP "%H:%M:%S %d.%m.%Y UTC" UTC) + +configure_file(${PROJECT_SOURCE_DIR}/common/cpp/include/common/version.h.in ${PROJECT_SOURCE_DIR}/common/cpp/include/common/version.h @ONLY) +configure_file(${PROJECT_SOURCE_DIR}/common/go/src/asapo_common/version/version_lib.go.in ${PROJECT_SOURCE_DIR}/common/go/src/asapo_common/version/version_lib.go @ONLY) diff --git a/common/cpp/CMakeLists.txt b/common/cpp/CMakeLists.txt index 6f1350d10..05ba02232 100644 --- a/common/cpp/CMakeLists.txt +++ b/common/cpp/CMakeLists.txt @@ -16,7 +16,8 @@ if(BUILD_MONGODB_CLIENTLIB) endif() install(DIRECTORY ${ASAPO_CXX_COMMON_INCLUDE_DIR}/common - DESTINATION ${CMAKE_INSTALL_PREFIX}/include ) + DESTINATION ${CMAKE_INSTALL_PREFIX}/include + PATTERN "*.h.in" EXCLUDE) install(DIRECTORY ${ASAPO_CXX_COMMON_INCLUDE_DIR}/logger DESTINATION ${CMAKE_INSTALL_PREFIX}/include ) diff --git a/common/cpp/include/common/version.h.in b/common/cpp/include/common/version.h.in new file mode 100644 index 000000000..15ecfac7b --- /dev/null +++ b/common/cpp/include/common/version.h.in @@ -0,0 +1,17 @@ +#ifndef ASAPO_VERSION_H +#define ASAPO_VERSION_H + +#include <iostream> + +namespace asapo { + +const char kVersion[] = "@VERSION@"; + +inline void PrintVersion(std::string prefix) { + std::cout << prefix << ", version " << kVersion << std::endl; +} + +} + + +#endif //ASAPO_VERSION_H diff --git a/common/go/src/asapo_common/version/version.go b/common/go/src/asapo_common/version/version.go new file mode 100644 index 000000000..25a3835dc --- /dev/null +++ b/common/go/src/asapo_common/version/version.go @@ -0,0 +1,23 @@ +package version + +import ( + "flag" + "fmt" + "io" + "os" +) + +var version + +func ShowVersion(w io.Writer, name string) bool { + flags := flag.NewFlagSet("version", flag.ExitOnError) + flag.Bool("version", false, "Print version information") // to have it in main help + flVersion := flags.Bool("version", false, "Print version information") + flags.Bool("help", false, "Print usage") // define help flag but ignore it + flags.Parse(os.Args[1:]) + if *flVersion { + fmt.Fprintf(w, "%s version %s\n", name, version) + return true + } + return false +} diff --git a/common/go/src/asapo_common/version/version_lib.go.in b/common/go/src/asapo_common/version/version_lib.go.in new file mode 100644 index 000000000..2dcfeaeee --- /dev/null +++ b/common/go/src/asapo_common/version/version_lib.go.in @@ -0,0 +1,7 @@ +package version + +// Default build-time variable for library-import. +// This file is overridden on build with build-time informations. +func init(){ + version = "@VERSION@" +} diff --git a/examples/producer/dummy-data-producer/dummy_data_producer.cpp b/examples/producer/dummy-data-producer/dummy_data_producer.cpp index aec527a91..c2936de2f 100644 --- a/examples/producer/dummy-data-producer/dummy_data_producer.cpp +++ b/examples/producer/dummy-data-producer/dummy_data_producer.cpp @@ -35,6 +35,7 @@ void PrintCommandArguments(const Args& args) { void ProcessCommandArguments(int argc, char* argv[], Args* args) { + asapo::PrintVersion("Dummy Data Producer"); if (argc != 8) { std::cout << "Usage: " << argv[0] << diff --git a/examples/worker/getnext_broker/getnext_broker.cpp b/examples/worker/getnext_broker/getnext_broker.cpp index 51484cf7f..0a08959dc 100644 --- a/examples/worker/getnext_broker/getnext_broker.cpp +++ b/examples/worker/getnext_broker/getnext_broker.cpp @@ -79,6 +79,7 @@ int ReadAllData(const Params& params, uint64_t* duration_ms) { } int main(int argc, char* argv[]) { + asapo::PrintVersion("GetNext Broker Example"); if (argc != 6) { std::cout << "Usage: " + std::string{argv[0]} +" <server> <run_name> <nthreads> <token> <timeout ms>" << std::endl; exit(EXIT_FAILURE); diff --git a/examples/worker/process_folder/process_folder.cpp b/examples/worker/process_folder/process_folder.cpp index 2e8f7da92..5adb1bc1f 100644 --- a/examples/worker/process_folder/process_folder.cpp +++ b/examples/worker/process_folder/process_folder.cpp @@ -8,6 +8,7 @@ #include "asapo_worker.h" + using std::chrono::high_resolution_clock; using asapo::Error; @@ -83,6 +84,8 @@ void PrintStatistics(const Statistics& statistics) { int main(int argc, char* argv[]) { + asapo::PrintVersion("Process Folder Broker Example"); + std::string folder = ProcessCommandArguments(argc, argv); auto broker = CreateBroker(folder); diff --git a/producer/api/include/asapo_producer.h b/producer/api/include/asapo_producer.h index 84309f32b..1d9ea25d7 100644 --- a/producer/api/include/asapo_producer.h +++ b/producer/api/include/asapo_producer.h @@ -2,6 +2,8 @@ #define ASAPO_ASAPO_PRODUCER_H #include "common/io_error.h" +#include "common/version.h" + #include "producer/producer.h" diff --git a/producer/event_monitor_producer/src/main_eventmon.cpp b/producer/event_monitor_producer/src/main_eventmon.cpp index 18d23aa95..3e4d677f7 100644 --- a/producer/event_monitor_producer/src/main_eventmon.cpp +++ b/producer/event_monitor_producer/src/main_eventmon.cpp @@ -15,6 +15,7 @@ #include "preprocessor/definitions.h" #include "io/io_factory.h" +#include "common/version.h" using asapo::Producer; using asapo::EventMonConfigFactory; @@ -73,6 +74,8 @@ void SignalHandler(int signal) { int main (int argc, char* argv[]) { + asapo::PrintVersion("ASAPO Event Monitor"); + auto err = ReadConfigFile(argc, argv); if (err) { std::cerr << "cannot read config file: " << err->Explain() << std::endl; diff --git a/receiver/src/main.cpp b/receiver/src/main.cpp index f40dc1e2f..c0e6af486 100644 --- a/receiver/src/main.cpp +++ b/receiver/src/main.cpp @@ -5,6 +5,7 @@ #include "receiver_config.h" #include "receiver_logger.h" +#include "common/version.h" asapo::Error ReadConfigFile(int argc, char* argv[]) { if (argc != 2) { @@ -16,6 +17,7 @@ asapo::Error ReadConfigFile(int argc, char* argv[]) { } int main (int argc, char* argv[]) { + asapo::PrintVersion("ASAPO Receiver"); auto err = ReadConfigFile(argc, argv); const auto& logger = asapo::GetDefaultReceiverLogger(); diff --git a/worker/api/cpp/include/asapo_worker.h b/worker/api/cpp/include/asapo_worker.h index d07b021b3..f00cdaeaf 100644 --- a/worker/api/cpp/include/asapo_worker.h +++ b/worker/api/cpp/include/asapo_worker.h @@ -2,5 +2,6 @@ #define ASAPO_ASAPO_WORKER_H #include "worker/data_broker.h" +#include "common/version.h" #endif //ASAPO_ASAPO_WORKER_H -- GitLab