]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Common/DecClassObject.py
BaseTools: cleanup class heirarchy
[mirror_edk2.git] / BaseTools / Source / Python / Common / DecClassObject.py
index ffa485979d7f44e569b1bd209082917f85d0caa4..ed998d3b677d0f5f5118a856c61ef2bbd1a8fcb3 100644 (file)
@@ -1,7 +1,7 @@
 ## @file\r
 # This file is used to define each component of DEC file\r
 #\r
-# Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2007 - 2014, 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
@@ -14,7 +14,7 @@
 ##\r
 # Import Modules\r
 #\r
-import os\r
+import Common.LongFilePathOs as os\r
 from String import *\r
 from DataType import *\r
 from Identification import *\r
@@ -26,6 +26,7 @@ from Table.TableDec import TableDec
 import Database\r
 from Parsing import *\r
 import GlobalData\r
+from Common.LongFilePathSupport import OpenLongFilePath as open\r
 \r
 #\r
 # Global variable\r
@@ -47,21 +48,10 @@ Section = {TAB_UNKNOWN.upper() : MODEL_UNKNOWN,
            }\r
 \r
 \r
-## DecObject\r
-#\r
-# This class defined basic Dec object which is used by inheriting\r
-# \r
-# @param object:       Inherited from object class\r
-#\r
-class DecObject(object):\r
-    def __init__(self):\r
-        object.__init__()\r
-\r
 ## Dec\r
 #\r
 # This class defined the structure used in Dec object\r
 # \r
-# @param DecObject:         Inherited from DecObject class\r
 # @param Filename:          Input value for Filename of Dec file, default is None\r
 # @param IsMergeAllArches:  Input value for IsMergeAllArches\r
 #                           True is to merge all arches\r
@@ -81,15 +71,15 @@ class DecObject(object):
 # @var Contents:            To store value for Contents, it is a structure as DecContents\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
+class Dec(object):\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
@@ -104,26 +94,26 @@ class Dec(DecObject):
         # 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
+        if Filename is not 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
@@ -138,20 +128,20 @@ class Dec(DecObject):
         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
@@ -162,11 +152,11 @@ class Dec(DecObject):
             #\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
@@ -178,7 +168,7 @@ class Dec(DecObject):
             Line = CleanString(Line)\r
             if Line == '':\r
                 continue\r
-            \r
+\r
             #\r
             # Find a new section tab\r
             # First insert previous section items\r
@@ -197,7 +187,7 @@ class Dec(DecObject):
                 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
@@ -206,7 +196,7 @@ class Dec(DecObject):
                         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
@@ -215,18 +205,18 @@ class Dec(DecObject):
                         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
@@ -234,13 +224,13 @@ class Dec(DecObject):
             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
@@ -255,12 +245,12 @@ class Dec(DecObject):
         # 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
@@ -280,17 +270,17 @@ class Dec(DecObject):
         # 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
@@ -311,22 +301,22 @@ class Dec(DecObject):
             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
@@ -341,7 +331,7 @@ class Dec(DecObject):
         # Get all Includes\r
         #\r
         RecordSet = self.RecordSet[MODEL_EFI_INCLUDE]\r
-        \r
+\r
         #\r
         # Go through each arch\r
         #\r
@@ -355,7 +345,7 @@ class Dec(DecObject):
             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
@@ -370,7 +360,7 @@ class Dec(DecObject):
         # Get all Items\r
         #\r
         RecordSet = self.RecordSet[Section[Type.upper()]]\r
-        \r
+\r
         #\r
         # Go through each arch\r
         #\r
@@ -383,7 +373,7 @@ class Dec(DecObject):
                         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
@@ -391,15 +381,15 @@ class Dec(DecObject):
             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
@@ -414,7 +404,7 @@ class Dec(DecObject):
         # Get all Guids\r
         #\r
         RecordSet = self.RecordSet[MODEL_EFI_LIBRARY_CLASS]\r
-        \r
+\r
         #\r
         # Go through each arch\r
         #\r
@@ -432,7 +422,7 @@ class Dec(DecObject):
                                         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
@@ -440,7 +430,7 @@ class Dec(DecObject):
             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
@@ -460,7 +450,7 @@ class Dec(DecObject):
         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
@@ -508,7 +498,7 @@ class Dec(DecObject):
             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
@@ -550,14 +540,14 @@ class Dec(DecObject):
 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