Commit 529729d6 authored by Domen Vrankar's avatar Domen Vrankar
Browse files

CPack/Deb: CPACK_DEBIAN_PACKAGE_VERSION regex testing exception

CPACK_DEBIAN_PACKAGE_VERSION variable could in the past also
contain release and epoch version so regex test should expect
the entire versioning if both CPACK_DEBIAN_PACKAGE_RELEASE
and CPACK_DEBIAN_PACKAGE_EPOCH are not set.
Also since the checks were not performed in the past the regex
test of CPACK_DEBIAN_PACKAGE_VERSION variable content should
only report author warnings instead of errors in case of the
test fail.

Fixes: #17339
parent 9c812654
......@@ -110,6 +110,14 @@
# :variable:`CPACK_DEBIAN_PACKAGE_RELEASE` is not set then hyphens are not
# allowed.
#
# .. note::
#
# For backward compatibility with CMake 3.9 and lower a failed test of this
# variable's content is not a hard error when both
# :variable:`CPACK_DEBIAN_PACKAGE_RELEASE` and
# :variable:`CPACK_DEBIAN_PACKAGE_EPOCH` variables are not set. An author
# warning is reported instead.
#
# .. variable:: CPACK_DEBIAN_PACKAGE_RELEASE
#
# The Debian package release - Debian revision number.
......@@ -753,9 +761,22 @@ function(cpack_deb_prepare_package_vars)
set(CPACK_DEBIAN_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION})
endif()
if(NOT CPACK_DEBIAN_PACKAGE_VERSION MATCHES "^[0-9][A-Za-z0-9.+-~]*$")
message(FATAL_ERROR
"CPackDeb: Debian package version must confirm to \"^[0-9][A-Za-z0-9.+-~]*$\" regex!")
if(DEFINED CPACK_DEBIAN_PACKAGE_RELEASE OR DEFINED CPACK_DEBIAN_PACKAGE_EPOCH)
# only test the version format if CPACK_DEBIAN_PACKAGE_RELEASE or
# CPACK_DEBIAN_PACKAGE_EPOCH is set
if(NOT CPACK_DEBIAN_PACKAGE_VERSION MATCHES "^[0-9][A-Za-z0-9.+-~]*$")
message(FATAL_ERROR
"CPackDeb: Debian package version must confirm to \"^[0-9][A-Za-z0-9.+-~]*$\" regex!")
endif()
else()
# before CMake 3.10 version format was not tested so only warn to preserve
# backward compatibility
if(NOT CPACK_DEBIAN_PACKAGE_VERSION MATCHES "^([0-9]+:)?[0-9][A-Za-z0-9.+~-]*$")
message(AUTHOR_WARNING
"CPackDeb: Debian package versioning ([<epoch>:]<version>[-<release>])"
" should confirm to \"^([0-9]+:)?[0-9][A-Za-z0-9.+~-]*$\" regex in"
" order to satisfy Debian packaging rules.")
endif()
endif()
if(CPACK_DEBIAN_PACKAGE_RELEASE)
......@@ -765,9 +786,15 @@ function(cpack_deb_prepare_package_vars)
endif()
string(APPEND CPACK_DEBIAN_PACKAGE_VERSION
"-${CPACK_DEBIAN_PACKAGE_RELEASE}")
elseif(CPACK_DEBIAN_PACKAGE_VERSION MATCHES ".*-.*")
message(FATAL_ERROR
"CPackDeb: Debian package version must not contain hyphens when CPACK_DEBIAN_PACKAGE_RELEASE is not provided!")
elseif(DEFINED CPACK_DEBIAN_PACKAGE_EPOCH)
# only test the version format if CPACK_DEBIAN_PACKAGE_RELEASE or
# CPACK_DEBIAN_PACKAGE_EPOCH is set - versions CPack/Deb generator before
# CMake 3.10 did not check for version format so we have to preserve
# backward compatibility
if(CPACK_DEBIAN_PACKAGE_VERSION MATCHES ".*-.*")
message(FATAL_ERROR
"CPackDeb: Debian package version must not contain hyphens when CPACK_DEBIAN_PACKAGE_RELEASE is not provided!")
endif()
endif()
if(CPACK_DEBIAN_PACKAGE_EPOCH)
......
......@@ -29,3 +29,4 @@ run_cpack_test(SYMLINKS "RPM;TGZ" false "MONOLITHIC;COMPONENT")
run_cpack_test(USER_FILELIST "RPM" false "MONOLITHIC")
run_cpack_test(MD5SUMS "DEB" false "MONOLITHIC;COMPONENT")
run_cpack_test(CPACK_INSTALL_SCRIPT "ZIP" false "MONOLITHIC")
run_cpack_test(DEB_PACKAGE_VERSION_BACK_COMPATIBILITY "DEB" false "MONOLITHIC;COMPONENT")
set(EXPECTED_FILES_COUNT "1")
set(EXPECTED_FILE_CONTENT_1_LIST "/usr;/usr/foo;/usr/foo/CMakeLists.txt")
function(checkPackageInfo_ TYPE FILE REGEX)
getPackageInfo("${FILE}" "FILE_INFO_")
if(NOT FILE_INFO_ MATCHES "${REGEX}")
message(FATAL_ERROR "Unexpected ${TYPE} in '${FILE}' ${EXPECTED_FILE_1_VERSION} ${EXPECTED_FILE_1_REVISION}; file info: '${FILE_INFO_}'")
endif()
endfunction()
set(whitespaces_ "[\t\n\r ]*")
checkPackageInfo_("version" "${FOUND_FILE_1}"
".*Version${whitespaces_}:${whitespaces_}5.0.1-71-g884852e")
install(FILES CMakeLists.txt DESTINATION foo COMPONENT test)
set(CPACK_DEBIAN_PACKAGE_VERSION "5.0.1-71-g884852e")
if(PACKAGING_TYPE STREQUAL "COMPONENT")
set(CPACK_COMPONENTS_ALL test)
endif()
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment