diff --git a/scripts/cmake/ProjectSetup.cmake b/scripts/cmake/ProjectSetup.cmake index 71d7c33cbab7d31ebba2b7e94b42f9fb4a809f46..f07853177d6fd6a6b0daf0e58b9d9625088bc6a3 100644 --- a/scripts/cmake/ProjectSetup.cmake +++ b/scripts/cmake/ProjectSetup.cmake @@ -28,26 +28,52 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}) set(CMAKE_MACOSX_RPATH 1) -include(GetGitRevisionDescription) -GET_GIT_HEAD_REVISION(GIT_REFSPEC GIT_SHA1) -string(SUBSTRING ${GIT_SHA1} 0 8 GIT_SHA1_SHORT) +# Get version info from Git, implementation based on +# https://github.com/tomtom-international/cpp-dependencies +execute_process( + COMMAND ${GIT_EXECUTABLE} describe --tags --long --dirty --always + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + RESULT_VARIABLE DESCRIBE_RESULT + OUTPUT_VARIABLE DESCRIBE_STDOUT +) +if(DESCRIBE_RESULT EQUAL 0) + string(STRIP "${DESCRIBE_STDOUT}" DESCRIBE_STDOUT) + message(STATUS "Git reported this project's version as '${DESCRIBE_STDOUT}'") + if(DESCRIBE_STDOUT MATCHES "^(.*)-(dirty)$") + set(DESCRIBE_DIRTY "${CMAKE_MATCH_2}") + set(DESCRIBE_STDOUT "${CMAKE_MATCH_1}") + endif() + if(DESCRIBE_STDOUT MATCHES "^([0-9a-f]+)$") + set(DESCRIBE_COMMIT_NAME "${CMAKE_MATCH_1}") + set(DESCRIBE_STDOUT "") + elseif(DESCRIBE_STDOUT MATCHES "^(.*)-g([0-9a-f]+)$") + set(DESCRIBE_COMMIT_NAME "g${CMAKE_MATCH_2}") + set(DESCRIBE_STDOUT "${CMAKE_MATCH_1}") + endif() + if(DESCRIBE_STDOUT MATCHES "^(.*)-([0-9]+)$") + set(DESCRIBE_COMMIT_COUNT "${CMAKE_MATCH_2}") + set(DESCRIBE_TAG "${CMAKE_MATCH_1}") + set(DESCRIBE_STDOUT "") + endif() + if("${DESCRIBE_TAG}.0.0" MATCHES "^([0-9]+)\\.([0-9]+)\\.([0-9]+).*$") + set(CPACK_PACKAGE_VERSION_MAJOR "${CMAKE_MATCH_1}") + set(CPACK_PACKAGE_VERSION_MINOR "${CMAKE_MATCH_2}") + set(CPACK_PACKAGE_VERSION_PATCH "${CMAKE_MATCH_3}") + endif() -if(IS_SUBPROJECT) - set(OGS_VERSION x.x.x) -else() - GIT_GET_TAG(GIT_DESCRIBE) - if(GIT_DESCRIBE) - string(REGEX MATCH ^[0-9|\\.]+ GIT_TAG ${GIT_DESCRIBE}) - set(OGS_VERSION ${GIT_DESCRIBE}) - - if(GIT_DESCRIBE MATCHES ".*-.*-.*") - # Commit is not a tag - string(REGEX MATCH "-([0-9]+)-" GIT_COMMITS_AFTER_TAG ${GIT_DESCRIBE}) - else() - set(OGS_VERSION ${GIT_TAG}) - endif() - message(STATUS "OGS version: ${OGS_VERSION}") - else() - message(WARNING "Git repository contains no tags! Please run: git fetch --tags") + set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") + if(DESCRIBE_COMMIT_COUNT GREATER 0) + set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}-${DESCRIBE_COMMIT_COUNT}") endif() + + set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}-${DESCRIBE_COMMIT_NAME}") + + if(DESCRIBE_DIRTY) + string(TIMESTAMP DESCRIBE_DIRTY_TIMESTAMP "%Y%m%d%H%M%S" UTC) + set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}.dirty.${DESCRIBE_DIRTY_TIMESTAMP}") + endif() + set(OGS_VERSION ${CPACK_PACKAGE_VERSION}) + message(STATUS "OGS VERSION: ${CPACK_PACKAGE_VERSION}") +else() + message(WARNING "Git repository contains no tags! Please run: git fetch --tags") endif()