mirror of
https://github.com/Kitware/CMake.git
synced 2026-07-01 20:27:24 +00:00
CPack/productbuild: add options to control domains element
The domains element determines the required authorization level needed for the install. The auth attribute of the pkg-ref element has been deprecated in favor of domains, so if the domains options are specified, the auth attribute is omitted. Fixes: #23030
This commit is contained in:
@@ -86,6 +86,46 @@ macOS using ProductBuild:
|
||||
:variable:`CPACK_RESOURCE_FILE_README`, and
|
||||
:variable:`CPACK_RESOURCE_FILE_LICENSE` files are copied.
|
||||
|
||||
.. variable:: CPACK_PRODUCTBUILD_DOMAINS
|
||||
|
||||
.. versionadded:: 3.23
|
||||
|
||||
Adds a domains element to Distribution XML if specified. When set to true,
|
||||
the productbuild generator creates the following XML element:
|
||||
|
||||
.. code-block:: xml
|
||||
|
||||
<domains enable_anywhere="true" enable_currentUserHome="false" enable_localSystem="true"/>
|
||||
|
||||
The default values used for the attributes can be overridden with
|
||||
:variable:`CPACK_PRODUCTBUILD_DOMAINS_ANYWHERE`,
|
||||
:variable:`CPACK_PRODUCTBUILD_DOMAINS_USER`, and
|
||||
:variable:`CPACK_PRODUCTBUILD_DOMAINS_ROOT`.
|
||||
|
||||
.. variable:: CPACK_PRODUCTBUILD_DOMAINS_ANYWHERE
|
||||
|
||||
.. versionadded:: 3.23
|
||||
|
||||
May be used to override the ``enable_anywhere`` attribute in the domains
|
||||
element in the Distribution XML when :variable:`CPACK_PRODUCTBUILD_DOMAINS`
|
||||
is set to ``TRUE``.
|
||||
|
||||
.. variable:: CPACK_PRODUCTBUILD_DOMAINS_USER
|
||||
|
||||
.. versionadded:: 3.23
|
||||
|
||||
May be used to override the ``enable_currentUserHome`` attribute in the domains
|
||||
element in the Distribution XML when :variable:`CPACK_PRODUCTBUILD_DOMAINS`
|
||||
is set to ``TRUE``.
|
||||
|
||||
.. variable:: CPACK_PRODUCTBUILD_DOMAINS_ROOT
|
||||
|
||||
.. versionadded:: 3.23
|
||||
|
||||
May be used to override the ``enable_localSystem`` attribute in the domains
|
||||
element in the Distribution XML when :variable:`CPACK_PRODUCTBUILD_DOMAINS`
|
||||
is set to ``TRUE``.
|
||||
|
||||
Background Image
|
||||
""""""""""""""""
|
||||
|
||||
|
||||
9
Help/release/dev/cpack-productbuild-domains.rst
Normal file
9
Help/release/dev/cpack-productbuild-domains.rst
Normal file
@@ -0,0 +1,9 @@
|
||||
cpack-productbuild-domains
|
||||
-----------------------------
|
||||
|
||||
* The :cpack_gen:`CPack productbuild Generator` gained the new
|
||||
:variable:`CPACK_PRODUCTBUILD_DOMAINS`,
|
||||
:variable:`CPACK_PRODUCTBUILD_DOMAINS_ANYWHERE`,
|
||||
:variable:`CPACK_PRODUCTBUILD_DOMAINS_USER`, and
|
||||
:variable:`CPACK_PRODUCTBUILD_DOMAINS_ROOT` variables for
|
||||
adding the domains element to the Distribution XML.
|
||||
@@ -162,6 +162,8 @@ void cmCPackPKGGenerator::WriteDistributionFile(const char* metapackageFile,
|
||||
CreateChoice(PostFlightComponent, xout);
|
||||
}
|
||||
|
||||
this->CreateDomains(xout);
|
||||
|
||||
// default background
|
||||
this->CreateBackground(nullptr, metapackageFile, genName, xout);
|
||||
// Dark Aqua
|
||||
@@ -273,7 +275,10 @@ void cmCPackPKGGenerator::CreateChoice(const cmCPackComponent& component,
|
||||
xout.Attribute("id", packageId);
|
||||
xout.Attribute("version", this->GetOption("CPACK_PACKAGE_VERSION"));
|
||||
xout.Attribute("installKBytes", installedSize);
|
||||
xout.Attribute("auth", "Admin");
|
||||
// The auth attribute is deprecated in favor of the domains element
|
||||
if (cmIsOff(this->GetOption("CPACK_PRODUCTBUILD_DOMAINS"))) {
|
||||
xout.Attribute("auth", "Admin");
|
||||
}
|
||||
xout.Attribute("onConclusion", "None");
|
||||
if (component.IsDownloaded) {
|
||||
xout.Content(this->GetOption("CPACK_DOWNLOAD_SITE"));
|
||||
@@ -286,6 +291,36 @@ void cmCPackPKGGenerator::CreateChoice(const cmCPackComponent& component,
|
||||
xout.EndElement(); // pkg-ref
|
||||
}
|
||||
|
||||
void cmCPackPKGGenerator::CreateDomains(cmXMLWriter& xout)
|
||||
{
|
||||
std::string opt = "CPACK_PRODUCTBUILD_DOMAINS";
|
||||
if (cmIsOff(this->GetOption(opt))) {
|
||||
return;
|
||||
}
|
||||
|
||||
xout.StartElement("domains");
|
||||
|
||||
// Product can be installed at the root of any volume by default
|
||||
// unless specified
|
||||
cmValue param = this->GetOption(cmStrCat(opt, "_ANYWHERE"));
|
||||
xout.Attribute("enable_anywhere",
|
||||
(param && cmIsOff(param)) ? "false" : "true");
|
||||
|
||||
// Product cannot be installed into the current user's home directory
|
||||
// by default unless specified
|
||||
param = this->GetOption(cmStrCat(opt, "_USER"));
|
||||
xout.Attribute("enable_currentUserHome",
|
||||
(param && cmIsOn(param)) ? "true" : "false");
|
||||
|
||||
// Product can be installed into the root directory by default
|
||||
// unless specified
|
||||
param = this->GetOption(cmStrCat(opt, "_ROOT"));
|
||||
xout.Attribute("enable_localSystem",
|
||||
(param && cmIsOff(param)) ? "false" : "true");
|
||||
|
||||
xout.EndElement();
|
||||
}
|
||||
|
||||
void cmCPackPKGGenerator::AddDependencyAttributes(
|
||||
const cmCPackComponent& component,
|
||||
std::set<const cmCPackComponent*>& visited, std::ostringstream& out)
|
||||
|
||||
@@ -91,6 +91,10 @@ protected:
|
||||
void CreateBackground(const char* themeName, const char* metapackageFile,
|
||||
cm::string_view genName, cmXMLWriter& xout);
|
||||
|
||||
/// Create the "domains" XML element to indicate where the product can
|
||||
/// be installed
|
||||
void CreateDomains(cmXMLWriter& xout);
|
||||
|
||||
// The PostFlight component when creating a metapackage
|
||||
cmCPackComponent PostFlightComponent;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user