Sync BaseTools Branch (version r2271) to EDKII main trunk.
BaseTool Branch: https://edk2-buildtools.svn.sourceforge.net/svnroot/edk2-buildtools/branches/Releases/BaseTools_r2100 Signed-off-by: lgao4 Reviewed-by: hchen30 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12214 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
403
BaseTools/Source/Python/UPT/Xml/PcdXml.py
Normal file
403
BaseTools/Source/Python/UPT/Xml/PcdXml.py
Normal file
@ -0,0 +1,403 @@
|
||||
## @file
|
||||
# This file is used to parse a PCD file of .PKG file
|
||||
#
|
||||
# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
|
||||
#
|
||||
# This program and the accompanying materials are licensed and made available
|
||||
# under the terms and conditions of the BSD License which accompanies this
|
||||
# distribution. The full text of the license may be found at
|
||||
# http://opensource.org/licenses/bsd-license.php
|
||||
#
|
||||
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
#
|
||||
|
||||
'''
|
||||
PcdXml
|
||||
'''
|
||||
|
||||
##
|
||||
# Import Modules
|
||||
#
|
||||
|
||||
from Library.Xml.XmlRoutines import XmlElement
|
||||
from Library.Xml.XmlRoutines import XmlAttribute
|
||||
from Library.Xml.XmlRoutines import XmlNode
|
||||
from Library.Xml.XmlRoutines import CreateXmlElement
|
||||
from Library.Xml.XmlRoutines import XmlList
|
||||
from Library.String import GetStringOfList
|
||||
from Library.String import ConvertNEToNOTEQ
|
||||
from Library.String import ConvertNOTEQToNE
|
||||
from Library import GlobalData
|
||||
from Object.POM.CommonObject import PcdObject
|
||||
from Object.POM.CommonObject import PcdErrorObject
|
||||
from Xml.CommonXml import HelpTextXml
|
||||
from Xml.CommonXml import CommonDefinesXml
|
||||
from Xml.XmlParserMisc import GetHelpTextList
|
||||
|
||||
##
|
||||
# PcdErrorXml
|
||||
#
|
||||
class PcdErrorXml(object):
|
||||
def __init__(self):
|
||||
self.ValidValueList = ''
|
||||
self.ValidValueListLang = ''
|
||||
self.ValidValueRange = ''
|
||||
self.Expression = ''
|
||||
self.ErrorNumber = ''
|
||||
self.ErrorMessage = []
|
||||
|
||||
def FromXml(self, Item, Key):
|
||||
self.ValidValueList = XmlElement(Item, '%s/ValidValueList' % Key)
|
||||
self.ValidValueListLang = \
|
||||
XmlAttribute(XmlNode(Item, '%s/ValidValueList' % Key), 'Lang')
|
||||
self.ValidValueRange = XmlElement(Item, '%s/ValidValueRange' % Key)
|
||||
self.Expression = XmlElement(Item, '%s/Expression' % Key)
|
||||
self.ErrorNumber = XmlElement(Item, '%s/ErrorNumber' % Key)
|
||||
for ErrMsg in XmlList(Item, '%s/ErrorMessage' % Key):
|
||||
ErrorMessageString = XmlElement(ErrMsg, 'ErrorMessage')
|
||||
ErrorMessageLang = \
|
||||
XmlAttribute(XmlNode(ErrMsg, 'ErrorMessage'), 'Lang')
|
||||
self.ErrorMessage.append((ErrorMessageLang, ErrorMessageString))
|
||||
|
||||
Error = PcdErrorObject()
|
||||
Error.SetValidValue(self.ValidValueList)
|
||||
Error.SetValidValueLang(self.ValidValueListLang)
|
||||
Error.SetValidValueRange(self.ValidValueRange)
|
||||
Error.SetExpression(self.Expression)
|
||||
Error.SetErrorNumber(self.ErrorNumber)
|
||||
Error.SetErrorMessageList(self.ErrorMessage)
|
||||
|
||||
return Error
|
||||
|
||||
def ToXml(self, PcdError, Key):
|
||||
if self.Expression:
|
||||
pass
|
||||
AttributeList = []
|
||||
NodeList = []
|
||||
if PcdError.GetValidValue():
|
||||
Element1 = \
|
||||
CreateXmlElement('ValidValueList', PcdError.GetValidValue(), [], \
|
||||
[['Lang', PcdError.GetValidValueLang()]])
|
||||
NodeList.append(Element1)
|
||||
if PcdError.GetValidValueRange():
|
||||
Element1 = \
|
||||
CreateXmlElement('ValidValueRange', \
|
||||
PcdError.GetValidValueRange(), [], [])
|
||||
NodeList.append(Element1)
|
||||
if PcdError.GetExpression():
|
||||
NodeList.append(['Expression', PcdError.GetExpression()])
|
||||
if PcdError.GetErrorNumber():
|
||||
NodeList.append(['ErrorNumber', PcdError.GetErrorNumber()])
|
||||
for Item in PcdError.GetErrorMessageList():
|
||||
Element = \
|
||||
CreateXmlElement('ErrorMessage', Item[1], [], [['Lang', Item[0]]])
|
||||
NodeList.append(Element)
|
||||
Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
|
||||
|
||||
return Root
|
||||
|
||||
def __str__(self):
|
||||
return "ValidValueList = %s ValidValueListLang = %s ValidValueRange \
|
||||
= %s Expression = %s ErrorNumber = %s %s" % \
|
||||
(self.ValidValueList, self.ValidValueListLang, self.ValidValueRange, \
|
||||
self.Expression, self.ErrorNumber, self.ErrorMessage)
|
||||
|
||||
##
|
||||
# PcdEntryXml
|
||||
#
|
||||
class PcdEntryXml(object):
|
||||
def __init__(self):
|
||||
self.PcdItemType = ''
|
||||
self.PcdUsage = ''
|
||||
self.TokenSpaceGuidCName = ''
|
||||
self.TokenSpaceGuidValue = ''
|
||||
self.Token = ''
|
||||
self.CName = ''
|
||||
self.PcdCName = ''
|
||||
self.DatumType = ''
|
||||
self.ValidUsage = ''
|
||||
self.DefaultValue = ''
|
||||
self.MaxDatumSize = ''
|
||||
self.Value = ''
|
||||
self.Offset = ''
|
||||
self.CommonDefines = CommonDefinesXml()
|
||||
self.HelpText = []
|
||||
self.PcdError = []
|
||||
|
||||
##
|
||||
# AsBuilt will use FromXml
|
||||
#
|
||||
def FromXml(self, Item, Key):
|
||||
self.PcdItemType = \
|
||||
XmlAttribute(XmlNode(Item, '%s' % Key), 'PcdItemType')
|
||||
self.PcdUsage = XmlAttribute(XmlNode(Item, '%s' % Key), 'PcdUsage')
|
||||
self.TokenSpaceGuidCName = \
|
||||
XmlElement(Item, '%s/TokenSpaceGuidCname' % Key)
|
||||
self.TokenSpaceGuidValue = \
|
||||
XmlElement(Item, '%s/TokenSpaceGuidValue' % Key)
|
||||
self.Token = XmlElement(Item, '%s/Token' % Key)
|
||||
self.CName = XmlElement(Item, '%s/CName' % Key)
|
||||
self.PcdCName = XmlElement(Item, '%s/PcdCName' % Key)
|
||||
self.DatumType = XmlElement(Item, '%s/DatumType' % Key)
|
||||
self.ValidUsage = XmlElement(Item, '%s/ValidUsage' % Key)
|
||||
if not GlobalData.gIS_BINARY_INF:
|
||||
self.DefaultValue = XmlElement(Item, '%s/DefaultValue' % Key)
|
||||
else:
|
||||
self.DefaultValue = XmlElement(Item, '%s/Value' % Key)
|
||||
self.MaxDatumSize = XmlElement(Item, '%s/MaxDatumSize' % Key)
|
||||
self.Value = XmlElement(Item, '%s/Value' % Key)
|
||||
self.Offset = XmlElement(Item, '%s/Offset' % Key)
|
||||
self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)
|
||||
for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):
|
||||
HelpTextObj = HelpTextXml()
|
||||
HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)
|
||||
self.HelpText.append(HelpTextObj)
|
||||
for PcdErrorItem in XmlList(Item, '%s/PcdError' % Key):
|
||||
PcdErrorObjXml = PcdErrorXml()
|
||||
PcdErrorObj = PcdErrorObjXml.FromXml(PcdErrorItem, 'PcdError')
|
||||
self.PcdError.append(PcdErrorObj)
|
||||
|
||||
self.DefaultValue = ConvertNOTEQToNE(self.DefaultValue)
|
||||
|
||||
PcdEntry = PcdObject()
|
||||
PcdEntry.SetSupArchList(self.CommonDefines.SupArchList)
|
||||
PcdEntry.SetTokenSpaceGuidCName(self.TokenSpaceGuidCName)
|
||||
PcdEntry.SetTokenSpaceGuidValue(self.TokenSpaceGuidValue)
|
||||
PcdEntry.SetToken(self.Token)
|
||||
PcdEntry.SetOffset(self.Offset)
|
||||
PcdEntry.SetCName(self.CName)
|
||||
PcdEntry.SetPcdCName(self.PcdCName)
|
||||
PcdEntry.SetDatumType(self.DatumType)
|
||||
PcdEntry.SetValidUsage(self.ValidUsage)
|
||||
PcdEntry.SetDefaultValue(self.DefaultValue)
|
||||
PcdEntry.SetMaxDatumSize(self.MaxDatumSize)
|
||||
PcdEntry.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag))
|
||||
PcdEntry.SetItemType(self.PcdItemType)
|
||||
|
||||
PcdEntry.SetHelpTextList(GetHelpTextList(self.HelpText))
|
||||
PcdEntry.SetPcdErrorsList(self.PcdError)
|
||||
|
||||
return PcdEntry
|
||||
##
|
||||
# Package will use FromXml2
|
||||
#
|
||||
def FromXml2(self, Item, Key):
|
||||
self.TokenSpaceGuidCName = \
|
||||
XmlElement(Item, '%s/TokenSpaceGuidCname' % Key)
|
||||
self.Token = XmlElement(Item, '%s/Token' % Key)
|
||||
self.CName = XmlElement(Item, '%s/CName' % Key)
|
||||
self.DatumType = XmlElement(Item, '%s/DatumType' % Key)
|
||||
self.ValidUsage = XmlElement(Item, '%s/ValidUsage' % Key)
|
||||
self.DefaultValue = XmlElement(Item, '%s/DefaultValue' % Key)
|
||||
self.MaxDatumSize = XmlElement(Item, '%s/MaxDatumSize' % Key)
|
||||
self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)
|
||||
for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):
|
||||
HelpTextObj = HelpTextXml()
|
||||
HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)
|
||||
self.HelpText.append(HelpTextObj)
|
||||
for PcdErrorItem in XmlList(Item, '%s/PcdError' % Key):
|
||||
PcdErrorObjXml = PcdErrorXml()
|
||||
PcdErrorObj = PcdErrorObjXml.FromXml(PcdErrorItem, 'PcdError')
|
||||
self.PcdError.append(PcdErrorObj)
|
||||
|
||||
self.DefaultValue = ConvertNOTEQToNE(self.DefaultValue)
|
||||
|
||||
PcdEntry = PcdObject()
|
||||
PcdEntry.SetSupArchList(self.CommonDefines.SupArchList)
|
||||
PcdEntry.SetSupModuleList(self.CommonDefines.SupModList)
|
||||
PcdEntry.SetTokenSpaceGuidCName(self.TokenSpaceGuidCName)
|
||||
PcdEntry.SetToken(self.Token)
|
||||
PcdEntry.SetCName(self.CName)
|
||||
PcdEntry.SetDatumType(self.DatumType)
|
||||
PcdEntry.SetValidUsage(self.ValidUsage)
|
||||
PcdEntry.SetDefaultValue(self.DefaultValue)
|
||||
PcdEntry.SetMaxDatumSize(self.MaxDatumSize)
|
||||
PcdEntry.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag))
|
||||
|
||||
PcdEntry.SetHelpTextList(GetHelpTextList(self.HelpText))
|
||||
PcdEntry.SetPcdErrorsList(self.PcdError)
|
||||
|
||||
return PcdEntry
|
||||
|
||||
##
|
||||
# Module will use FromXml3
|
||||
#
|
||||
def FromXml3(self, Item, Key):
|
||||
self.PcdItemType = \
|
||||
XmlAttribute(XmlNode(Item, '%s' % Key), 'PcdItemType')
|
||||
self.PcdUsage = XmlAttribute(XmlNode(Item, '%s' % Key), 'PcdUsage')
|
||||
self.TokenSpaceGuidCName = \
|
||||
XmlElement(Item, '%s/TokenSpaceGuidCName' % Key)
|
||||
self.CName = XmlElement(Item, '%s/CName' % Key)
|
||||
self.DefaultValue = XmlElement(Item, '%s/DefaultValue' % Key)
|
||||
self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)
|
||||
for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):
|
||||
HelpTextObj = HelpTextXml()
|
||||
HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)
|
||||
self.HelpText.append(HelpTextObj)
|
||||
for PcdErrorItem in XmlList(Item, '%s/PcdError' % Key):
|
||||
PcdErrorObj = PcdErrorXml()
|
||||
PcdErrorObj.FromXml(PcdErrorItem, 'PcdError')
|
||||
self.PcdError.append(PcdErrorObj)
|
||||
|
||||
self.DefaultValue = ConvertNOTEQToNE(self.DefaultValue)
|
||||
|
||||
PcdEntry = PcdObject()
|
||||
PcdEntry.SetSupArchList(self.CommonDefines.SupArchList)
|
||||
PcdEntry.SetTokenSpaceGuidCName(self.TokenSpaceGuidCName)
|
||||
PcdEntry.SetCName(self.CName)
|
||||
PcdEntry.SetValidUsage(self.PcdUsage)
|
||||
PcdEntry.SetDefaultValue(self.DefaultValue)
|
||||
PcdEntry.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag))
|
||||
PcdEntry.SetItemType(self.PcdItemType)
|
||||
|
||||
PcdEntry.SetHelpTextList(GetHelpTextList(self.HelpText))
|
||||
PcdEntry.SetPcdErrorsList(self.PcdError)
|
||||
|
||||
return PcdEntry
|
||||
|
||||
def ToXml(self, PcdEntry, Key):
|
||||
if self.PcdCName:
|
||||
pass
|
||||
|
||||
DefaultValue = ConvertNEToNOTEQ(PcdEntry.GetDefaultValue())
|
||||
|
||||
AttributeList = \
|
||||
[['SupArchList', GetStringOfList(PcdEntry.GetSupArchList())], \
|
||||
['PcdUsage', PcdEntry.GetValidUsage()], \
|
||||
['PcdItemType', PcdEntry.GetItemType()], \
|
||||
['FeatureFlag', PcdEntry.GetFeatureFlag()],
|
||||
]
|
||||
NodeList = [['TokenSpaceGuidCname', PcdEntry.GetTokenSpaceGuidCName()],
|
||||
['TokenSpaceGuidValue', PcdEntry.GetTokenSpaceGuidValue()],
|
||||
['Token', PcdEntry.GetToken()],
|
||||
['CName', PcdEntry.GetCName()],
|
||||
['DatumType', PcdEntry.GetDatumType()],
|
||||
['ValidUsage', GetStringOfList(PcdEntry.GetValidUsage())],
|
||||
['DefaultValue', DefaultValue],
|
||||
['MaxDatumSize', PcdEntry.GetMaxDatumSize()],
|
||||
['Offset', PcdEntry.GetOffset()],
|
||||
]
|
||||
|
||||
for Item in PcdEntry.GetHelpTextList():
|
||||
Tmp = HelpTextXml()
|
||||
NodeList.append(Tmp.ToXml(Item))
|
||||
for Item in PcdEntry.GetPcdErrorsList():
|
||||
Tmp = PcdErrorXml()
|
||||
NodeList.append(Tmp.ToXml(Item, 'PcdError'))
|
||||
|
||||
Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
|
||||
|
||||
return Root
|
||||
##
|
||||
# Package will use ToXml2
|
||||
#
|
||||
def ToXml2(self, PcdEntry, Key):
|
||||
if self.PcdCName:
|
||||
pass
|
||||
|
||||
DefaultValue = ConvertNEToNOTEQ(PcdEntry.GetDefaultValue())
|
||||
|
||||
AttributeList = \
|
||||
[['SupArchList', GetStringOfList(PcdEntry.GetSupArchList())], \
|
||||
['SupModList', GetStringOfList(PcdEntry.GetSupModuleList())]
|
||||
]
|
||||
NodeList = [['TokenSpaceGuidCname', PcdEntry.GetTokenSpaceGuidCName()],
|
||||
['Token', PcdEntry.GetToken()],
|
||||
['CName', PcdEntry.GetCName()],
|
||||
['DatumType', PcdEntry.GetDatumType()],
|
||||
['ValidUsage', GetStringOfList(PcdEntry.GetValidUsage())],
|
||||
['DefaultValue', DefaultValue],
|
||||
['MaxDatumSize', PcdEntry.GetMaxDatumSize()],
|
||||
]
|
||||
for Item in PcdEntry.GetHelpTextList():
|
||||
Tmp = HelpTextXml()
|
||||
NodeList.append(Tmp.ToXml(Item))
|
||||
|
||||
for Item in PcdEntry.GetPcdErrorsList():
|
||||
Tmp = PcdErrorXml()
|
||||
NodeList.append(Tmp.ToXml(Item, 'PcdError'))
|
||||
|
||||
Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
|
||||
|
||||
return Root
|
||||
##
|
||||
# Module will use ToXml3
|
||||
#
|
||||
def ToXml3(self, PcdEntry, Key):
|
||||
if self.PcdCName:
|
||||
pass
|
||||
|
||||
DefaultValue = ConvertNEToNOTEQ(PcdEntry.GetDefaultValue())
|
||||
|
||||
AttributeList = \
|
||||
[['SupArchList', GetStringOfList(PcdEntry.GetSupArchList())], \
|
||||
['PcdUsage', PcdEntry.GetValidUsage()], \
|
||||
['PcdItemType', PcdEntry.GetItemType()], \
|
||||
['FeatureFlag', ConvertNEToNOTEQ(PcdEntry.GetFeatureFlag())],
|
||||
]
|
||||
NodeList = [['CName', PcdEntry.GetCName()],
|
||||
['TokenSpaceGuidCName', PcdEntry.GetTokenSpaceGuidCName()],
|
||||
['DefaultValue', DefaultValue],
|
||||
]
|
||||
|
||||
for Item in PcdEntry.GetHelpTextList():
|
||||
Tmp = HelpTextXml()
|
||||
NodeList.append(Tmp.ToXml(Item))
|
||||
for Item in PcdEntry.GetPcdErrorsList():
|
||||
Tmp = PcdErrorXml()
|
||||
NodeList.append(Tmp.ToXml(Item, 'PcdError'))
|
||||
|
||||
Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
|
||||
|
||||
return Root
|
||||
|
||||
##
|
||||
# AsBuild Module will use ToXml4
|
||||
#
|
||||
def ToXml4(self, PcdEntry, Key):
|
||||
if self.PcdCName:
|
||||
pass
|
||||
|
||||
DefaultValue = ConvertNEToNOTEQ(PcdEntry.GetDefaultValue())
|
||||
|
||||
AttributeList = []
|
||||
|
||||
NodeList = [
|
||||
['TokenSpaceGuidValue', PcdEntry.GetTokenSpaceGuidValue()],
|
||||
['PcdCName', PcdEntry.GetCName()],
|
||||
['Token', PcdEntry.GetToken()],
|
||||
['DatumType', PcdEntry.GetDatumType()],
|
||||
['MaxDatumSize', PcdEntry.GetMaxDatumSize()],
|
||||
['Value', DefaultValue],
|
||||
['Offset', PcdEntry.GetOffset()]
|
||||
]
|
||||
|
||||
for Item in PcdEntry.GetHelpTextList():
|
||||
Tmp = HelpTextXml()
|
||||
NodeList.append(Tmp.ToXml(Item))
|
||||
for Item in PcdEntry.GetPcdErrorsList():
|
||||
Tmp = PcdErrorXml()
|
||||
NodeList.append(Tmp.ToXml(Item, 'PcdError'))
|
||||
|
||||
Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
|
||||
|
||||
return Root
|
||||
|
||||
|
||||
def __str__(self):
|
||||
Str = \
|
||||
('PcdItemType = %s PcdUsage = %s TokenSpaceGuidCName = %s \
|
||||
TokenSpaceGuidValue = %s Token = %s CName = %s PcdCName = %s \
|
||||
DatumType = %s ValidUsage = %s DefaultValue = %s MaxDatumSize = %s \
|
||||
Value = %s Offset = %s %s') % \
|
||||
(self.PcdItemType, self.PcdUsage, self.TokenSpaceGuidCName, \
|
||||
self.TokenSpaceGuidValue, self.Token, self.CName, self.PcdCName, \
|
||||
self.DatumType, self.ValidUsage, self.DefaultValue, \
|
||||
self.MaxDatumSize, self.Value, self.Offset, self.CommonDefines)
|
||||
for Item in self.HelpText:
|
||||
Str = Str + "\n\t" + str(Item)
|
||||
for Item in self.PcdError:
|
||||
Str = Str + "\n\tPcdError:" + str(Item)
|
||||
return Str
|
Reference in New Issue
Block a user