1. Finish duplicate name and value of guid/protocol/ppi check for ECC tool
authorhche10x <hche10x@7335b38e-4728-0410-8992-fb3ffe349368>
Wed, 12 Mar 2008 08:30:48 +0000 (08:30 +0000)
committerhche10x <hche10x@7335b38e-4728-0410-8992-fb3ffe349368>
Wed, 12 Mar 2008 08:30:48 +0000 (08:30 +0000)
2. Combine multiple INF/DEC/DSC tables to three big tables
3. Fix some bugs in Configuration parsing

git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@1057 7335b38e-4728-0410-8992-fb3ffe349368

Source/Python/Common/Database.py
Source/Python/Common/DecClassObject.py
Source/Python/Common/DscClassObject.py
Source/Python/Common/InfClassObject.py
Source/Python/Common/Parsing.py
Source/Python/Ecc/Check.py
Source/Python/Ecc/Configuration.py
Source/Python/Ecc/Database.py
Source/Python/Ecc/Ecc.py
Source/Python/Ecc/config.ini
Source/Python/Table/TableReport.py

index 263122e..e645337 100644 (file)
@@ -24,6 +24,9 @@ from DataType import *
 \r
 from Table.TableDataModel import TableDataModel\r
 from Table.TableFile import TableFile\r
+from Table.TableInf import TableInf\r
+from Table.TableDec import TableDec\r
+from Table.TableDsc import TableDsc\r
 \r
 ## Database\r
 #\r
@@ -48,6 +51,9 @@ class Database(object):
         self.Cur = self.Conn.cursor()\r
         self.TblDataModel = TableDataModel(self.Cur)\r
         self.TblFile = TableFile(self.Cur)\r
+        self.TblInf = TableInf(self.Cur)\r
+        self.TblDec = TableDec(self.Cur)\r
+        self.TblDsc = TableDsc(self.Cur)\r
     \r
     ## Initialize build database\r
     #\r
@@ -69,6 +75,9 @@ class Database(object):
         #\r
         self.TblDataModel.Create()\r
         self.TblFile.Create()\r
+        self.TblInf.Create()\r
+        self.TblDec.Create()\r
+        self.TblDsc.Create()\r
         \r
         #\r
         # Initialize table DataModel\r
index 78280ba..d93a3db 100644 (file)
@@ -23,7 +23,7 @@ from CommonDataClass.PackageClass import *
 from CommonDataClass.CommonClass import PcdClass\r
 from BuildToolError import *\r
 from Table.TableDec import TableDec\r
-import Database as Database\r
+import Database\r
 from Parsing import *\r
 import GlobalData\r
 \r
@@ -92,7 +92,8 @@ class Dec(DecObject):
         \r
         self.Cur = Database.Cur\r
         self.TblFile = Database.TblFile\r
-        self.TblDec = TableDec(Database.Cur)\r
+        self.TblDec = Database.TblDec\r
+        self.FileID = -1\r
 \r
         self.KeyList = [\r
             TAB_INCLUDES, TAB_GUIDS, TAB_PROTOCOLS, TAB_PPIS, TAB_LIBRARY_CLASSES, \\r
@@ -136,13 +137,13 @@ class Dec(DecObject):
         Filename = NormPath(Filename)\r
         self.Identification.FileFullPath = Filename\r
         (self.Identification.FileRelativePath, self.Identification.FileName) = os.path.split(Filename)\r
-        FileID = self.TblFile.InsertFile(Filename, MODEL_FILE_DSC)\r
+        self.FileID = self.TblFile.InsertFile(Filename, MODEL_FILE_DEC)\r
         \r
         #\r
         # Init DecTable\r
         #\r
-        self.TblDec.Table = "Dec%s" % FileID\r
-        self.TblDec.Create()\r
+        #self.TblDec.Table = "Dec%s" % self.FileID\r
+        #self.TblDec.Create()\r
         \r
         #\r
         # Init common datas\r
@@ -188,7 +189,7 @@ class Dec(DecObject):
                 # Insert items data of previous section\r
                 #\r
                 Model = Section[CurrentSection.upper()]\r
-                InsertSectionItemsIntoDatabase(self.TblDec, FileID, Filename, Model, CurrentSection, SectionItemList, ArchList, ThirdList, IfDefList, self.RecordSet)\r
+                InsertSectionItemsIntoDatabase(self.TblDec, self.FileID, Filename, Model, CurrentSection, SectionItemList, ArchList, ThirdList, IfDefList, self.RecordSet)\r
 \r
                 #\r
                 # Parse the new section\r
@@ -238,7 +239,7 @@ class Dec(DecObject):
         # Insert items data of last section\r
         #\r
         Model = Section[CurrentSection.upper()]\r
-        InsertSectionItemsIntoDatabase(self.TblDec, FileID, Filename, Model, CurrentSection, SectionItemList, ArchList, ThirdList, IfDefList, self.RecordSet)\r
+        InsertSectionItemsIntoDatabase(self.TblDec, self.FileID, Filename, Model, CurrentSection, SectionItemList, ArchList, ThirdList, IfDefList, self.RecordSet)\r
         \r
         #\r
         # Replace all DEFINE macros with its actual values\r
@@ -317,12 +318,12 @@ class Dec(DecObject):
         for Arch in self.SupArchList:\r
             PackageHeader = PackageHeaderClass()\r
             \r
-            PackageHeader.Name = QueryDefinesItem(self.TblDec, TAB_DEC_DEFINES_PACKAGE_NAME, Arch)[0]\r
-            PackageHeader.Guid = QueryDefinesItem(self.TblDec, TAB_DEC_DEFINES_PACKAGE_GUID, Arch)[0]\r
-            PackageHeader.Version = QueryDefinesItem(self.TblDec, TAB_DEC_DEFINES_PACKAGE_VERSION, Arch)[0]\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)[0]\r
+            PackageHeader.DecSpecification = QueryDefinesItem(self.TblDec, TAB_DEC_DEFINES_DEC_SPECIFICATION, Arch, self.FileID)[0]\r
             \r
             self.Package.Header[Arch] = PackageHeader\r
     \r
index 769677c..cc08314 100755 (executable)
@@ -16,7 +16,7 @@
 #\r
 import os\r
 import EdkLogger as EdkLogger\r
-import Database as Database\r
+import Database\r
 from String import *\r
 from Parsing import *\r
 from DataType import *\r
@@ -100,7 +100,7 @@ class Dsc(DscObject):
 \r
         self.Cur = Database.Cur\r
         self.TblFile = Database.TblFile\r
-        self.TblDsc = TableDsc(Database.Cur)\r
+        self.TblDsc = Database.TblDsc\r
 \r
 \r
         self.KeyList = [\r
@@ -202,7 +202,8 @@ class Dsc(DscObject):
         #\r
         SqlCommand = """select ID, Value1, Arch, StartLine from %s\r
                         where Model = %s\r
-                        and Enabled > -1""" % (self.TblDsc.Table, MODEL_META_DATA_HEADER)\r
+                        and BelongsToFile = %s\r
+                        and Enabled > -1""" % (self.TblDsc.Table, MODEL_META_DATA_HEADER, self.FileID)\r
         RecordSet = self.TblDsc.Exec(SqlCommand)\r
         for Record in RecordSet:\r
             ValueList = GetSplitValueList(Record[1], TAB_EQUAL_SPLIT)\r
@@ -219,26 +220,26 @@ class Dsc(DscObject):
         for Arch in DataType.ARCH_LIST:\r
             PlatformHeader = PlatformHeaderClass()\r
             \r
-            PlatformHeader.Name = QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_PLATFORM_NAME, Arch)[0]\r
-            PlatformHeader.Guid = QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_PLATFORM_GUID, Arch)[0]\r
-            PlatformHeader.Version = QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_PLATFORM_VERSION, Arch)[0]\r
+            PlatformHeader.Name = QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_PLATFORM_NAME, Arch, self.FileID)[0]\r
+            PlatformHeader.Guid = QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_PLATFORM_GUID, Arch, self.FileID)[0]\r
+            PlatformHeader.Version = QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_PLATFORM_VERSION, Arch, self.FileID)[0]\r
             PlatformHeader.FileName = self.Identification.FileName\r
             PlatformHeader.FullPath = self.Identification.FileFullPath\r
-            PlatformHeader.DscSpecification = QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_DSC_SPECIFICATION, Arch)[0]\r
+            PlatformHeader.DscSpecification = QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_DSC_SPECIFICATION, Arch, self.FileID)[0]\r
     \r
-            PlatformHeader.SkuIdName = QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_SKUID_IDENTIFIER, Arch)\r
-            PlatformHeader.SupArchList = QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_SUPPORTED_ARCHITECTURES, Arch)\r
-            PlatformHeader.BuildTargets = QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_BUILD_TARGETS, Arch)\r
-            PlatformHeader.OutputDirectory = NormPath(QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_OUTPUT_DIRECTORY, Arch)[0])\r
-            PlatformHeader.BuildNumber = QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_BUILD_NUMBER, Arch)[0]\r
-            PlatformHeader.MakefileName = QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_MAKEFILE_NAME, Arch)[0]\r
+            PlatformHeader.SkuIdName = QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_SKUID_IDENTIFIER, Arch, self.FileID)\r
+            PlatformHeader.SupArchList = QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_SUPPORTED_ARCHITECTURES, Arch, self.FileID)\r
+            PlatformHeader.BuildTargets = QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_BUILD_TARGETS, Arch, self.FileID)\r
+            PlatformHeader.OutputDirectory = NormPath(QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_OUTPUT_DIRECTORY, Arch, self.FileID)[0])\r
+            PlatformHeader.BuildNumber = QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_BUILD_NUMBER, Arch, self.FileID)[0]\r
+            PlatformHeader.MakefileName = QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_MAKEFILE_NAME, Arch, self.FileID)[0]\r
     \r
-            PlatformHeader.BsBaseAddress = QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_BS_BASE_ADDRESS, Arch)[0]\r
-            PlatformHeader.RtBaseAddress = QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_RT_BASE_ADDRESS, Arch)[0]\r
+            PlatformHeader.BsBaseAddress = QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_BS_BASE_ADDRESS, Arch, self.FileID)[0]\r
+            PlatformHeader.RtBaseAddress = QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_RT_BASE_ADDRESS, Arch, self.FileID)[0]\r
 \r
             self.Platform.Header[Arch] = PlatformHeader\r
             Fdf = PlatformFlashDefinitionFileClass()\r
-            Fdf.FilePath = NormPath(QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_FLASH_DEFINITION, Arch)[0])\r
+            Fdf.FilePath = NormPath(QueryDefinesItem(self.TblDsc, TAB_DSC_DEFINES_FLASH_DEFINITION, Arch, self.FileID)[0])\r
             self.Platform.FlashDefinitionFile = Fdf\r
 \r
     ## GenBuildOptions\r
@@ -254,12 +255,12 @@ class Dsc(DscObject):
         #\r
         # Get all include files\r
         #\r
-        IncludeFiles = QueryDscItem(self.TblDsc, MODEL_META_DATA_INCLUDE, MODEL_META_DATA_BUILD_OPTION)\r
+        IncludeFiles = QueryDscItem(self.TblDsc, MODEL_META_DATA_INCLUDE, MODEL_META_DATA_BUILD_OPTION, self.FileID)\r
         \r
         #\r
         # Get all BuildOptions\r
         #\r
-        RecordSet = QueryDscItem(self.TblDsc, MODEL_META_DATA_BUILD_OPTION, -1)\r
+        RecordSet = QueryDscItem(self.TblDsc, MODEL_META_DATA_BUILD_OPTION, -1, self.FileID)\r
         \r
         #\r
         # Go through each arch\r
@@ -309,12 +310,12 @@ class Dsc(DscObject):
         #\r
         # Get all include files\r
         #\r
-        IncludeFiles = QueryDscItem(self.TblDsc, MODEL_META_DATA_INCLUDE, MODEL_EFI_SKU_ID)\r
+        IncludeFiles = QueryDscItem(self.TblDsc, MODEL_META_DATA_INCLUDE, MODEL_EFI_SKU_ID, self.FileID)\r
         \r
         #\r
         # Get all SkuInfos\r
         #\r
-        RecordSet = QueryDscItem(self.TblDsc, MODEL_EFI_SKU_ID, -1)\r
+        RecordSet = QueryDscItem(self.TblDsc, MODEL_EFI_SKU_ID, -1, self.FileID)\r
         \r
         #\r
         # Go through each arch\r
@@ -360,12 +361,12 @@ class Dsc(DscObject):
         #\r
         # Get all include files\r
         #\r
-        IncludeFiles = QueryDscItem(self.TblDsc, MODEL_META_DATA_INCLUDE, MODEL_EFI_LIBRARY_INSTANCE)\r
+        IncludeFiles = QueryDscItem(self.TblDsc, MODEL_META_DATA_INCLUDE, MODEL_EFI_LIBRARY_INSTANCE, self.FileID)\r
         \r
         #\r
         # Get all Libraries\r
         #\r
-        RecordSet = QueryDscItem(self.TblDsc, MODEL_EFI_LIBRARY_INSTANCE, -1)\r
+        RecordSet = QueryDscItem(self.TblDsc, MODEL_EFI_LIBRARY_INSTANCE, -1, self.FileID)\r
         \r
         #\r
         # Go through each arch\r
@@ -402,12 +403,12 @@ class Dsc(DscObject):
         #\r
         # Get all include files\r
         #\r
-        IncludeFiles = QueryDscItem(self.TblDsc, MODEL_META_DATA_INCLUDE, MODEL_EFI_LIBRARY_CLASS)\r
+        IncludeFiles = QueryDscItem(self.TblDsc, MODEL_META_DATA_INCLUDE, MODEL_EFI_LIBRARY_CLASS, self.FileID)\r
         \r
         #\r
         # Get all LibraryClasses\r
         #\r
-        RecordSet = QueryDscItem(self.TblDsc, MODEL_EFI_LIBRARY_CLASS, -1)\r
+        RecordSet = QueryDscItem(self.TblDsc, MODEL_EFI_LIBRARY_CLASS, -1, self.FileID)\r
         \r
         #\r
         # Go through each arch\r
@@ -461,12 +462,12 @@ class Dsc(DscObject):
         #\r
         # Get all include files\r
         #\r
-        IncludeFiles = QueryDscItem(self.TblDsc, MODEL_META_DATA_INCLUDE, Model)\r
+        IncludeFiles = QueryDscItem(self.TblDsc, MODEL_META_DATA_INCLUDE, Model, self.FileID)\r
         \r
         #\r
         # Get all Pcds\r
         #\r
-        RecordSet = QueryDscItem(self.TblDsc, Model, -1)       \r
+        RecordSet = QueryDscItem(self.TblDsc, Model, -1, self.FileID)       \r
         \r
         #\r
         # Go through each arch\r
@@ -507,12 +508,12 @@ class Dsc(DscObject):
         #\r
         # Get all include files\r
         #\r
-        IncludeFiles = QueryDscItem(self.TblDsc, MODEL_META_DATA_INCLUDE, Model)\r
+        IncludeFiles = QueryDscItem(self.TblDsc, MODEL_META_DATA_INCLUDE, Model, self.FileID)\r
         \r
         #\r
         # Get all FeatureFlagPcds\r
         #\r
-        RecordSet = QueryDscItem(self.TblDsc, Model, -1)       \r
+        RecordSet = QueryDscItem(self.TblDsc, Model, -1, self.FileID)       \r
         \r
         #\r
         # Go through each arch\r
@@ -556,12 +557,12 @@ class Dsc(DscObject):
         #\r
         # Get all include files\r
         #\r
-        IncludeFiles = QueryDscItem(self.TblDsc, MODEL_META_DATA_INCLUDE, Model)\r
+        IncludeFiles = QueryDscItem(self.TblDsc, MODEL_META_DATA_INCLUDE, Model, self.FileID)\r
         \r
         #\r
         # Get all DynamicDefaultPcds\r
         #\r
-        RecordSet = QueryDscItem(self.TblDsc, Model, -1)       \r
+        RecordSet = QueryDscItem(self.TblDsc, Model, -1, self.FileID)       \r
         \r
         #\r
         # Go through each arch\r
@@ -611,12 +612,12 @@ class Dsc(DscObject):
         #\r
         # Get all include files\r
         #\r
-        IncludeFiles = QueryDscItem(self.TblDsc, MODEL_META_DATA_INCLUDE, Model)\r
+        IncludeFiles = QueryDscItem(self.TblDsc, MODEL_META_DATA_INCLUDE, Model, self.FileID)\r
         \r
         #\r
         # Get all DynamicHiiPcds\r
         #\r
-        RecordSet = QueryDscItem(self.TblDsc, Model, -1)       \r
+        RecordSet = QueryDscItem(self.TblDsc, Model, -1, self.FileID)       \r
         \r
         #\r
         # Go through each arch\r
@@ -666,12 +667,12 @@ class Dsc(DscObject):
         #\r
         # Get all include files\r
         #\r
-        IncludeFiles = QueryDscItem(self.TblDsc, MODEL_META_DATA_INCLUDE, Model)\r
+        IncludeFiles = QueryDscItem(self.TblDsc, MODEL_META_DATA_INCLUDE, Model, self.FileID)\r
         \r
         #\r
         # Get all DynamicVpdPcds\r
         #\r
-        RecordSet = QueryDscItem(self.TblDsc, Model, -1)       \r
+        RecordSet = QueryDscItem(self.TblDsc, Model, -1, self.FileID)       \r
         \r
         #\r
         # Go through each arch\r
@@ -715,12 +716,12 @@ class Dsc(DscObject):
         #\r
         # Get all include files\r
         #\r
-        IncludeFiles = QueryDscItem(self.TblDsc, MODEL_META_DATA_INCLUDE, MODEL_META_DATA_COMPONENT)\r
+        IncludeFiles = QueryDscItem(self.TblDsc, MODEL_META_DATA_INCLUDE, MODEL_META_DATA_COMPONENT, self.FileID)\r
         \r
         #\r
         # Get all Components\r
         #\r
-        RecordSet = QueryDscItem(self.TblDsc, MODEL_META_DATA_COMPONENT, -1)  \r
+        RecordSet = QueryDscItem(self.TblDsc, MODEL_META_DATA_COMPONENT, -1, self.FileID)  \r
         \r
         #\r
         # Go through each arch\r
@@ -741,19 +742,19 @@ class Dsc(DscObject):
                 if Record[1] == Arch or Record[1] == TAB_ARCH_COMMON.upper():\r
                     Lib, Bo, Pcd = [], [], []\r
                     \r
-                    SubLibSet = QueryDscItem(self.TblDsc, MODEL_EFI_LIBRARY_CLASS, Record[3])\r
+                    SubLibSet = QueryDscItem(self.TblDsc, MODEL_EFI_LIBRARY_CLASS, Record[3], self.FileID)\r
                     for SubLib in SubLibSet:\r
                         Lib.append(SubLib[0])\r
                     \r
-                    SubBoSet = QueryDscItem(self.TblDsc, MODEL_META_DATA_BUILD_OPTION, Record[3])\r
+                    SubBoSet = QueryDscItem(self.TblDsc, MODEL_META_DATA_BUILD_OPTION, Record[3], self.FileID)\r
                     for SubBo in SubBoSet:\r
                         Bo.append(SubBo[0])\r
                     \r
-                    SubPcdSet1 = QueryDscItem(self.TblDsc, MODEL_PCD_FIXED_AT_BUILD, Record[3])\r
-                    SubPcdSet2 = QueryDscItem(self.TblDsc, MODEL_PCD_PATCHABLE_IN_MODULE, Record[3])\r
-                    SubPcdSet3 = QueryDscItem(self.TblDsc, MODEL_PCD_FEATURE_FLAG, Record[3])\r
-                    SubPcdSet4 = QueryDscItem(self.TblDsc, MODEL_PCD_DYNAMIC_EX_DEFAULT, Record[3])\r
-                    SubPcdSet5 = QueryDscItem(self.TblDsc, MODEL_PCD_DYNAMIC_DEFAULT, Record[3])\r
+                    SubPcdSet1 = QueryDscItem(self.TblDsc, MODEL_PCD_FIXED_AT_BUILD, Record[3], self.FileID)\r
+                    SubPcdSet2 = QueryDscItem(self.TblDsc, MODEL_PCD_PATCHABLE_IN_MODULE, Record[3], self.FileID)\r
+                    SubPcdSet3 = QueryDscItem(self.TblDsc, MODEL_PCD_FEATURE_FLAG, Record[3], self.FileID)\r
+                    SubPcdSet4 = QueryDscItem(self.TblDsc, MODEL_PCD_DYNAMIC_EX_DEFAULT, Record[3], self.FileID)\r
+                    SubPcdSet5 = QueryDscItem(self.TblDsc, MODEL_PCD_DYNAMIC_DEFAULT, Record[3], self.FileID)\r
                     for SubPcd in SubPcdSet1:\r
                         Pcd.append([DataType.TAB_PCDS_FIXED_AT_BUILD, SubPcd[0]])\r
                     for SubPcd in SubPcdSet2:\r
@@ -950,7 +951,7 @@ class Dsc(DscObject):
             if PreviousIf[2] in (MODEL_META_DATA_CONDITIONAL_STATEMENT_IFDEF, MODEL_META_DATA_CONDITIONAL_STATEMENT_IFNDEF):\r
                 Value1 = PreviousIf[0]\r
                 Model = PreviousIf[2]\r
-                self.TblDsc.Insert(Model, Value1, Value2, Value3, ArchList, BelongsToItem, FileID, PreviousIf[1], StartColumn, EndLine, EndColumn, Enabled)\r
+                self.TblDsc.Insert(Model, Value1, Value2, Value3, ArchList, BelongsToItem, self.FileID, PreviousIf[1], StartColumn, EndLine, EndColumn, Enabled)\r
             #\r
             # !if and !elseif\r
             #\r
@@ -961,14 +962,14 @@ class Dsc(DscObject):
                 Value3 = List[2]\r
                 Value3 = SplitString(Value3)\r
                 Model = PreviousIf[2]\r
-                self.TblDsc.Insert(Model, Value1, Value2, Value3, ArchList, BelongsToItem, FileID, PreviousIf[1], StartColumn, EndLine, EndColumn, Enabled)\r
+                self.TblDsc.Insert(Model, Value1, Value2, Value3, ArchList, BelongsToItem, self.FileID, PreviousIf[1], StartColumn, EndLine, EndColumn, Enabled)\r
             #\r
             # !else\r
             #\r
             elif PreviousIf[2] in (MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSE, Model):\r
                 Value1 = PreviousIf[0].strip()\r
                 Model = PreviousIf[2]\r
-                self.TblDsc.Insert(Model, Value1, Value2, Value3, ArchList, BelongsToItem, FileID, PreviousIf[1], StartColumn, EndLine, EndColumn, Enabled)\r
+                self.TblDsc.Insert(Model, Value1, Value2, Value3, ArchList, BelongsToItem, self.FileID, PreviousIf[1], StartColumn, EndLine, EndColumn, Enabled)\r
 \r
     ## Load Dsc file\r
     #\r
@@ -983,13 +984,13 @@ class Dsc(DscObject):
         Filename = NormPath(Filename)\r
         self.Identification.FileFullPath = Filename\r
         (self.Identification.FileRelativePath, self.Identification.FileName) = os.path.split(Filename)\r
-        FileID = self.TblFile.InsertFile(Filename, MODEL_FILE_DSC)\r
+        self.FileID = self.TblFile.InsertFile(Filename, MODEL_FILE_DSC)\r
         \r
         #\r
         # Init DscTable\r
         #\r
-        self.TblDsc.Table = "Dsc%s" % FileID\r
-        self.TblDsc.Create()\r
+        #self.TblDsc.Table = "Dsc%s" % FileID\r
+        #self.TblDsc.Create()\r
         \r
         #\r
         # Init common datas\r
@@ -1034,7 +1035,7 @@ class Dsc(DscObject):
                 #\r
                 # Insert items data of previous section\r
                 #\r
-                self.InsertSectionItemsIntoDatabase(FileID, Filename, CurrentSection, SectionItemList, ArchList, ThirdList, IfDefList)\r
+                self.InsertSectionItemsIntoDatabase(self.FileID, Filename, CurrentSection, SectionItemList, ArchList, ThirdList, IfDefList)\r
                 #\r
                 # Parse the new section\r
                 #\r
@@ -1082,7 +1083,7 @@ class Dsc(DscObject):
         #\r
         # Insert items data of last section\r
         #\r
-        self.InsertSectionItemsIntoDatabase(FileID, Filename, CurrentSection, SectionItemList, ArchList, ThirdList, IfDefList)\r
+        self.InsertSectionItemsIntoDatabase(self.FileID, Filename, CurrentSection, SectionItemList, ArchList, ThirdList, IfDefList)\r
         \r
         #\r
         # Parse conditional statements\r
@@ -1107,6 +1108,7 @@ class Dsc(DscObject):
         SqlCommand = """select A.StartLine, A.EndLine from %s as A \r
                         where A.Model in (%s, %s, %s)\r
                         and A.Enabled = 0\r
+                        and A.BelongsToFile = %s\r
                         and A.Value1 not in (select B.Value1 from %s as B \r
                                              where B.Model = %s\r
                                              and B.Enabled = 0\r
@@ -1116,6 +1118,7 @@ class Dsc(DscObject):
                                              and A.BelongsToFile = B.BelongsToFile) """ % \\r
                         (self.TblDsc.Table, \\r
                          MODEL_META_DATA_CONDITIONAL_STATEMENT_IF, MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSE, MODEL_META_DATA_CONDITIONAL_STATEMENT_IFDEF, \\r
+                         self.FileID, \\r
                          self.TblDsc.Table, \\r
                          MODEL_META_DATA_DEFINE)\r
         RecordSet = self.TblDsc.Exec(SqlCommand)\r
@@ -1129,6 +1132,7 @@ class Dsc(DscObject):
         SqlCommand = """select A.StartLine, A.EndLine from %s as A \r
                         where A.Model = %s\r
                         and A.Enabled = 0\r
+                        and A.BelongsToFile = %s\r
                         and A.Value1 in (select B.Value1 from %s as B \r
                                          where B.Model = %s\r
                                          and B.Enabled = 0\r
@@ -1138,6 +1142,7 @@ class Dsc(DscObject):
                                          and A.BelongsToFile = B.BelongsToFile)""" % \\r
                         (self.TblDsc.Table, \\r
                          MODEL_META_DATA_CONDITIONAL_STATEMENT_IFNDEF, \\r
+                         self.FileID, \\r
                          self.TblDsc.Table, \\r
                          MODEL_META_DATA_DEFINE)\r
         RecordSet = self.TblDsc.Exec(SqlCommand)\r
@@ -1152,6 +1157,7 @@ class Dsc(DscObject):
         SqlCommand = """select A.Model, A.Value1, A.Value2, A.Value3, A.StartLine, A.EndLine, B.Value2 from %s as A join %s as B\r
                         where A.Model in (%s, %s)\r
                         and A.Enabled = 0\r
+                        and A.BelongsToFile = %s\r
                         and B.Enabled = 0\r
                         and B.Model = %s\r
                         and A.Value1 = B.Value1\r
@@ -1160,7 +1166,7 @@ class Dsc(DscObject):
                         and A.BelongsToFile = B.BelongsToFile""" % \\r
                         (self.TblDsc.Table, self.TblDsc.Table, \\r
                          MODEL_META_DATA_CONDITIONAL_STATEMENT_IF, MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSE, \\r
-                         MODEL_META_DATA_DEFINE)\r
+                         self.FileID, MODEL_META_DATA_DEFINE)\r
         RecordSet = self.TblDsc.Exec(SqlCommand)\r
         DisabledList = []\r
         for Record in RecordSet:\r
index a47ea18..4cb14ad 100755 (executable)
@@ -27,7 +27,7 @@ from BuildToolError import *
 from Misc import sdict\r
 import GlobalData\r
 from Table.TableInf import TableInf\r
-import Database as Database\r
+import Database\r
 from Parsing import *\r
 \r
 #\r
@@ -174,7 +174,9 @@ class Inf(InfObject):
         \r
         self.Cur = Database.Cur\r
         self.TblFile = Database.TblFile\r
-        self.TblInf = TableInf(Database.Cur)\r
+        self.TblInf = Database.TblInf\r
+        self.FileID = -1\r
+        #self.TblInf = TableInf(Database.Cur)\r
 \r
         self.KeyList = [\r
             TAB_SOURCES, TAB_BUILD_OPTIONS, TAB_BINARIES, TAB_INCLUDES, TAB_GUIDS, \r
@@ -326,13 +328,13 @@ class Inf(InfObject):
         Filename = NormPath(Filename)\r
         self.Identification.FileFullPath = Filename\r
         (self.Identification.FileRelativePath, self.Identification.FileName) = os.path.split(Filename)\r
-        FileID = self.TblFile.InsertFile(Filename, MODEL_FILE_DSC)\r
+        self.FileID = self.TblFile.InsertFile(Filename, MODEL_FILE_INF)\r
         \r
         #\r
         # Init InfTable\r
         #\r
-        self.TblInf.Table = "Inf%s" % FileID\r
-        self.TblInf.Create()\r
+        #self.TblInf.Table = "Inf%s" % self.FileID\r
+        #self.TblInf.Create()\r
         \r
         #\r
         # Init common datas\r
@@ -380,7 +382,7 @@ class Inf(InfObject):
                 #\r
                 # Insert items data of previous section\r
                 #\r
-                InsertSectionItemsIntoDatabase(self.TblInf, FileID, Filename, Model, CurrentSection, SectionItemList, ArchList, ThirdList, IfDefList, self.RecordSet)\r
+                InsertSectionItemsIntoDatabase(self.TblInf, self.FileID, Filename, Model, CurrentSection, SectionItemList, ArchList, ThirdList, IfDefList, self.RecordSet)\r
                 #\r
                 # Parse the new section\r
                 #\r
@@ -429,7 +431,7 @@ class Inf(InfObject):
         # Insert items data of last section\r
         #\r
         Model = Section[CurrentSection.upper()]\r
-        InsertSectionItemsIntoDatabase(self.TblInf, FileID, Filename, Model, CurrentSection, SectionItemList, ArchList, ThirdList, IfDefList, self.RecordSet)\r
+        InsertSectionItemsIntoDatabase(self.TblInf, self.FileID, Filename, Model, CurrentSection, SectionItemList, ArchList, ThirdList, IfDefList, self.RecordSet)\r
         \r
         #\r
         # Replace all DEFINE macros with its actual values\r
@@ -544,7 +546,7 @@ class Inf(InfObject):
             ModuleHeader = InfHeader()\r
             ModuleHeader.FileName = self.Identification.FileName\r
             ModuleHeader.FullPath = self.Identification.FileFullPath\r
-            DefineList = QueryDefinesItem2(self.TblInf, Arch)\r
+            DefineList = QueryDefinesItem2(self.TblInf, Arch, self.FileID)\r
 \r
             NotProcessedDefineList = []\r
             for D in DefineList:\r
index f8a610a..71cf6d5 100644 (file)
@@ -170,19 +170,21 @@ def ParseDefineMacro(Table, GlobalMacro):
 #\r
 # @retval RecordSet: A list of all matched records\r
 #\r
-def QueryDefinesItem(Table, Name, Arch):\r
+def QueryDefinesItem(Table, Name, Arch, BelongsToFile):\r
     SqlCommand = """select Value2 from %s\r
                     where Model = %s\r
                     and Value1 = '%s'\r
                     and Arch = '%s'\r
-                    and Enabled > -1""" % (Table.Table, MODEL_META_DATA_HEADER, ConvertToSqlString2(Name), ConvertToSqlString2(Arch))\r
+                    and BelongsToFile = %s\r
+                    and Enabled > -1""" % (Table.Table, MODEL_META_DATA_HEADER, ConvertToSqlString2(Name), ConvertToSqlString2(Arch), BelongsToFile)\r
     RecordSet = Table.Exec(SqlCommand)\r
     if len(RecordSet) < 1:\r
         SqlCommand = """select Value2 from %s\r
                     where Model = %s\r
                     and Value1 = '%s'\r
                     and Arch = '%s'\r
-                    and Enabled > -1""" % (Table.Table, MODEL_META_DATA_HEADER, ConvertToSqlString2(Name), ConvertToSqlString2(TAB_ARCH_COMMON.upper()))\r
+                    and BelongsToFile = %s\r
+                    and Enabled > -1""" % (Table.Table, MODEL_META_DATA_HEADER, ConvertToSqlString2(Name), ConvertToSqlString2(TAB_ARCH_COMMON.upper()), BelongsToFile)\r
         RecordSet = Table.Exec(SqlCommand)\r
     if len(RecordSet) == 1:\r
         if Name == TAB_INF_DEFINES_LIBRARY_CLASS:\r
@@ -212,17 +214,19 @@ def QueryDefinesItem(Table, Name, Arch):
 #\r
 # @retval RecordSet: A list of all matched records\r
 #\r
-def QueryDefinesItem2(Table, Arch):\r
+def QueryDefinesItem2(Table, Arch, BelongsToFile):\r
     SqlCommand = """select Value1, Value2, StartLine from %s\r
                     where Model = %s\r
                     and Arch = '%s'\r
-                    and Enabled > -1""" % (Table.Table, MODEL_META_DATA_HEADER, ConvertToSqlString2(Arch))\r
+                    and BelongsToFile = %s\r
+                    and Enabled > -1""" % (Table.Table, MODEL_META_DATA_HEADER, ConvertToSqlString2(Arch), BelongsToFile)\r
     RecordSet = Table.Exec(SqlCommand)\r
     if len(RecordSet) < 1:\r
         SqlCommand = """select Value1, Value2, StartLine from %s\r
                     where Model = %s\r
                     and Arch = '%s'\r
-                    and Enabled > -1""" % (Table.Table, MODEL_META_DATA_HEADER, ConvertToSqlString2(TAB_ARCH_COMMON))\r
+                    and BelongsToFile = %s\r
+                    and Enabled > -1""" % (Table.Table, MODEL_META_DATA_HEADER, ConvertToSqlString2(TAB_ARCH_COMMON), BelongsToFile)\r
         RecordSet = Table.Exec(SqlCommand)\r
     \r
     return RecordSet\r
@@ -236,11 +240,12 @@ def QueryDefinesItem2(Table, Arch):
 #\r
 # @retval RecordSet: A list of all matched records\r
 #\r
-def QueryDscItem(Table, Model, BelongsToItem):\r
+def QueryDscItem(Table, Model, BelongsToItem, BelongsToFile):\r
     SqlCommand = """select Value1, Arch, StartLine, ID, Value2 from %s\r
                     where Model = %s\r
                     and BelongsToItem = %s\r
-                    and Enabled > -1""" % (Table.Table, Model, BelongsToItem)\r
+                    and BelongsToFile = %s\r
+                    and Enabled > -1""" % (Table.Table, Model, BelongsToItem, BelongsToFile)\r
     return Table.Exec(SqlCommand)\r
 \r
 ##QueryDecItem\r
index 22479fb..a1ca217 100644 (file)
 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 #\r
 \r
+from CommonDataClass.DataClass import *\r
+from EccToolError import *\r
+import EccGlobalData\r
+\r
 ## Check\r
 #\r
 # This class is to define checkpoints used by ECC tool\r
@@ -25,7 +29,7 @@ class Check(object):
     # Check all required checkpoints\r
     #   \r
     def Check(self):\r
-        pass\r
+        self.MetaDataFileCheck()\r
     \r
     #\r
     # Meta-Data File Processing Checking\r
@@ -41,19 +45,20 @@ class Check(object):
         self.MetaDataFileCheckPcdDuplicate()\r
         self.MetaDataFileCheckPcdFlash()\r
         self.MetaDataFileCheckPcdNoUse()\r
+        self.MetaDataFileCheckGuidDuplicate()\r
 \r
     #\r
     # Check whether each file defined in meta-data exists\r
     #\r
     def MetaDataFileCheckPathName(self):\r
-        if EccGlobalData.gConfig.MetaDataFileCheckPathName == 1 or EccGlobalData.gConfig.MetaDataFileCheckAll == 1:\r
+        if EccGlobalData.gConfig.MetaDataFileCheckPathName == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1':\r
             pass\r
     \r
     #\r
     # Generate a list for all files defined in meta-data files\r
     #\r
     def MetaDataFileCheckGenerateFileList(self):\r
-        if EccGlobalData.gConfig.MetaDataFileCheckGenerateFileList == 1 or EccGlobalData.gConfig.MetaDataFileCheckAll == 1:\r
+        if EccGlobalData.gConfig.MetaDataFileCheckGenerateFileList == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1':\r
             File = EccGlobalData.gConfig.MetaDataFileCheckPathOfGenerateFileList\r
             pass\r
     \r
@@ -63,35 +68,35 @@ class Check(object):
     # and any module specifying the library instance must be one of the supported types.\r
     #\r
     def MetaDataFileCheckLibraryInstance(self):\r
-        if EccGlobalData.gConfig.MetaDataFileCheckLibraryInstance == 1 or EccGlobalData.gConfig.MetaDataFileCheckAll == 1:\r
+        if EccGlobalData.gConfig.MetaDataFileCheckLibraryInstance == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1':\r
             pass\r
 \r
     #\r
     # Check whether a Library Instance has been defined for all dependent library classes\r
     #\r
     def MetaDataFileCheckLibraryInstanceDependent(self):\r
-        if EccGlobalData.gConfig.MetaDataFileCheckLibraryInstanceDependent == 1 or EccGlobalData.gConfig.MetaDataFileCheckAll == 1:\r
+        if EccGlobalData.gConfig.MetaDataFileCheckLibraryInstanceDependent == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1':\r
             pass\r
 \r
     #\r
     # Check whether the Library Instances specified by the LibraryClasses sections are listed in order of dependencies\r
     #\r
     def MetaDataFileCheckLibraryInstanceOrder(self):\r
-        if EccGlobalData.gConfig.MetaDataFileCheckLibraryInstanceOrder == 1 or EccGlobalData.gConfig.MetaDataFileCheckAll == 1:\r
+        if EccGlobalData.gConfig.MetaDataFileCheckLibraryInstanceOrder == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1':\r
             pass\r
 \r
     #\r
     # Check whether the unnecessary inclusion of library classes in the INF file\r
     #\r
     def MetaDataFileCheckLibraryNoUse(self):\r
-        if EccGlobalData.gConfig.MetaDataFileCheckLibraryNoUse == 1 or EccGlobalData.gConfig.MetaDataFileCheckAll == 1:\r
+        if EccGlobalData.gConfig.MetaDataFileCheckLibraryNoUse == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1':\r
             pass\r
 \r
     #\r
     # Check whether an INF file is specified in the FDF file, but not in the DSC file, then the INF file must be for a Binary module only\r
     #\r
     def MetaDataFileCheckBinaryInfInFdf(self):\r
-        if EccGlobalData.gConfig.MetaDataFileCheckBinaryInfInFdf == 1 or EccGlobalData.gConfig.MetaDataFileCheckAll == 1:\r
+        if EccGlobalData.gConfig.MetaDataFileCheckBinaryInfInFdf == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1':\r
             pass\r
 \r
     #\r
@@ -99,26 +104,100 @@ class Check(object):
     # Check whether a PCD is set in a DSC file or the FDF file, but not in both.\r
     #\r
     def MetaDataFileCheckPcdDuplicate(self):\r
-        if EccGlobalData.gConfig.MetaDataFileCheckPcdDuplicate == 1 or EccGlobalData.gConfig.MetaDataFileCheckAll == 1:\r
+        if EccGlobalData.gConfig.MetaDataFileCheckPcdDuplicate == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1':\r
             pass\r
 \r
     #\r
     # Check whether PCD settings in the FDF file can only be related to flash.\r
     #\r
     def MetaDataFileCheckPcdFlash(self):\r
-        if EccGlobalData.gConfig.MetaDataFileCheckPcdFlash == 1 or EccGlobalData.gConfig.MetaDataFileCheckAll == 1:\r
+        if EccGlobalData.gConfig.MetaDataFileCheckPcdFlash == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1':\r
             pass\r
         \r
     #\r
     # Check whether PCDs used in INF files but not specified in DSC or FDF files\r
     #\r
     def MetaDataFileCheckPcdNoUse(self):\r
-        if EccGlobalData.gConfig.MetaDataFileCheckPcdNoUse == 1 or EccGlobalData.gConfig.MetaDataFileCheckAll == 1:\r
+        if EccGlobalData.gConfig.MetaDataFileCheckPcdNoUse == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1':\r
             pass\r
         \r
     #\r
     # Check whether having duplicate guids defined for Guid/Protocol/Ppi\r
     #\r
     def MetaDataFileCheckGuidDuplicate(self):\r
-        if EccGlobalData.gConfig.MetaDataFileCheckGuidDuplicate == 1 or EccGlobalData.gConfig.MetaDataFileCheckAll == 1:\r
-            pass\r
+        if EccGlobalData.gConfig.MetaDataFileCheckGuidDuplicate == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1':\r
+            EdkLogger.quiet("Checking duplicate guid/ppi/protocol ...")\r
+            #\r
+            # Check Guid\r
+            #\r
+            self.CheckGuidProtocolPpi(ERROR_META_DATA_FILE_CHECK_DUPLICATE_GUID, MODEL_EFI_GUID, EccGlobalData.gDb.TblDec)\r
+            self.CheckGuidProtocolPpi(ERROR_META_DATA_FILE_CHECK_DUPLICATE_GUID, MODEL_EFI_GUID, EccGlobalData.gDb.TblDsc)\r
+            self.CheckGuidProtocolPpiValue(ERROR_META_DATA_FILE_CHECK_DUPLICATE_GUID, MODEL_EFI_GUID)\r
+            #\r
+            # Check protocol\r
+            #\r
+            self.CheckGuidProtocolPpi(ERROR_META_DATA_FILE_CHECK_DUPLICATE_PROTOCOL, MODEL_EFI_PROTOCOL, EccGlobalData.gDb.TblDec)\r
+            self.CheckGuidProtocolPpi(ERROR_META_DATA_FILE_CHECK_DUPLICATE_PROTOCOL, MODEL_EFI_PROTOCOL, EccGlobalData.gDb.TblDsc)\r
+            self.CheckGuidProtocolPpiValue(ERROR_META_DATA_FILE_CHECK_DUPLICATE_PROTOCOL, MODEL_EFI_GUID)\r
+            #\r
+            # Check ppi\r
+            #\r
+            self.CheckGuidProtocolPpi(ERROR_META_DATA_FILE_CHECK_DUPLICATE_PPI, MODEL_EFI_PPI, EccGlobalData.gDb.TblDec)\r
+            self.CheckGuidProtocolPpi(ERROR_META_DATA_FILE_CHECK_DUPLICATE_PPI, MODEL_EFI_PPI, EccGlobalData.gDb.TblDsc)\r
+            self.CheckGuidProtocolPpiValue(ERROR_META_DATA_FILE_CHECK_DUPLICATE_PPI, MODEL_EFI_GUID)\r
+\r
+            EdkLogger.quiet("Checking duplicate guid/ppi/protocol done!")\r
+    \r
+    #\r
+    # Check whether these is duplicate Guid/Ppi/Protocol name\r
+    #\r
+    def CheckGuidProtocolPpi(self, ErrorID, Model, Table):\r
+        Name = ''\r
+        if Model == MODEL_EFI_GUID:\r
+            Name = 'guid'\r
+        if Model == MODEL_EFI_PROTOCOL:\r
+            Name = 'protocol'\r
+        if Model == MODEL_EFI_PPI:\r
+            Name = 'ppi'\r
+        SqlCommand = """\r
+                     select A.ID, A.Value1 from %s as A, %s as B \r
+                     where A.Model = %s and B.Model = %s \r
+                     and A.Value1 = B.Value1 and A.ID <> B.ID \r
+                     group by A.ID\r
+                     """ % (Table.Table, Table.Table, Model, Model)\r
+        RecordSet = Table.Exec(SqlCommand)\r
+        for Record in RecordSet:\r
+            EccGlobalData.gDb.TblReport.Insert(ErrorID, OtherMsg = "The %s name '%s' is defined more than one time" % (Name, Record[1]), BelongsToTable = Table.Table, BelongsToItem = Record[0])\r
+\r
+    #\r
+    # Check whether these is duplicate Guid/Ppi/Protocol value\r
+    #\r
+    def CheckGuidProtocolPpiValue(self, ErrorID, Model):\r
+        Name = ''\r
+        Table = EccGlobalData.gDb.TblDec\r
+        if Model == MODEL_EFI_GUID:\r
+            Name = 'guid'\r
+        if Model == MODEL_EFI_PROTOCOL:\r
+            Name = 'protocol'\r
+        if Model == MODEL_EFI_PPI:\r
+            Name = 'ppi'\r
+        SqlCommand = """\r
+                     select A.ID, A.Value2 from %s as A, %s as B \r
+                     where A.Model = %s and B.Model = %s \r
+                     and A.Value2 = B.Value2 and A.ID <> B.ID \r
+                     group by A.ID\r
+                     """ % (Table.Table, Table.Table, Model, Model)\r
+        RecordSet = Table.Exec(SqlCommand)\r
+        for Record in RecordSet:\r
+            EccGlobalData.gDb.TblReport.Insert(ErrorID, OtherMsg = "The %s value '%s' is defined more than one time" % (Name, Record[1]), BelongsToTable = Table.Table, BelongsToItem = Record[0])\r
+\r
+\r
+\r
+##\r
+#\r
+# This acts like the main() function for the script, unless it is 'import'ed into another\r
+# script.\r
+#\r
+if __name__ == '__main__':\r
+    Check = Check()\r
+    Check.Check()
\ No newline at end of file
index 0177665..52515cf 100644 (file)
@@ -217,7 +217,7 @@ class Configuration(object):
         # Generate a list for all files defined in meta-data files\r
         self.MetaDataFileCheckGenerateFileList = 1\r
         # The path of log file\r
-        self.MetaDataFileCheckPathOfGenerateFileList = "C:\File.log"\r
+        self.MetaDataFileCheckPathOfGenerateFileList = 'File.log'\r
         # Check whether all Library Instances defined for a given module (or dependent library instance) match the module's type.  \r
         # Each Library Instance must specify the Supported Module Types in its INF file, \r
         # and any module specifying the library instance must be one of the supported types.\r
@@ -266,6 +266,8 @@ class Configuration(object):
                     EdkLogger.error("Ecc", EdkLogger.ECC_ERROR, ErrorMsg, File = Filepath, Line = LineNo)\r
                 if List[0] == 'ModifierList':\r
                     List[1] = GetSplitValueList(List[1], TAB_COMMA_SPLIT)\r
+                if List[0] == 'MetaDataFileCheckPathOfGenerateFileList' and List[1] == "":\r
+                    continue\r
                 self.__dict__[List[0]] = List[1]\r
     \r
     def ShowMe(self):\r
index b91c821..e2727c2 100644 (file)
@@ -26,6 +26,9 @@ from Table.TableFunction import TableFunction
 from Table.TablePcd import TablePcd\r
 from Table.TableIdentifier import TableIdentifier\r
 from Table.TableReport import TableReport\r
+from Table.TableInf import TableInf\r
+from Table.TableDec import TableDec\r
+from Table.TableDsc import TableDsc\r
 \r
 ##\r
 # Static definitions\r
@@ -59,6 +62,9 @@ class Database(object):
         self.TblIdentifier = TableIdentifier(self.Cur)\r
         self.TblPcd = TablePcd(self.Cur)\r
         self.TblReport = TableReport(self.Cur)\r
+        self.TblInf = TableInf(self.Cur)\r
+        self.TblDec = TableDec(self.Cur)\r
+        self.TblDsc = TableDsc(self.Cur)\r
     \r
     ## Initialize ECC database\r
     #\r
@@ -85,6 +91,9 @@ class Database(object):
         self.TblFunction.Create()\r
         self.TblPcd.Create()\r
         self.TblReport.Create()\r
+        self.TblInf.Create()\r
+        self.TblDec.Create()\r
+        self.TblDsc.Create()\r
         #self.TblIdentifier.Create()\r
         \r
         #\r
index 044c782..3ffb370 100644 (file)
 ##\r
 # Import Modules\r
 #\r
-import os\r
+import os, time, glob\r
 from optparse import OptionParser\r
 import Common.EdkLogger as EdkLogger\r
 import Database\r
 from Configuration import Configuration\r
 from Check import Check\r
 import EccGlobalData\r
-import time\r
+from Common.InfClassObject import Inf\r
+from Common.DecClassObject import Dec\r
+from Common.DscClassObject import Dsc\r
+from Common.String import NormPath\r
 #import c\r
 \r
 ## Ecc\r
@@ -56,6 +59,12 @@ class Ecc(object):
         #\r
         EccGlobalData.gConfig = Configuration(self.ConfigFile)\r
         \r
+        #\r
+        # Init Ecc database\r
+        #\r
+        EccGlobalData.gDb = Database.Database(Database.DATABASE_PATH)\r
+        EccGlobalData.gDb.InitDatabase()\r
+        \r
         #\r
         # Build ECC database\r
         #\r
@@ -76,18 +85,60 @@ class Ecc(object):
         #\r
         EccGlobalData.gDb.Close()\r
 \r
-    ##\r
+    ## BuildDatabase\r
     #\r
     # Build the database for target\r
     #\r
     def BuildDatabase(self):\r
-        EdkLogger.quiet("Parsing target ...")\r
-        EccGlobalData.gDb = Database.Database(Database.DATABASE_PATH)\r
-        EccGlobalData.gDb.InitDatabase()\r
+        EdkLogger.quiet("Building database for source code ...")\r
         #c.CollectSourceCodeDataIntoDB(EccGlobalData.gTarget)\r
-        EdkLogger.quiet("Parsing target done!")\r
-        #EccGlobalData.gDb.TblReport.ToCSV()\r
+        EdkLogger.quiet("Building database for source code done!")\r
+        \r
+        self.BuildMetaDataFileDatabase()\r
+    \r
+    ## BuildMetaDataFileDatabase\r
+    #\r
+    # Build the database for meta data files\r
+    #\r
+    def BuildMetaDataFileDatabase(self):\r
+        EdkLogger.quiet("Building database for meta data files ...")\r
+        Op = open(EccGlobalData.gConfig.MetaDataFileCheckPathOfGenerateFileList, 'w+')\r
+        for Root, Dirs, Files in os.walk(EccGlobalData.gTarget):\r
+            if "CVS" in Dirs:\r
+                Dirs.remove('CVS')\r
+            if ".svn" in Dirs:\r
+                Dirs.remove('.svn')\r
+            if "EdkCompatibilityPkg" in Dirs:\r
+                Dirs.remove('EdkCompatibilityPkg')\r
+            \r
+            for File in Files:\r
+                if len(File) > 4 and File[-4:].upper() == ".DEC":\r
+                    Filename = os.path.normpath(os.path.join(Root, File))\r
+                    EdkLogger.quiet("Parsing %s" % Filename)\r
+                    Op.write("%s\r" % Filename)\r
+                    Dec(Filename, True, True, EccGlobalData.gWorkspace, EccGlobalData.gDb)\r
+                    continue\r
+                if len(File) > 4 and File[-4:].upper() == ".DSC":\r
+                    Filename = os.path.normpath(os.path.join(Root, File))\r
+                    EdkLogger.quiet("Parsing %s" % Filename)\r
+                    Op.write("%s\r" % Filename)\r
+                    Dsc(Filename, True, True, EccGlobalData.gWorkspace, EccGlobalData.gDb)\r
+                    continue\r
+                if len(File) > 4 and File[-4:].upper() == ".INF":\r
+                    Filename = os.path.normpath(os.path.join(Root, File))\r
+                    EdkLogger.quiet("Parsing %s" % Filename)\r
+                    Op.write("%s\r" % Filename)\r
+                    Inf(Filename, True, True, EccGlobalData.gWorkspace, EccGlobalData.gDb)\r
+                    continue\r
+                if len(File) > 4 and File[-4:].upper() == ".FDF":\r
+                    Filename = os.path.normpath(os.path.join(Root, File))\r
+                    EdkLogger.quiet("Parsing %s" % Filename)\r
+                    Op.write("%s\r" % Filename)\r
+                    continue\r
+        Op.close()\r
 \r
+        EdkLogger.quiet("Building database for meta data files done!")\r
+    \r
     ##\r
     #\r
     # Check each checkpoint\r
@@ -104,6 +155,7 @@ class Ecc(object):
     #\r
     def GenReport(self):\r
         EdkLogger.quiet("Generating report ...")\r
+        EccGlobalData.gDb.TblReport.ToCSV()\r
         EdkLogger.quiet("Generating report done!")\r
     \r
     ## ParseOption\r
@@ -138,9 +190,10 @@ class Ecc(object):
         if Options.OutputFile != None:\r
             self.OutputFile = Options.OutputFile\r
         if Options.Target != None:\r
-            EccGlobalData.gTarget = Options.Target\r
+            EccGlobalData.gTarget = os.path.normpath(Options.Target)\r
         else:\r
-            EdkLogger.error("Ecc", EdkLogger.ECC_ERROR, "A target workspace must be specified!")\r
+            EdkLogger.warn("Ecc", EdkLogger.ECC_ERROR, "The target source tree is not specified, use current WORKSPACE instead.!")\r
+            EccGlobalData.gTarget = os.path.normpath(os.getenv("WORKSPACE"))\r
            \r
     ## SetLogLevel\r
     #\r
@@ -196,4 +249,4 @@ class Ecc(object):
 #\r
 if __name__ == '__main__':\r
     Ecc = Ecc()\r
-    
\ No newline at end of file
+\r
index ad9787c..5b163d2 100644 (file)
@@ -202,7 +202,7 @@ MetaDataFileCheckPathName = 1
 # Generate a list for all files defined in meta-data files\r
 MetaDataFileCheckGenerateFileList = 1\r
 # The path of log file\r
-MetaDataFileCheckPathOfGenerateFileList = "C:\File.log"\r
+MetaDataFileCheckPathOfGenerateFileList = File.log\r
 # Check whether all Library Instances defined for a given module (or dependent library instance) match the module's type.  \r
 # Each Library Instance must specify the Supported Module Types in its INF file, \r
 # and any module specifying the library instance must be one of the supported types.\r
index 549169d..6ea158a 100644 (file)
 # Import Modules\r
 #\r
 import Common.EdkLogger as EdkLogger\r
+import os\r
 from Table import Table\r
+from Common.String import ConvertToSqlString2\r
 import EccToolError\r
+import EccGlobalData\r
 \r
 ## TableReport\r
 #\r
@@ -36,17 +39,17 @@ class TableReport(Table):
     #\r
     # @param ID:             ID of an Error\r
     # @param ErrorID:        ID of an Error TypeModel of a Report item\r
+    # @param OtherMsg:       Other error message besides the standard error message\r
     # @param BelongsToItem:  The error belongs to which item\r
-    # @param BelongsToFile:  The error belongs to which file\r
     # @param Enabled:        If this error enabled\r
     # @param Corrected:      if this error corrected\r
     #\r
     def Create(self):\r
         SqlCommand = """create table IF NOT EXISTS %s (ID INTEGER PRIMARY KEY,\r
                                                        ErrorID INTEGER NOT NULL,\r
+                                                       OtherMsg TEXT,\r
                                                        BelongsToTable TEXT NOT NULL,\r
                                                        BelongsToItem SINGLE NOT NULL,\r
-                                                       BelongsToFile SINGLE NOT NULL,\r
                                                        Enabled INTEGER DEFAULT 0,\r
                                                        Corrected INTEGER DEFAULT -1\r
                                                       )""" % self.Table\r
@@ -58,16 +61,16 @@ class TableReport(Table):
     #\r
     # @param ID:             ID of an Error\r
     # @param ErrorID:        ID of an Error TypeModel of a report item\r
+    # @param OtherMsg:       Other error message besides the standard error message\r
     # @param BelongsToTable: The error item belongs to which table\r
     # @param BelongsToItem:  The error belongs to which item\r
-    # @param BelongsToFile:  The error belongs to which file\r
     # @param Enabled:        If this error enabled\r
     # @param Corrected:      if this error corrected\r
     #\r
-    def Insert(self, ErrorID, BelongsToTable, BelongsToItem = -1, BelongsToFile = -1, Enabled = 0, Corrected = -1):\r
+    def Insert(self, ErrorID, OtherMsg = '', BelongsToTable = '', BelongsToItem = -1, Enabled = 0, Corrected = -1):\r
         self.ID = self.ID + 1\r
-        SqlCommand = """insert into %s values(%s, %s, '%s', %s, %s, %s, %s)""" \\r
-                     % (self.Table, self.ID, ErrorID, BelongsToTable, BelongsToItem, BelongsToFile, Enabled, Corrected)\r
+        SqlCommand = """insert into %s values(%s, %s, '%s', '%s', %s, %s, %s)""" \\r
+                     % (self.Table, self.ID, ErrorID, ConvertToSqlString2(OtherMsg), BelongsToTable, BelongsToItem, Enabled, Corrected)\r
         Table.Insert(self, SqlCommand)\r
         \r
         return self.ID\r
@@ -77,8 +80,8 @@ class TableReport(Table):
     # @retval:       A recordSet of all found records \r
     #\r
     def Query(self):\r
-        SqlCommand = """select ID, ErrorID, BelongsToTable, BelongsToItem, BelongsToFile, Corrected from %s\r
-                        where Enabled > -1 order by ErrorID""" % (self.Table)\r
+        SqlCommand = """select ID, ErrorID, OtherMsg, BelongsToTable, BelongsToItem, Corrected from %s\r
+                        where Enabled > -1 order by ErrorID, BelongsToItem""" % (self.Table)\r
         return self.Exec(SqlCommand)\r
 \r
     ## Convert to CSV\r
@@ -88,23 +91,26 @@ class TableReport(Table):
     # @param Filename:  To filename to save the report content\r
     #\r
     def ToCSV(self, Filename = 'Report.csv'):\r
-        File = open(Filename, 'w+')\r
-        File.write("""No, File, LineNo, Error Code, Error Message\r\n""")\r
-        RecordSet = self.Query()\r
-        Index = 0\r
-        for Record in RecordSet:\r
-            Index = Index + 1\r
-            ErrorID = Record[1]\r
-            BelongsToTable = Record[2]\r
-            BelongsToItem = Record[3]\r
-            BelongsToFile = Record[4]\r
-            IsCorrected = Record[5]\r
-            SqlCommand = """select A.StartLine, B.FullPath from %s as A, File as B\r
-                            where A.ID = %s and B.ID = %s\r
-                         """ % (BelongsToTable, BelongsToItem, BelongsToFile)\r
-            NewRecord = self.Exec(SqlCommand)\r
-            if NewRecord != []:\r
-                File.write("""%s, %s, %s, %s, %s\r\n""" % (Index, NewRecord[0][0], NewRecord[0][1], ErrorID, EccToolError.gEccErrorMessage[ErrorID])) \r
-        \r
-        File.close()\r
+        try:\r
+            File = open(Filename, 'w+')\r
+            File.write("""No, Error Code, Error Message, File, LineNo, Other Error Message\n""")\r
+            RecordSet = self.Query()\r
+            Index = 0\r
+            for Record in RecordSet:\r
+                Index = Index + 1\r
+                ErrorID = Record[1]\r
+                OtherMsg = Record[2]\r
+                BelongsToTable = Record[3]\r
+                BelongsToItem = Record[4]\r
+                IsCorrected = Record[5]\r
+                SqlCommand = """select A.StartLine, B.FullPath from %s as A, File as B\r
+                                where A.ID = %s and B.ID = A.BelongsToFile\r
+                             """ % (BelongsToTable, BelongsToItem)\r
+                NewRecord = self.Exec(SqlCommand)\r
+                if NewRecord != []:\r
+                    File.write("""%s,%s,%s,%s,%s,"%s"\n""" % (Index, ErrorID, EccToolError.gEccErrorMessage[ErrorID], NewRecord[0][1], NewRecord[0][0], OtherMsg))\r
+            \r
+            File.close()\r
+        except IOError:\r
+            EdkLogger.error("ECC", EdkLogger.ECC_ERROR, "The report file %s is locked by other progress, access permission denied!" % Filename)\r
 \r