This patch is going to:

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
This commit is contained in:
Hess Chen
2014-08-25 01:16:34 +00:00
committed by hchen30
parent f056e4c180
commit b3d07ff8d2
10 changed files with 228 additions and 12 deletions

View File

@ -13,11 +13,12 @@
import Common.LongFilePathOs as os import Common.LongFilePathOs as os
import re import re
from CommonDataClass.DataClass import * from CommonDataClass.DataClass import *
from Common.DataType import SUP_MODULE_LIST_STRING, TAB_VALUE_SPLIT import Common.DataType as DT
from EccToolError import * from EccToolError import *
from MetaDataParser import ParseHeaderCommentSection from MetaDataParser import ParseHeaderCommentSection
import EccGlobalData import EccGlobalData
import c import c
from Common.LongFilePathSupport import OpenLongFilePath as open
## Check ## Check
# #
@ -40,9 +41,23 @@ class Check(object):
self.FunctionLayoutCheck() self.FunctionLayoutCheck()
self.NamingConventionCheck() self.NamingConventionCheck()
# Check UNI files
def UniCheck(self):
if EccGlobalData.gConfig.GeneralCheckUni == '1' or EccGlobalData.gConfig.GeneralCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1':
EdkLogger.quiet("Checking whether UNI file is UTF-16 ...")
SqlCommand = """select ID, FullPath, ExtName from File where ExtName like 'uni'"""
RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand)
for Record in RecordSet:
File = Record[1]
FileIn = open(File, 'rb').read(2)
if FileIn != '\xff\xfe':
OtherMsg = "File %s is not a valid UTF-16 UNI file" % Record[1]
EccGlobalData.gDb.TblReport.Insert(ERROR_GENERAL_CHECK_UNI, OtherMsg=OtherMsg, BelongsToTable='File', BelongsToItem=Record[0])
# General Checking # General Checking
def GeneralCheck(self): def GeneralCheck(self):
self.GeneralCheckNonAcsii() self.GeneralCheckNonAcsii()
self.UniCheck()
# Check whether file has non ACSII char # Check whether file has non ACSII char
def GeneralCheckNonAcsii(self): def GeneralCheckNonAcsii(self):
@ -554,6 +569,10 @@ class Check(object):
self.MetaDataFileCheckModuleFileNoUse() self.MetaDataFileCheckModuleFileNoUse()
self.MetaDataFileCheckPcdType() self.MetaDataFileCheckPcdType()
self.MetaDataFileCheckModuleFileGuidDuplication() self.MetaDataFileCheckModuleFileGuidDuplication()
self.MetaDataFileCheckModuleFileGuidFormat()
self.MetaDataFileCheckModuleFileProtocolFormat()
self.MetaDataFileCheckModuleFilePpiFormat()
self.MetaDataFileCheckModuleFilePcdFormat()
# Check whether each file defined in meta-data exists # Check whether each file defined in meta-data exists
def MetaDataFileCheckPathName(self): def MetaDataFileCheckPathName(self):
@ -583,7 +602,7 @@ class Check(object):
List = Record[1].split('|', 1) List = Record[1].split('|', 1)
SupModType = [] SupModType = []
if len(List) == 1: if len(List) == 1:
SupModType = SUP_MODULE_LIST_STRING.split(TAB_VALUE_SPLIT) SupModType = DT.SUP_MODULE_LIST_STRING.split(DT.TAB_VALUE_SPLIT)
elif len(List) == 2: elif len(List) == 2:
SupModType = List[1].split() SupModType = List[1].split()
@ -821,7 +840,7 @@ class Check(object):
RecordSet = EccGlobalData.gDb.TblInf.Exec(SqlCommand) RecordSet = EccGlobalData.gDb.TblInf.Exec(SqlCommand)
for Record in RecordSet: for Record in RecordSet:
Path = Record[1] Path = Record[1]
Path = Path.upper().replace('\X64', '').replace('\IA32', '').replace('\EBC', '').replace('\IPF', '').replace('\ARM', '').replace('\AARCH64', '') Path = Path.upper().replace('\X64', '').replace('\IA32', '').replace('\EBC', '').replace('\IPF', '').replace('\ARM', '')
if Path in InfPathList: if Path in InfPathList:
if not EccGlobalData.gException.IsException(ERROR_META_DATA_FILE_CHECK_MODULE_FILE_NO_USE, Record[2]): if not EccGlobalData.gException.IsException(ERROR_META_DATA_FILE_CHECK_MODULE_FILE_NO_USE, Record[2]):
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]) 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])
@ -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]) EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_MODULE_FILE_GUID_DUPLICATION, OtherMsg=Msg, BelongsToTable=Table.Table, BelongsToItem=Record[0])
# Check Guid Format in module INF
def MetaDataFileCheckModuleFileGuidFormat(self):
if EccGlobalData.gConfig.MetaDataFileCheckModuleFileGuidFormat or EccGlobalData.gConfig.MetaDataFileCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1':
EdkLogger.quiet("Check Guid Format in module INF ...")
Table = EccGlobalData.gDb.TblInf
SqlCommand = """
select ID, Value1, Usage, BelongsToFile from %s where Model = %s group by ID
""" % (Table.Table, MODEL_EFI_GUID)
RecordSet = Table.Exec(SqlCommand)
for Record in RecordSet:
Value1 = Record[1]
Value2 = Record[2]
GuidCommentList = []
InfPath = self.GetInfFilePathFromID(Record[3])
Msg = "The GUID format of %s in INF file [%s] does not follow rules" % (Value1, InfPath)
if Value2.startswith(DT.TAB_SPECIAL_COMMENT):
GuidCommentList = Value2[2:].split(DT.TAB_SPECIAL_COMMENT)
if GuidCommentList[0].strip().startswith(DT.TAB_INF_USAGE_UNDEFINED):
continue
elif len(GuidCommentList) > 1:
if not GuidCommentList[0].strip().startswith((DT.TAB_INF_USAGE_PRO,
DT.TAB_INF_USAGE_SOME_PRO,
DT.TAB_INF_USAGE_CON,
DT.TAB_INF_USAGE_SOME_CON)):
EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_FORMAT_GUID, OtherMsg=Msg, BelongsToTable=Table.Table, BelongsToItem=Record[0])
if not (GuidCommentList[1].strip()).startswith(DT.TAB_INF_GUIDTYPE_VAR) and \
not GuidCommentList[1].strip().startswith((DT.TAB_INF_GUIDTYPE_EVENT,
DT.TAB_INF_GUIDTYPE_HII,
DT.TAB_INF_GUIDTYPE_FILE,
DT.TAB_INF_GUIDTYPE_HOB,
DT.TAB_INF_GUIDTYPE_FV,
DT.TAB_INF_GUIDTYPE_ST,
DT.TAB_INF_GUIDTYPE_TSG,
DT.TAB_INF_GUIDTYPE_GUID,
DT.TAB_INF_GUIDTYPE_PROTOCOL,
DT.TAB_INF_GUIDTYPE_PPI,
DT.TAB_INF_USAGE_UNDEFINED)):
EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_FORMAT_GUID, OtherMsg=Msg, BelongsToTable=Table.Table, BelongsToItem=Record[0])
else:
EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_FORMAT_GUID, OtherMsg=Msg, BelongsToTable=Table.Table, BelongsToItem=Record[0])
else:
EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_FORMAT_GUID, OtherMsg=Msg, BelongsToTable=Table.Table, BelongsToItem=Record[0])
# Check Protocol Format in module INF
def MetaDataFileCheckModuleFileProtocolFormat(self):
if EccGlobalData.gConfig.MetaDataFileCheckModuleFileProtocolFormat or EccGlobalData.gConfig.MetaDataFileCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1':
EdkLogger.quiet("Check Protocol Format in module INF ...")
Table = EccGlobalData.gDb.TblInf
SqlCommand = """
select ID, Value1, Usage, BelongsToFile from %s where Model = %s group by ID
""" % (Table.Table, MODEL_EFI_PROTOCOL)
RecordSet = Table.Exec(SqlCommand)
for Record in RecordSet:
Value1 = Record[1]
Value2 = Record[2]
GuidCommentList = []
InfPath = self.GetInfFilePathFromID(Record[3])
Msg = "The Protocol format of %s in INF file [%s] does not follow rules" % (Value1, InfPath)
if Value2.startswith(DT.TAB_SPECIAL_COMMENT):
GuidCommentList = Value2[2:].split(DT.TAB_SPECIAL_COMMENT)
if len(GuidCommentList) >= 1:
if not GuidCommentList[0].strip().startswith((DT.TAB_INF_USAGE_PRO,
DT.TAB_INF_USAGE_SOME_PRO,
DT.TAB_INF_USAGE_CON,
DT.TAB_INF_USAGE_SOME_CON,
DT.TAB_INF_USAGE_NOTIFY,
DT.TAB_INF_USAGE_TO_START,
DT.TAB_INF_USAGE_BY_START,
DT.TAB_INF_USAGE_UNDEFINED)):
EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_FORMAT_PROTOCOL, OtherMsg=Msg, BelongsToTable=Table.Table, BelongsToItem=Record[0])
else:
EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_FORMAT_PROTOCOL, OtherMsg=Msg, BelongsToTable=Table.Table, BelongsToItem=Record[0])
# Check Ppi Format in module INF
def MetaDataFileCheckModuleFilePpiFormat(self):
if EccGlobalData.gConfig.MetaDataFileCheckModuleFilePpiFormat or EccGlobalData.gConfig.MetaDataFileCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1':
EdkLogger.quiet("Check Ppi Format in module INF ...")
Table = EccGlobalData.gDb.TblInf
SqlCommand = """
select ID, Value1, Usage, BelongsToFile from %s where Model = %s group by ID
""" % (Table.Table, MODEL_EFI_PPI)
RecordSet = Table.Exec(SqlCommand)
for Record in RecordSet:
Value1 = Record[1]
Value2 = Record[2]
GuidCommentList = []
InfPath = self.GetInfFilePathFromID(Record[3])
Msg = "The Ppi format of %s in INF file [%s] does not follow rules" % (Value1, InfPath)
if Value2.startswith(DT.TAB_SPECIAL_COMMENT):
GuidCommentList = Value2[2:].split(DT.TAB_SPECIAL_COMMENT)
if len(GuidCommentList) >= 1:
if not GuidCommentList[0].strip().startswith((DT.TAB_INF_USAGE_PRO,
DT.TAB_INF_USAGE_SOME_PRO,
DT.TAB_INF_USAGE_CON,
DT.TAB_INF_USAGE_SOME_CON,
DT.TAB_INF_USAGE_NOTIFY,
DT.TAB_INF_USAGE_UNDEFINED)):
EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_FORMAT_PPI, OtherMsg=Msg, BelongsToTable=Table.Table, BelongsToItem=Record[0])
else:
EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_FORMAT_PPI, OtherMsg=Msg, BelongsToTable=Table.Table, BelongsToItem=Record[0])
# Check Pcd Format in module INF
def MetaDataFileCheckModuleFilePcdFormat(self):
if EccGlobalData.gConfig.MetaDataFileCheckModuleFilePcdFormat or EccGlobalData.gConfig.MetaDataFileCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1':
EdkLogger.quiet("Check Pcd Format in module INF ...")
Table = EccGlobalData.gDb.TblInf
SqlCommand = """
select ID, Model, Value1, Value2, Usage, BelongsToFile from %s where Model >= %s and Model < %s group by ID
""" % (Table.Table, MODEL_PCD, MODEL_META_DATA_HEADER)
RecordSet = Table.Exec(SqlCommand)
for Record in RecordSet:
Model = Record[1]
PcdName = Record[2] + '.' + Record[3]
Usage = Record[4]
PcdCommentList = []
InfPath = self.GetInfFilePathFromID(Record[5])
Msg = "The Pcd format of %s in INF file [%s] does not follow rules" % (PcdName, InfPath)
if Usage.startswith(DT.TAB_SPECIAL_COMMENT):
PcdCommentList = Usage[2:].split(DT.TAB_SPECIAL_COMMENT)
if len(PcdCommentList) >= 1:
if Model in [MODEL_PCD_FIXED_AT_BUILD, MODEL_PCD_FEATURE_FLAG] \
and not PcdCommentList[0].strip().startswith((DT.TAB_INF_USAGE_SOME_PRO,
DT.TAB_INF_USAGE_CON,
DT.TAB_INF_USAGE_UNDEFINED)):
EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_FORMAT_PCD, OtherMsg=Msg, BelongsToTable=Table.Table, BelongsToItem=Record[0])
if Model in [MODEL_PCD_PATCHABLE_IN_MODULE, MODEL_PCD_DYNAMIC, MODEL_PCD_DYNAMIC_EX] \
and not PcdCommentList[0].strip().startswith((DT.TAB_INF_USAGE_PRO,
DT.TAB_INF_USAGE_SOME_PRO,
DT.TAB_INF_USAGE_CON,
DT.TAB_INF_USAGE_SOME_CON,
DT.TAB_INF_USAGE_UNDEFINED)):
EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_FORMAT_PCD, OtherMsg=Msg, BelongsToTable=Table.Table, BelongsToItem=Record[0])
else:
EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_FORMAT_PCD, OtherMsg=Msg, BelongsToTable=Table.Table, BelongsToItem=Record[0])
# Check whether these is duplicate Guid/Ppi/Protocol name # Check whether these is duplicate Guid/Ppi/Protocol name
def CheckGuidProtocolPpi(self, ErrorID, Model, Table): def CheckGuidProtocolPpi(self, ErrorID, Model, Table):
Name = '' Name = ''

View File

@ -80,6 +80,8 @@ class Configuration(object):
self.GeneralCheckFileExistence = 1 self.GeneralCheckFileExistence = 1
# Check whether file has non ACSII char # Check whether file has non ACSII char
self.GeneralCheckNonAcsii = 1 self.GeneralCheckNonAcsii = 1
# Check whether UNI file is valid
self.GeneralCheckUni = 1
## Space Checking ## Space Checking
self.SpaceCheckAll = 1 self.SpaceCheckAll = 1
@ -236,6 +238,15 @@ class Configuration(object):
# Check whether there are FILE_GUID duplication among different INF files # Check whether there are FILE_GUID duplication among different INF files
self.MetaDataFileCheckModuleFileGuidDuplication = 1 self.MetaDataFileCheckModuleFileGuidDuplication = 1
# Check Guid Format in INF files
self.MetaDataFileCheckModuleFileGuidFormat = 1
# Check Protocol Format in INF files
self.MetaDataFileCheckModuleFileProtocolFormat = 1
# Check Ppi Format in INF files
self.MetaDataFileCheckModuleFilePpiFormat = 1
# Check Pcd Format in INF files
self.MetaDataFileCheckModuleFilePcdFormat = 1
# #
# The check points in this section are reserved # The check points in this section are reserved
# #

View File

@ -180,6 +180,7 @@ class Ecc(object):
EccGlobalData.gIdentifierTableList = GetTableList((MODEL_FILE_C, MODEL_FILE_H), 'Identifier', EccGlobalData.gDb) EccGlobalData.gIdentifierTableList = GetTableList((MODEL_FILE_C, MODEL_FILE_H), 'Identifier', EccGlobalData.gDb)
EccGlobalData.gCFileList = GetFileList(MODEL_FILE_C, EccGlobalData.gDb) EccGlobalData.gCFileList = GetFileList(MODEL_FILE_C, EccGlobalData.gDb)
EccGlobalData.gHFileList = GetFileList(MODEL_FILE_H, EccGlobalData.gDb) EccGlobalData.gHFileList = GetFileList(MODEL_FILE_H, EccGlobalData.gDb)
EccGlobalData.gUFileList = GetFileList(MODEL_FILE_UNI, EccGlobalData.gDb)
## BuildMetaDataFileDatabase ## BuildMetaDataFileDatabase
# #
@ -246,6 +247,13 @@ class Ecc(object):
Op.write("%s\r" % Filename) Op.write("%s\r" % Filename)
Fdf(Filename, True, EccGlobalData.gWorkspace, EccGlobalData.gDb) Fdf(Filename, True, EccGlobalData.gWorkspace, EccGlobalData.gDb)
continue continue
if len(File) > 4 and File[-4:].upper() == ".UNI":
Filename = os.path.normpath(os.path.join(Root, File))
EdkLogger.quiet("Parsing %s" % Filename)
Op.write("%s\r" % Filename)
EccGlobalData.gDb.TblFile.InsertFile(Filename, MODEL_FILE_UNI)
continue
Op.close() Op.close()
# Commit to database # Commit to database

View File

@ -23,4 +23,5 @@ gDb = None
gIdentifierTableList = [] gIdentifierTableList = []
gCFileList = [] gCFileList = []
gHFileList = [] gHFileList = []
gUFileList = []
gException = None gException = None

View File

@ -20,6 +20,7 @@ ERROR_GENERAL_CHECK_NO_PROGMA = 1005
ERROR_GENERAL_CHECK_CARRIAGE_RETURN = 1006 ERROR_GENERAL_CHECK_CARRIAGE_RETURN = 1006
ERROR_GENERAL_CHECK_FILE_EXISTENCE = 1007 ERROR_GENERAL_CHECK_FILE_EXISTENCE = 1007
ERROR_GENERAL_CHECK_NON_ACSII = 1008 ERROR_GENERAL_CHECK_NON_ACSII = 1008
ERROR_GENERAL_CHECK_UNI = 1009
ERROR_SPACE_CHECK_ALL = 2000 ERROR_SPACE_CHECK_ALL = 2000
@ -95,6 +96,10 @@ ERROR_META_DATA_FILE_CHECK_MODULE_FILE_NO_USE = 10014
ERROR_META_DATA_FILE_CHECK_PCD_TYPE = 10015 ERROR_META_DATA_FILE_CHECK_PCD_TYPE = 10015
ERROR_META_DATA_FILE_CHECK_MODULE_FILE_GUID_DUPLICATION = 10016 ERROR_META_DATA_FILE_CHECK_MODULE_FILE_GUID_DUPLICATION = 10016
ERROR_META_DATA_FILE_CHECK_LIBRARY_NAME_DUPLICATE = 10017 ERROR_META_DATA_FILE_CHECK_LIBRARY_NAME_DUPLICATE = 10017
ERROR_META_DATA_FILE_CHECK_FORMAT_GUID = 10018
ERROR_META_DATA_FILE_CHECK_FORMAT_PROTOCOL = 10019
ERROR_META_DATA_FILE_CHECK_FORMAT_PPI = 10020
ERROR_META_DATA_FILE_CHECK_FORMAT_PCD = 10021
ERROR_SPELLING_CHECK_ALL = 11000 ERROR_SPELLING_CHECK_ALL = 11000
@ -108,6 +113,7 @@ gEccErrorMessage = {
ERROR_GENERAL_CHECK_CARRIAGE_RETURN : "There should be a carriage return at the end of the file", ERROR_GENERAL_CHECK_CARRIAGE_RETURN : "There should be a carriage return at the end of the file",
ERROR_GENERAL_CHECK_FILE_EXISTENCE : "File not found", ERROR_GENERAL_CHECK_FILE_EXISTENCE : "File not found",
ERROR_GENERAL_CHECK_NON_ACSII : "File has invalid Non-ACSII char", ERROR_GENERAL_CHECK_NON_ACSII : "File has invalid Non-ACSII char",
ERROR_GENERAL_CHECK_UNI : "File is not a valid UTF-16 UNI file",
ERROR_SPACE_CHECK_ALL : "", ERROR_SPACE_CHECK_ALL : "",
@ -183,6 +189,10 @@ gEccErrorMessage = {
ERROR_META_DATA_FILE_CHECK_MODULE_FILE_NO_USE : "No used module files found", ERROR_META_DATA_FILE_CHECK_MODULE_FILE_NO_USE : "No used module files found",
ERROR_META_DATA_FILE_CHECK_PCD_TYPE : "Wrong C code function used for this kind of PCD", ERROR_META_DATA_FILE_CHECK_PCD_TYPE : "Wrong C code function used for this kind of PCD",
ERROR_META_DATA_FILE_CHECK_MODULE_FILE_GUID_DUPLICATION : "Module file has FILE_GUID collision with other module file", ERROR_META_DATA_FILE_CHECK_MODULE_FILE_GUID_DUPLICATION : "Module file has FILE_GUID collision with other module file",
ERROR_META_DATA_FILE_CHECK_FORMAT_GUID : "Wrong GUID Format used in Module file",
ERROR_META_DATA_FILE_CHECK_FORMAT_PROTOCOL : "Wrong Protocol Format used in Module file",
ERROR_META_DATA_FILE_CHECK_FORMAT_PPI : "Wrong Ppi Format used in Module file",
ERROR_META_DATA_FILE_CHECK_FORMAT_PCD : "Wrong Pcd Format used in Module file",
ERROR_SPELLING_CHECK_ALL : "", ERROR_SPELLING_CHECK_ALL : "",
} }

View File

@ -184,19 +184,26 @@ def ParseHeaderCommentSection(CommentList, FileName = None):
continue continue
License += Comment + EndOfLine License += Comment + EndOfLine
if not Copyright: if not Copyright.strip():
SqlStatement = """ select ID from File where FullPath like '%s'""" % FileName SqlStatement = """ select ID from File where FullPath like '%s'""" % FileName
ResultSet = EccGlobalData.gDb.TblFile.Exec(SqlStatement) ResultSet = EccGlobalData.gDb.TblFile.Exec(SqlStatement)
for Result in ResultSet: for Result in ResultSet:
Msg = 'Header comment section must have copyright information' Msg = 'Header comment section must have copyright information'
EccGlobalData.gDb.TblReport.Insert(ERROR_DOXYGEN_CHECK_FILE_HEADER, Msg, "File", Result[0]) EccGlobalData.gDb.TblReport.Insert(ERROR_DOXYGEN_CHECK_FILE_HEADER, Msg, "File", Result[0])
if not License: if not License.strip():
SqlStatement = """ select ID from File where FullPath like '%s'""" % FileName SqlStatement = """ select ID from File where FullPath like '%s'""" % FileName
ResultSet = EccGlobalData.gDb.TblFile.Exec(SqlStatement) ResultSet = EccGlobalData.gDb.TblFile.Exec(SqlStatement)
for Result in ResultSet: for Result in ResultSet:
Msg = 'Header comment section must have license information' Msg = 'Header comment section must have license information'
EccGlobalData.gDb.TblReport.Insert(ERROR_DOXYGEN_CHECK_FILE_HEADER, Msg, "File", Result[0]) EccGlobalData.gDb.TblReport.Insert(ERROR_DOXYGEN_CHECK_FILE_HEADER, Msg, "File", Result[0])
if not Abstract.strip() or Abstract.find('Component description file') > -1:
SqlStatement = """ select ID from File where FullPath like '%s'""" % FileName
ResultSet = EccGlobalData.gDb.TblFile.Exec(SqlStatement)
for Result in ResultSet:
Msg = 'Header comment section must have Abstract information.'
EccGlobalData.gDb.TblReport.Insert(ERROR_DOXYGEN_CHECK_FILE_HEADER, Msg, "File", Result[0])
return Abstract.strip(), Description.strip(), Copyright.strip(), License.strip() return Abstract.strip(), Description.strip(), Copyright.strip(), License.strip()

View File

@ -98,7 +98,7 @@ class Table(object):
SqlCommand = """drop table IF EXISTS %s""" % self.Table SqlCommand = """drop table IF EXISTS %s""" % self.Table
try: try:
self.Cur.execute(SqlCommand) self.Cur.execute(SqlCommand)
except sqlite3.Error, e: except Exception, e:
print "An error occurred when Drop a table:", e.args[0] print "An error occurred when Drop a table:", e.args[0]
## Get count ## Get count

View File

@ -433,6 +433,7 @@ class InfParser(MetaFileParser):
def Start(self): def Start(self):
NmakeLine = '' NmakeLine = ''
Content = '' Content = ''
Usage = ''
try: try:
Content = open(str(self.MetaFile), 'r').readlines() Content = open(str(self.MetaFile), 'r').readlines()
except: except:
@ -451,8 +452,26 @@ class InfParser(MetaFileParser):
IsFindBlockComment = False IsFindBlockComment = False
for Index in range(0, len(Content)): for Index in range(0, len(Content)):
if self._SectionType in [MODEL_EFI_GUID,
MODEL_EFI_PROTOCOL,
MODEL_EFI_PPI,
MODEL_PCD_FIXED_AT_BUILD,
MODEL_PCD_PATCHABLE_IN_MODULE,
MODEL_PCD_FEATURE_FLAG,
MODEL_PCD_DYNAMIC_EX,
MODEL_PCD_DYNAMIC]:
Line = Content[Index].strip()
if Line.startswith(TAB_COMMENT_SPLIT):
continue
elif Line.find(TAB_COMMENT_SPLIT) > 0:
Usage = Line[Line.find(TAB_COMMENT_SPLIT):]
Line = Line[:Line.find(TAB_COMMENT_SPLIT)]
else:
Usage = ''
else:
# skip empty, commented, block commented lines # skip empty, commented, block commented lines
Line = CleanString(Content[Index], AllowCppStyleComment=True) Line = CleanString(Content[Index], AllowCppStyleComment=True)
Usage = ''
NextLine = '' NextLine = ''
if Index + 1 < len(Content): if Index + 1 < len(Content):
NextLine = CleanString(Content[Index + 1]) NextLine = CleanString(Content[Index + 1])
@ -539,7 +558,8 @@ class InfParser(MetaFileParser):
-1, -1,
self._LineIndex+1, self._LineIndex+1,
-1, -1,
0 0,
Usage
) )
if IsFindBlockComment: if IsFindBlockComment:
EdkLogger.error("Parser", FORMAT_INVALID, "Open block comments (starting with /*) are expected to end with */", EdkLogger.error("Parser", FORMAT_INVALID, "Open block comments (starting with /*) are expected to end with */",

View File

@ -51,6 +51,7 @@ class ModuleTable(MetaFileTable):
Value1 TEXT NOT NULL, Value1 TEXT NOT NULL,
Value2 TEXT, Value2 TEXT,
Value3 TEXT, Value3 TEXT,
Usage TEXT,
Scope1 TEXT, Scope1 TEXT,
Scope2 TEXT, Scope2 TEXT,
BelongsToItem REAL NOT NULL, BelongsToItem REAL NOT NULL,
@ -84,14 +85,15 @@ class ModuleTable(MetaFileTable):
# @param Enabled: If this item enabled # @param Enabled: If this item enabled
# #
def Insert(self, Model, Value1, Value2, Value3, Scope1='COMMON', Scope2='COMMON', def Insert(self, Model, Value1, Value2, Value3, Scope1='COMMON', Scope2='COMMON',
BelongsToItem=-1, BelongsToFile = -1, StartLine=-1, StartColumn=-1, EndLine=-1, EndColumn=-1, Enabled=0): BelongsToItem=-1, BelongsToFile = -1, StartLine=-1, StartColumn=-1, EndLine=-1, EndColumn=-1, Enabled=0, Usage=''):
(Value1, Value2, Value3, Scope1, Scope2) = ConvertToSqlString((Value1, Value2, Value3, Scope1, Scope2)) (Value1, Value2, Value3, Usage, Scope1, Scope2) = ConvertToSqlString((Value1, Value2, Value3, Usage, Scope1, Scope2))
return Table.Insert( return Table.Insert(
self, self,
Model, Model,
Value1, Value1,
Value2, Value2,
Value3, Value3,
Usage,
Scope1, Scope1,
Scope2, Scope2,
BelongsToItem, BelongsToItem,
@ -113,7 +115,7 @@ class ModuleTable(MetaFileTable):
# #
def Query(self, Model, Arch=None, Platform=None): def Query(self, Model, Arch=None, Platform=None):
ConditionString = "Model=%s AND Enabled>=0" % Model ConditionString = "Model=%s AND Enabled>=0" % Model
ValueString = "Value1,Value2,Value3,Scope1,Scope2,ID,StartLine" ValueString = "Value1,Value2,Value3,Usage,Scope1,Scope2,ID,StartLine"
if Arch != None and Arch != 'COMMON': if Arch != None and Arch != 'COMMON':
ConditionString += " AND (Scope1='%s' OR Scope1='COMMON')" % Arch ConditionString += " AND (Scope1='%s' OR Scope1='COMMON')" % Arch

View File

@ -70,6 +70,8 @@ GeneralCheckCarriageReturn = 1
GeneralCheckFileExistence = 1 GeneralCheckFileExistence = 1
# Check whether file has non ACSII char # Check whether file has non ACSII char
GeneralCheckNonAcsii = 1 GeneralCheckNonAcsii = 1
# Check whether UNI file is valid
GeneralCheckUni = 1
# #
# Space Checking # Space Checking
@ -236,7 +238,7 @@ MetaDataFileCheckPcdDuplicate = 1
# Check whether PCD settings in the FDF file can only be related to flash. # Check whether PCD settings in the FDF file can only be related to flash.
MetaDataFileCheckPcdFlash = 1 MetaDataFileCheckPcdFlash = 1
# Check whether PCDs used in INF files but not specified in DSC or FDF files # Check whether PCDs used in INF files but not specified in DSC or FDF files
MetaDataFileCheckPcdNoUse = 1 MetaDataFileCheckPcdNoUse = 0
# Check whether having duplicate guids defined for Guid/Protocol/Ppi # Check whether having duplicate guids defined for Guid/Protocol/Ppi
MetaDataFileCheckGuidDuplicate = 1 MetaDataFileCheckGuidDuplicate = 1
# Check whether all files under module directory are described in INF files # Check whether all files under module directory are described in INF files