]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/UPT/Xml/PcdXml.py
BaseTools: Clear build versions to sync with buildtools/BaseTools
[mirror_edk2.git] / BaseTools / Source / Python / UPT / Xml / PcdXml.py
CommitLineData
4234283c
LG
1## @file\r
2# This file is used to parse a PCD file of .PKG file\r
3#\r
4# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>\r
5#\r
6# This program and the accompanying materials are licensed and made available \r
7# under the terms and conditions of the BSD License which accompanies this \r
8# distribution. The full text of the license may be found at \r
9# http://opensource.org/licenses/bsd-license.php\r
10#\r
11# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13#\r
14\r
15'''\r
16PcdXml\r
17'''\r
18\r
19##\r
20# Import Modules\r
21#\r
22\r
23from Library.Xml.XmlRoutines import XmlElement\r
24from Library.Xml.XmlRoutines import XmlAttribute\r
25from Library.Xml.XmlRoutines import XmlNode\r
26from Library.Xml.XmlRoutines import CreateXmlElement\r
27from Library.Xml.XmlRoutines import XmlList\r
28from Library.String import GetStringOfList\r
29from Library.String import ConvertNEToNOTEQ\r
30from Library.String import ConvertNOTEQToNE\r
31from Library import GlobalData\r
32from Object.POM.CommonObject import PcdObject\r
33from Object.POM.CommonObject import PcdErrorObject\r
34from Xml.CommonXml import HelpTextXml\r
35from Xml.CommonXml import CommonDefinesXml\r
36from Xml.XmlParserMisc import GetHelpTextList\r
37\r
38##\r
39# PcdErrorXml\r
40#\r
41class PcdErrorXml(object):\r
42 def __init__(self):\r
43 self.ValidValueList = ''\r
44 self.ValidValueListLang = ''\r
45 self.ValidValueRange = ''\r
46 self.Expression = ''\r
47 self.ErrorNumber = ''\r
48 self.ErrorMessage = []\r
49 \r
50 def FromXml(self, Item, Key):\r
51 self.ValidValueList = XmlElement(Item, '%s/ValidValueList' % Key)\r
52 self.ValidValueListLang = \\r
53 XmlAttribute(XmlNode(Item, '%s/ValidValueList' % Key), 'Lang')\r
54 self.ValidValueRange = XmlElement(Item, '%s/ValidValueRange' % Key)\r
55 self.Expression = XmlElement(Item, '%s/Expression' % Key)\r
56 self.ErrorNumber = XmlElement(Item, '%s/ErrorNumber' % Key)\r
57 for ErrMsg in XmlList(Item, '%s/ErrorMessage' % Key):\r
58 ErrorMessageString = XmlElement(ErrMsg, 'ErrorMessage')\r
59 ErrorMessageLang = \\r
60 XmlAttribute(XmlNode(ErrMsg, 'ErrorMessage'), 'Lang')\r
61 self.ErrorMessage.append((ErrorMessageLang, ErrorMessageString))\r
62 \r
63 Error = PcdErrorObject()\r
64 Error.SetValidValue(self.ValidValueList)\r
65 Error.SetValidValueLang(self.ValidValueListLang)\r
66 Error.SetValidValueRange(self.ValidValueRange)\r
67 Error.SetExpression(self.Expression)\r
68 Error.SetErrorNumber(self.ErrorNumber)\r
69 Error.SetErrorMessageList(self.ErrorMessage)\r
70 \r
71 return Error\r
72\r
73 def ToXml(self, PcdError, Key):\r
74 if self.Expression:\r
75 pass\r
76 AttributeList = []\r
77 NodeList = []\r
78 if PcdError.GetValidValue():\r
79 Element1 = \\r
80 CreateXmlElement('ValidValueList', PcdError.GetValidValue(), [], \\r
81 [['Lang', PcdError.GetValidValueLang()]])\r
82 NodeList.append(Element1)\r
83 if PcdError.GetValidValueRange():\r
84 Element1 = \\r
85 CreateXmlElement('ValidValueRange', \\r
86 PcdError.GetValidValueRange(), [], [])\r
87 NodeList.append(Element1)\r
88 if PcdError.GetExpression():\r
89 NodeList.append(['Expression', PcdError.GetExpression()])\r
90 if PcdError.GetErrorNumber():\r
91 NodeList.append(['ErrorNumber', PcdError.GetErrorNumber()])\r
92 for Item in PcdError.GetErrorMessageList():\r
93 Element = \\r
94 CreateXmlElement('ErrorMessage', Item[1], [], [['Lang', Item[0]]])\r
95 NodeList.append(Element)\r
96 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
97 \r
98 return Root\r
99\r
100 def __str__(self):\r
101 return "ValidValueList = %s ValidValueListLang = %s ValidValueRange \\r
102 = %s Expression = %s ErrorNumber = %s %s" % \\r
103 (self.ValidValueList, self.ValidValueListLang, self.ValidValueRange, \\r
104 self.Expression, self.ErrorNumber, self.ErrorMessage)\r
105\r
106##\r
107# PcdEntryXml\r
108#\r
109class PcdEntryXml(object):\r
110 def __init__(self):\r
111 self.PcdItemType = ''\r
112 self.PcdUsage = ''\r
113 self.TokenSpaceGuidCName = ''\r
114 self.TokenSpaceGuidValue = ''\r
115 self.Token = ''\r
116 self.CName = ''\r
117 self.PcdCName = ''\r
118 self.DatumType = ''\r
119 self.ValidUsage = ''\r
120 self.DefaultValue = ''\r
121 self.MaxDatumSize = ''\r
122 self.Value = ''\r
123 self.Offset = ''\r
124 self.CommonDefines = CommonDefinesXml()\r
125 self.HelpText = []\r
126 self.PcdError = []\r
127\r
128 ##\r
129 # AsBuilt will use FromXml\r
130 # \r
131 def FromXml(self, Item, Key):\r
132 self.PcdItemType = \\r
133 XmlAttribute(XmlNode(Item, '%s' % Key), 'PcdItemType')\r
134 self.PcdUsage = XmlAttribute(XmlNode(Item, '%s' % Key), 'PcdUsage')\r
135 self.TokenSpaceGuidCName = \\r
136 XmlElement(Item, '%s/TokenSpaceGuidCname' % Key)\r
137 self.TokenSpaceGuidValue = \\r
138 XmlElement(Item, '%s/TokenSpaceGuidValue' % Key)\r
139 self.Token = XmlElement(Item, '%s/Token' % Key)\r
140 self.CName = XmlElement(Item, '%s/CName' % Key)\r
141 self.PcdCName = XmlElement(Item, '%s/PcdCName' % Key)\r
142 self.DatumType = XmlElement(Item, '%s/DatumType' % Key)\r
143 self.ValidUsage = XmlElement(Item, '%s/ValidUsage' % Key)\r
144 if not GlobalData.gIS_BINARY_INF:\r
145 self.DefaultValue = XmlElement(Item, '%s/DefaultValue' % Key)\r
146 else:\r
147 self.DefaultValue = XmlElement(Item, '%s/Value' % Key)\r
148 self.MaxDatumSize = XmlElement(Item, '%s/MaxDatumSize' % Key)\r
149 self.Value = XmlElement(Item, '%s/Value' % Key)\r
150 self.Offset = XmlElement(Item, '%s/Offset' % Key)\r
151 self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)\r
152 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
153 HelpTextObj = HelpTextXml()\r
154 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
155 self.HelpText.append(HelpTextObj)\r
156 for PcdErrorItem in XmlList(Item, '%s/PcdError' % Key):\r
157 PcdErrorObjXml = PcdErrorXml()\r
158 PcdErrorObj = PcdErrorObjXml.FromXml(PcdErrorItem, 'PcdError')\r
159 self.PcdError.append(PcdErrorObj)\r
160 \r
161 self.DefaultValue = ConvertNOTEQToNE(self.DefaultValue)\r
162 \r
163 PcdEntry = PcdObject()\r
164 PcdEntry.SetSupArchList(self.CommonDefines.SupArchList)\r
165 PcdEntry.SetTokenSpaceGuidCName(self.TokenSpaceGuidCName)\r
166 PcdEntry.SetTokenSpaceGuidValue(self.TokenSpaceGuidValue)\r
167 PcdEntry.SetToken(self.Token)\r
168 PcdEntry.SetOffset(self.Offset)\r
169 PcdEntry.SetCName(self.CName)\r
170 PcdEntry.SetPcdCName(self.PcdCName)\r
171 PcdEntry.SetDatumType(self.DatumType)\r
172 PcdEntry.SetValidUsage(self.ValidUsage)\r
173 PcdEntry.SetDefaultValue(self.DefaultValue)\r
174 PcdEntry.SetMaxDatumSize(self.MaxDatumSize)\r
175 PcdEntry.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag))\r
176 PcdEntry.SetItemType(self.PcdItemType)\r
177\r
178 PcdEntry.SetHelpTextList(GetHelpTextList(self.HelpText))\r
179 PcdEntry.SetPcdErrorsList(self.PcdError)\r
180 \r
181 return PcdEntry\r
182 ##\r
183 # Package will use FromXml2\r
184 # \r
185 def FromXml2(self, Item, Key):\r
186 self.TokenSpaceGuidCName = \\r
187 XmlElement(Item, '%s/TokenSpaceGuidCname' % Key)\r
188 self.Token = XmlElement(Item, '%s/Token' % Key)\r
189 self.CName = XmlElement(Item, '%s/CName' % Key)\r
190 self.DatumType = XmlElement(Item, '%s/DatumType' % Key)\r
191 self.ValidUsage = XmlElement(Item, '%s/ValidUsage' % Key)\r
192 self.DefaultValue = XmlElement(Item, '%s/DefaultValue' % Key)\r
193 self.MaxDatumSize = XmlElement(Item, '%s/MaxDatumSize' % Key)\r
194 self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)\r
195 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
196 HelpTextObj = HelpTextXml()\r
197 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
198 self.HelpText.append(HelpTextObj)\r
199 for PcdErrorItem in XmlList(Item, '%s/PcdError' % Key):\r
200 PcdErrorObjXml = PcdErrorXml()\r
201 PcdErrorObj = PcdErrorObjXml.FromXml(PcdErrorItem, 'PcdError')\r
202 self.PcdError.append(PcdErrorObj)\r
203 \r
204 self.DefaultValue = ConvertNOTEQToNE(self.DefaultValue)\r
205 \r
206 PcdEntry = PcdObject()\r
207 PcdEntry.SetSupArchList(self.CommonDefines.SupArchList)\r
208 PcdEntry.SetSupModuleList(self.CommonDefines.SupModList)\r
209 PcdEntry.SetTokenSpaceGuidCName(self.TokenSpaceGuidCName)\r
210 PcdEntry.SetToken(self.Token)\r
211 PcdEntry.SetCName(self.CName)\r
212 PcdEntry.SetDatumType(self.DatumType)\r
213 PcdEntry.SetValidUsage(self.ValidUsage)\r
214 PcdEntry.SetDefaultValue(self.DefaultValue)\r
215 PcdEntry.SetMaxDatumSize(self.MaxDatumSize)\r
216 PcdEntry.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag))\r
217\r
218 PcdEntry.SetHelpTextList(GetHelpTextList(self.HelpText))\r
219 PcdEntry.SetPcdErrorsList(self.PcdError)\r
220 \r
221 return PcdEntry\r
222\r
223 ##\r
224 # Module will use FromXml3\r
225 #\r
226 def FromXml3(self, Item, Key):\r
227 self.PcdItemType = \\r
228 XmlAttribute(XmlNode(Item, '%s' % Key), 'PcdItemType')\r
229 self.PcdUsage = XmlAttribute(XmlNode(Item, '%s' % Key), 'PcdUsage')\r
230 self.TokenSpaceGuidCName = \\r
231 XmlElement(Item, '%s/TokenSpaceGuidCName' % Key)\r
232 self.CName = XmlElement(Item, '%s/CName' % Key)\r
233 self.DefaultValue = XmlElement(Item, '%s/DefaultValue' % Key)\r
234 self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)\r
235 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
236 HelpTextObj = HelpTextXml()\r
237 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
238 self.HelpText.append(HelpTextObj)\r
239 for PcdErrorItem in XmlList(Item, '%s/PcdError' % Key):\r
240 PcdErrorObj = PcdErrorXml()\r
241 PcdErrorObj.FromXml(PcdErrorItem, 'PcdError')\r
242 self.PcdError.append(PcdErrorObj)\r
243 \r
244 self.DefaultValue = ConvertNOTEQToNE(self.DefaultValue)\r
245 \r
246 PcdEntry = PcdObject()\r
247 PcdEntry.SetSupArchList(self.CommonDefines.SupArchList)\r
248 PcdEntry.SetTokenSpaceGuidCName(self.TokenSpaceGuidCName)\r
249 PcdEntry.SetCName(self.CName)\r
250 PcdEntry.SetValidUsage(self.PcdUsage)\r
251 PcdEntry.SetDefaultValue(self.DefaultValue)\r
252 PcdEntry.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag))\r
253 PcdEntry.SetItemType(self.PcdItemType)\r
254\r
255 PcdEntry.SetHelpTextList(GetHelpTextList(self.HelpText))\r
256 PcdEntry.SetPcdErrorsList(self.PcdError)\r
257 \r
258 return PcdEntry\r
259 \r
260 def ToXml(self, PcdEntry, Key):\r
261 if self.PcdCName:\r
262 pass\r
263 \r
264 DefaultValue = ConvertNEToNOTEQ(PcdEntry.GetDefaultValue())\r
265 \r
266 AttributeList = \\r
267 [['SupArchList', GetStringOfList(PcdEntry.GetSupArchList())], \\r
268 ['PcdUsage', PcdEntry.GetValidUsage()], \\r
269 ['PcdItemType', PcdEntry.GetItemType()], \\r
270 ['FeatureFlag', PcdEntry.GetFeatureFlag()],\r
271 ]\r
272 NodeList = [['TokenSpaceGuidCname', PcdEntry.GetTokenSpaceGuidCName()],\r
273 ['TokenSpaceGuidValue', PcdEntry.GetTokenSpaceGuidValue()],\r
274 ['Token', PcdEntry.GetToken()], \r
275 ['CName', PcdEntry.GetCName()],\r
276 ['DatumType', PcdEntry.GetDatumType()],\r
277 ['ValidUsage', GetStringOfList(PcdEntry.GetValidUsage())],\r
278 ['DefaultValue', DefaultValue],\r
279 ['MaxDatumSize', PcdEntry.GetMaxDatumSize()],\r
280 ['Offset', PcdEntry.GetOffset()],\r
281 ]\r
282 \r
283 for Item in PcdEntry.GetHelpTextList():\r
284 Tmp = HelpTextXml()\r
285 NodeList.append(Tmp.ToXml(Item))\r
286 for Item in PcdEntry.GetPcdErrorsList():\r
287 Tmp = PcdErrorXml()\r
288 NodeList.append(Tmp.ToXml(Item, 'PcdError'))\r
289 \r
290 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
291 \r
292 return Root\r
293 ##\r
294 # Package will use ToXml2\r
295 # \r
296 def ToXml2(self, PcdEntry, Key):\r
297 if self.PcdCName:\r
298 pass\r
299 \r
300 DefaultValue = ConvertNEToNOTEQ(PcdEntry.GetDefaultValue())\r
301 \r
302 AttributeList = \\r
303 [['SupArchList', GetStringOfList(PcdEntry.GetSupArchList())], \\r
304 ['SupModList', GetStringOfList(PcdEntry.GetSupModuleList())]\r
305 ]\r
306 NodeList = [['TokenSpaceGuidCname', PcdEntry.GetTokenSpaceGuidCName()],\r
307 ['Token', PcdEntry.GetToken()],\r
308 ['CName', PcdEntry.GetCName()],\r
309 ['DatumType', PcdEntry.GetDatumType()],\r
310 ['ValidUsage', GetStringOfList(PcdEntry.GetValidUsage())],\r
311 ['DefaultValue', DefaultValue],\r
312 ['MaxDatumSize', PcdEntry.GetMaxDatumSize()],\r
313 ]\r
314 for Item in PcdEntry.GetHelpTextList():\r
315 Tmp = HelpTextXml()\r
316 NodeList.append(Tmp.ToXml(Item))\r
317\r
318 for Item in PcdEntry.GetPcdErrorsList():\r
319 Tmp = PcdErrorXml()\r
320 NodeList.append(Tmp.ToXml(Item, 'PcdError'))\r
321 \r
322 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
323 \r
324 return Root\r
325 ##\r
326 # Module will use ToXml3\r
327 #\r
328 def ToXml3(self, PcdEntry, Key):\r
329 if self.PcdCName:\r
330 pass\r
331 \r
332 DefaultValue = ConvertNEToNOTEQ(PcdEntry.GetDefaultValue())\r
333 \r
334 AttributeList = \\r
335 [['SupArchList', GetStringOfList(PcdEntry.GetSupArchList())], \\r
336 ['PcdUsage', PcdEntry.GetValidUsage()], \\r
337 ['PcdItemType', PcdEntry.GetItemType()], \\r
338 ['FeatureFlag', ConvertNEToNOTEQ(PcdEntry.GetFeatureFlag())],\r
339 ]\r
340 NodeList = [['CName', PcdEntry.GetCName()],\r
341 ['TokenSpaceGuidCName', PcdEntry.GetTokenSpaceGuidCName()],\r
342 ['DefaultValue', DefaultValue],\r
343 ]\r
344 \r
345 for Item in PcdEntry.GetHelpTextList():\r
346 Tmp = HelpTextXml()\r
347 NodeList.append(Tmp.ToXml(Item))\r
348 for Item in PcdEntry.GetPcdErrorsList():\r
349 Tmp = PcdErrorXml()\r
350 NodeList.append(Tmp.ToXml(Item, 'PcdError'))\r
351 \r
352 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
353 \r
354 return Root\r
355 \r
356 ##\r
357 # AsBuild Module will use ToXml4\r
358 #\r
359 def ToXml4(self, PcdEntry, Key):\r
360 if self.PcdCName:\r
361 pass\r
362 \r
363 DefaultValue = ConvertNEToNOTEQ(PcdEntry.GetDefaultValue())\r
364 \r
365 AttributeList = []\r
366 \r
367 NodeList = [\r
368 ['TokenSpaceGuidValue', PcdEntry.GetTokenSpaceGuidValue()],\r
369 ['PcdCName', PcdEntry.GetCName()],\r
370 ['Token', PcdEntry.GetToken()],\r
371 ['DatumType', PcdEntry.GetDatumType()],\r
372 ['MaxDatumSize', PcdEntry.GetMaxDatumSize()],\r
373 ['Value', DefaultValue],\r
374 ['Offset', PcdEntry.GetOffset()]\r
375 ]\r
376 \r
377 for Item in PcdEntry.GetHelpTextList():\r
378 Tmp = HelpTextXml()\r
379 NodeList.append(Tmp.ToXml(Item))\r
380 for Item in PcdEntry.GetPcdErrorsList():\r
381 Tmp = PcdErrorXml()\r
382 NodeList.append(Tmp.ToXml(Item, 'PcdError'))\r
383 \r
384 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
385 \r
386 return Root\r
387 \r
388\r
389 def __str__(self):\r
390 Str = \\r
391 ('PcdItemType = %s PcdUsage = %s TokenSpaceGuidCName = %s \\r
392 TokenSpaceGuidValue = %s Token = %s CName = %s PcdCName = %s \\r
393 DatumType = %s ValidUsage = %s DefaultValue = %s MaxDatumSize = %s \\r
394 Value = %s Offset = %s %s') % \\r
395 (self.PcdItemType, self.PcdUsage, self.TokenSpaceGuidCName, \\r
396 self.TokenSpaceGuidValue, self.Token, self.CName, self.PcdCName, \\r
397 self.DatumType, self.ValidUsage, self.DefaultValue, \\r
398 self.MaxDatumSize, self.Value, self.Offset, self.CommonDefines)\r
399 for Item in self.HelpText:\r
400 Str = Str + "\n\t" + str(Item)\r
401 for Item in self.PcdError:\r
402 Str = Str + "\n\tPcdError:" + str(Item)\r
403 return Str