VS: add target property VS_DOTNET_REFERENCEPROP_<refname>_TAG_<tagname>

Fixes: #16689
This commit is contained in:
Michael Stürmer
2017-04-07 16:26:14 +02:00
committed by Brad King
parent 4ba2d2e3d7
commit 07ec212ae8
8 changed files with 119 additions and 0 deletions

View File

@@ -658,9 +658,39 @@ void cmVisualStudio10TargetGenerator::WriteDotNetReference(
this->WriteString("<HintPath>", 3);
(*this->BuildFileStream) << hint << "</HintPath>\n";
}
this->WriteDotNetReferenceCustomTags(ref);
this->WriteString("</Reference>\n", 2);
}
void cmVisualStudio10TargetGenerator::WriteDotNetReferenceCustomTags(
std::string const& ref)
{
static const std::string refpropPrefix = "VS_DOTNET_REFERENCEPROP_";
static const std::string refpropInfix = "_TAG_";
const std::string refPropFullPrefix = refpropPrefix + ref + refpropInfix;
typedef std::map<std::string, std::string> CustomTags;
CustomTags tags;
cmPropertyMap const& props = this->GeneratorTarget->Target->GetProperties();
for (cmPropertyMap::const_iterator i = props.begin(); i != props.end();
++i) {
if (i->first.find(refPropFullPrefix) == 0) {
std::string refTag = i->first.substr(refPropFullPrefix.length());
std::string refVal = i->second.GetValue();
if (!refTag.empty() && !refVal.empty()) {
tags[refTag] = refVal;
}
}
}
for (CustomTags::const_iterator tag = tags.begin(); tag != tags.end();
++tag) {
this->WriteString("<", 3);
(*this->BuildFileStream) << tag->first << ">"
<< cmVS10EscapeXML(tag->second) << "</"
<< tag->first << ">\n";
}
}
void cmVisualStudio10TargetGenerator::WriteEmbeddedResourceGroup()
{
std::vector<cmSourceFile const*> resxObjs;
@@ -3493,6 +3523,7 @@ void cmVisualStudio10TargetGenerator::WriteProjectReferences()
(*this->BuildFileStream) << "</Project>\n";
this->WriteString("<Name>", 3);
(*this->BuildFileStream) << name << "</Name>\n";
this->WriteDotNetReferenceCustomTags(name);
this->WriteString("</ProjectReference>\n", 2);
}
this->WriteString("</ItemGroup>\n", 1);