|
|
@@ -127,9 +127,22 @@ void cmExportPackageInfoGenerator::GeneratePackageRequires(
|
|
|
{
|
|
|
if (!this->Requirements.empty()) {
|
|
|
Json::Value& requirements = package["requires"];
|
|
|
+
|
|
|
+ // Build description for each requirement.
|
|
|
for (auto const& requirement : this->Requirements) {
|
|
|
+ auto data = Json::Value{ Json::objectValue };
|
|
|
+
|
|
|
+ // Add required components.
|
|
|
+ if (!requirement.second.empty()) {
|
|
|
+ auto components = Json::Value{ Json::arrayValue };
|
|
|
+ for (std::string const& component : requirement.second) {
|
|
|
+ components.append(component);
|
|
|
+ }
|
|
|
+ data["components"] = components;
|
|
|
+ }
|
|
|
+
|
|
|
// TODO: version, hint
|
|
|
- requirements[requirement] = Json::Value{};
|
|
|
+ requirements[requirement.first] = data;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -257,10 +270,10 @@ bool cmExportPackageInfoGenerator::NoteLinkedTarget(
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+ std::string component = linkedName.substr(prefix.length());
|
|
|
+ this->LinkTargets.emplace(linkedName, cmStrCat(pkgName, ':', component));
|
|
|
// TODO: Record package version, hint.
|
|
|
- this->Requirements.emplace(pkgName);
|
|
|
- this->LinkTargets.emplace(
|
|
|
- linkedName, cmStrCat(pkgName, ':', linkedName.substr(prefix.length())));
|
|
|
+ this->Requirements[pkgName].emplace(std::move(component));
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
@@ -278,16 +291,13 @@ bool cmExportPackageInfoGenerator::NoteLinkedTarget(
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- auto pkgName =
|
|
|
- cm::string_view{ linkNamespace.data(), linkNamespace.size() - 2 };
|
|
|
-
|
|
|
+ std::string pkgName{ linkNamespace.data(), linkNamespace.size() - 2 };
|
|
|
+ std::string component = linkedTarget->GetExportName();
|
|
|
if (pkgName == this->GetPackageName()) {
|
|
|
- this->LinkTargets.emplace(linkedName,
|
|
|
- cmStrCat(':', linkedTarget->GetExportName()));
|
|
|
+ this->LinkTargets.emplace(linkedName, cmStrCat(':', component));
|
|
|
} else {
|
|
|
- this->Requirements.emplace(pkgName);
|
|
|
- this->LinkTargets.emplace(
|
|
|
- linkedName, cmStrCat(pkgName, ':', linkedTarget->GetExportName()));
|
|
|
+ this->LinkTargets.emplace(linkedName, cmStrCat(pkgName, ':', component));
|
|
|
+ this->Requirements[pkgName].emplace(std::move(component));
|
|
|
}
|
|
|
return true;
|
|
|
}
|