diff options
author | Brad King <brad.king@kitware.com> | 2024-06-26 12:43:45 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2024-06-26 12:44:02 (GMT) |
commit | a20377e41afddb974539378cc8065d9e9f38b151 (patch) | |
tree | 69e0e5226bac46855627d3babf4b923dd2a61357 | |
parent | 0ffdd6b50fb30e0e203dbfd278665f7cbde6d735 (diff) | |
parent | 71c631c435c6075ea094ab6fe3104491ab5f9365 (diff) | |
download | CMake-a20377e41afddb974539378cc8065d9e9f38b151.zip CMake-a20377e41afddb974539378cc8065d9e9f38b151.tar.gz CMake-a20377e41afddb974539378cc8065d9e9f38b151.tar.bz2 |
Merge topic 'cpack-debian-multiarch'
71c631c435 CPack/DEB: Add Multi-Arch support
55524c48a4 CPack/DEB: Add Multi-Arch support
a022705a2e Tests/RunCMake/CPack: Improve README
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !9609
-rw-r--r-- | Help/cpack_gen/deb.rst | 25 | ||||
-rw-r--r-- | Help/release/dev/cpack-debian-multiarch.rst | 6 | ||||
-rw-r--r-- | Modules/Internal/CPack/CPackDeb.cmake | 3 | ||||
-rw-r--r-- | Source/CPack/cmCPackDebGenerator.cxx | 15 | ||||
-rw-r--r-- | Tests/RunCMake/CMakeLists.txt | 1 | ||||
-rw-r--r-- | Tests/RunCMake/CPack/README.txt | 8 | ||||
-rw-r--r-- | Tests/RunCMake/CPack/RunCMakeTest.cmake | 1 | ||||
-rw-r--r-- | Tests/RunCMake/CPack/tests/MULTIARCH/DEB-fail-stderr.txt | 1 | ||||
-rw-r--r-- | Tests/RunCMake/CPack/tests/MULTIARCH/ExpectedFiles.cmake | 5 | ||||
-rw-r--r-- | Tests/RunCMake/CPack/tests/MULTIARCH/VerifyResult.cmake | 4 | ||||
-rw-r--r-- | Tests/RunCMake/CPack/tests/MULTIARCH/test.cmake | 7 |
11 files changed, 71 insertions, 5 deletions
diff --git a/Help/cpack_gen/deb.rst b/Help/cpack_gen/deb.rst index 23436de..a4063d9 100644 --- a/Help/cpack_gen/deb.rst +++ b/Help/cpack_gen/deb.rst @@ -654,6 +654,31 @@ List of CPack DEB generator specific variables: This value is not interpreted. It is possible to pass an optional revision number of the referenced source package as well. +.. variable:: CPACK_DEBIAN_PACKAGE_MULTIARCH + CPACK_DEBIAN_<COMPONENT>_PACKAGE_MULTIARCH + + Sets the `Multi-Arch` field of the Debian package. + Packages can declare in their control file how they should handle + situations, where packages for different architectures are being installed + on the same machine. + + :Mandatory: No + :Default: + + - An empty string for non-component based installations + - :variable:`CPACK_DEBIAN_PACKAGE_MULTIARCH` for component-based + installations. + + .. versionadded:: 3.31 + Per-component :variable:`!CPACK_DEBIAN_<COMPONENT>_PACKAGE_MULTIARCH` variables. + + See https://wiki.debian.org/MultiArch/Hints + + .. note:: + + This value is validated. It must be one of the following values: + ``same``, ``foreign``, ``allowed``. + Packaging of debug information ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/Help/release/dev/cpack-debian-multiarch.rst b/Help/release/dev/cpack-debian-multiarch.rst new file mode 100644 index 0000000..f593103 --- /dev/null +++ b/Help/release/dev/cpack-debian-multiarch.rst @@ -0,0 +1,6 @@ +cpack-debian-multiarch +---------------------- + +* The :cpack_gen:`CPack DEB Generator` gained a + :variable:`CPACK_DEBIAN_PACKAGE_MULTIARCH` option + to support multi-arch packages. diff --git a/Modules/Internal/CPack/CPackDeb.cmake b/Modules/Internal/CPack/CPackDeb.cmake index d4a47e4..2b58ab1 100644 --- a/Modules/Internal/CPack/CPackDeb.cmake +++ b/Modules/Internal/CPack/CPackDeb.cmake @@ -567,7 +567,7 @@ function(cpack_deb_prepare_package_vars) # if per-component variable, overrides the global CPACK_DEBIAN_PACKAGE_${variable_type_} # automatic dependency discovery will be performed afterwards. if(CPACK_DEB_PACKAGE_COMPONENT) - foreach(value_type_ IN ITEMS DEPENDS RECOMMENDS SUGGESTS PREDEPENDS ENHANCES BREAKS CONFLICTS PROVIDES REPLACES SOURCE SECTION PRIORITY NAME) + foreach(value_type_ IN ITEMS DEPENDS RECOMMENDS SUGGESTS PREDEPENDS ENHANCES BREAKS CONFLICTS PROVIDES REPLACES MULTIARCH SOURCE SECTION PRIORITY NAME) set(_component_var "CPACK_DEBIAN_${_local_component_name}_PACKAGE_${value_type_}") # if set, overrides the global variable @@ -862,6 +862,7 @@ function(cpack_deb_prepare_package_vars) set(GEN_CPACK_DEBIAN_PACKAGE_CONFLICTS "${CPACK_DEBIAN_PACKAGE_CONFLICTS}" PARENT_SCOPE) set(GEN_CPACK_DEBIAN_PACKAGE_PROVIDES "${CPACK_DEBIAN_PACKAGE_PROVIDES}" PARENT_SCOPE) set(GEN_CPACK_DEBIAN_PACKAGE_REPLACES "${CPACK_DEBIAN_PACKAGE_REPLACES}" PARENT_SCOPE) + set(GEN_CPACK_DEBIAN_PACKAGE_MULTIARCH "${CPACK_DEBIAN_PACKAGE_MULTIARCH}" PARENT_SCOPE) set(GEN_CPACK_DEBIAN_PACKAGE_SHLIBS "${CPACK_DEBIAN_PACKAGE_SHLIBS_LIST}" PARENT_SCOPE) set(GEN_CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA}" PARENT_SCOPE) set(GEN_CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION diff --git a/Source/CPack/cmCPackDebGenerator.cxx b/Source/CPack/cmCPackDebGenerator.cxx index 31191a9..d721cf1 100644 --- a/Source/CPack/cmCPackDebGenerator.cxx +++ b/Source/CPack/cmCPackDebGenerator.cxx @@ -789,6 +789,21 @@ bool cmCPackDebGenerator::createDeb() if (cmNonempty(debian_pkg_replaces)) { controlValues["Replaces"] = *debian_pkg_replaces; } + cmValue debian_pkg_multiarch = + this->GetOption("GEN_CPACK_DEBIAN_PACKAGE_MULTIARCH"); + if (cmNonempty(debian_pkg_multiarch)) { + // check for valid values: same, foreign, allowed + if (*debian_pkg_multiarch != "same" && + *debian_pkg_multiarch != "foreign" && + *debian_pkg_multiarch != "allowed") { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error: invalid value for Multi-Arch: " + << *debian_pkg_multiarch + << ". Valid values are: same, foreign, allowed\n"); + return false; + } + controlValues["Multi-Arch"] = *debian_pkg_multiarch; + } const std::string strGenWDIR(this->GetOption("GEN_WDIR")); const std::string shlibsfilename = strGenWDIR + "/shlibs"; diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index 294beeb..bfa59d6 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -1067,6 +1067,7 @@ set(cpack_tests DEB.DEB_DESCRIPTION DEB.PROJECT_META DEB.COMPONENT_WITH_SPECIAL_CHARS + DEB.MULTIARCH RPM.AUTO_SUFFIXES RPM.CUSTOM_BINARY_SPEC_FILE diff --git a/Tests/RunCMake/CPack/README.txt b/Tests/RunCMake/CPack/README.txt index 2165125..d403db0 100644 --- a/Tests/RunCMake/CPack/README.txt +++ b/Tests/RunCMake/CPack/README.txt @@ -10,8 +10,8 @@ CPack test root directory: 'Tests/RunCMake/CPack/tests'. All phases are executed separately for each generator that is bound to a test. Tests for each generator are subtests of test 'RunCMake.CPack_<generator_name>'. -Each test must also be added to 'RunCMakeTest.cmake' script located in CPack -test root directory. +Each test must be added to list "cpack_tests" in 'Tests/RunCMake/CMakeLists.txt' +and also to 'RunCMakeTest.cmake' script located in 'Tests/RunCMake/CPack/'. Line that adds a test is: run_cpack_test(<test_name> "<generator_name_list>" <compile_stage> @@ -53,7 +53,7 @@ Test consists of - verification of generated files The phases are executed once per specified generator, packaging type and subtest -combinatiion. +combination. test prerequirements phase (optional): -------------------------------------- @@ -136,7 +136,7 @@ this step and must contain - EXPECTED_FILES_COUNT variable that contains the number of expected files that will be generated (0 or more) -- EXPECTED_FILE_<file_number_starting_with_1> that contains globing expression +- EXPECTED_FILE_<file_number_starting_with_1> that contains globbing expression that uniquely defines expected file name (will be used to find expected file) and should be present once for each expected file. NOTE: This variable should be used only as last resort as it sets generator diff --git a/Tests/RunCMake/CPack/RunCMakeTest.cmake b/Tests/RunCMake/CPack/RunCMakeTest.cmake index 5d32404..54671aa 100644 --- a/Tests/RunCMake/CPack/RunCMakeTest.cmake +++ b/Tests/RunCMake/CPack/RunCMakeTest.cmake @@ -73,3 +73,4 @@ run_cpack_test_package_target(PRE_POST_SCRIPTS "ZIP" false "MONOLITHIC;COMPONENT run_cpack_test_subtests(DUPLICATE_FILE "success;conflict_file;conflict_symlink" "TGZ" false "COMPONENT;GROUP") run_cpack_test(COMPONENT_WITH_SPECIAL_CHARS "RPM.COMPONENT_WITH_SPECIAL_CHARS;DEB.COMPONENT_WITH_SPECIAL_CHARS;7Z;TBZ2;TGZ;TXZ;TZ;ZIP;STGZ" false "MONOLITHIC;COMPONENT;GROUP") run_cpack_test_package_target(COMPONENT_WITH_SPECIAL_CHARS "RPM.COMPONENT_WITH_SPECIAL_CHARS;DEB.COMPONENT_WITH_SPECIAL_CHARS;7Z;TBZ2;TGZ;TXZ;TZ;ZIP;STGZ" false "MONOLITHIC;COMPONENT;GROUP") +run_cpack_test_subtests(MULTIARCH "same;foreign;allowed;fail" "DEB.MULTIARCH" false "MONOLITHIC;COMPONENT") diff --git a/Tests/RunCMake/CPack/tests/MULTIARCH/DEB-fail-stderr.txt b/Tests/RunCMake/CPack/tests/MULTIARCH/DEB-fail-stderr.txt new file mode 100644 index 0000000..8164e83 --- /dev/null +++ b/Tests/RunCMake/CPack/tests/MULTIARCH/DEB-fail-stderr.txt @@ -0,0 +1 @@ +Error: invalid value for Multi-Arch: fail\. Valid values are: same, foreign, allowed diff --git a/Tests/RunCMake/CPack/tests/MULTIARCH/ExpectedFiles.cmake b/Tests/RunCMake/CPack/tests/MULTIARCH/ExpectedFiles.cmake new file mode 100644 index 0000000..14b898f --- /dev/null +++ b/Tests/RunCMake/CPack/tests/MULTIARCH/ExpectedFiles.cmake @@ -0,0 +1,5 @@ +set(EXPECTED_FILES_COUNT "0") +if(NOT ${RunCMake_SUBTEST_SUFFIX} STREQUAL "fail") + set(EXPECTED_FILES_COUNT "1") + set(EXPECTED_FILE_CONTENT_1_LIST "/foo;/foo/CMakeLists.txt") +endif () diff --git a/Tests/RunCMake/CPack/tests/MULTIARCH/VerifyResult.cmake b/Tests/RunCMake/CPack/tests/MULTIARCH/VerifyResult.cmake new file mode 100644 index 0000000..f4e8050 --- /dev/null +++ b/Tests/RunCMake/CPack/tests/MULTIARCH/VerifyResult.cmake @@ -0,0 +1,4 @@ +if(NOT ${RunCMake_SUBTEST_SUFFIX} STREQUAL "fail") + set(MULTIARCH_control "Multi-Arch: ${RunCMake_SUBTEST_SUFFIX}") + verifyDebControl("${FOUND_FILE_1}" "MULTIARCH" "control") +endif () diff --git a/Tests/RunCMake/CPack/tests/MULTIARCH/test.cmake b/Tests/RunCMake/CPack/tests/MULTIARCH/test.cmake new file mode 100644 index 0000000..9784342 --- /dev/null +++ b/Tests/RunCMake/CPack/tests/MULTIARCH/test.cmake @@ -0,0 +1,7 @@ +install(FILES CMakeLists.txt DESTINATION foo COMPONENT test) + +set(CPACK_DEBIAN_PACKAGE_MULTIARCH ${RunCMake_SUBTEST_SUFFIX}) + +if(PACKAGING_TYPE STREQUAL "COMPONENT") + set(CPACK_COMPONENTS_ALL test) +endif() |