self._AutoGenObject.IncludePathList + self._AutoGenObject.BuildOptionIncPathList\r
)\r
\r
+ # Get a set of unique package includes from MetaFile\r
+ parentMetaFileIncludes = set()\r
+ for aInclude in self._AutoGenObject.PackageIncludePathList:\r
+ aIncludeName = str(aInclude)\r
+ parentMetaFileIncludes.add(aIncludeName.lower())\r
+\r
# Check if header files are listed in metafile\r
- # Get a list of unique module header source files from MetaFile\r
+ # Get a set of unique module header source files from MetaFile\r
headerFilesInMetaFileSet = set()\r
for aFile in self._AutoGenObject.SourceFileList:\r
aFileName = str(aFile)\r
continue\r
headerFilesInMetaFileSet.add(aFileName.lower())\r
\r
- # Get a list of unique module autogen files\r
+ # Get a set of unique module autogen files\r
localAutoGenFileSet = set()\r
for aFile in self._AutoGenObject.AutoGenFileList:\r
localAutoGenFileSet.add(str(aFile).lower())\r
\r
- # Get a list of unique module dependency header files\r
+ # Get a set of unique module dependency header files\r
# Exclude autogen files and files not in the source directory\r
+ # and files that are under the package include list\r
headerFileDependencySet = set()\r
localSourceDir = str(self._AutoGenObject.SourceDir).lower()\r
for Dependency in FileDependencyDict.values():\r
for aFile in Dependency:\r
aFileName = str(aFile).lower()\r
+ # Exclude non-header files\r
if not aFileName.endswith('.h'):\r
continue\r
+ # Exclude autogen files\r
if aFileName in localAutoGenFileSet:\r
continue\r
+ # Exclude include out of local scope\r
if localSourceDir not in aFileName:\r
continue\r
+ # Exclude files covered by package includes\r
+ pathNeeded = True\r
+ for aIncludePath in parentMetaFileIncludes:\r
+ if aIncludePath in aFileName:\r
+ pathNeeded = False\r
+ break\r
+ if not pathNeeded:\r
+ continue\r
+ # Keep the file to be checked\r
headerFileDependencySet.add(aFileName)\r
\r
# Ensure that gModuleBuildTracking has been initialized per architecture\r
def IncludePathLength(self):\r
return sum(len(inc)+1 for inc in self.IncludePathList)\r
\r
+ ## Get the list of include paths from the packages\r
+ #\r
+ # @IncludesList list The list path\r
+ #\r
+ @cached_property\r
+ def PackageIncludePathList(self):\r
+ IncludesList = []\r
+ for Package in self.Module.Packages:\r
+ PackageDir = mws.join(self.WorkspaceDir, Package.MetaFile.Dir)\r
+ IncludesList = Package.Includes\r
+ if Package._PrivateIncludes:\r
+ if not self.MetaFile.Path.startswith(PackageDir):\r
+ IncludesList = list(set(Package.Includes).difference(set(Package._PrivateIncludes)))\r
+ return IncludesList\r
+\r
## Get HII EX PCDs which maybe used by VFR\r
#\r
# efivarstore used by VFR may relate with HII EX PCDs\r