|
|
@@ -62,6 +62,13 @@ cmCPackIFWPackage::DependenceStruct::DependenceStruct(
|
|
|
} else if ((pos = dependence.find('>')) != std::string::npos) {
|
|
|
Compare.Type = CompareGreater;
|
|
|
Compare.Value = dependence.substr(pos + 1);
|
|
|
+ } else if ((pos = dependence.find('-')) != std::string::npos) {
|
|
|
+ Compare.Type = CompareNone;
|
|
|
+ Compare.Value = dependence.substr(pos + 1);
|
|
|
+ }
|
|
|
+ size_t dashPos = dependence.find('-');
|
|
|
+ if (dashPos != std::string::npos) {
|
|
|
+ pos = dashPos;
|
|
|
}
|
|
|
Name = pos == std::string::npos ? dependence : dependence.substr(0, pos);
|
|
|
}
|
|
|
@@ -74,6 +81,10 @@ std::string cmCPackIFWPackage::DependenceStruct::NameWithCompare() const
|
|
|
|
|
|
std::string result = Name;
|
|
|
|
|
|
+ if (Compare.Type != CompareNone || !Compare.Value.empty()) {
|
|
|
+ result += "-";
|
|
|
+ }
|
|
|
+
|
|
|
if (Compare.Type == CompareLessOrEqual) {
|
|
|
result += "<=";
|
|
|
} else if (Compare.Type == CompareGreaterOrEqual) {
|
|
|
@@ -154,11 +165,14 @@ void cmCPackIFWPackage::DefaultConfiguration()
|
|
|
Script = "";
|
|
|
Licenses.clear();
|
|
|
UserInterfaces.clear();
|
|
|
+ Translations.clear();
|
|
|
SortingPriority = "";
|
|
|
+ UpdateText = "";
|
|
|
Default = "";
|
|
|
Essential = "";
|
|
|
Virtual = "";
|
|
|
ForcedInstallation = "";
|
|
|
+ RequiresAdminRights = "";
|
|
|
}
|
|
|
|
|
|
// Defaul configuration (all in one package)
|
|
|
@@ -245,24 +259,6 @@ int cmCPackIFWPackage::ConfigureFromComponent(cmCPackComponent* component)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // QtIFW dependencies
|
|
|
- if (const char* option = this->GetOption(prefix + "DEPENDS")) {
|
|
|
- std::vector<std::string> deps;
|
|
|
- cmSystemTools::ExpandListArgument(option, deps);
|
|
|
- for (std::vector<std::string>::iterator dit = deps.begin();
|
|
|
- dit != deps.end(); ++dit) {
|
|
|
- DependenceStruct dep(*dit);
|
|
|
- if (!Generator->Packages.count(dep.Name)) {
|
|
|
- bool hasDep = Generator->DependentPackages.count(dep.Name) > 0;
|
|
|
- DependenceStruct& depRef = Generator->DependentPackages[dep.Name];
|
|
|
- if (!hasDep) {
|
|
|
- depRef = dep;
|
|
|
- }
|
|
|
- AlienDependencies.insert(&depRef);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
// Licenses
|
|
|
if (const char* option = this->GetOption(prefix + "LICENSES")) {
|
|
|
Licenses.clear();
|
|
|
@@ -280,6 +276,11 @@ int cmCPackIFWPackage::ConfigureFromComponent(cmCPackComponent* component)
|
|
|
// Priority
|
|
|
if (const char* option = this->GetOption(prefix + "PRIORITY")) {
|
|
|
SortingPriority = option;
|
|
|
+ cmCPackLogger(
|
|
|
+ cmCPackLog::LOG_WARNING, "The \"PRIORITY\" option is set "
|
|
|
+ << "for component \"" << component->Name << "\", but there option is "
|
|
|
+ << "deprecated. Please use \"SORTING_PRIORITY\" option instead."
|
|
|
+ << std::endl);
|
|
|
}
|
|
|
|
|
|
// Default
|
|
|
@@ -352,6 +353,12 @@ int cmCPackIFWPackage::ConfigureFromGroup(cmCPackComponentGroup* group)
|
|
|
// Priority
|
|
|
if (const char* option = this->GetOption(prefix + "PRIORITY")) {
|
|
|
SortingPriority = option;
|
|
|
+ cmCPackLogger(
|
|
|
+ cmCPackLog::LOG_WARNING, "The \"PRIORITY\" option is set "
|
|
|
+ << "for component group \"" << group->Name
|
|
|
+ << "\", but there option is "
|
|
|
+ << "deprecated. Please use \"SORTING_PRIORITY\" option instead."
|
|
|
+ << std::endl);
|
|
|
}
|
|
|
|
|
|
return ConfigureFromPrefix(prefix);
|
|
|
@@ -420,6 +427,79 @@ int cmCPackIFWPackage::ConfigureFromPrefix(const std::string& prefix)
|
|
|
ReleaseDate = value;
|
|
|
}
|
|
|
|
|
|
+ // Sorting priority
|
|
|
+ option = prefix + "SORTING_PRIORITY";
|
|
|
+ if (IsSetToEmpty(option)) {
|
|
|
+ SortingPriority.clear();
|
|
|
+ } else if (const char* value = GetOption(option)) {
|
|
|
+ SortingPriority = value;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Update text
|
|
|
+ option = prefix + "UPDATE_TEXT";
|
|
|
+ if (IsSetToEmpty(option)) {
|
|
|
+ UpdateText.clear();
|
|
|
+ } else if (const char* value = GetOption(option)) {
|
|
|
+ UpdateText = value;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Translations
|
|
|
+ option = prefix + "TRANSLATIONS";
|
|
|
+ if (IsSetToEmpty(option)) {
|
|
|
+ Translations.clear();
|
|
|
+ } else if (const char* value = this->GetOption(option)) {
|
|
|
+ Translations.clear();
|
|
|
+ cmSystemTools::ExpandListArgument(value, Translations);
|
|
|
+ }
|
|
|
+
|
|
|
+ // QtIFW dependencies
|
|
|
+ std::vector<std::string> deps;
|
|
|
+ option = prefix + "DEPENDS";
|
|
|
+ if (const char* value = this->GetOption(option)) {
|
|
|
+ cmSystemTools::ExpandListArgument(value, deps);
|
|
|
+ }
|
|
|
+ option = prefix + "DEPENDENCIES";
|
|
|
+ if (const char* value = this->GetOption(option)) {
|
|
|
+ cmSystemTools::ExpandListArgument(value, deps);
|
|
|
+ }
|
|
|
+ for (std::vector<std::string>::iterator dit = deps.begin();
|
|
|
+ dit != deps.end(); ++dit) {
|
|
|
+ DependenceStruct dep(*dit);
|
|
|
+ if (Generator->Packages.count(dep.Name)) {
|
|
|
+ cmCPackIFWPackage& depPkg = Generator->Packages[dep.Name];
|
|
|
+ dep.Name = depPkg.Name;
|
|
|
+ }
|
|
|
+ bool hasDep = Generator->DependentPackages.count(dep.Name) > 0;
|
|
|
+ DependenceStruct& depRef = Generator->DependentPackages[dep.Name];
|
|
|
+ if (!hasDep) {
|
|
|
+ depRef = dep;
|
|
|
+ }
|
|
|
+ AlienDependencies.insert(&depRef);
|
|
|
+ }
|
|
|
+
|
|
|
+ // Automatic dependency on
|
|
|
+ option = prefix + "AUTO_DEPEND_ON";
|
|
|
+ if (IsSetToEmpty(option)) {
|
|
|
+ AlienAutoDependOn.clear();
|
|
|
+ } else if (const char* value = this->GetOption(option)) {
|
|
|
+ std::vector<std::string> depsOn;
|
|
|
+ cmSystemTools::ExpandListArgument(value, depsOn);
|
|
|
+ for (std::vector<std::string>::iterator dit = depsOn.begin();
|
|
|
+ dit != depsOn.end(); ++dit) {
|
|
|
+ DependenceStruct dep(*dit);
|
|
|
+ if (Generator->Packages.count(dep.Name)) {
|
|
|
+ cmCPackIFWPackage& depPkg = Generator->Packages[dep.Name];
|
|
|
+ dep.Name = depPkg.Name;
|
|
|
+ }
|
|
|
+ bool hasDep = Generator->DependentPackages.count(dep.Name) > 0;
|
|
|
+ DependenceStruct& depRef = Generator->DependentPackages[dep.Name];
|
|
|
+ if (!hasDep) {
|
|
|
+ depRef = dep;
|
|
|
+ }
|
|
|
+ AlienAutoDependOn.insert(&depRef);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// Visibility
|
|
|
option = prefix + "VIRTUAL";
|
|
|
if (IsSetToEmpty(option)) {
|
|
|
@@ -455,6 +535,16 @@ int cmCPackIFWPackage::ConfigureFromPrefix(const std::string& prefix)
|
|
|
ForcedInstallation = "false";
|
|
|
}
|
|
|
|
|
|
+ // Requires admin rights
|
|
|
+ option = prefix + "REQUIRES_ADMIN_RIGHTS";
|
|
|
+ if (IsSetToEmpty(option)) {
|
|
|
+ RequiresAdminRights.clear();
|
|
|
+ } else if (IsOn(option)) {
|
|
|
+ RequiresAdminRights = "true";
|
|
|
+ } else if (IsSetToOff(option)) {
|
|
|
+ RequiresAdminRights = "false";
|
|
|
+ }
|
|
|
+
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
@@ -481,6 +571,12 @@ void cmCPackIFWPackage::GeneratePackageFile()
|
|
|
|
|
|
xout.Element("DisplayName", DisplayName);
|
|
|
xout.Element("Description", Description);
|
|
|
+
|
|
|
+ // Update text
|
|
|
+ if (!UpdateText.empty()) {
|
|
|
+ xout.Element("UpdateText", UpdateText);
|
|
|
+ }
|
|
|
+
|
|
|
xout.Element("Name", Name);
|
|
|
xout.Element("Version", Version);
|
|
|
|
|
|
@@ -515,6 +611,23 @@ void cmCPackIFWPackage::GeneratePackageFile()
|
|
|
xout.EndElement();
|
|
|
}
|
|
|
|
|
|
+ // Translations (copy to meta dir)
|
|
|
+ std::vector<std::string> translations = Translations;
|
|
|
+ for (size_t i = 0; i < translations.size(); i++) {
|
|
|
+ std::string name = cmSystemTools::GetFilenameName(translations[i]);
|
|
|
+ std::string path = Directory + "/meta/" + name;
|
|
|
+ cmsys::SystemTools::CopyFileIfDifferent(translations[i].data(),
|
|
|
+ path.data());
|
|
|
+ translations[i] = name;
|
|
|
+ }
|
|
|
+ if (!translations.empty()) {
|
|
|
+ xout.StartElement("Translations");
|
|
|
+ for (size_t i = 0; i < translations.size(); i++) {
|
|
|
+ xout.Element("Translation", translations[i]);
|
|
|
+ }
|
|
|
+ xout.EndElement();
|
|
|
+ }
|
|
|
+
|
|
|
// Dependencies
|
|
|
std::set<DependenceStruct> compDepSet;
|
|
|
for (std::set<DependenceStruct*>::iterator ait = AlienDependencies.begin();
|
|
|
@@ -538,6 +651,25 @@ void cmCPackIFWPackage::GeneratePackageFile()
|
|
|
xout.Element("Dependencies", dependencies.str());
|
|
|
}
|
|
|
|
|
|
+ // Automatic dependency on
|
|
|
+ std::set<DependenceStruct> compAutoDepSet;
|
|
|
+ for (std::set<DependenceStruct*>::iterator ait = AlienAutoDependOn.begin();
|
|
|
+ ait != AlienAutoDependOn.end(); ++ait) {
|
|
|
+ compAutoDepSet.insert(*(*ait));
|
|
|
+ }
|
|
|
+ // Write automatic dependency on
|
|
|
+ if (!compAutoDepSet.empty()) {
|
|
|
+ std::ostringstream dependencies;
|
|
|
+ std::set<DependenceStruct>::iterator it = compAutoDepSet.begin();
|
|
|
+ dependencies << it->NameWithCompare();
|
|
|
+ ++it;
|
|
|
+ while (it != compAutoDepSet.end()) {
|
|
|
+ dependencies << "," << it->NameWithCompare();
|
|
|
+ ++it;
|
|
|
+ }
|
|
|
+ xout.Element("AutoDependOn", dependencies.str());
|
|
|
+ }
|
|
|
+
|
|
|
// Licenses (copy to meta dir)
|
|
|
std::vector<std::string> licenses = Licenses;
|
|
|
for (size_t i = 1; i < licenses.size(); i += 2) {
|
|
|
@@ -561,6 +693,10 @@ void cmCPackIFWPackage::GeneratePackageFile()
|
|
|
xout.Element("ForcedInstallation", ForcedInstallation);
|
|
|
}
|
|
|
|
|
|
+ if (!RequiresAdminRights.empty()) {
|
|
|
+ xout.Element("RequiresAdminRights", RequiresAdminRights);
|
|
|
+ }
|
|
|
+
|
|
|
if (!Virtual.empty()) {
|
|
|
xout.Element("Virtual", Virtual);
|
|
|
} else if (!Default.empty()) {
|