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
This commit is contained in:
Brad King
2024-06-26 12:43:45 +00:00
committed by Kitware Robot
11 changed files with 71 additions and 5 deletions
+25
View File
@@ -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
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -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.
+2 -1
View File
@@ -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
+15
View File
@@ -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";
+1
View File
@@ -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
+4 -4
View File
@@ -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
+1
View File
@@ -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")
@@ -0,0 +1 @@
Error: invalid value for Multi-Arch: fail\. Valid values are: same, foreign, allowed
@@ -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 ()
@@ -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 ()
@@ -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()