diff --git a/CMakeScripts/aevol_version.cmake b/CMakeScripts/aevol_version.cmake new file mode 100644 index 0000000000000000000000000000000000000000..9519b6ee046fe4f296cf0db7108a4e5e8b33b968 --- /dev/null +++ b/CMakeScripts/aevol_version.cmake @@ -0,0 +1,39 @@ +set(AEVOL_REVISION "unknown") + +if(EXISTS ${AEVOL_SOURCE_DIR}/.git) + execute_process(COMMAND git rev-parse --short HEAD + WORKING_DIRECTORY ${AEVOL_SOURCE_DIR} + OUTPUT_VARIABLE AEVOL_REVISION_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE) + + execute_process(COMMAND + git status -s ${AEVOL_SOURCE_DIR} + WORKING_DIRECTORY ${AEVOL_SOURCE_DIR} + OUTPUT_VARIABLE AEVOL_SOURCE_MODIFIED + OUTPUT_STRIP_TRAILING_WHITESPACE) + if(NOT AEVOL_SOURCE_MODIFIED STREQUAL "") + set(AEVOL_REVISION_HASH "${AEVOL_REVISION_HASH}-dirty") + endif() + + execute_process(COMMAND git rev-parse --abbrev-ref HEAD + WORKING_DIRECTORY ${AEVOL_SOURCE_DIR} + OUTPUT_VARIABLE AEVOL_BRANCH_NAME + OUTPUT_STRIP_TRAILING_WHITESPACE) + + execute_process(COMMAND git log -n 1 --pretty=%cD #--date=short + WORKING_DIRECTORY ${AEVOL_SOURCE_DIR} + OUTPUT_VARIABLE AEVOL_REVISION_DATE + OUTPUT_STRIP_TRAILING_WHITESPACE) + + # If we wanted to use the compile date instead + # However, this makes the build non-reproducible + #string(TIMESTAMP AEVOL_COMPILE_DATE "%Y-%m-%d %H:%M:%S") + + set(AEVOL_REVISION "${AEVOL_BRANCH_NAME}, ${AEVOL_REVISION_HASH}, ${AEVOL_REVISION_DATE}") + +endif() + +if(NOT "${AEVOL_BINARY_DIR}" STREQUAL "") + configure_file(${AEVOL_BINARY_DIR}/src/libaevol/aevol_version.cpp.in + ${AEVOL_BINARY_DIR}/src/libaevol/aevol_version.cpp) +endif() diff --git a/src/aevol_create.cpp b/src/aevol_create.cpp index 37145726331234a0455dab48df9cd41cce04d3ed..f0e04436a6d7f6b62df52e0d603d38074f1486de 100644 --- a/src/aevol_create.cpp +++ b/src/aevol_create.cpp @@ -49,6 +49,7 @@ const char* DEFAULT_PARAM_FILE_NAME = "param.in"; #include "ExpManager.h" #include "ParamLoader.h" +#include "aevol_version.h" using namespace aevol; @@ -69,6 +70,9 @@ static IOJson* my_iojson = nullptr; int main(int argc, char* argv[]) { interpret_cmd_line_options(argc, argv); + // Print the hash and date of the commit used to compile this executable + printf("Running aevol version %s\n", version_string); + if(param_file_name != nullptr) { // Create a param loader for the parameter file my_param_loader = new ParamLoader(param_file_name); diff --git a/src/aevol_run.cpp b/src/aevol_run.cpp index 15ff8f82f154780cb10a2135369c694abc0ef1de..9b4888932af20b24820b1eb268f7063835330d99 100644 --- a/src/aevol_run.cpp +++ b/src/aevol_run.cpp @@ -58,6 +58,8 @@ #include "ExpManager_7.h" #include "macros.h" +#include "aevol_version.h" + using namespace aevol; #ifndef __NO_X @@ -101,8 +103,12 @@ int main(int argc, char* argv[]) { printf("aevol is being run in DEBUG mode\n"); #endif + interpret_cmd_line_options(argc, argv); + // Print the hash and date of the commit used to compile this executable + printf("Running aevol version %s\n", version_string); + // ================================================================= // Load the simulation // ================================================================= diff --git a/src/libaevol/CMakeLists.txt b/src/libaevol/CMakeLists.txt index eff10d79338b1c104de2b71c8008efb8818b57ec..299803f3c6970d314275b2ce46c7ea53f46b51a6 100644 --- a/src/libaevol/CMakeLists.txt +++ b/src/libaevol/CMakeLists.txt @@ -14,6 +14,8 @@ set(aevol_sources aevol.h macros.h + aevol_version.h + biochemistry/ae_string.cpp biochemistry/ae_string.h biochemistry/Alignment.cpp @@ -202,11 +204,31 @@ if ( ${with-raevol} ) raevol/Protein_R.h raevol/Protein_R.cpp raevol/Rna_R.h - raevol/Rna_R.cpp + raevol/Rna_R.cpp #"SIMD_Abstract Metadata.cpp" "SIMD_Abstract Metadata.h" SIMD_Map_Metadata.cpp SIMD_Map_Metadata.h raevol/SIMD_PhenotypicTargetHandler_R.cpp raevol/SIMD_PhenotypicTargetHandler_R.h) endif () +# ============================================================================ +# Generate version file aevol_version.cpp +# ============================================================================ + +configure_file(aevol_version.cpp.in ${CMAKE_BINARY_DIR}/src/libaevol/aevol_version.cpp.in @ONLY) + +# configure further at build time (always built as run_always.txt is never actually created) +add_custom_command( + OUTPUT ${CMAKE_BINARY_DIR}/src/libaevol/aevol_version.cpp run_always.txt + COMMAND ${CMAKE_COMMAND} + -DAEVOL_DIR=${PROJECT_SOURCE_DIR} + -DAEVOL_SOURCE_DIR=${CMAKE_SOURCE_DIR} + -DAEVOL_BINARY_DIR=${CMAKE_BINARY_DIR} + -P ${CMAKE_SOURCE_DIR}/CMakeScripts/aevol_version.cmake + COMMENT "Generating aevol_version.cpp" +) + +list(APPEND aevol_sources + ${CMAKE_BINARY_DIR}/src/libaevol/aevol_version.cpp) + add_library(aevol ${aevol_sources}) # ============================================================================ diff --git a/src/libaevol/aevol_version.cpp.in b/src/libaevol/aevol_version.cpp.in new file mode 100644 index 0000000000000000000000000000000000000000..60add0718627153bdb42e90b588531ccf777ae5b --- /dev/null +++ b/src/libaevol/aevol_version.cpp.in @@ -0,0 +1,3 @@ +namespace aevol { + char const *version_string = "@PROJECT_VERSION@" " " "(${AEVOL_REVISION})"; +} \ No newline at end of file diff --git a/src/libaevol/aevol_version.h b/src/libaevol/aevol_version.h new file mode 100644 index 0000000000000000000000000000000000000000..aa845f7e1049ad76e235f58771b9a292f02ee27b --- /dev/null +++ b/src/libaevol/aevol_version.h @@ -0,0 +1,3 @@ +namespace aevol { + extern char const *version_string; +} \ No newline at end of file