diff options
-rw-r--r-- | Help/cpack_gen/rpm.rst | 6 | ||||
-rw-r--r-- | Modules/Internal/CPack/CPackRPM.cmake | 15 | ||||
-rw-r--r-- | Tests/RunCMake/CPack/tests/SUGGESTS/VerifyResult.cmake | 20 | ||||
-rw-r--r-- | Tests/RunCMake/CPack/tests/SUGGESTS/test_suggests.spec | 22 |
4 files changed, 50 insertions, 13 deletions
diff --git a/Help/cpack_gen/rpm.rst b/Help/cpack_gen/rpm.rst index 5260a1d..322ab68 100644 --- a/Help/cpack_gen/rpm.rst +++ b/Help/cpack_gen/rpm.rst @@ -394,8 +394,10 @@ List of CPack RPM generator specific variables: * Mandatory : NO * Default : - - May be used to set weak RPM dependencies (suggests). Note that you must - enclose the complete requires string between quotes. + May be used to set weak RPM dependencies (suggests). If ``rpmbuild`` doesn't + support the ``Suggests`` tag, CPack will emit a warning and ignore this + variable. Note that you must enclose the complete requires string between + quotes. .. variable:: CPACK_RPM_PACKAGE_PROVIDES CPACK_RPM_<component>_PACKAGE_PROVIDES diff --git a/Modules/Internal/CPack/CPackRPM.cmake b/Modules/Internal/CPack/CPackRPM.cmake index bece2dd..47d2a5c 100644 --- a/Modules/Internal/CPack/CPackRPM.cmake +++ b/Modules/Internal/CPack/CPackRPM.cmake @@ -1074,6 +1074,21 @@ function(cpack_rpm_generate_package) OUTPUT_STRIP_TRAILING_WHITESPACE) string(REPLACE "\n" ";" RPMBUILD_TAG_LIST "${RPMBUILD_TAG_LIST}") + # In some versions of RPM, weak dependency tags are present in the --querytags + # list, but unsupported by rpmbuild. A different method must be used to check + # if they are supported. + + execute_process( + COMMAND ${RPM_EXECUTABLE} --suggests + ERROR_QUIET + RESULT_VARIABLE RPMBUILD_SUGGESTS_RESULT) + + if(NOT RPMBUILD_SUGGESTS_RESULT EQUAL 0) + foreach(_WEAK_DEP SUGGESTS RECOMMENDS SUPPLEMENTS ENHANCES) + list(REMOVE_ITEM RPMBUILD_TAG_LIST ${_WEAK_DEP}) + endforeach() + endif() + if(CPACK_RPM_PACKAGE_EPOCH) set(TMP_RPM_EPOCH "Epoch: ${CPACK_RPM_PACKAGE_EPOCH}") endif() diff --git a/Tests/RunCMake/CPack/tests/SUGGESTS/VerifyResult.cmake b/Tests/RunCMake/CPack/tests/SUGGESTS/VerifyResult.cmake index 61ce752..d1d615b 100644 --- a/Tests/RunCMake/CPack/tests/SUGGESTS/VerifyResult.cmake +++ b/Tests/RunCMake/CPack/tests/SUGGESTS/VerifyResult.cmake @@ -1,15 +1,13 @@ -execute_process(COMMAND ${RPMBUILD_EXECUTABLE} --querytags - OUTPUT_VARIABLE RPMBUILD_CAPS - RESULT_VARIABLE RPMBUILD_CAPS_RESULT) +# CPack uses `rpm --suggests` to check if rpmbuild supports the "Suggests:" tag. +# This test intentionally uses a different method (build a test .spec) so any +# problems will be caught early if functionality should change in the future. +execute_process( + COMMAND ${RPMBUILD_EXECUTABLE} --nobuild test_suggests.spec + ERROR_QUIET + RESULT_VARIABLE RPMBUILD_SUGGESTS_RESULT) -if(NOT RPMBUILD_CAPS_RESULT) - string(REPLACE "\n" ";" RPMBUILD_CAPS "${RPMBUILD_CAPS}") - cmake_policy(PUSH) - cmake_policy(SET CMP0057 NEW) - if(SUGGESTS IN_LIST RPMBUILD_CAPS) - set(should_contain_suggests_tag_ true) - endif() - cmake_policy(POP) +if(RPMBUILD_SUGGESTS_RESULT EQUAL 0) + set(should_contain_suggests_tag_ true) endif() # Only verify that suggests tag is present only if that tag is supported. diff --git a/Tests/RunCMake/CPack/tests/SUGGESTS/test_suggests.spec b/Tests/RunCMake/CPack/tests/SUGGESTS/test_suggests.spec new file mode 100644 index 0000000..e766fa9 --- /dev/null +++ b/Tests/RunCMake/CPack/tests/SUGGESTS/test_suggests.spec @@ -0,0 +1,22 @@ +# This spec file is used to check if the provided version of rpmbuild supports the "Suggests:" tag + +Name: test +Version: 0 +Release: 1 +Summary: test +License: test + +Suggests: suggested_package + +%description + + +%prep + +%build +%configure +%install +%clean +%files +%doc +%changelog |