From ed015bde2b6fe526f5f840f43c1c12ba45d5663f Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 26 Jul 2018 10:28:54 -0400 Subject: CPack: Restore support for 0-valued version components In commit v3.12.0-rc1~136^2 (CPack: Use project version as default for `CPACK_PACKAGE_VERSION`, 2018-04-29) we did not account for the value of `CMAKE_PROJECT_VERSION_{MAJOR,MINOR,PATCH}` having `0`. Fix the logic to distinguish between unprovided version components and `0` components. While at it, add a test case covering the behavior described in the documentation by the original commit. The number of version components in the package name should match those provided to the `project()` command `VERSION` option. Fixes: #18199 --- Modules/CPack.cmake | 27 ++++++++++++++----------- Tests/RunCMake/CPackConfig/RunCMakeTest.cmake | 3 +++ Tests/RunCMake/CPackConfig/Version1-check.cmake | 6 ++++++ Tests/RunCMake/CPackConfig/Version1.cmake | 1 + Tests/RunCMake/CPackConfig/Version2-check.cmake | 6 ++++++ Tests/RunCMake/CPackConfig/Version2.cmake | 1 + Tests/RunCMake/CPackConfig/Version3-check.cmake | 6 ++++++ Tests/RunCMake/CPackConfig/Version3.cmake | 1 + 8 files changed, 39 insertions(+), 12 deletions(-) create mode 100644 Tests/RunCMake/CPackConfig/Version1-check.cmake create mode 100644 Tests/RunCMake/CPackConfig/Version1.cmake create mode 100644 Tests/RunCMake/CPackConfig/Version2-check.cmake create mode 100644 Tests/RunCMake/CPackConfig/Version2.cmake create mode 100644 Tests/RunCMake/CPackConfig/Version3-check.cmake create mode 100644 Tests/RunCMake/CPackConfig/Version3.cmake diff --git a/Modules/CPack.cmake b/Modules/CPack.cmake index 8070869..cdc38a6 100644 --- a/Modules/CPack.cmake +++ b/Modules/CPack.cmake @@ -403,28 +403,31 @@ endfunction() # Set the package name _cpack_set_default(CPACK_PACKAGE_NAME "${CMAKE_PROJECT_NAME}") -if(CMAKE_PROJECT_VERSION_MAJOR) + +# Set the package version +if(CMAKE_PROJECT_VERSION_MAJOR GREATER_EQUAL 0) _cpack_set_default(CPACK_PACKAGE_VERSION_MAJOR "${CMAKE_PROJECT_VERSION_MAJOR}") - if(CMAKE_PROJECT_VERSION_MINOR) + if(CMAKE_PROJECT_VERSION_MINOR GREATER_EQUAL 0) _cpack_set_default(CPACK_PACKAGE_VERSION_MINOR "${CMAKE_PROJECT_VERSION_MINOR}") - if(CMAKE_PROJECT_VERSION_PATCH) + if(CMAKE_PROJECT_VERSION_PATCH GREATER_EQUAL 0) _cpack_set_default(CPACK_PACKAGE_VERSION_PATCH "${CMAKE_PROJECT_VERSION_PATCH}") - _cpack_set_default(CPACK_PACKAGE_VERSION - "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") - else() - _cpack_set_default(CPACK_PACKAGE_VERSION - "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}") endif() - else() - _cpack_set_default(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}") endif() else() _cpack_set_default(CPACK_PACKAGE_VERSION_MAJOR "0") _cpack_set_default(CPACK_PACKAGE_VERSION_MINOR "1") _cpack_set_default(CPACK_PACKAGE_VERSION_PATCH "1") - _cpack_set_default(CPACK_PACKAGE_VERSION - "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") endif() +if(NOT DEFINED CPACK_PACKAGE_VERSION) + set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}") + if(CPACK_PACKAGE_VERSION_MINOR GREATER_EQUAL 0) + string(APPEND CPACK_PACKAGE_VERSION ".${CPACK_PACKAGE_VERSION_MINOR}") + if(CPACK_PACKAGE_VERSION_PATCH GREATER_EQUAL 0) + string(APPEND CPACK_PACKAGE_VERSION ".${CPACK_PACKAGE_VERSION_PATCH}") + endif() + endif() +endif() + _cpack_set_default(CPACK_PACKAGE_VENDOR "Humanity") if(CMAKE_PROJECT_DESCRIPTION) _cpack_set_default(CPACK_PACKAGE_DESCRIPTION_SUMMARY diff --git a/Tests/RunCMake/CPackConfig/RunCMakeTest.cmake b/Tests/RunCMake/CPackConfig/RunCMakeTest.cmake index 16d2cf3..8f2196d 100644 --- a/Tests/RunCMake/CPackConfig/RunCMakeTest.cmake +++ b/Tests/RunCMake/CPackConfig/RunCMakeTest.cmake @@ -4,3 +4,6 @@ run_cmake(Simple) run_cmake(Default) run_cmake(Special) run_cmake(Verbatim) +run_cmake(Version1) +run_cmake(Version2) +run_cmake(Version3) diff --git a/Tests/RunCMake/CPackConfig/Version1-check.cmake b/Tests/RunCMake/CPackConfig/Version1-check.cmake new file mode 100644 index 0000000..0f5347f --- /dev/null +++ b/Tests/RunCMake/CPackConfig/Version1-check.cmake @@ -0,0 +1,6 @@ +include(${RunCMake_SOURCE_DIR}/check.cmake) + +test_variable(CPACK_PACKAGE_VERSION "0") +test_variable(CPACK_PACKAGE_VERSION_MAJOR "0") +test_variable(CPACK_PACKAGE_VERSION_MINOR "") +test_variable(CPACK_PACKAGE_VERSION_PATCH "") diff --git a/Tests/RunCMake/CPackConfig/Version1.cmake b/Tests/RunCMake/CPackConfig/Version1.cmake new file mode 100644 index 0000000..703485c --- /dev/null +++ b/Tests/RunCMake/CPackConfig/Version1.cmake @@ -0,0 +1 @@ +project(Version LANGUAGES NONE VERSION 0) diff --git a/Tests/RunCMake/CPackConfig/Version2-check.cmake b/Tests/RunCMake/CPackConfig/Version2-check.cmake new file mode 100644 index 0000000..3a2d572 --- /dev/null +++ b/Tests/RunCMake/CPackConfig/Version2-check.cmake @@ -0,0 +1,6 @@ +include(${RunCMake_SOURCE_DIR}/check.cmake) + +test_variable(CPACK_PACKAGE_VERSION "1.0") +test_variable(CPACK_PACKAGE_VERSION_MAJOR "1") +test_variable(CPACK_PACKAGE_VERSION_MINOR "0") +test_variable(CPACK_PACKAGE_VERSION_PATCH "") diff --git a/Tests/RunCMake/CPackConfig/Version2.cmake b/Tests/RunCMake/CPackConfig/Version2.cmake new file mode 100644 index 0000000..c084137 --- /dev/null +++ b/Tests/RunCMake/CPackConfig/Version2.cmake @@ -0,0 +1 @@ +project(Version LANGUAGES NONE VERSION 1.0) diff --git a/Tests/RunCMake/CPackConfig/Version3-check.cmake b/Tests/RunCMake/CPackConfig/Version3-check.cmake new file mode 100644 index 0000000..d4a3983 --- /dev/null +++ b/Tests/RunCMake/CPackConfig/Version3-check.cmake @@ -0,0 +1,6 @@ +include(${RunCMake_SOURCE_DIR}/check.cmake) + +test_variable(CPACK_PACKAGE_VERSION "1.1.0") +test_variable(CPACK_PACKAGE_VERSION_MAJOR "1") +test_variable(CPACK_PACKAGE_VERSION_MINOR "1") +test_variable(CPACK_PACKAGE_VERSION_PATCH "0") diff --git a/Tests/RunCMake/CPackConfig/Version3.cmake b/Tests/RunCMake/CPackConfig/Version3.cmake new file mode 100644 index 0000000..4df28bb --- /dev/null +++ b/Tests/RunCMake/CPackConfig/Version3.cmake @@ -0,0 +1 @@ +project(Version LANGUAGES NONE VERSION 1.1.0) -- cgit v0.12