internal ProjectTargetElement LookupTarget(string name, string condition = null, bool scopeToProject = false)
{
var originalName = name;
if(string.IsNullOrEmpty(condition)) {
switch(name) {
case "AfterBuild":
case "BeforeBuild":
case "Build":
case "Rebuild":
case "_PrepareForBuild":
case "_PrepareForRebuild":
case "_PrepareForClean":
case "LibLinkOnly":
case "AfterBuildCompile":
case "AfterBuildGenerateSources":
// these are predefined tasks, we'll make our own local one, and ensure we're chained to upstream one.
var tgt = LookupTarget(SafeName + "_" + name, null, false);
tgt.AfterTargets = tgt.AfterTargets.AppendToSemicolonList(name);
return tgt;
}
}
else {
if(scopeToProject) {
name = SafeName + "_" + name;
}
}
var label = Pivots.GetExpressionLabel(condition);
name = name.Replace(".", "_");
if(string.IsNullOrEmpty(condition)) {
var result = Xml.Targets.FirstOrDefault(each => name == each.Name && string.IsNullOrEmpty(each.Condition));
if(result != null) {
return result;
}
return Xml.AddTarget(name);
}
var modifiedname = "{0}_{1}".format(name, label).Replace(" ", "_").MakeSafeFileName();
var conditionedResult = Xml.Targets.FirstOrDefault(each => modifiedname == each.Name);
if(conditionedResult != null) {
return conditionedResult;
}
// ensure a non-conditioned gets created that we can chain to.
LookupTarget(originalName, null, false);
var target = Xml.AddTarget(modifiedname);
target.Label = label;
target.Condition = Pivots.GetMSBuildCondition(Name, condition);
target.AfterTargets = name;
return target;
}