diff --git a/CMake/CPackProjectConfig.cmake.in b/CMake/CPackProjectConfig.cmake.in new file mode 100644 index 0000000000..b88d44b865 --- /dev/null +++ b/CMake/CPackProjectConfig.cmake.in @@ -0,0 +1,24 @@ +# This is included by CPack (CPACK_PROJECT_CONFIG_FILE) during package generation + +set(PROJECT_SOURCE_DIR "@PROJECT_SOURCE_DIR@") +set(DISTRIBUTOR "@DISTRIBUTOR@") +set(DOLPHIN_DEFAULT_UPDATE_TRACK "@DOLPHIN_DEFAULT_UPDATE_TRACK@") +set(GIT_FOUND "@GIT_FOUND@") +set(GIT_EXECUTABLE "@GIT_EXECUTABLE@") +set(DOLPHIN_WC_REVISION "@DOLPHIN_WC_REVISION@") +set(DOLPHIN_WC_DESCRIBE "@DOLPHIN_WC_DESCRIBE@") +set(DOLPHIN_WC_BRANCH "@DOLPHIN_WC_BRANCH@") +set(DOLPHIN_WC_COMMITS_AHEAD_MASTER "0") # Fallback +set(CMAKE_OSX_DEPLOYMENT_TARGET "@CMAKE_OSX_DEPLOYMENT_TARGET@") + +include("${PROJECT_SOURCE_DIR}/CMake/GetScmRev.cmake") + +set(CPACK_PACKAGE_VERSION_MAJOR "${DOLPHIN_VERSION_MAJOR}") +set(CPACK_PACKAGE_VERSION_MINOR "${DOLPHIN_VERSION_MINOR}") +if(DOLPHIN_WC_BRANCH STREQUAL "stable") + set(CPACK_PACKAGE_VERSION_PATCH "${DOLPHIN_VERSION_PATCH}") +else() + set(CPACK_PACKAGE_VERSION_PATCH "${DOLPHIN_WC_COMMITS_AHEAD_MASTER}") +endif() +set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") +set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}") diff --git a/CMake/GetScmRev.cmake b/CMake/GetScmRev.cmake new file mode 100644 index 0000000000..a7ffe7c330 --- /dev/null +++ b/CMake/GetScmRev.cmake @@ -0,0 +1,54 @@ +cmake_minimum_required(VERSION 3.13) + +# for revision info +if(GIT_FOUND) + # defines DOLPHIN_WC_REVISION + execute_process(WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} rev-parse HEAD + OUTPUT_VARIABLE DOLPHIN_WC_REVISION + OUTPUT_STRIP_TRAILING_WHITESPACE) + # defines DOLPHIN_WC_DESCRIBE + execute_process(WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} describe --always --long --dirty + OUTPUT_VARIABLE DOLPHIN_WC_DESCRIBE + OUTPUT_STRIP_TRAILING_WHITESPACE) + + # remove hash (and trailing "-0" if needed) from description + string(REGEX REPLACE "(-0)?-[^-]+((-dirty)?)$" "\\2" DOLPHIN_WC_DESCRIBE "${DOLPHIN_WC_DESCRIBE}") + + # defines DOLPHIN_WC_BRANCH + execute_process(WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD + OUTPUT_VARIABLE DOLPHIN_WC_BRANCH + OUTPUT_STRIP_TRAILING_WHITESPACE) + # defines DOLPHIN_WC_COMMITS_AHEAD_MASTER + execute_process(WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} rev-list --count HEAD ^master + OUTPUT_VARIABLE DOLPHIN_WC_COMMITS_AHEAD_MASTER + OUTPUT_STRIP_TRAILING_WHITESPACE) + + # defines DOLPHIN_WC_TAG + execute_process(WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} describe --exact-match HEAD + OUTPUT_VARIABLE DOLPHIN_WC_TAG + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET) +endif() + +string(TIMESTAMP DOLPHIN_WC_BUILD_DATE "%Y-%m-%d" UTC) + +# version number +set(DOLPHIN_VERSION_MAJOR "2506") +set(DOLPHIN_VERSION_MINOR "0") +set(DOLPHIN_VERSION_PATCH ${DOLPHIN_WC_REVISION}) + +# If Dolphin is not built from a Git repository, default the version info to +# reasonable values. +if(NOT DOLPHIN_WC_REVISION) + set(DOLPHIN_WC_DESCRIBE "${DOLPHIN_VERSION_MAJOR}.${DOLPHIN_VERSION_MINOR}") + set(DOLPHIN_WC_REVISION "${DOLPHIN_WC_DESCRIBE} (no further info)") + set(DOLPHIN_WC_BRANCH "master") + set(DOLPHIN_WC_COMMITS_AHEAD_MASTER 0) +endif() + +# If this is a tag (i.e. a release), then set the current patch version and +# the number of commits ahead to zero. +if(DOLPHIN_WC_TAG) + set(DOLPHIN_VERSION_PATCH "0") + set(DOLPHIN_WC_COMMITS_AHEAD_MASTER 0) +endif() diff --git a/CMake/ScmRevGen.cmake b/CMake/ScmRevGen.cmake index 753592300c..4acf61b007 100644 --- a/CMake/ScmRevGen.cmake +++ b/CMake/ScmRevGen.cmake @@ -1,57 +1,6 @@ cmake_minimum_required(VERSION 3.13) -# for revision info -if(GIT_FOUND) - # defines DOLPHIN_WC_REVISION - execute_process(WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} rev-parse HEAD - OUTPUT_VARIABLE DOLPHIN_WC_REVISION - OUTPUT_STRIP_TRAILING_WHITESPACE) - # defines DOLPHIN_WC_DESCRIBE - execute_process(WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} describe --always --long --dirty - OUTPUT_VARIABLE DOLPHIN_WC_DESCRIBE - OUTPUT_STRIP_TRAILING_WHITESPACE) - - # remove hash (and trailing "-0" if needed) from description - string(REGEX REPLACE "(-0)?-[^-]+((-dirty)?)$" "\\2" DOLPHIN_WC_DESCRIBE "${DOLPHIN_WC_DESCRIBE}") - - # defines DOLPHIN_WC_BRANCH - execute_process(WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD - OUTPUT_VARIABLE DOLPHIN_WC_BRANCH - OUTPUT_STRIP_TRAILING_WHITESPACE) - # defines DOLPHIN_WC_COMMITS_AHEAD_MASTER - execute_process(WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} rev-list --count HEAD ^master - OUTPUT_VARIABLE DOLPHIN_WC_COMMITS_AHEAD_MASTER - OUTPUT_STRIP_TRAILING_WHITESPACE) - - # defines DOLPHIN_WC_TAG - execute_process(WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} describe --exact-match HEAD - OUTPUT_VARIABLE DOLPHIN_WC_TAG - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_QUIET) -endif() - -string(TIMESTAMP DOLPHIN_WC_BUILD_DATE "%Y-%m-%d" UTC) - -# version number -set(DOLPHIN_VERSION_MAJOR "2506") -set(DOLPHIN_VERSION_MINOR "0") -set(DOLPHIN_VERSION_PATCH ${DOLPHIN_WC_REVISION}) - -# If Dolphin is not built from a Git repository, default the version info to -# reasonable values. -if(NOT DOLPHIN_WC_REVISION) - set(DOLPHIN_WC_DESCRIBE "${DOLPHIN_VERSION_MAJOR}.${DOLPHIN_VERSION_MINOR}") - set(DOLPHIN_WC_REVISION "${DOLPHIN_WC_DESCRIBE} (no further info)") - set(DOLPHIN_WC_BRANCH "master") - set(DOLPHIN_WC_COMMITS_AHEAD_MASTER 0) -endif() - -# If this is a tag (i.e. a release), then set the current patch version and -# the number of commits ahead to zero. -if(DOLPHIN_WC_TAG) - set(DOLPHIN_VERSION_PATCH "0") - set(DOLPHIN_WC_COMMITS_AHEAD_MASTER 0) -endif() +include("${PROJECT_SOURCE_DIR}/CMake/GetScmRev.cmake") function(configure_source_file path) configure_file( diff --git a/CMakeLists.txt b/CMakeLists.txt index b67e31838d..81f9ec2f0c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -899,6 +899,11 @@ set(CPACK_SOURCE_GENERATOR "TGZ;TBZ2;ZIP") set(CPACK_SOURCE_IGNORE_FILES "\\\\.#;/#;.*~;\\\\.swp;/\\\\.git") list(APPEND CPACK_SOURCE_IGNORE_FILES "${CMAKE_BINARY_DIR}") +# Additional options generated at cpack generation time (like version) +configure_file("${PROJECT_SOURCE_DIR}/CMake/CPackProjectConfig.cmake.in" + "${PROJECT_BINARY_DIR}/CMake/CPackProjectConfig.cmake" @ONLY) +set(CPACK_PROJECT_CONFIG_FILE "${PROJECT_BINARY_DIR}/CMake/CPackProjectConfig.cmake") + # CPack must be included after the CPACK_* variables are set in order for those # variables to take effect. Include(CPack)