BaseTools: Add a checking for Sources section in INF file

BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1804

Add a check to see if [Sources] section lists all the header type
files of a module. Performance impact should be minimal with this patch
since information is already being fetched for Makefile purposes. All
other information is already cached in memory. No extra IO time is needed.

Signed-off-by: Christian Rodriguez <christian.rodriguez@intel.com>
Cc: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Reviewed-by: Bob Feng <bob.c.feng@intel.com>
This commit is contained in:
Rodriguez, Christian 2019-05-30 00:26:48 +08:00 committed by Feng, Bob C
parent 04797875d1
commit 1fa6699e6c
1 changed files with 38 additions and 0 deletions

View File

@ -905,6 +905,44 @@ cleanlib:
ForceIncludedFile,
self._AutoGenObject.IncludePathList + self._AutoGenObject.BuildOptionIncPathList
)
# Check if header files are listed in metafile
# Get a list of unique module header source files from MetaFile
headerFilesInMetaFileSet = set()
for aFile in self._AutoGenObject.SourceFileList:
aFileName = str(aFile)
if not aFileName.endswith('.h'):
continue
headerFilesInMetaFileSet.add(aFileName.lower())
# Get a list of unique module autogen files
localAutoGenFileSet = set()
for aFile in self._AutoGenObject.AutoGenFileList:
localAutoGenFileSet.add(str(aFile).lower())
# Get a list of unique module dependency header files
# Exclude autogen files and files not in the source directory
headerFileDependencySet = set()
localSourceDir = str(self._AutoGenObject.SourceDir).lower()
for Dependency in FileDependencyDict.values():
for aFile in Dependency:
aFileName = str(aFile).lower()
if not aFileName.endswith('.h'):
continue
if aFileName in localAutoGenFileSet:
continue
if localSourceDir not in aFileName:
continue
headerFileDependencySet.add(aFileName)
# Check if a module dependency header file is missing from the module's MetaFile
for aFile in headerFileDependencySet:
if aFile in headerFilesInMetaFileSet:
continue
EdkLogger.warn("build","Module MetaFile [Sources] is missing local header!",
ExtraData = "Local Header: " + aFile + " not found in " + self._AutoGenObject.MetaFile.Path
)
DepSet = None
for File,Dependency in FileDependencyDict.items():
if not Dependency: