diff --git a/.gitignore b/.gitignore index 1e78577332eab730f22156280545fc4f0484928f..005f5fbce704c564ffd17f71971fd02faa6a99e1 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 65114f8c551b076b82f027d86194aecb8166e56c..b1159c604495f220217409423392ef2491c4fd8c 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 0000000000000000000000000000000000000000..f0704fcada9cd6576d8e187d6ddb3cd39f852c2a --- /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 6f1350d101ddf101d72672d30c0a3b7ffa0e2f0b..05ba02232fe27e9483cb7b705636d5ab3418f3de 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 0000000000000000000000000000000000000000..15ecfac7b56a8241c3ac215e6c95aa644e8a904b --- /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 0000000000000000000000000000000000000000..25a3835dcd90c8bbe48e0f9429299e6b7909434c --- /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 0000000000000000000000000000000000000000..2dcfeaeeeccfd566d7bbf1bb69bacead466ab5e1 --- /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 aec527a91d55bdb13f0d55e3f02b604e891fed3e..c2936de2f232a6060f194e5d1ba2d043a48dc296 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 51484cf7f6b8cff4b4516c21f2d912423fc263bd..0a08959dc2946e03c5621ee1326873aa9d209c99 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 2e8f7da92f92f6410573c31c22a0f9787a074b1f..5adb1bc1fa331ad374f0eed169e0ffc4a29b9645 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 84309f32bc72456d26342c0d50b7798a9a7a46e9..1d9ea25d79275075942ec2ba0184be24d6335691 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 18d23aa95bc38c0a6935f3e3f55804a10c36179e..3e4d677f7d342ac5a6069454d0ccbdb48c5911ad 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 f40dc1e2f606b2c2063398f8cdb06ebf0da7006f..c0e6af486dfbb2eac2a37dd60862002a62a403e0 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 d07b021b3fa39687022e3a4514613fa31f538636..f00cdaeaf2b2245249a649fbe1e6d125db6e0fbb 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