# @var KeyList: To store value for KeyList, a list for all Keys used in Dec\r
#\r
class Dec(DecObject):\r
- def __init__(self, Filename = None, IsToPackage = False, WorkspaceDir = None, AllGuidVersionDict = None, SupArchList = DataType.ARCH_LIST):\r
+ def __init__(self, Filename=None, IsToPackage=False, WorkspaceDir=None, AllGuidVersionDict=None, SupArchList=DataType.ARCH_LIST):\r
self.Identification = IdentificationClass()\r
self.Package = PackageClass()\r
self.UserExtensions = ''\r
]\r
# Upper all KEYs to ignore case sensitive when parsing\r
self.KeyList = map(lambda c: c.upper(), self.KeyList)\r
- \r
+\r
# Init RecordSet\r
- self.RecordSet = {} \r
+ self.RecordSet = {}\r
for Key in self.KeyList:\r
self.RecordSet[Section[Key]] = []\r
- \r
+\r
# Init Comment\r
self.SectionHeaderCommentDict = {}\r
- \r
+\r
# Load Dec file if filename is not None\r
if Filename != None:\r
self.LoadDecFile(Filename)\r
- \r
+\r
# Transfer to Package Object if IsToPackage is True\r
if IsToPackage:\r
self.DecToPackage()\r
- \r
+\r
## Load Dec file\r
#\r
# Load the file if it exists\r
self.Identification.FullPath = Filename\r
(self.Identification.RelaPath, self.Identification.FileName) = os.path.split(Filename)\r
if self.Identification.FullPath.find(self.WorkspaceDir) > -1:\r
- self.Identification.PackagePath = os.path.dirname(self.Identification.FullPath[len(self.WorkspaceDir) + 1:]) \r
- \r
+ self.Identification.PackagePath = os.path.dirname(self.Identification.FullPath[len(self.WorkspaceDir) + 1:])\r
+\r
# Init common datas\r
IfDefList, SectionItemList, CurrentSection, ArchList, ThirdList, IncludeFiles = \\r
[], [], TAB_UNKNOWN, [], [], []\r
LineNo = 0\r
- \r
+\r
# Parse file content\r
IsFindBlockComment = False\r
ReservedLine = ''\r
LineNo = LineNo + 1\r
# Remove comment block\r
if Line.find(TAB_COMMENT_EDK_START) > -1:\r
- ReservedLine = GetSplitValueList(Line, TAB_COMMENT_EDK_START, 1)[0]\r
+ ReservedLine = GetSplitList(Line, TAB_COMMENT_EDK_START, 1)[0]\r
if ReservedLine.strip().startswith(TAB_COMMENT_SPLIT):\r
Comment = Comment + Line.strip() + '\n'\r
ReservedLine = ''\r
continue\r
if Line.find(TAB_COMMENT_EDK_END) > -1:\r
Comment = Comment + Line[:Line.find(TAB_COMMENT_EDK_END) + len(TAB_COMMENT_EDK_END)] + '\n'\r
- Line = ReservedLine + GetSplitValueList(Line, TAB_COMMENT_EDK_END, 1)[1]\r
+ Line = ReservedLine + GetSplitList(Line, TAB_COMMENT_EDK_END, 1)[1]\r
ReservedLine = ''\r
IsFindBlockComment = False\r
if IsFindBlockComment:\r
Line = CleanString(Line)\r
if Line == '':\r
continue\r
- \r
+\r
## Find a new section tab\r
# First insert previous section items\r
# And then parse the content of the new section\r
SectionItemList = []\r
ArchList = []\r
ThirdList = []\r
- \r
+\r
CurrentSection = ''\r
LineList = GetSplitValueList(Line[len(TAB_SECTION_START):len(Line) - len(TAB_SECTION_END)], TAB_COMMA_SPLIT)\r
for Item in LineList:\r
CurrentSection = ItemList[0]\r
else:\r
if CurrentSection != ItemList[0]:\r
- EdkLogger.error("Parser", PARSER_ERROR, "Different section names '%s' and '%s' are found in one section definition, this is not allowed." % (CurrentSection, ItemList[0]), File=Filename, Line=LineNo, RaiseError = EdkLogger.IsRaiseError)\r
+ EdkLogger.error("Parser", PARSER_ERROR, "Different section names '%s' and '%s' are found in one section definition, this is not allowed." % (CurrentSection, ItemList[0]), File=Filename, Line=LineNo, RaiseError=EdkLogger.IsRaiseError)\r
if CurrentSection.upper() not in self.KeyList:\r
RaiseParserError(Line, CurrentSection, Filename, '', LineNo)\r
ItemList.append('')\r
RaiseParserError(Line, CurrentSection, Filename, '', LineNo)\r
else:\r
if ItemList[1] != '' and ItemList[1].upper() not in ARCH_LIST_FULL:\r
- EdkLogger.error("Parser", PARSER_ERROR, "Invalid Arch definition '%s' found" % ItemList[1], File=Filename, Line=LineNo, RaiseError = EdkLogger.IsRaiseError)\r
+ EdkLogger.error("Parser", PARSER_ERROR, "Invalid Arch definition '%s' found" % ItemList[1], File=Filename, Line=LineNo, RaiseError=EdkLogger.IsRaiseError)\r
ArchList.append(ItemList[1].upper())\r
ThirdList.append(ItemList[2])\r
- \r
+\r
if Comment:\r
if Comment.endswith('\n'):\r
Comment = Comment[:len(Comment) - len('\n')]\r
self.SectionHeaderCommentDict[Section[CurrentSection.upper()]] = Comment\r
Comment = ''\r
continue\r
- \r
+\r
# Not in any defined section\r
if CurrentSection == TAB_UNKNOWN:\r
ErrorMsg = "%s is not in any defined section" % Line\r
- EdkLogger.error("Parser", PARSER_ERROR, ErrorMsg, File=Filename, Line=LineNo, RaiseError = EdkLogger.IsRaiseError)\r
+ EdkLogger.error("Parser", PARSER_ERROR, ErrorMsg, File=Filename, Line=LineNo, RaiseError=EdkLogger.IsRaiseError)\r
\r
# Add a section item\r
SectionItemList.append([Line, LineNo, Comment])\r
Comment = ''\r
# End of parse\r
#End of For\r
- \r
+\r
#\r
# Insert items data of last section\r
#\r
SectionHeaderCommentDict = {}\r
if Package == None:\r
return Dec\r
- \r
+\r
PackageHeader = Package.PackageHeader\r
TmpList = []\r
if PackageHeader.Name:\r
if Package.UserExtensions != None:\r
for Item in Package.UserExtensions.Defines:\r
TmpList.append(Item)\r
- DecList['Defines'] =TmpList\r
+ DecList['Defines'] = TmpList\r
if PackageHeader.Description != '':\r
SectionHeaderCommentDict['Defines'] = PackageHeader.Description\r
- \r
+\r
for Item in Package.Includes:\r
Key = 'Includes.' + Item.SupArchList\r
Value = Item.FilePath\r
GenMetaDatSectionItem(Key, Value, DecList)\r
- \r
+\r
for Item in Package.GuidDeclarations:\r
Key = 'Guids.' + Item.SupArchList\r
Value = Item.CName + '=' + Item.Guid\r
GenMetaDatSectionItem(Key, Value, DecList)\r
- \r
+\r
for Item in Package.ProtocolDeclarations:\r
Key = 'Protocols.' + Item.SupArchList\r
Value = Item.CName + '=' + Item.Guid\r
GenMetaDatSectionItem(Key, Value, DecList)\r
- \r
+\r
for Item in Package.PpiDeclarations:\r
Key = 'Ppis.' + Item.SupArchList\r
Value = Item.CName + '=' + Item.Guid\r
GenMetaDatSectionItem(Key, Value, DecList)\r
- \r
+\r
for Item in Package.LibraryClassDeclarations:\r
Key = 'LibraryClasses.' + Item.SupArchList\r
Value = Item.LibraryClass + '|' + Item.RecommendedInstance\r
else:\r
Dec = Dec + ' ' + Value + '\n'\r
Dec = Dec + '\n'\r
- \r
+\r
return Dec\r
\r
## Transfer to Package Object\r
def DecToPackage(self):\r
# Init global information for the file\r
ContainerFile = self.Identification.FullPath\r
- \r
+\r
# Generate Package Header\r
self.GenPackageHeader(ContainerFile)\r
- \r
+\r
# Generate Includes\r
# Only for Edk\r
self.GenIncludes(ContainerFile)\r
\r
# Generate Ppis\r
self.GenGuidProtocolPpis(DataType.TAB_PPIS, ContainerFile)\r
- \r
+\r
# Generate LibraryClasses\r
self.GenLibraryClasses(ContainerFile)\r
- \r
+\r
# Generate Pcds\r
self.GenPcds(ContainerFile)\r
- \r
+\r
# Init MiscFiles\r
self.GenMiscFiles(ContainerFile)\r
- \r
+\r
## GenMiscFiles\r
#\r
def GenMiscFiles(self, ContainerFile):\r
File.Filename = Item\r
MiscFiles.Files.append(File)\r
self.Package.MiscFiles = MiscFiles\r
- \r
+\r
## Get Package Header\r
#\r
# Gen Package Header of Dec as <Key> = <Value>\r
PackageHeader.DecSpecification = Value\r
else:\r
OtherDefines.append(Record[0])\r
- \r
+\r
PackageHeader.FileName = self.Identification.FileName\r
PackageHeader.FullPath = self.Identification.FullPath\r
PackageHeader.RelaPath = self.Identification.RelaPath\r
PackageHeader.PackagePath = self.Identification.PackagePath\r
PackageHeader.ModulePath = self.Identification.ModulePath\r
PackageHeader.CombinePath = os.path.normpath(os.path.join(PackageHeader.PackagePath, PackageHeader.ModulePath, PackageHeader.FileName))\r
- \r
+\r
if MODEL_META_DATA_HEADER in self.SectionHeaderCommentDict:\r
PackageHeader.Description = self.SectionHeaderCommentDict[MODEL_META_DATA_HEADER]\r
- \r
+\r
self.Package.PackageHeader = PackageHeader\r
UE = UserExtensionsClass()\r
UE.Defines = OtherDefines\r
self.Package.UserExtensions = UE\r
- \r
- \r
+\r
+\r
## GenIncludes\r
#\r
# Gen Includes of Dec\r
Includes = {}\r
# Get all Includes\r
RecordSet = self.RecordSet[MODEL_EFI_INCLUDE]\r
- \r
+\r
# Go through each arch\r
for Record in RecordSet:\r
Arch = Record[1]\r
Include.FilePath = NormPath(Key)\r
Include.SupArchList = Arch\r
self.Package.Includes.append(Include)\r
- \r
+\r
## GenPpis\r
#\r
# Gen Ppis of Dec\r
Lists = {}\r
# Get all Items\r
RecordSet = self.RecordSet[Section[Type.upper()]]\r
- \r
+\r
# Go through each arch\r
for Record in RecordSet:\r
Arch = Record[1]\r
(Name, Value) = GetGuidsProtocolsPpisOfDec(Record[0], Type, ContainerFile, Record[2])\r
- \r
+\r
ListMember = None\r
if Type == TAB_GUIDS:\r
ListMember = self.Package.GuidDeclarations\r
ListMember = self.Package.ProtocolDeclarations\r
elif Type == TAB_PPIS:\r
ListMember = self.Package.PpiDeclarations\r
- \r
+\r
ListClass = GuidProtocolPpiCommonClass()\r
ListClass.CName = Name\r
ListClass.Guid = Value\r
ListClass.SupArchList = Arch\r
ListMember.append(ListClass)\r
- \r
+\r
## GenLibraryClasses\r
#\r
# Gen LibraryClasses of Dec\r
LibraryClasses = {}\r
# Get all Guids\r
RecordSet = self.RecordSet[MODEL_EFI_LIBRARY_CLASS]\r
- \r
+\r
# Go through each arch\r
for Record in RecordSet:\r
Arch = Record[1]\r
LibraryClass.RecommendedInstance = NormPath(List[1])\r
LibraryClass.SupArchList = Arch\r
self.Package.LibraryClassDeclarations.append(LibraryClass)\r
- \r
+\r
def AddPcd(self, CName, Token, TokenSpaceGuidCName, DatumType, DefaultValue, ItemType, Arch):\r
Pcd = CommonClass.PcdClass()\r
Pcd.CName = CName\r
Pcd.ItemType = ItemType\r
Pcd.SupArchList = Arch\r
self.Package.PcdDeclarations.append(Pcd)\r
- \r
+\r
## GenPcds\r
#\r
# Gen Pcds of Dec\r
RecordSet3 = self.RecordSet[MODEL_PCD_FEATURE_FLAG]\r
RecordSet4 = self.RecordSet[MODEL_PCD_DYNAMIC_EX]\r
RecordSet5 = self.RecordSet[MODEL_PCD_DYNAMIC]\r
- \r
+\r
# Go through each pcd\r
for Record in RecordSet1:\r
Arch = Record[1]\r
Arch = Record[1]\r
(TokenGuidCName, TokenName, DefaultValue, DatumType, Token, ItemType) = GetPcdOfDec(Record[0], TAB_PCDS_DYNAMIC, ContainerFile, Record[2])\r
self.AddPcd(TokenName, Token, TokenGuidCName, DatumType, DefaultValue, ItemType, Arch)\r
- \r
+\r
## Show detailed information of Package\r
#\r
# Print all members and their values of Package class\r
print 'PackagePath =', M.PackageHeader.PackagePath\r
print 'ModulePath =', M.PackageHeader.ModulePath\r
print 'CombinePath =', M.PackageHeader.CombinePath\r
- \r
+\r
print 'BaseName =', M.PackageHeader.Name\r
print 'Guid =', M.PackageHeader.Guid\r
print 'Version =', M.PackageHeader.Version\r
if __name__ == '__main__':\r
EdkLogger.Initialize()\r
EdkLogger.SetLevel(EdkLogger.QUIET)\r
- \r
+\r
W = os.getenv('WORKSPACE')\r
F = os.path.join(W, 'MdeModulePkg/MdeModulePkg.dec')\r
\r