[edk2] [Patch] BaseTools: Support multiple .h file for structure Pcd declaration in DEC file.

BobCF posted 1 patch 6 years, 11 months ago
Failed in applying to current master (apply log)
BaseTools/Source/Python/Workspace/BuildClassObject.py | 4 ++--
BaseTools/Source/Python/Workspace/DecBuildData.py     | 2 +-
BaseTools/Source/Python/Workspace/DscBuildData.py     | 8 ++++----
BaseTools/Source/Python/Workspace/MetaFileParser.py   | 4 +++-
4 files changed, 10 insertions(+), 8 deletions(-)
[edk2] [Patch] BaseTools: Support multiple .h file for structure Pcd declaration in DEC file.
Posted by BobCF 6 years, 11 months ago
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
---
 BaseTools/Source/Python/Workspace/BuildClassObject.py | 4 ++--
 BaseTools/Source/Python/Workspace/DecBuildData.py     | 2 +-
 BaseTools/Source/Python/Workspace/DscBuildData.py     | 8 ++++----
 BaseTools/Source/Python/Workspace/MetaFileParser.py   | 4 +++-
 4 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/BaseTools/Source/Python/Workspace/BuildClassObject.py b/BaseTools/Source/Python/Workspace/BuildClassObject.py
index e5f1f01556..0e3081cfc5 100644
--- a/BaseTools/Source/Python/Workspace/BuildClassObject.py
+++ b/BaseTools/Source/Python/Workspace/BuildClassObject.py
@@ -107,13 +107,13 @@ class PcdClassObject(object):
     #
     def __hash__(self):
         return hash((self.TokenCName, self.TokenSpaceGuidCName))
 
 class StructurePcd(PcdClassObject):
-    def __init__(self, StructuredPcdIncludeFile="", Packages=None, Name=None, Guid=None, Type=None, DatumType=None, Value=None, Token=None, MaxDatumSize=None, SkuInfoList={}, IsOverrided=False, GuidValue=None, validateranges=[], validlists=[], expressions=[],default_store = TAB_DEFAULT_STORES_DEFAULT):
+    def __init__(self, StructuredPcdIncludeFile=None, Packages=None, Name=None, Guid=None, Type=None, DatumType=None, Value=None, Token=None, MaxDatumSize=None, SkuInfoList={}, IsOverrided=False, GuidValue=None, validateranges=[], validlists=[], expressions=[],default_store = TAB_DEFAULT_STORES_DEFAULT):
         super(StructurePcd, self).__init__(Name, Guid, Type, DatumType, Value, Token, MaxDatumSize, SkuInfoList, IsOverrided, GuidValue, validateranges, validlists, expressions)
-        self.StructuredPcdIncludeFile = StructuredPcdIncludeFile
+        self.StructuredPcdIncludeFile = [] if StructuredPcdIncludeFile is None else StructuredPcdIncludeFile
         self.PackageDecs = Packages
         self.DefaultStoreName = [default_store]
         self.DefaultValues = collections.OrderedDict({})
         self.PcdMode = None
         self.SkuOverrideValues = collections.OrderedDict({})
diff --git a/BaseTools/Source/Python/Workspace/DecBuildData.py b/BaseTools/Source/Python/Workspace/DecBuildData.py
index 01f716bfab..13fb8686b6 100644
--- a/BaseTools/Source/Python/Workspace/DecBuildData.py
+++ b/BaseTools/Source/Python/Workspace/DecBuildData.py
@@ -374,11 +374,11 @@ class DecBuildData(PackageBuildClassObject):
         for pcdname in s_pcd_set:
             dep_pkgs = []
             struct_pcd = StructurePcd()
             for item,LineNo in s_pcd_set[pcdname]:
                 if "<HeaderFiles>" in item.TokenCName:
-                    struct_pcd.StructuredPcdIncludeFile = item.DefaultValue
+                    struct_pcd.StructuredPcdIncludeFile.append(item.DefaultValue)
                 elif "<Packages>" in item.TokenCName:
                     dep_pkgs.append(item.DefaultValue)
                 elif item.DatumType == item.TokenCName:
                     struct_pcd.copy(item)
                     struct_pcd.TokenValue = struct_pcd.TokenValue.strip("{").strip()
diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py b/BaseTools/Source/Python/Workspace/DscBuildData.py
index 4a87fd1762..b042c4306a 100644
--- a/BaseTools/Source/Python/Workspace/DscBuildData.py
+++ b/BaseTools/Source/Python/Workspace/DscBuildData.py
@@ -1455,14 +1455,14 @@ class DscBuildData(PlatformBuildClassObject):
         CApp = PcdMainCHeader
 
         Includes = {}
         for PcdName in StructuredPcds:
             Pcd = StructuredPcds[PcdName]
-            IncludeFile = Pcd.StructuredPcdIncludeFile
-            if IncludeFile not in Includes:
-                Includes[IncludeFile] = True
-                CApp = CApp + '#include <%s>\n' % (IncludeFile)
+            for IncludeFile in Pcd.StructuredPcdIncludeFile:
+                if IncludeFile not in Includes:
+                    Includes[IncludeFile] = True
+                    CApp = CApp + '#include <%s>\n' % (IncludeFile)
         CApp = CApp + '\n'
 
         for PcdName in StructuredPcds:
             Pcd = StructuredPcds[PcdName]
             if not Pcd.SkuOverrideValues:
diff --git a/BaseTools/Source/Python/Workspace/MetaFileParser.py b/BaseTools/Source/Python/Workspace/MetaFileParser.py
index b2b0e282eb..7469cd7ab7 100644
--- a/BaseTools/Source/Python/Workspace/MetaFileParser.py
+++ b/BaseTools/Source/Python/Workspace/MetaFileParser.py
@@ -1889,26 +1889,28 @@ class DecParser(MetaFileParser):
             self._ValueList[0] = self._CurrentStructurePcdName
 
             if "|" not in self._CurrentLine:
                 if "<HeaderFiles>" == self._CurrentLine:
                     self._include_flag = True
+                    self._package_flag = False
                     self._ValueList = None
                     return
                 if "<Packages>" == self._CurrentLine:
                     self._package_flag = True
                     self._ValueList = None
+                    self._include_flag = False
                     return
 
                 if self._include_flag:
                     self._ValueList[1] = "<HeaderFiles>_" + md5.new(self._CurrentLine).hexdigest()
                     self._ValueList[2] = self._CurrentLine
-                    self._include_flag = False
                 if self._package_flag and "}" != self._CurrentLine:
                     self._ValueList[1] = "<Packages>_" + md5.new(self._CurrentLine).hexdigest()
                     self._ValueList[2] = self._CurrentLine
                 if self._CurrentLine == "}":
                     self._package_flag = False
+                    self._include_flag = False
                     self._ValueList = None
                     return
             else:
                 PcdTockens = self._CurrentLine.split(TAB_VALUE_SPLIT)
                 PcdNames = PcdTockens[0].split(TAB_SPLIT)
-- 
2.14.3.windows.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel