summaryrefslogtreecommitdiffstats
path: root/Source/CPack/cmCPackPKGGenerator.cxx
diff options
context:
space:
mode:
authorDavid Wosk <davidwosk1@gmail.com>2021-12-22 00:54:38 (GMT)
committerBrad King <brad.king@kitware.com>2022-01-06 16:33:25 (GMT)
commitda737d34e05d4a07b64596fc4970a0dd279a741d (patch)
tree7109ab87afe67fec49bf4d924c2cffa2e1b78d71 /Source/CPack/cmCPackPKGGenerator.cxx
parent13e71b7c3ec9351f0c25656e72c1c0199ddf771c (diff)
downloadCMake-da737d34e05d4a07b64596fc4970a0dd279a741d.zip
CMake-da737d34e05d4a07b64596fc4970a0dd279a741d.tar.gz
CMake-da737d34e05d4a07b64596fc4970a0dd279a741d.tar.bz2
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
Diffstat (limited to 'Source/CPack/cmCPackPKGGenerator.cxx')
-rw-r--r--Source/CPack/cmCPackPKGGenerator.cxx37
1 files changed, 36 insertions, 1 deletions
diff --git a/Source/CPack/cmCPackPKGGenerator.cxx b/Source/CPack/cmCPackPKGGenerator.cxx
index b62fab8..d8095cc 100644
--- a/Source/CPack/cmCPackPKGGenerator.cxx
+++ b/Source/CPack/cmCPackPKGGenerator.cxx
@@ -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)