1. Add two checkpoints to check “file name collisions in header files” and “structure...
authorhche10x <hche10x@7335b38e-4728-0410-8992-fb3ffe349368>
Tue, 17 Jun 2008 03:53:02 +0000 (03:53 +0000)
committerhche10x <hche10x@7335b38e-4728-0410-8992-fb3ffe349368>
Tue, 17 Jun 2008 03:53:02 +0000 (03:53 +0000)
git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@1257 7335b38e-4728-0410-8992-fb3ffe349368

Source/Python/Ecc/Check.py
Source/Python/Ecc/Configuration.py
Source/Python/Ecc/EccToolError.py

index 05af5dc..17bc3a4 100644 (file)
@@ -154,6 +154,7 @@ class Check(object):
         self.DeclCheckEFIAPIModifier()\r
         self.DeclCheckEnumeratedType()\r
         self.DeclCheckStructureDeclaration()\r
+        self.DeclCheckSameStructure()\r
         self.DeclCheckUnionType()\r
     \r
     \r
@@ -222,6 +223,27 @@ class Check(object):
                         FullName = os.path.join(Dirpath, F)\r
                         c.CheckDeclStructTypedef(FullName)\r
     \r
+    # Check whether having same Structure\r
+    def DeclCheckSameStructure(self):\r
+        if EccGlobalData.gConfig.DeclarationDataTypeCheckSameStructure == '1' or EccGlobalData.gConfig.DeclarationDataTypeCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1':\r
+            EdkLogger.quiet("Checking same struct ...")\r
+            AllStructure = {}\r
+            for IdentifierTable in EccGlobalData.gIdentifierTableList:\r
+                SqlCommand = """select ID, Name, BelongsToFile from %s where Model = %s""" %(IdentifierTable, MODEL_IDENTIFIER_STRUCTURE)\r
+                RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand)\r
+                for Record in RecordSet:\r
+                    if Record[1] != '':\r
+                        if Record[1] not in AllStructure.keys():\r
+                            AllStructure[Record[1]] = Record[2]\r
+                        else:\r
+                            ID = AllStructure[Record[1]]\r
+                            SqlCommand = """select FullPath from File where ID = %s """ % ID\r
+                            NewRecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand)\r
+                            OtherMsg = "The structure name '%s' is duplicate" % Record[1]\r
+                            if NewRecordSet != []:\r
+                                OtherMsg = "The structure name '%s' is duplicate with the one defined in %s" % (Record[1], NewRecordSet[0][0])\r
+                            EccGlobalData.gDb.TblReport.Insert(ERROR_DECLARATION_DATA_TYPE_CHECK_SAME_STRUCTURE, OtherMsg = OtherMsg, BelongsToTable = IdentifierTable, BelongsToItem = Record[0])   \r
+    \r
     # Check whether Union Type has a 'typedef' and the name is capital\r
     def DeclCheckUnionType(self):\r
         if EccGlobalData.gConfig.DeclarationDataTypeCheckUnionType == '1' or EccGlobalData.gConfig.DeclarationDataTypeCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1':\r
@@ -293,8 +315,22 @@ class Check(object):
     def IncludeFileCheck(self):\r
         self.IncludeFileCheckIfndef()\r
         self.IncludeFileCheckData()\r
+        self.IncludeFileCheckSameName()\r
     \r
     #\r
+    # Check whether having include files with same name\r
+    #\r
+    def IncludeFileCheckSameName(self):\r
+        if EccGlobalData.gConfig.IncludeFileCheckSameName == '1' or EccGlobalData.gConfig.IncludeFileCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1':\r
+            EdkLogger.quiet("Checking same header file name ...")\r
+            SqlCommand = """select ID, FullPath from File \r
+                            where Name in (select Name from File group by Name having count(*) > 1) \r
+                            and Model = 1002\r
+                            order by Name """\r
+            RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand)\r
+            for Record in RecordSet:\r
+                EccGlobalData.gDb.TblReport.Insert(ERROR_INCLUDE_FILE_CHECK_NAME, OtherMsg = "The file name for '%s' is duplicate" % (Record[1]), BelongsToTable = 'File', BelongsToItem = Record[0])\r
+    #\r
     # Check whether all include file contents is guarded by a #ifndef statement.\r
     #\r
     def IncludeFileCheckIfndef(self):\r
index 50e6dc6..ea58a19 100644 (file)
@@ -139,6 +139,8 @@ class Configuration(object):
         #\r
         self.IncludeFileCheckAll = 0\r
         \r
+        #Check whether having include files with same name\r
+        self.IncludeFileCheckSameName = 1\r
         # Check whether all include file contents is guarded by a #ifndef statement.\r
         # the #ifndef must be the first line of code following the file header comment\r
         # the #endif must appear on the last line in the file\r
@@ -162,6 +164,8 @@ class Configuration(object):
         self.DeclarationDataTypeCheckEnumeratedType = 1\r
         # Check whether Structure Type has a 'typedef' and the name is capital\r
         self.DeclarationDataTypeCheckStructureDeclaration = 1\r
+        # Check whether having same Structure\r
+        self.DeclarationDataTypeCheckSameStructure = 1\r
         # Check whether Union Type has a 'typedef' and the name is capital\r
         self.DeclarationDataTypeCheckUnionType = 1\r
         \r
index 521a57b..6974309 100644 (file)
@@ -46,6 +46,7 @@ ERROR_INCLUDE_FILE_CHECK_IFNDEF_STATEMENT_1 = 6001
 ERROR_INCLUDE_FILE_CHECK_IFNDEF_STATEMENT_2 = 6002\r
 ERROR_INCLUDE_FILE_CHECK_IFNDEF_STATEMENT_3 = 6003\r
 ERROR_INCLUDE_FILE_CHECK_DATA = 6004\r
+ERROR_INCLUDE_FILE_CHECK_NAME = 6005\r
 \r
 ERROR_DECLARATION_DATA_TYPE_CHECK_ALL = 7000\r
 ERROR_DECLARATION_DATA_TYPE_CHECK_NO_USE_C_TYPE = 7001\r
@@ -53,6 +54,7 @@ ERROR_DECLARATION_DATA_TYPE_CHECK_IN_OUT_MODIFIER = 7002
 ERROR_DECLARATION_DATA_TYPE_CHECK_EFI_API_MODIFIER = 7003\r
 ERROR_DECLARATION_DATA_TYPE_CHECK_ENUMERATED_TYPE = 7004\r
 ERROR_DECLARATION_DATA_TYPE_CHECK_STRUCTURE_DECLARATION = 7005\r
+ERROR_DECLARATION_DATA_TYPE_CHECK_SAME_STRUCTURE = 7007\r
 ERROR_DECLARATION_DATA_TYPE_CHECK_UNION_TYPE = 7006\r
 \r
 ERROR_NAMING_CONVENTION_CHECK_ALL = 8000\r
@@ -124,6 +126,7 @@ gEccErrorMessage = {
     ERROR_INCLUDE_FILE_CHECK_IFNDEF_STATEMENT_2 : "The #ifndef must be the first line of code following the file header comment",\r
     ERROR_INCLUDE_FILE_CHECK_IFNDEF_STATEMENT_3 : "The #endif must appear on the last line in the file",\r
     ERROR_INCLUDE_FILE_CHECK_DATA : "Include files should contain only public or only private data and cannot contain code or define data variables",\r
+    ERROR_INCLUDE_FILE_CHECK_NAME : "No permission for the inlcude file with same names",\r
     \r
     ERROR_DECLARATION_DATA_TYPE_CHECK_ALL : "",\r
     ERROR_DECLARATION_DATA_TYPE_CHECK_NO_USE_C_TYPE : "There should be no use of int, unsigned, char, void, static, long in any .c, .h or .asl files",\r
@@ -131,6 +134,7 @@ gEccErrorMessage = {
     ERROR_DECLARATION_DATA_TYPE_CHECK_EFI_API_MODIFIER : "The EFIAPI modifier should be used at the entry of drivers, events, and member functions of protocols",\r
     ERROR_DECLARATION_DATA_TYPE_CHECK_ENUMERATED_TYPE : "Enumerated Type should have a 'typedef' and the name must be in capital letters",\r
     ERROR_DECLARATION_DATA_TYPE_CHECK_STRUCTURE_DECLARATION : "Structure Type should have a 'typedef' and the name must be in capital letters",\r
+    ERROR_DECLARATION_DATA_TYPE_CHECK_SAME_STRUCTURE : "No permission for the structure with same names",\r
     ERROR_DECLARATION_DATA_TYPE_CHECK_UNION_TYPE : "Union Type should have a 'typedef' and the name must be in capital letters",\r
     \r
     ERROR_NAMING_CONVENTION_CHECK_ALL : "",\r