* [Patch] BaseTools: Support multiple .h file
@ 2018-01-29 6:09 BobCF
2018-01-31 12:19 ` Gao, Liming
0 siblings, 1 reply; 2+ messages in thread
From: BobCF @ 2018-01-29 6:09 UTC (permalink / raw)
To: edk2-devel; +Cc: Bob Feng, Liming Gao
for structure Pcd declaration in DEC file.
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 | 2 +-
BaseTools/Source/Python/Workspace/DecBuildData.py | 2 +-
BaseTools/Source/Python/Workspace/DscBuildData.py | 8 ++++----
BaseTools/Source/Python/Workspace/MetaFileParser.py | 4 +++-
4 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/BaseTools/Source/Python/Workspace/BuildClassObject.py b/BaseTools/Source/Python/Workspace/BuildClassObject.py
index 3afb27a9c0..0e1161c96f 100644
--- a/BaseTools/Source/Python/Workspace/BuildClassObject.py
+++ b/BaseTools/Source/Python/Workspace/BuildClassObject.py
@@ -113,11 +113,11 @@ class StructurePcd(PcdClassObject):
if SkuInfoList is None: SkuInfoList={}
if validateranges is None: validateranges=[]
if validlists is None: validlists=[]
if expressions is None : expressions=[]
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 f6b908dee6..2fd3820dcc 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 256fdd6875..0384b96997 100644
--- a/BaseTools/Source/Python/Workspace/DscBuildData.py
+++ b/BaseTools/Source/Python/Workspace/DscBuildData.py
@@ -1669,14 +1669,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 8f4b5e5cc1..4359ba4b33 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
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [Patch] BaseTools: Support multiple .h file
2018-01-29 6:09 [Patch] BaseTools: Support multiple .h file BobCF
@ 2018-01-31 12:19 ` Gao, Liming
0 siblings, 0 replies; 2+ messages in thread
From: Gao, Liming @ 2018-01-31 12:19 UTC (permalink / raw)
To: Feng, Bob C, edk2-devel@lists.01.org
Reviewed-by: Liming Gao <liming.gao@intel.com>
>-----Original Message-----
>From: Feng, Bob C
>Sent: Monday, January 29, 2018 2:10 PM
>To: edk2-devel@lists.01.org
>Cc: Feng, Bob C <bob.c.feng@intel.com>; Gao, Liming <liming.gao@intel.com>
>Subject: [Patch] BaseTools: Support multiple .h file
>
>for structure Pcd declaration in DEC file.
>
>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 | 2 +-
> BaseTools/Source/Python/Workspace/DecBuildData.py | 2 +-
> BaseTools/Source/Python/Workspace/DscBuildData.py | 8 ++++----
> BaseTools/Source/Python/Workspace/MetaFileParser.py | 4 +++-
> 4 files changed, 9 insertions(+), 7 deletions(-)
>
>diff --git a/BaseTools/Source/Python/Workspace/BuildClassObject.py
>b/BaseTools/Source/Python/Workspace/BuildClassObject.py
>index 3afb27a9c0..0e1161c96f 100644
>--- a/BaseTools/Source/Python/Workspace/BuildClassObject.py
>+++ b/BaseTools/Source/Python/Workspace/BuildClassObject.py
>@@ -113,11 +113,11 @@ class StructurePcd(PcdClassObject):
> if SkuInfoList is None: SkuInfoList={}
> if validateranges is None: validateranges=[]
> if validlists is None: validlists=[]
> if expressions is None : expressions=[]
> 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 f6b908dee6..2fd3820dcc 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 256fdd6875..0384b96997 100644
>--- a/BaseTools/Source/Python/Workspace/DscBuildData.py
>+++ b/BaseTools/Source/Python/Workspace/DscBuildData.py
>@@ -1669,14 +1669,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 8f4b5e5cc1..4359ba4b33 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
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2018-01-31 12:13 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-01-29 6:09 [Patch] BaseTools: Support multiple .h file BobCF
2018-01-31 12:19 ` Gao, Liming
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox