From f7003a60557e828f08ee893c5da78b24423b5223 Mon Sep 17 00:00:00 2001 From: Harry Mallon Date: Wed, 11 May 2016 11:21:11 +0200 Subject: [PATCH 1/2] CPack/RPM release dist tag support Some Linux distros require Release tag to be set to . --- Modules/CPackRPM.cmake | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/Modules/CPackRPM.cmake b/Modules/CPackRPM.cmake index 768d64fe7..330fc1eba 100644 --- a/Modules/CPackRPM.cmake +++ b/Modules/CPackRPM.cmake @@ -80,10 +80,27 @@ # # This is the numbering of the RPM package itself, i.e. the version of the # packaging and not the version of the content (see -# CPACK_RPM_PACKAGE_VERSION). One may change the default value if the -# previous packaging was buggy and/or you want to put here a fancy Linux +# :variable:`CPACK_RPM_PACKAGE_VERSION`). One may change the default value if +# the previous packaging was buggy and/or you want to put here a fancy Linux # distro specific numbering. # +# .. note:: +# +# This is the string that goes into the RPM ``Release:`` field. Some distros +# (e.g. Fedora, CentOS) require ``1%{?dist}`` format and not just a number. +# ``%{?dist}`` part can be added by setting :variable:`CPACK_RPM_PACKAGE_RELEASE_DIST`. +# +# .. variable:: CPACK_RPM_PACKAGE_RELEASE_DIST +# +# The dist tag that is added RPM ``Release:`` field. +# +# * Mandatory : NO +# * Default : OFF +# +# This is the reported ``%{dist}`` tag from the current distribution or empty +# ``%{dist}`` if RPM macro is not set. If this variable is set then RPM +# ``Release:`` field value is set to ``${CPACK_RPM_PACKAGE_RELEASE}%{?dist}``. +# # .. variable:: CPACK_RPM_PACKAGE_LICENSE # # The RPM package license policy. @@ -1317,7 +1334,11 @@ function(cpack_rpm_generate_package) # This is the case when the packaging is buggy (not) the software :=) # If not set, 1 is a good candidate if(NOT CPACK_RPM_PACKAGE_RELEASE) - set(CPACK_RPM_PACKAGE_RELEASE 1) + set(CPACK_RPM_PACKAGE_RELEASE "1") + endif() + + if(CPACK_RPM_PACKAGE_RELEASE_DIST) + set(CPACK_RPM_PACKAGE_RELEASE "${CPACK_RPM_PACKAGE_RELEASE}%{?dist}") endif() # CPACK_RPM_PACKAGE_LICENSE From f5089cfccd96f2c94838faa1736fa452ae4bb853 Mon Sep 17 00:00:00 2001 From: Domen Vrankar Date: Wed, 11 May 2016 21:14:26 +0200 Subject: [PATCH 2/2] CPack/RPM adding dist to release tag test Tests and release notes --- .../dev/cpack-rpm-adding-dist-to-release-tag.rst | 7 +++++++ Tests/RunCMake/CPack/RPM/RPM_DIST-ExpectedFiles.cmake | 5 +++++ Tests/RunCMake/CPack/RPM/RPM_DIST-VerifyResult.cmake | 11 +++++++++++ Tests/RunCMake/CPack/RPM_DIST.cmake | 4 ++++ Tests/RunCMake/CPack/RunCMakeTest.cmake | 1 + 5 files changed, 28 insertions(+) create mode 100644 Help/release/dev/cpack-rpm-adding-dist-to-release-tag.rst create mode 100644 Tests/RunCMake/CPack/RPM/RPM_DIST-ExpectedFiles.cmake create mode 100644 Tests/RunCMake/CPack/RPM/RPM_DIST-VerifyResult.cmake create mode 100644 Tests/RunCMake/CPack/RPM_DIST.cmake diff --git a/Help/release/dev/cpack-rpm-adding-dist-to-release-tag.rst b/Help/release/dev/cpack-rpm-adding-dist-to-release-tag.rst new file mode 100644 index 000000000..42599a91c --- /dev/null +++ b/Help/release/dev/cpack-rpm-adding-dist-to-release-tag.rst @@ -0,0 +1,7 @@ +cpack-rpm-adding-dist-to-release-tag +------------------------------------ + +* The :module:`CPackRPM` module learned how to set RPM ``dist`` tag as part of + RPM ``Release:`` tag when enabled (mandatory on some Linux distributions for + e.g. on Fedora). + See :variable:`CPACK_RPM_PACKAGE_RELEASE_DIST`. diff --git a/Tests/RunCMake/CPack/RPM/RPM_DIST-ExpectedFiles.cmake b/Tests/RunCMake/CPack/RPM/RPM_DIST-ExpectedFiles.cmake new file mode 100644 index 000000000..3b5a3479b --- /dev/null +++ b/Tests/RunCMake/CPack/RPM/RPM_DIST-ExpectedFiles.cmake @@ -0,0 +1,5 @@ +set(whitespaces_ "[\t\n\r ]*") + +set(EXPECTED_FILES_COUNT "1") +set(EXPECTED_FILE_1 "rpm_dist*.rpm") +set(EXPECTED_FILE_CONTENT_1 "^/usr/foo${whitespaces_}/usr/foo/CMakeLists.txt$") diff --git a/Tests/RunCMake/CPack/RPM/RPM_DIST-VerifyResult.cmake b/Tests/RunCMake/CPack/RPM/RPM_DIST-VerifyResult.cmake new file mode 100644 index 000000000..7375ecc21 --- /dev/null +++ b/Tests/RunCMake/CPack/RPM/RPM_DIST-VerifyResult.cmake @@ -0,0 +1,11 @@ +execute_process(COMMAND ${RPMBUILD_EXECUTABLE} -E %{?dist} + OUTPUT_VARIABLE DIST_TAG + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + +set(whitespaces_ "[\t\n\r ]*") + +getPackageInfo("${FOUND_FILE_1}" "FILE_INFO_") +if(NOT FILE_INFO_ MATCHES ".*Release${whitespaces_}:${whitespaces_}1${DIST_TAG}") + message(FATAL_ERROR "Unexpected Release in '${FOUND_FILE_1}'; file info: '${FILE_INFO_}'") +endif() diff --git a/Tests/RunCMake/CPack/RPM_DIST.cmake b/Tests/RunCMake/CPack/RPM_DIST.cmake new file mode 100644 index 000000000..eb2a1232e --- /dev/null +++ b/Tests/RunCMake/CPack/RPM_DIST.cmake @@ -0,0 +1,4 @@ +install(FILES CMakeLists.txt DESTINATION foo COMPONENT test) + +set(CPACK_RPM_PACKAGE_RELEASE_DIST ON) +set(CPACK_PACKAGE_NAME "rpm_dist") diff --git a/Tests/RunCMake/CPack/RunCMakeTest.cmake b/Tests/RunCMake/CPack/RunCMakeTest.cmake index ee4112d4d..7f756c47f 100644 --- a/Tests/RunCMake/CPack/RunCMakeTest.cmake +++ b/Tests/RunCMake/CPack/RunCMakeTest.cmake @@ -11,4 +11,5 @@ run_cpack_test(DEPENDENCIES "RPM;DEB" true) run_cpack_test(EMPTY_DIR "RPM;DEB;TGZ" true) run_cpack_test(COMPONENTS_EMPTY_DIR "RPM;DEB;TGZ" true) run_cpack_test(PER_COMPONENT_FIELDS "RPM;DEB" false) +run_cpack_test(RPM_DIST "RPM" false) run_cpack_test(INSTALL_SCRIPTS "RPM" false)