## @file\r
# This file is used to define each component of DEC file\r
#\r
-# Copyright (c) 2007, Intel Corporation\r
-# All rights reserved. This program and the accompanying materials\r
+# Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>\r
+# This program and the accompanying materials\r
# are licensed and made available under the terms and conditions of the BSD License\r
# which accompanies this distribution. The full text of the license may be found at\r
# http://opensource.org/licenses/bsd-license.php\r
# @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, IsToDatabase = False, IsToPackage = False, WorkspaceDir = None, Database = None, SupArchList = DataType.ARCH_LIST):\r
+ def __init__(self, Filename=None, IsToDatabase=False, IsToPackage=False, WorkspaceDir=None, Database=None, SupArchList=DataType.ARCH_LIST):\r
self.Identification = Identification()\r
self.Package = PackageClass()\r
self.UserExtensions = ''\r
self.WorkspaceDir = WorkspaceDir\r
self.SupArchList = SupArchList\r
self.IsToDatabase = IsToDatabase\r
- \r
+\r
self.Cur = Database.Cur\r
self.TblFile = Database.TblFile\r
self.TblDec = Database.TblDec\r
# Upper all KEYs to ignore case sensitive when parsing\r
#\r
self.KeyList = map(lambda c: c.upper(), self.KeyList)\r
- \r
+\r
#\r
# Init RecordSet\r
#\r
- self.RecordSet = {} \r
+ self.RecordSet = {}\r
for Key in self.KeyList:\r
self.RecordSet[Section[Key]] = []\r
- \r
+\r
#\r
# Load Dec file if filename is not None\r
#\r
if Filename != None:\r
self.LoadDecFile(Filename)\r
- \r
+\r
#\r
# Transfer to Package Object if IsToPackage is True\r
#\r
if IsToPackage:\r
self.DecToPackage()\r
- \r
+\r
## Load Dec file\r
#\r
# Load the file if it exists\r
self.Identification.FileFullPath = Filename\r
(self.Identification.FileRelativePath, self.Identification.FileName) = os.path.split(Filename)\r
self.FileID = self.TblFile.InsertFile(Filename, MODEL_FILE_DEC)\r
- \r
+\r
#\r
# Init DecTable\r
#\r
#self.TblDec.Table = "Dec%s" % self.FileID\r
#self.TblDec.Create()\r
- \r
+\r
#\r
# Init common datas\r
#\r
IfDefList, SectionItemList, CurrentSection, ArchList, ThirdList, IncludeFiles = \\r
[], [], TAB_UNKNOWN, [], [], []\r
LineNo = 0\r
- \r
+\r
#\r
# Parse file content\r
#\r
#\r
# Remove comment block\r
#\r
- if Line.find(TAB_COMMENT_R8_START) > -1:\r
- ReservedLine = GetSplitValueList(Line, TAB_COMMENT_R8_START, 1)[0]\r
+ if Line.find(TAB_COMMENT_EDK_START) > -1:\r
+ ReservedLine = GetSplitList(Line, TAB_COMMENT_EDK_START, 1)[0]\r
IsFindBlockComment = True\r
- if Line.find(TAB_COMMENT_R8_END) > -1:\r
- Line = ReservedLine + GetSplitValueList(Line, TAB_COMMENT_R8_END, 1)[1]\r
+ if Line.find(TAB_COMMENT_EDK_END) > -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
#\r
# Find a new section tab\r
# First insert previous section items\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
continue\r
- \r
+\r
#\r
# Not in any defined section\r
#\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
#\r
# Add a section item\r
SectionItemList.append([Line, LineNo])\r
# End of parse\r
#End of For\r
- \r
+\r
#\r
# Insert items data of last section\r
#\r
Model = Section[CurrentSection.upper()]\r
InsertSectionItemsIntoDatabase(self.TblDec, self.FileID, Filename, Model, CurrentSection, SectionItemList, ArchList, ThirdList, IfDefList, self.RecordSet)\r
- \r
+\r
#\r
# Replace all DEFINE macros with its actual values\r
#\r
# Init global information for the file\r
#\r
ContainerFile = self.Identification.FileFullPath\r
- \r
+\r
#\r
# Generate Package Header\r
#\r
self.GenPackageHeader(ContainerFile)\r
- \r
+\r
#\r
# Generate Includes\r
#\r
# Generate Ppis\r
#\r
self.GenGuidProtocolPpis(DataType.TAB_PPIS, ContainerFile)\r
- \r
+\r
#\r
# Generate LibraryClasses\r
#\r
self.GenLibraryClasses(ContainerFile)\r
- \r
+\r
#\r
# Generate Pcds\r
#\r
self.GenPcds(ContainerFile)\r
- \r
+\r
## Get Package Header\r
#\r
# Gen Package Header of Dec as <Key> = <Value>\r
SqlCommand = """update %s set Value1 = '%s', Value2 = '%s'\r
where ID = %s""" % (self.TblDec.Table, ConvertToSqlString2(Value1), ConvertToSqlString2(Value2), ID)\r
self.TblDec.Exec(SqlCommand)\r
- \r
+\r
#\r
# Get detailed information\r
#\r
for Arch in self.SupArchList:\r
PackageHeader = PackageHeaderClass()\r
- \r
+\r
PackageHeader.Name = QueryDefinesItem(self.TblDec, TAB_DEC_DEFINES_PACKAGE_NAME, Arch, self.FileID)[0]\r
PackageHeader.Guid = QueryDefinesItem(self.TblDec, TAB_DEC_DEFINES_PACKAGE_GUID, Arch, self.FileID)[0]\r
PackageHeader.Version = QueryDefinesItem(self.TblDec, TAB_DEC_DEFINES_PACKAGE_VERSION, Arch, self.FileID)[0]\r
PackageHeader.FileName = self.Identification.FileName\r
PackageHeader.FullPath = self.Identification.FileFullPath\r
PackageHeader.DecSpecification = QueryDefinesItem(self.TblDec, TAB_DEC_DEFINES_DEC_SPECIFICATION, Arch, self.FileID)[0]\r
- \r
+\r
self.Package.Header[Arch] = PackageHeader\r
- \r
+\r
## GenIncludes\r
#\r
# Gen Includes of Dec\r
# Get all Includes\r
#\r
RecordSet = self.RecordSet[MODEL_EFI_INCLUDE]\r
- \r
+\r
#\r
# Go through each arch\r
#\r
Include.FilePath = NormPath(Key)\r
Include.SupArchList = Includes[Key]\r
self.Package.Includes.append(Include)\r
- \r
+\r
## GenPpis\r
#\r
# Gen Ppis of Dec\r
# Get all Items\r
#\r
RecordSet = self.RecordSet[Section[Type.upper()]]\r
- \r
+\r
#\r
# Go through each arch\r
#\r
SqlCommand = """update %s set Value1 = '%s', Value2 = '%s'\r
where ID = %s""" % (self.TblDec.Table, ConvertToSqlString2(Name), ConvertToSqlString2(Value), Record[3])\r
self.TblDec.Exec(SqlCommand)\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
for Key in Lists.keys():\r
ListClass = GuidProtocolPpiCommonClass()\r
ListClass.CName = Key[0]\r
ListClass.Guid = Key[1]\r
ListClass.SupArchList = Lists[Key]\r
ListMember.append(ListClass)\r
- \r
- \r
+\r
+\r
## GenLibraryClasses\r
#\r
# Gen LibraryClasses of Dec\r
# Get all Guids\r
#\r
RecordSet = self.RecordSet[MODEL_EFI_LIBRARY_CLASS]\r
- \r
+\r
#\r
# Go through each arch\r
#\r
where ID = %s""" % (self.TblDec.Table, ConvertToSqlString2(List[0]), ConvertToSqlString2(List[1]), SUP_MODULE_LIST_STRING, Record[3])\r
self.TblDec.Exec(SqlCommand)\r
\r
- \r
+\r
for Key in LibraryClasses.keys():\r
LibraryClass = LibraryClassClass()\r
LibraryClass.LibraryClass = Key[0]\r
LibraryClass.SupModuleList = SUP_MODULE_LIST\r
LibraryClass.SupArchList = LibraryClasses[Key]\r
self.Package.LibraryClassDeclarations.append(LibraryClass)\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
#\r
# Go through each arch\r
#\r
Pcd.ItemType = Key[5]\r
Pcd.SupArchList = Pcds[Key]\r
self.Package.PcdDeclarations.append(Pcd)\r
- \r
+\r
## Show detailed information of Package\r
#\r
# Print all members and their values of Package class\r
if __name__ == '__main__':\r
EdkLogger.Initialize()\r
EdkLogger.SetLevel(EdkLogger.DEBUG_0)\r
- \r
+\r
W = os.getenv('WORKSPACE')\r
F = os.path.join(W, 'Nt32Pkg/Nt32Pkg.dec')\r
\r
Db = Database.Database('Dec.db')\r
Db.InitDatabase()\r
- \r
+\r
P = Dec(os.path.normpath(F), True, True, W, Db)\r
P.ShowPackage()\r
- \r
+\r
Db.Close()\r