diff --git a/CMakeLists.txt b/CMakeLists.txt index 5580fa20..20c8d858 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 2.8.9) include(cmake/add_files.cmake) include(cmake/create_source_groups.cmake) - +include(cmake/version_setup.cmake) # Variables -------------------------------------------------------------------- @@ -132,6 +132,11 @@ if(Qt5Widgets_FOUND) endif() endif() +# target for running versionnumber script +# workaround for running customcommand (ninja dependency cycle) +add_custom_target( + versionnumber ALL +) if (WIN32) file(WRITE ${CMAKE_SOURCE_DIR}/build/Coati.rc @@ -139,11 +144,23 @@ if (WIN32) "// remains consistent on all systems.\n" "IDI_ICON1 ICON \"${CMAKE_SOURCE_DIR}/build/coati.ico\"\n" ) - add_executable(${APP_PROJECT_NAME} ${APP_FILES} ${CMAKE_SOURCE_DIR}/build/Coati.rc) + add_executable(${APP_PROJECT_NAME} ${APP_FILES} ${CMAKE_SOURCE_DIR}/build/Coati.rc ${CMAKE_SOURCE_DIR}/build/src/app/version.h) else () - add_executable(${APP_PROJECT_NAME} ${APP_FILES}) + add_executable(${APP_PROJECT_NAME} ${APP_FILES} ${CMAKE_SOURCE_DIR}/build/src/app/version.h) endif () +# command for versioning script +add_custom_command( + TARGET versionnumber + PRE_BUILD + COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/cmake/version.cmake + BYPRODUCTS ${PROJECT_SOURCE_DIR}/build/src/app/version.h + DEPENDS ${APP_PROJECT_NAME} + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + COMMENT "check/update version number" +) +add_dependencies(${APP_PROJECT_NAME} versionnumber) + create_source_groups(${APP_FILES}) target_link_libraries(${APP_PROJECT_NAME} ${LIB_PROJECT_NAME}) @@ -167,6 +184,12 @@ configure_file( "${PROJECT_SOURCE_DIR}/build/src/app/includes.h" ) +#configure the versioning file +configure_file( + ${CMAKE_SOURCE_DIR}/src/app/version.h.in + ${CMAKE_SOURCE_DIR}/build/src/app/version.h +) + # add platform specific libraries if (APPLE) find_library(CORE_FOUNDATION CoreFoundation) diff --git a/cmake/version.cmake b/cmake/version.cmake new file mode 100644 index 00000000..f13e93dd --- /dev/null +++ b/cmake/version.cmake @@ -0,0 +1,47 @@ +# simple check for a git repo +if(EXISTS "${CMAKE_SOURCE_DIR}/.git") + + execute_process( + COMMAND git rev-parse --abbrev-ref HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_BRANCH + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + execute_process( + COMMAND git log -1 --format=%h + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_COMMIT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + execute_process( + COMMAND git log -1 --format=%ci + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_COMMIT_TIME + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + execute_process( + COMMAND git describe --match "[0-9]*" --abbrev=7 HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_VERSION_NUMBER + OUTPUT_STRIP_TRAILING_WHITESPACE + ) +else(EXISTS "${CMAKE_SOURCE_DIR}/.git") + set(GIT_BRANCH "") + set(GIT_COMMIT_HASH "") + set(GIT_VERSION_NUMBER "") + set(BUILD_TYPE "") + +endif(EXISTS "${CMAKE_SOURCE_DIR}/.git") + +message(STATUS "Git current branch: ${GIT_BRANCH}") +message(STATUS "Git commit hash: ${GIT_COMMIT_HASH}") +message(STATUS "Git commit time: ${GIT_COMMIT_TIME}") +message(STATUS "Git version number:" ${GIT_VERSION_NUMBER} ) + +configure_file( + ${CMAKE_SOURCE_DIR}/src/app/version.h.in + ${CMAKE_SOURCE_DIR}/build/src/app/version.h +) diff --git a/cmake/version_setup.cmake b/cmake/version_setup.cmake new file mode 100644 index 00000000..eb873fdc --- /dev/null +++ b/cmake/version_setup.cmake @@ -0,0 +1,7 @@ +# # build type needs to be in added as definition because of visual studio +message(STATUS "setting up the buildtype for versioning") +if(MSVC) + add_definitions(-DBUILD_TYPE="${ConfigurationName}") +else(MSVC) + add_definitions(-DBUILD_TYPE="${CMAKE_BUILD_TYPE}") +endif(MSVC) diff --git a/src/app/qt/element/QtMainWindow.cpp b/src/app/qt/element/QtMainWindow.cpp index 3990b3d8..18ea08bc 100644 --- a/src/app/qt/element/QtMainWindow.cpp +++ b/src/app/qt/element/QtMainWindow.cpp @@ -7,6 +7,8 @@ #include #include +#include "version.h" + #include "component/view/View.h" #include "component/view/CompositeView.h" #include "qt/view/QtViewWidgetWrapper.h" @@ -147,6 +149,10 @@ void QtMainWindow::about() "Malte Langkabel\n" "Victoria Pfausler\n" "Andreas Stallinger\n" + "\nVersion: " GIT_VERSION_NUMBER + "\nBranch: " GIT_BRANCH + "\nBuildtype: " BUILD_TYPE + "\nDate: " GIT_COMMIT_TIME ) ); } diff --git a/src/app/version.h.in b/src/app/version.h.in new file mode 100644 index 00000000..eab5bb5a --- /dev/null +++ b/src/app/version.h.in @@ -0,0 +1,4 @@ +#define GIT_BRANCH "@GIT_BRANCH@" +#define GIT_VERSION_NUMBER "@GIT_VERSION_NUMBER@" +#define GIT_COMMIT_HASH "@GIT_COMMIT_HASH@" +#define GIT_COMMIT_TIME "@GIT_COMMIT_TIME@"