summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Help/release/dev/cpack-rpm-adding-dist-to-release-tag.rst7
-rw-r--r--Modules/CPackRPM.cmake27
-rw-r--r--Tests/RunCMake/CPack/RPM/RPM_DIST-ExpectedFiles.cmake5
-rw-r--r--Tests/RunCMake/CPack/RPM/RPM_DIST-VerifyResult.cmake11
-rw-r--r--Tests/RunCMake/CPack/RPM_DIST.cmake4
-rw-r--r--Tests/RunCMake/CPack/RunCMakeTest.cmake1
6 files changed, 52 insertions, 3 deletions
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 0000000..42599a9
--- /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/Modules/CPackRPM.cmake b/Modules/CPackRPM.cmake
index dca5f00..aecb7fc 100644
--- a/Modules/CPackRPM.cmake
+++ b/Modules/CPackRPM.cmake
@@ -104,10 +104,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.
@@ -1341,7 +1358,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
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 0000000..3b5a347
--- /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 0000000..7375ecc
--- /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 0000000..eb2a123
--- /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 0f3fc57..759295f 100644
--- a/Tests/RunCMake/CPack/RunCMakeTest.cmake
+++ b/Tests/RunCMake/CPack/RunCMakeTest.cmake
@@ -12,6 +12,7 @@ run_cpack_test(EMPTY_DIR "RPM;DEB;TGZ" true)
run_cpack_test(COMPONENTS_EMPTY_DIR "RPM;DEB;TGZ" true)
run_cpack_test(RPM_CUSTOM_NAMES "RPM" true)
run_cpack_test(PER_COMPONENT_FIELDS "RPM;DEB" false)
+run_cpack_test(RPM_DIST "RPM" false)
run_cpack_test(INSTALL_SCRIPTS "RPM" false)
run_cpack_test(DEB_GENERATE_SHLIBS "DEB" true)
run_cpack_test(DEB_GENERATE_SHLIBS_LDCONFIG "DEB" true)