find_program(Git_EXECUTABLE NAMES git) set(VERSION_WORKDIR "${PROJECT_SOURCE_DIR}/webroot/main") set(VERSION_WORKDIR2 "${PROJECT_SOURCE_DIR}/webroot/rc-4.05") execute_process( COMMAND ${Git_EXECUTABLE} "log" "-n" "1" "--pretty=\"%h\"" WORKING_DIRECTORY ${VERSION_WORKDIR} OUTPUT_VARIABLE Git_Commit_Hash OUTPUT_STRIP_TRAILING_WHITESPACE) if (Git_Commit_Hash) string(REGEX REPLACE "^\"(.*)\"$" "\\1" Git_Commit_Hash ${Git_Commit_Hash} ) endif() execute_process( COMMAND ${Git_EXECUTABLE} "log" "-n" "1" "--pretty=\"%h\"" WORKING_DIRECTORY ${VERSION_WORKDIR2} OUTPUT_VARIABLE Git_Commit_Hash2 OUTPUT_STRIP_TRAILING_WHITESPACE) if (Git_Commit_Hash2) string(REGEX REPLACE "^\"(.*)\"$" "\\1" Git_Commit_Hash2 ${Git_Commit_Hash2} ) endif() # Check whether we have exact match on tag execute_process( COMMAND ${Git_EXECUTABLE} "describe" "--tags" "--exact-match" WORKING_DIRECTORY ${VERSION_WORKDIR} RESULT_VARIABLE Git_exact_match_tag OUTPUT_VARIABLE Git_Tag OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET) if (Git_exact_match_tag EQUAL 0) string(REGEX REPLACE "^v(0|[1-9][0-9]*)[.](0|[1-9][0-9]*)[.](0|[1-9][0-9]*)(-[.0-9A-Za-z-]+)?([+][.0-9A-Za-z-]+)?$" "\\1.\\2.\\3" Git_Tag ${Git_Tag}) else() execute_process( COMMAND ${Git_EXECUTABLE} "describe" "--abbrev=0" "--tags" WORKING_DIRECTORY ${VERSION_WORKDIR} RESULT_VARIABLE Git_latest_tag OUTPUT_VARIABLE Git_Tag OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET) if (NOT Git_latest_tag EQUAL 0) message(FATAL_ERROR "No tag for main web-interface") endif() set(Git_Tag ${Git_Tag}) string(REGEX REPLACE "^v(0|[1-9][0-9]*)[.](0|[1-9][0-9]*)[.](0|[1-9][0-9]*)(-[.0-9A-Za-z-]+)?([+][.0-9A-Za-z-]+)?$" "\\1.\\2.\\3" Git_Tag ${Git_Tag}) if (Git_Commit_Hash) set(Git_Ext "+mgit.${Git_Commit_Hash}") else() set(Git_Ext "+mgit.devdev") endif() endif() execute_process( COMMAND ${Git_EXECUTABLE} "describe" "--tags" "--exact-match" WORKING_DIRECTORY ${VERSION_WORKDIR2} RESULT_VARIABLE Git_exact_match_tag2 OUTPUT_VARIABLE Git_Tag2 OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET) if (Git_exact_match_tag2 EQUAL 0) string(REGEX REPLACE "^v(0|[1-9][0-9]*)[.](0|[1-9][0-9]*)[.](0|[1-9][0-9]*)(-[.0-9A-Za-z-]+)?([+][.0-9A-Za-z-]+)?$" "\\1.\\2.\\3" Git_Tag2 ${Git_Tag2}) else() execute_process( COMMAND ${Git_EXECUTABLE} "describe" "--abbrev=0" "--tags" WORKING_DIRECTORY ${VERSION_WORKDIR2} RESULT_VARIABLE Git_latest_tag2 OUTPUT_VARIABLE Git_Tag2 OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET) if (NOT Git_latest_tag2 EQUAL 0) message(FATAL_ERROR "No tag for main web-interface") endif() set(Git_Tag2 ${Git_Tag2}) if (Git_Commit_Hash2) set(Git_Ext2 "+smgit.${Git_Commit_Hash2}") else() set(Git_Ext2 "+smgit.devdev") endif() endif() set(APPLICATION_VERSION "${Git_Tag}.${Git_Tag2}") if (Git_Ext2 OR Git_Ext) string(TIMESTAMP timestamp "%Y%m%d%H%M%S") set(APPLICATION_VERSION "${APPLICATION_VERSION}+${timestamp}${Git_Ext}${Git_Ext2}") endif() execute_process( COMMAND ${Git_EXECUTABLE} "diff" "--shortstat" WORKING_DIRECTORY ${VERSION_WORKDIR} OUTPUT_VARIABLE Dirty1 OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET) execute_process( COMMAND ${Git_EXECUTABLE} "diff" "--shortstat" "--cached" WORKING_DIRECTORY ${VERSION_WORKDIR} OUTPUT_VARIABLE Dirty2 OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET) if (Dirty2 OR Dirty1) set(APPLICATION_VERSION "${APPLICATION_VERSION}-dirty") endif() string (TIMESTAMP Build_DT "%Y-%m-%dT%H:%M:%SZ" UTC) set (APPLICATION_COMMIT "${Git_Commit_Hash}" CACHE INTERNAL "Application commit hash") set (APPLICATION_VERSION "${APPLICATION_VERSION}" CACHE INTERNAL "Application version") set (APPLICATION_BUILD_DATETIME "${Build_DT}" CACHE INTERNAL "Application build date and time") message("-- Project version is: ${APPLICATION_VERSION}") message("-- Project build date and time is: ${APPLICATION_BUILD_DATETIME}")