X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FMicrosoft.Build%2FMicrosoft.Build.Evaluation%2FProject.cs;h=4f7fbd168ce50eaec7965274a649ac78f697af20;hb=96edd46e16619fe64e26ea017330c22bf893f0dd;hp=7a1c1144d207c52781ce974885e55bf17cf1fcab;hpb=17183a6fbf75a5ca960d7541676aea7fd7b09d21;p=mono.git diff --git a/mcs/class/Microsoft.Build/Microsoft.Build.Evaluation/Project.cs b/mcs/class/Microsoft.Build/Microsoft.Build.Evaluation/Project.cs index 7a1c1144d20..4f7fbd168ce 100644 --- a/mcs/class/Microsoft.Build/Microsoft.Build.Evaluation/Project.cs +++ b/mcs/class/Microsoft.Build/Microsoft.Build.Evaluation/Project.cs @@ -131,18 +131,7 @@ namespace Microsoft.Build.Evaluation this.ProjectCollection = projectCollection; this.load_settings = loadSettings; - Initialize (null); - } - - Project (ProjectRootElement imported, Project parent) - { - this.Xml = imported; - this.GlobalProperties = parent.GlobalProperties; - this.ToolsVersion = parent.ToolsVersion; - this.ProjectCollection = parent.ProjectCollection; - this.load_settings = parent.load_settings; - - Initialize (parent); + Initialize (); } public Project (string projectFile) @@ -187,7 +176,7 @@ namespace Microsoft.Build.Evaluation List properties; Dictionary targets; - void Initialize (Project parent) + void Initialize () { dir_path = Directory.GetCurrentDirectory (); raw_imports = new List (); @@ -195,32 +184,27 @@ namespace Microsoft.Build.Evaluation targets = new Dictionary (); raw_items = new List (); - // FIXME: this is likely hack. Test ImportedProject.Properties to see what exactly should happen. - if (parent != null) { - properties = parent.properties; - } else { - properties = new List (); - - foreach (DictionaryEntry p in Environment.GetEnvironmentVariables ()) - // FIXME: this is kind of workaround for unavoidable issue that PLATFORM=* is actually given - // on some platforms and that prevents setting default "PLATFORM=AnyCPU" property. - if (!string.Equals ("PLATFORM", (string) p.Key, StringComparison.OrdinalIgnoreCase)) - this.properties.Add (new EnvironmentProjectProperty (this, (string)p.Key, (string)p.Value)); - foreach (var p in GlobalProperties) - this.properties.Add (new GlobalProjectProperty (this, p.Key, p.Value)); - var tools = ProjectCollection.GetToolset (this.ToolsVersion) ?? ProjectCollection.GetToolset (this.ProjectCollection.DefaultToolsVersion); - foreach (var p in ProjectCollection.GetReservedProperties (tools, this)) - this.properties.Add (p); - foreach (var p in ProjectCollection.GetWellKnownProperties (this)) - this.properties.Add (p); - } - - ProcessXml (parent); + properties = new List (); + + foreach (DictionaryEntry p in Environment.GetEnvironmentVariables ()) + // FIXME: this is kind of workaround for unavoidable issue that PLATFORM=* is actually given + // on some platforms and that prevents setting default "PLATFORM=AnyCPU" property. + if (!string.Equals ("PLATFORM", (string) p.Key, StringComparison.OrdinalIgnoreCase)) + this.properties.Add (new EnvironmentProjectProperty (this, (string)p.Key, (string)p.Value)); + foreach (var p in GlobalProperties) + this.properties.Add (new GlobalProjectProperty (this, p.Key, p.Value)); + var tools = ProjectCollection.GetToolset (this.ToolsVersion) ?? ProjectCollection.GetToolset (this.ProjectCollection.DefaultToolsVersion); + foreach (var p in ProjectCollection.GetReservedProperties (tools, this)) + this.properties.Add (p); + foreach (var p in ProjectCollection.GetWellKnownProperties (this)) + this.properties.Add (p); + + ProcessXml (); ProjectCollection.AddProject (this); } - void ProcessXml (Project parent) + void ProcessXml () { // this needs to be initialized here (regardless of that items won't be evaluated at property evaluation; // Conditions could incorrectly reference items and lack of this list causes NRE. @@ -255,8 +239,9 @@ namespace Microsoft.Build.Evaluation var ige = child as ProjectImportGroupElement; if (ige != null && Evaluate (ige.Condition)) { foreach (var incc in ige.Imports) { - foreach (var e in Import (incc)) - yield return e; + if (Evaluate (incc.Condition)) + foreach (var e in Import (incc)) + yield return e; } } var inc = child as ProjectImportElement; @@ -307,14 +292,15 @@ namespace Microsoft.Build.Evaluation foreach (var child in elements) { var te = child as ProjectTargetElement; if (te != null) - this.targets.Add (te.Name, new ProjectTargetInstance (te)); + // It overwrites same name target. + this.targets [te.Name] = new ProjectTargetInstance (te); } } IEnumerable Import (ProjectImportElement import) { string dir = ProjectCollection.GetEvaluationTimeThisFileDirectory (() => FullPath); - string path = WindowsCompatibilityExtensions.NormalizeFilePath (ExpandString (import.Project)); + string path = WindowsCompatibilityExtensions.FindMatchingPath (ExpandString (import.Project)); path = Path.IsPathRooted (path) ? path : dir != null ? Path.Combine (dir, path) : Path.GetFullPath (path); if (ProjectCollection.OngoingImports.Contains (path)) { switch (load_settings) { @@ -442,17 +428,12 @@ namespace Microsoft.Build.Evaluation bool Evaluate (string unexpandedValue) { - return string.IsNullOrWhiteSpace (unexpandedValue) || new ExpressionEvaluator (this, null).EvaluateAsBoolean (unexpandedValue); + return string.IsNullOrWhiteSpace (unexpandedValue) || new ExpressionEvaluator (this).EvaluateAsBoolean (unexpandedValue); } public string ExpandString (string unexpandedValue) { - return ExpandString (unexpandedValue, null); - } - - string ExpandString (string unexpandedValue, string replacementForMissingStuff) - { - return new ExpressionEvaluator (this, replacementForMissingStuff).Evaluate (unexpandedValue); + return WindowsCompatibilityExtensions.NormalizeFilePath (new ExpressionEvaluator (this).Evaluate (unexpandedValue)); } public static string GetEvaluatedItemIncludeEscaped (ProjectItem item)