]> git.proxmox.com Git - mirror_edk2.git/commitdiff
This patch is going to:
authorHess Chen <hesheng.chen@intel.com>
Mon, 25 Aug 2014 01:16:34 +0000 (01:16 +0000)
committerhchen30 <hchen30@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 25 Aug 2014 01:16:34 +0000 (01:16 +0000)
1.       Add a checkpoint to check if an UNI file is a valid UTF-16 file
2.       Add a checkpoint to check if a GUID/PPI/PROTOCOL/PCD is in a valid format.
3.       Some other minor changes.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hess Chen <hesheng.chen@intel.com>
Reviewed-by: Yingke Liu <yingke.d.liu@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15886 6f19259b-4bc3-4df7-8a09-765794883524

BaseTools/Source/Python/Ecc/Check.py
BaseTools/Source/Python/Ecc/Configuration.py
BaseTools/Source/Python/Ecc/Ecc.py
BaseTools/Source/Python/Ecc/EccGlobalData.py
BaseTools/Source/Python/Ecc/EccToolError.py
BaseTools/Source/Python/Ecc/MetaDataParser.py
BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaDataTable.py
BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaFileParser.py
BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaFileTable.py
BaseTools/Source/Python/Ecc/config.ini

index 4e7ffe7aca979536bbc24e75e83ecd56dc0833f1..11a06ecc021454284ea1e2455a36dc64626980da 100644 (file)
 import Common.LongFilePathOs as os\r
 import re\r
 from CommonDataClass.DataClass import *\r
-from Common.DataType import SUP_MODULE_LIST_STRING, TAB_VALUE_SPLIT\r
+import Common.DataType as DT\r
 from EccToolError import *\r
 from MetaDataParser import ParseHeaderCommentSection\r
 import EccGlobalData\r
 import c\r
+from Common.LongFilePathSupport import OpenLongFilePath as open\r
 \r
 ## Check\r
 #\r
@@ -40,9 +41,23 @@ class Check(object):
         self.FunctionLayoutCheck()\r
         self.NamingConventionCheck()\r
 \r
+    # Check UNI files\r
+    def UniCheck(self):\r
+        if EccGlobalData.gConfig.GeneralCheckUni == '1' or EccGlobalData.gConfig.GeneralCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1':\r
+            EdkLogger.quiet("Checking whether UNI file is UTF-16 ...")\r
+            SqlCommand = """select ID, FullPath, ExtName from File where ExtName like 'uni'"""\r
+            RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand)\r
+            for Record in RecordSet:\r
+                File = Record[1]\r
+                FileIn = open(File, 'rb').read(2)\r
+                if FileIn != '\xff\xfe':\r
+                    OtherMsg = "File %s is not a valid UTF-16 UNI file" % Record[1]\r
+                    EccGlobalData.gDb.TblReport.Insert(ERROR_GENERAL_CHECK_UNI, OtherMsg=OtherMsg, BelongsToTable='File', BelongsToItem=Record[0])\r
+\r
     # General Checking\r
     def GeneralCheck(self):\r
         self.GeneralCheckNonAcsii()\r
+        self.UniCheck()\r
 \r
     # Check whether file has non ACSII char\r
     def GeneralCheckNonAcsii(self):\r
@@ -554,6 +569,10 @@ class Check(object):
         self.MetaDataFileCheckModuleFileNoUse()\r
         self.MetaDataFileCheckPcdType()\r
         self.MetaDataFileCheckModuleFileGuidDuplication()\r
+        self.MetaDataFileCheckModuleFileGuidFormat()\r
+        self.MetaDataFileCheckModuleFileProtocolFormat()\r
+        self.MetaDataFileCheckModuleFilePpiFormat()\r
+        self.MetaDataFileCheckModuleFilePcdFormat()\r
 \r
     # Check whether each file defined in meta-data exists\r
     def MetaDataFileCheckPathName(self):\r
@@ -583,7 +602,7 @@ class Check(object):
                 List = Record[1].split('|', 1)\r
                 SupModType = []\r
                 if len(List) == 1:\r
-                    SupModType = SUP_MODULE_LIST_STRING.split(TAB_VALUE_SPLIT)\r
+                    SupModType = DT.SUP_MODULE_LIST_STRING.split(DT.TAB_VALUE_SPLIT)\r
                 elif len(List) == 2:\r
                     SupModType = List[1].split()\r
 \r
@@ -821,7 +840,7 @@ class Check(object):
             RecordSet = EccGlobalData.gDb.TblInf.Exec(SqlCommand)\r
             for Record in RecordSet:\r
                 Path = Record[1]\r
-                Path = Path.upper().replace('\X64', '').replace('\IA32', '').replace('\EBC', '').replace('\IPF', '').replace('\ARM', '').replace('\AARCH64', '')\r
+                Path = Path.upper().replace('\X64', '').replace('\IA32', '').replace('\EBC', '').replace('\IPF', '').replace('\ARM', '')\r
                 if Path in InfPathList:\r
                     if not EccGlobalData.gException.IsException(ERROR_META_DATA_FILE_CHECK_MODULE_FILE_NO_USE, Record[2]):\r
                         EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_MODULE_FILE_NO_USE, OtherMsg="The source file [%s] is existing in module directory but it is not described in INF file." % (Record[2]), BelongsToTable='File', BelongsToItem=Record[0])\r
@@ -898,6 +917,142 @@ class Check(object):
                         EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_MODULE_FILE_GUID_DUPLICATION, OtherMsg=Msg, BelongsToTable=Table.Table, BelongsToItem=Record[0])\r
 \r
 \r
+    # Check Guid Format in module INF\r
+    def MetaDataFileCheckModuleFileGuidFormat(self):\r
+        if EccGlobalData.gConfig.MetaDataFileCheckModuleFileGuidFormat or EccGlobalData.gConfig.MetaDataFileCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1':\r
+            EdkLogger.quiet("Check Guid Format in module INF ...")\r
+            Table = EccGlobalData.gDb.TblInf\r
+            SqlCommand = """\r
+                         select ID, Value1, Usage, BelongsToFile from %s where Model = %s group by ID\r
+                         """ % (Table.Table, MODEL_EFI_GUID)\r
+            RecordSet = Table.Exec(SqlCommand)\r
+            for Record in RecordSet:\r
+                Value1 = Record[1]\r
+                Value2 = Record[2]\r
+                GuidCommentList = []\r
+                InfPath = self.GetInfFilePathFromID(Record[3])\r
+                Msg = "The GUID format of %s in INF file [%s] does not follow rules" % (Value1, InfPath)\r
+                if Value2.startswith(DT.TAB_SPECIAL_COMMENT):\r
+                    GuidCommentList = Value2[2:].split(DT.TAB_SPECIAL_COMMENT)\r
+                    if GuidCommentList[0].strip().startswith(DT.TAB_INF_USAGE_UNDEFINED):\r
+                        continue\r
+                    elif len(GuidCommentList) > 1:\r
+                        if not GuidCommentList[0].strip().startswith((DT.TAB_INF_USAGE_PRO,\r
+                                                                      DT.TAB_INF_USAGE_SOME_PRO,\r
+                                                                      DT.TAB_INF_USAGE_CON,\r
+                                                                      DT.TAB_INF_USAGE_SOME_CON)):\r
+                            EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_FORMAT_GUID, OtherMsg=Msg, BelongsToTable=Table.Table, BelongsToItem=Record[0])\r
+                        if not (GuidCommentList[1].strip()).startswith(DT.TAB_INF_GUIDTYPE_VAR) and \\r
+                            not GuidCommentList[1].strip().startswith((DT.TAB_INF_GUIDTYPE_EVENT,\r
+                                                                       DT.TAB_INF_GUIDTYPE_HII,\r
+                                                                       DT.TAB_INF_GUIDTYPE_FILE,\r
+                                                                       DT.TAB_INF_GUIDTYPE_HOB,\r
+                                                                       DT.TAB_INF_GUIDTYPE_FV,\r
+                                                                       DT.TAB_INF_GUIDTYPE_ST,\r
+                                                                       DT.TAB_INF_GUIDTYPE_TSG,\r
+                                                                       DT.TAB_INF_GUIDTYPE_GUID,\r
+                                                                       DT.TAB_INF_GUIDTYPE_PROTOCOL,\r
+                                                                       DT.TAB_INF_GUIDTYPE_PPI,\r
+                                                                       DT.TAB_INF_USAGE_UNDEFINED)):\r
+                                EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_FORMAT_GUID, OtherMsg=Msg, BelongsToTable=Table.Table, BelongsToItem=Record[0])\r
+                    else:\r
+                        EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_FORMAT_GUID, OtherMsg=Msg, BelongsToTable=Table.Table, BelongsToItem=Record[0])\r
+                else:\r
+                    EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_FORMAT_GUID, OtherMsg=Msg, BelongsToTable=Table.Table, BelongsToItem=Record[0])\r
+\r
+    # Check Protocol Format in module INF\r
+    def MetaDataFileCheckModuleFileProtocolFormat(self):\r
+        if EccGlobalData.gConfig.MetaDataFileCheckModuleFileProtocolFormat or EccGlobalData.gConfig.MetaDataFileCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1':\r
+            EdkLogger.quiet("Check Protocol Format in module INF ...")\r
+            Table = EccGlobalData.gDb.TblInf\r
+            SqlCommand = """\r
+                         select ID, Value1, Usage, BelongsToFile from %s where Model = %s group by ID\r
+                         """ % (Table.Table, MODEL_EFI_PROTOCOL)\r
+            RecordSet = Table.Exec(SqlCommand)\r
+            for Record in RecordSet:\r
+                Value1 = Record[1]\r
+                Value2 = Record[2]\r
+                GuidCommentList = []\r
+                InfPath = self.GetInfFilePathFromID(Record[3])\r
+                Msg = "The Protocol format of %s in INF file [%s] does not follow rules" % (Value1, InfPath)\r
+                if Value2.startswith(DT.TAB_SPECIAL_COMMENT):\r
+                    GuidCommentList = Value2[2:].split(DT.TAB_SPECIAL_COMMENT)\r
+                    if len(GuidCommentList) >= 1:\r
+                        if not GuidCommentList[0].strip().startswith((DT.TAB_INF_USAGE_PRO,\r
+                                                                      DT.TAB_INF_USAGE_SOME_PRO,\r
+                                                                      DT.TAB_INF_USAGE_CON,\r
+                                                                      DT.TAB_INF_USAGE_SOME_CON,\r
+                                                                      DT.TAB_INF_USAGE_NOTIFY,\r
+                                                                      DT.TAB_INF_USAGE_TO_START,\r
+                                                                      DT.TAB_INF_USAGE_BY_START,\r
+                                                                      DT.TAB_INF_USAGE_UNDEFINED)):\r
+                            EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_FORMAT_PROTOCOL, OtherMsg=Msg, BelongsToTable=Table.Table, BelongsToItem=Record[0])\r
+                else:\r
+                    EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_FORMAT_PROTOCOL, OtherMsg=Msg, BelongsToTable=Table.Table, BelongsToItem=Record[0])\r
+\r
+\r
+    # Check Ppi Format in module INF\r
+    def MetaDataFileCheckModuleFilePpiFormat(self):\r
+        if EccGlobalData.gConfig.MetaDataFileCheckModuleFilePpiFormat or EccGlobalData.gConfig.MetaDataFileCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1':\r
+            EdkLogger.quiet("Check Ppi Format in module INF ...")\r
+            Table = EccGlobalData.gDb.TblInf\r
+            SqlCommand = """\r
+                         select ID, Value1, Usage, BelongsToFile from %s where Model = %s group by ID\r
+                         """ % (Table.Table, MODEL_EFI_PPI)\r
+            RecordSet = Table.Exec(SqlCommand)\r
+            for Record in RecordSet:\r
+                Value1 = Record[1]\r
+                Value2 = Record[2]\r
+                GuidCommentList = []\r
+                InfPath = self.GetInfFilePathFromID(Record[3])\r
+                Msg = "The Ppi format of %s in INF file [%s] does not follow rules" % (Value1, InfPath)\r
+                if Value2.startswith(DT.TAB_SPECIAL_COMMENT):\r
+                    GuidCommentList = Value2[2:].split(DT.TAB_SPECIAL_COMMENT)\r
+                    if len(GuidCommentList) >= 1:\r
+                        if not GuidCommentList[0].strip().startswith((DT.TAB_INF_USAGE_PRO,\r
+                                                                      DT.TAB_INF_USAGE_SOME_PRO,\r
+                                                                      DT.TAB_INF_USAGE_CON,\r
+                                                                      DT.TAB_INF_USAGE_SOME_CON,\r
+                                                                      DT.TAB_INF_USAGE_NOTIFY,\r
+                                                                      DT.TAB_INF_USAGE_UNDEFINED)):\r
+                            EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_FORMAT_PPI, OtherMsg=Msg, BelongsToTable=Table.Table, BelongsToItem=Record[0])\r
+                else:\r
+                    EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_FORMAT_PPI, OtherMsg=Msg, BelongsToTable=Table.Table, BelongsToItem=Record[0])\r
+\r
+    # Check Pcd Format in module INF\r
+    def MetaDataFileCheckModuleFilePcdFormat(self):\r
+        if EccGlobalData.gConfig.MetaDataFileCheckModuleFilePcdFormat or EccGlobalData.gConfig.MetaDataFileCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1':\r
+            EdkLogger.quiet("Check Pcd Format in module INF ...")\r
+            Table = EccGlobalData.gDb.TblInf\r
+            SqlCommand = """\r
+                         select ID, Model, Value1, Value2, Usage, BelongsToFile from %s where Model >= %s and Model < %s group by ID\r
+                         """ % (Table.Table, MODEL_PCD, MODEL_META_DATA_HEADER)\r
+            RecordSet = Table.Exec(SqlCommand)\r
+            for Record in RecordSet:\r
+                Model = Record[1]\r
+                PcdName = Record[2] + '.' + Record[3]\r
+                Usage = Record[4]\r
+                PcdCommentList = []\r
+                InfPath = self.GetInfFilePathFromID(Record[5])\r
+                Msg = "The Pcd format of %s in INF file [%s] does not follow rules" % (PcdName, InfPath)\r
+                if Usage.startswith(DT.TAB_SPECIAL_COMMENT):\r
+                    PcdCommentList = Usage[2:].split(DT.TAB_SPECIAL_COMMENT)\r
+                    if len(PcdCommentList) >= 1:\r
+                        if Model in [MODEL_PCD_FIXED_AT_BUILD, MODEL_PCD_FEATURE_FLAG] \\r
+                            and not PcdCommentList[0].strip().startswith((DT.TAB_INF_USAGE_SOME_PRO,\r
+                                                                          DT.TAB_INF_USAGE_CON,\r
+                                                                          DT.TAB_INF_USAGE_UNDEFINED)):\r
+                            EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_FORMAT_PCD, OtherMsg=Msg, BelongsToTable=Table.Table, BelongsToItem=Record[0])\r
+                        if Model in [MODEL_PCD_PATCHABLE_IN_MODULE, MODEL_PCD_DYNAMIC, MODEL_PCD_DYNAMIC_EX] \\r
+                            and not PcdCommentList[0].strip().startswith((DT.TAB_INF_USAGE_PRO,\r
+                                                                          DT.TAB_INF_USAGE_SOME_PRO,\r
+                                                                          DT.TAB_INF_USAGE_CON,\r
+                                                                          DT.TAB_INF_USAGE_SOME_CON,\r
+                                                                          DT.TAB_INF_USAGE_UNDEFINED)):\r
+                            EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_FORMAT_PCD, OtherMsg=Msg, BelongsToTable=Table.Table, BelongsToItem=Record[0])\r
+                else:\r
+                    EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_FORMAT_PCD, OtherMsg=Msg, BelongsToTable=Table.Table, BelongsToItem=Record[0])\r
+\r
     # Check whether these is duplicate Guid/Ppi/Protocol name\r
     def CheckGuidProtocolPpi(self, ErrorID, Model, Table):\r
         Name = ''\r
index 72bfbc709befb0a210195f0870dfa5f5fbdc3ed3..3e54438e3e69b8197c563bd8f774fe6ab13edc09 100644 (file)
@@ -80,6 +80,8 @@ class Configuration(object):
         self.GeneralCheckFileExistence = 1\r
         # Check whether file has non ACSII char\r
         self.GeneralCheckNonAcsii = 1\r
+        # Check whether UNI file is valid\r
+        self.GeneralCheckUni = 1\r
 \r
         ## Space Checking\r
         self.SpaceCheckAll = 1\r
@@ -236,6 +238,15 @@ class Configuration(object):
         # Check whether there are FILE_GUID duplication among different INF files\r
         self.MetaDataFileCheckModuleFileGuidDuplication = 1\r
 \r
+        # Check Guid Format in INF files\r
+        self.MetaDataFileCheckModuleFileGuidFormat = 1\r
+        # Check Protocol Format in INF files\r
+        self.MetaDataFileCheckModuleFileProtocolFormat = 1\r
+        # Check Ppi Format in INF files\r
+        self.MetaDataFileCheckModuleFilePpiFormat = 1\r
+        # Check Pcd Format in INF files\r
+        self.MetaDataFileCheckModuleFilePcdFormat = 1\r
+\r
         #\r
         # The check points in this section are reserved\r
         #\r
index 72f22d5b22514b96464f27fb37d5ae67bc83cc2d..cb47bc2e53947878e9f087070f9ba6ed82e711a4 100644 (file)
@@ -180,6 +180,7 @@ class Ecc(object):
         EccGlobalData.gIdentifierTableList = GetTableList((MODEL_FILE_C, MODEL_FILE_H), 'Identifier', EccGlobalData.gDb)\r
         EccGlobalData.gCFileList = GetFileList(MODEL_FILE_C, EccGlobalData.gDb)\r
         EccGlobalData.gHFileList = GetFileList(MODEL_FILE_H, EccGlobalData.gDb)\r
+        EccGlobalData.gUFileList = GetFileList(MODEL_FILE_UNI, EccGlobalData.gDb)\r
 \r
     ## BuildMetaDataFileDatabase\r
     #\r
@@ -246,6 +247,13 @@ class Ecc(object):
                         Op.write("%s\r" % Filename)\r
                         Fdf(Filename, True, EccGlobalData.gWorkspace, EccGlobalData.gDb)\r
                         continue\r
+                    if len(File) > 4 and File[-4:].upper() == ".UNI":\r
+                        Filename = os.path.normpath(os.path.join(Root, File))\r
+                        EdkLogger.quiet("Parsing %s" % Filename)\r
+                        Op.write("%s\r" % Filename)\r
+                        EccGlobalData.gDb.TblFile.InsertFile(Filename, MODEL_FILE_UNI)\r
+                        continue\r
+\r
         Op.close()\r
 \r
         # Commit to database\r
index a20d6ead4886a44bf1526abc6164969e17f8f89f..c0b00a4265d69beaf91a64c4afbf3fb909d0faed 100644 (file)
@@ -23,4 +23,5 @@ gDb = None
 gIdentifierTableList = []\r
 gCFileList = []\r
 gHFileList = []\r
+gUFileList = []\r
 gException = None
\ No newline at end of file
index 4039f57bc6485f81b5e45302f7e58a49da515873..3895193d8cc2e89b5589b0f8e4c3bef018f7a74c 100644 (file)
@@ -20,6 +20,7 @@ ERROR_GENERAL_CHECK_NO_PROGMA = 1005
 ERROR_GENERAL_CHECK_CARRIAGE_RETURN = 1006\r
 ERROR_GENERAL_CHECK_FILE_EXISTENCE = 1007\r
 ERROR_GENERAL_CHECK_NON_ACSII = 1008\r
+ERROR_GENERAL_CHECK_UNI = 1009\r
 \r
 ERROR_SPACE_CHECK_ALL = 2000\r
 \r
@@ -95,6 +96,10 @@ ERROR_META_DATA_FILE_CHECK_MODULE_FILE_NO_USE = 10014
 ERROR_META_DATA_FILE_CHECK_PCD_TYPE = 10015\r
 ERROR_META_DATA_FILE_CHECK_MODULE_FILE_GUID_DUPLICATION = 10016\r
 ERROR_META_DATA_FILE_CHECK_LIBRARY_NAME_DUPLICATE = 10017\r
+ERROR_META_DATA_FILE_CHECK_FORMAT_GUID = 10018\r
+ERROR_META_DATA_FILE_CHECK_FORMAT_PROTOCOL = 10019\r
+ERROR_META_DATA_FILE_CHECK_FORMAT_PPI = 10020\r
+ERROR_META_DATA_FILE_CHECK_FORMAT_PCD = 10021\r
 \r
 ERROR_SPELLING_CHECK_ALL = 11000\r
 \r
@@ -108,6 +113,7 @@ gEccErrorMessage = {
     ERROR_GENERAL_CHECK_CARRIAGE_RETURN : "There should be a carriage return at the end of the file",\r
     ERROR_GENERAL_CHECK_FILE_EXISTENCE : "File not found",\r
     ERROR_GENERAL_CHECK_NON_ACSII : "File has invalid Non-ACSII char",\r
+    ERROR_GENERAL_CHECK_UNI : "File is not a valid UTF-16 UNI file",\r
 \r
     ERROR_SPACE_CHECK_ALL : "",\r
 \r
@@ -183,6 +189,10 @@ gEccErrorMessage = {
     ERROR_META_DATA_FILE_CHECK_MODULE_FILE_NO_USE : "No used module files found",\r
     ERROR_META_DATA_FILE_CHECK_PCD_TYPE : "Wrong C code function used for this kind of PCD",\r
     ERROR_META_DATA_FILE_CHECK_MODULE_FILE_GUID_DUPLICATION : "Module file has FILE_GUID collision with other module file",\r
+    ERROR_META_DATA_FILE_CHECK_FORMAT_GUID : "Wrong GUID Format used in Module file",\r
+    ERROR_META_DATA_FILE_CHECK_FORMAT_PROTOCOL : "Wrong Protocol Format used in Module file",\r
+    ERROR_META_DATA_FILE_CHECK_FORMAT_PPI : "Wrong Ppi Format used in Module file",\r
+    ERROR_META_DATA_FILE_CHECK_FORMAT_PCD : "Wrong Pcd Format used in Module file",\r
     ERROR_SPELLING_CHECK_ALL : "",\r
     }\r
 \r
index 98b16a0e5c4446ac694aa314d13b39558fb7eb62..d80a5cff5d680fb0dae3dc89fb2ca2d66163c37e 100644 (file)
@@ -184,19 +184,26 @@ def ParseHeaderCommentSection(CommentList, FileName = None):
                     continue\r
                 License += Comment + EndOfLine\r
     \r
-    if not Copyright:\r
+    if not Copyright.strip():\r
         SqlStatement = """ select ID from File where FullPath like '%s'""" % FileName\r
         ResultSet = EccGlobalData.gDb.TblFile.Exec(SqlStatement)\r
         for Result in ResultSet:\r
             Msg = 'Header comment section must have copyright information'\r
             EccGlobalData.gDb.TblReport.Insert(ERROR_DOXYGEN_CHECK_FILE_HEADER, Msg, "File", Result[0])\r
 \r
-    if not License:\r
+    if not License.strip():\r
         SqlStatement = """ select ID from File where FullPath like '%s'""" % FileName\r
         ResultSet = EccGlobalData.gDb.TblFile.Exec(SqlStatement)\r
         for Result in ResultSet:\r
             Msg = 'Header comment section must have license information'\r
             EccGlobalData.gDb.TblReport.Insert(ERROR_DOXYGEN_CHECK_FILE_HEADER, Msg, "File", Result[0])\r
+                       \r
+    if not Abstract.strip() or Abstract.find('Component description file') > -1:\r
+        SqlStatement = """ select ID from File where FullPath like '%s'""" % FileName\r
+        ResultSet = EccGlobalData.gDb.TblFile.Exec(SqlStatement)\r
+        for Result in ResultSet:\r
+            Msg = 'Header comment section must have Abstract information.'\r
+            EccGlobalData.gDb.TblReport.Insert(ERROR_DOXYGEN_CHECK_FILE_HEADER, Msg, "File", Result[0])\r
                      \r
     return Abstract.strip(), Description.strip(), Copyright.strip(), License.strip()\r
 \r
index 0d53f05d8bc11a1d9fd9806cadcb1dd8f3b37600..a27e98c9752f75e7b9bb9abfd6f780f0540d7c3e 100644 (file)
@@ -98,7 +98,7 @@ class Table(object):
         SqlCommand = """drop table IF EXISTS %s""" % self.Table\r
         try:\r
             self.Cur.execute(SqlCommand)\r
-        except sqlite3.Error, e:\r
+        except Exception, e:\r
             print "An error occurred when Drop a table:", e.args[0]\r
 \r
     ## Get count\r
index 949d067945554cfc60951533056428bf0c0a8235..1c3e968785adaf55b7352f90eff6a22216f49b10 100644 (file)
@@ -433,6 +433,7 @@ class InfParser(MetaFileParser):
     def Start(self):\r
         NmakeLine = ''\r
         Content = ''\r
+        Usage = ''\r
         try:\r
             Content = open(str(self.MetaFile), 'r').readlines()\r
         except:\r
@@ -451,8 +452,26 @@ class InfParser(MetaFileParser):
         IsFindBlockComment = False\r
 \r
         for Index in range(0, len(Content)):\r
+            if self._SectionType in [MODEL_EFI_GUID,\r
+                                     MODEL_EFI_PROTOCOL,\r
+                                     MODEL_EFI_PPI,\r
+                                     MODEL_PCD_FIXED_AT_BUILD,\r
+                                     MODEL_PCD_PATCHABLE_IN_MODULE,\r
+                                     MODEL_PCD_FEATURE_FLAG,\r
+                                     MODEL_PCD_DYNAMIC_EX,\r
+                                     MODEL_PCD_DYNAMIC]:\r
+                Line = Content[Index].strip()\r
+                if Line.startswith(TAB_COMMENT_SPLIT):\r
+                    continue\r
+                elif Line.find(TAB_COMMENT_SPLIT) > 0:\r
+                    Usage = Line[Line.find(TAB_COMMENT_SPLIT):]\r
+                    Line = Line[:Line.find(TAB_COMMENT_SPLIT)]\r
+                else:\r
+                    Usage = ''\r
+            else:\r
             # skip empty, commented, block commented lines\r
-            Line = CleanString(Content[Index], AllowCppStyleComment=True)\r
+                Line = CleanString(Content[Index], AllowCppStyleComment=True)\r
+                Usage = ''\r
             NextLine = ''\r
             if Index + 1 < len(Content):\r
                 NextLine = CleanString(Content[Index + 1])\r
@@ -539,7 +558,8 @@ class InfParser(MetaFileParser):
                             -1,\r
                             self._LineIndex+1,\r
                             -1,\r
-                            0\r
+                            0,\r
+                            Usage\r
                             )\r
         if IsFindBlockComment:\r
             EdkLogger.error("Parser", FORMAT_INVALID, "Open block comments (starting with /*) are expected to end with */", \r
index 89bc7f262f30ac347af6c4f6381b7b0275084864..54a3016948b1fbe762296b11901c99e3cdf6dd47 100644 (file)
@@ -51,6 +51,7 @@ class ModuleTable(MetaFileTable):
         Value1 TEXT NOT NULL,\r
         Value2 TEXT,\r
         Value3 TEXT,\r
+        Usage  TEXT,\r
         Scope1 TEXT,\r
         Scope2 TEXT,\r
         BelongsToItem REAL NOT NULL,\r
@@ -84,14 +85,15 @@ class ModuleTable(MetaFileTable):
     # @param Enabled:        If this item enabled\r
     #\r
     def Insert(self, Model, Value1, Value2, Value3, Scope1='COMMON', Scope2='COMMON',\r
-               BelongsToItem=-1, BelongsToFile = -1, StartLine=-1, StartColumn=-1, EndLine=-1, EndColumn=-1, Enabled=0):\r
-        (Value1, Value2, Value3, Scope1, Scope2) = ConvertToSqlString((Value1, Value2, Value3, Scope1, Scope2))\r
+               BelongsToItem=-1, BelongsToFile = -1, StartLine=-1, StartColumn=-1, EndLine=-1, EndColumn=-1, Enabled=0, Usage=''):\r
+        (Value1, Value2, Value3, Usage, Scope1, Scope2) = ConvertToSqlString((Value1, Value2, Value3, Usage, Scope1, Scope2))\r
         return Table.Insert(\r
                         self, \r
                         Model, \r
                         Value1, \r
                         Value2, \r
                         Value3, \r
+                        Usage,                         \r
                         Scope1, \r
                         Scope2,\r
                         BelongsToItem,\r
@@ -113,7 +115,7 @@ class ModuleTable(MetaFileTable):
     #\r
     def Query(self, Model, Arch=None, Platform=None):\r
         ConditionString = "Model=%s AND Enabled>=0" % Model\r
-        ValueString = "Value1,Value2,Value3,Scope1,Scope2,ID,StartLine"\r
+        ValueString = "Value1,Value2,Value3,Usage,Scope1,Scope2,ID,StartLine"\r
 \r
         if Arch != None and Arch != 'COMMON':\r
             ConditionString += " AND (Scope1='%s' OR Scope1='COMMON')" % Arch\r
index 436fe4b09b651270b82dea6ba2f20b7d2ebd3cc4..8e11082b83a2dd941486cb52f2a7109fd7f36cec 100644 (file)
@@ -70,6 +70,8 @@ GeneralCheckCarriageReturn = 1
 GeneralCheckFileExistence = 1\r
 # Check whether file has non ACSII char\r
 GeneralCheckNonAcsii = 1\r
+# Check whether UNI file is valid\r
+GeneralCheckUni = 1\r
 \r
 #\r
 # Space Checking\r
@@ -236,7 +238,7 @@ MetaDataFileCheckPcdDuplicate = 1
 # Check whether PCD settings in the FDF file can only be related to flash.\r
 MetaDataFileCheckPcdFlash = 1\r
 # Check whether PCDs used in INF files but not specified in DSC or FDF files\r
-MetaDataFileCheckPcdNoUse = 1\r
+MetaDataFileCheckPcdNoUse = 0\r
 # Check whether having duplicate guids defined for Guid/Protocol/Ppi\r
 MetaDataFileCheckGuidDuplicate = 1\r
 # Check whether all files under module directory are described in INF files\r