OLD | NEW |
---|---|
1 using System; | 1 using System; |
2 using System.Collections.Generic; | 2 using System.Collections.Generic; |
3 using System.Linq; | 3 using System.Linq; |
4 using System.Text; | 4 using System.Text; |
5 | 5 |
6 using Microsoft.Build.Framework; | 6 using Microsoft.Build.Framework; |
7 using System.Xaml; | 7 using System.Xaml; |
8 using Microsoft.Build.Framework.XamlTypes; | 8 using Microsoft.Build.Framework.XamlTypes; |
9 using Microsoft.Build.Utilities; | 9 using Microsoft.Build.Utilities; |
10 | 10 |
11 namespace NaCl.Build.CPPTasks | 11 namespace NaCl.Build.CPPTasks |
12 { | 12 { |
13 class XamlParser | 13 class XamlParser |
14 { | 14 { |
15 public XamlParser(string path) | 15 public XamlParser(string path) |
16 { | 16 { |
17 // load and store properties from xaml file | 17 // load and store properties from xaml file |
18 m_parsedBuildRule = (Rule)XamlServices.Load(path); | 18 m_parsedBuildRule = (Rule)XamlServices.Load(path); |
19 | 19 |
20 // NOTE: | 20 // NOTE: |
21 // There are MSBuild classes which support command line building, | 21 // There are MSBuild classes which support command line building, |
22 // argument switch encapsulation and more. Code within VCToolTask, | 22 // argument switch encapsulation and more. Code within VCToolTask, |
23 // a hidden interface, uses some these classes to generate command l ine | 23 // a hidden interface, uses some these classes to generate command l ine |
24 // switches given project settings. As the VCToolTask class is a hid den | 24 // switches given project settings. As the VCToolTask class is a hid den |
25 // class and the MSBuild documentation is very sparse, we are going | 25 // class and the MSBuild documentation is very sparse, we are going |
26 // with a small custom solution. For reference see the | 26 // with a small custom solution. For reference see the |
27 // Microsoft.Build.Tasks.Xaml, Microsoft.Build.Framework.XamlTypes n amespaces. | 27 // Microsoft.Build.Tasks.Xaml, Microsoft.Build.Framework.XamlTypes n amespaces. |
28 | 28 |
29 // move the properties to a property name keyed dictionary for faste r lookup | 29 // move the properties to a property name keyed dictionary for faste r lookup |
30 ToolProperties = new Dictionary<string, PropertyWrapper>(); | 30 ToolProperties = new Dictionary<string, PropertyWrapper>(); |
31 ToolProperties = m_parsedBuildRule.Properties.ToDictionary(x => x.Na me, x => (new PropertyWrapper(x.GetType(), x))); | 31 ToolProperties = m_parsedBuildRule.Properties.ToDictionary(x => x.Na me, x => (new PropertyWrapper(x.GetType(), x))); |
32 | 32 |
33 InitFunctionMap(); | 33 InitFunctionMap(); |
34 } | 34 } |
35 | 35 |
36 private void InitFunctionMap() | 36 private void InitFunctionMap() |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
80 builder.AppendSwitchUnquotedIfNotNull(m_parsedBuildRule.SwitchPr efix, result.Switch); | 80 builder.AppendSwitchUnquotedIfNotNull(m_parsedBuildRule.SwitchPr efix, result.Switch); |
81 } | 81 } |
82 } | 82 } |
83 | 83 |
84 // helper for string-based properties | 84 // helper for string-based properties |
85 private void AppendStringValue(CommandLineBuilder builder, BaseProperty property, string subtype, string value) | 85 private void AppendStringValue(CommandLineBuilder builder, BaseProperty property, string subtype, string value) |
86 { | 86 { |
87 value = value.Trim(); | 87 value = value.Trim(); |
88 | 88 |
89 // could cache this SubType test off in property wrapper or somewher e if performance were an issue | 89 // could cache this SubType test off in property wrapper or somewher e if performance were an issue |
90 string switchName = m_parsedBuildRule.SwitchPrefix + property.Switch + property.Separator; | |
binji
2012/10/02 23:43:47
nit: wrap at 100
| |
90 if (subtype == "file" || subtype == "folder") | 91 if (subtype == "file" || subtype == "folder") |
91 { | 92 { |
92 builder.AppendSwitchIfNotNull(m_parsedBuildRule.SwitchPrefix + p roperty.Switch + property.Separator, value); | 93 // for switches that contains files or folders we need quoting |
94 builder.AppendSwitchIfNotNull(switchName, value); | |
93 } | 95 } |
94 else | 96 else if (!string.IsNullOrEmpty(property.Switch)) |
95 { | 97 { |
96 builder.AppendSwitchUnquotedIfNotNull(m_parsedBuildRule.SwitchPr efix + property.Switch + property.Separator, value); | 98 builder.AppendSwitchUnquotedIfNotNull(switchName, value); |
99 } | |
100 else if (!string.IsNullOrEmpty(value)) | |
101 { | |
102 // for non-switchs such as AdditionalOpions we just append the v alue | |
binji
2012/10/02 23:43:47
nit:
s/switchs/switches/
s/Opions/Options/
| |
103 builder.AppendTextUnquoted(" " + value); | |
97 } | 104 } |
98 } | 105 } |
99 | 106 |
100 private void GenerateArgumentStringList(CommandLineBuilder builder, Base Property property, string value) | 107 private void GenerateArgumentStringList(CommandLineBuilder builder, Base Property property, string value) |
101 { | 108 { |
102 » » » string [] arguments = value.Split(';'); | 109 string[] arguments = value.Split(';'); |
103 | 110 |
104 foreach (string argument in arguments) | 111 foreach (string argument in arguments) |
105 { | 112 { |
106 if (argument.Length > 0) | 113 if (argument.Length > 0) |
107 { | 114 { |
108 StringListProperty casted = (StringListProperty)property; | 115 StringListProperty casted = (StringListProperty)property; |
109 AppendStringValue(builder, property, casted.Subtype, argumen t); | 116 AppendStringValue(builder, property, casted.Subtype, argumen t); |
110 } | 117 } |
111 } | 118 } |
112 } | 119 } |
(...skipping 30 matching lines...) Expand all Loading... | |
143 } // class | 150 } // class |
144 | 151 |
145 private Rule m_parsedBuildRule; | 152 private Rule m_parsedBuildRule; |
146 private Dictionary<string, PropertyWrapper> ToolProperties { get; set; } | 153 private Dictionary<string, PropertyWrapper> ToolProperties { get; set; } |
147 | 154 |
148 // function mapping for easy property function calling | 155 // function mapping for easy property function calling |
149 private Dictionary<Type, Action<CommandLineBuilder, BaseProperty, string >> m_typeFunctionMap; | 156 private Dictionary<Type, Action<CommandLineBuilder, BaseProperty, string >> m_typeFunctionMap; |
150 } // XamlParser | 157 } // XamlParser |
151 } // namespace NaCl.Build.CPPTasks | 158 } // namespace NaCl.Build.CPPTasks |
152 | 159 |
OLD | NEW |