Re: [edk2] [Patch] BaseTools: Correct Structure Pcd value in the report

2018-03-02 Thread Gao, Liming
Reviewed-by: Liming Gao 

> -Original Message-
> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of 
> Yonghong Zhu
> Sent: Friday, March 2, 2018 10:53 PM
> To: edk2-devel@lists.01.org
> Subject: [edk2] [Patch] BaseTools: Correct Structure Pcd value in the report
> 
> The patch "Fixed build failed issue" changed structure Pcd Object, so
> we need update build report to correct structure Pcd Value.
> 
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Yonghong Zhu 
> ---
>  BaseTools/Source/Python/build/BuildReport.py | 72 
> 
>  1 file changed, 63 insertions(+), 9 deletions(-)
> 
> diff --git a/BaseTools/Source/Python/build/BuildReport.py 
> b/BaseTools/Source/Python/build/BuildReport.py
> index b2cc6ee..f4d2c75 100644
> --- a/BaseTools/Source/Python/build/BuildReport.py
> +++ b/BaseTools/Source/Python/build/BuildReport.py
> @@ -956,11 +956,11 @@ class PcdReport(object):
>  DscDefaultValBak = DscDefaultValue
>  DscDefaultValue = self.FdfPcdSet.get((Pcd.TokenCName, 
> Key), DscDefaultValue)
>  if DscDefaultValue != DscDefaultValBak:
>  try:
>  DscDefaultValue = 
> ValueExpressionEx(DscDefaultValue, Pcd.DatumType, self._GuidDict)(True)
> -except BadExpression, Value:
> +except BadExpression, DscDefaultValue:
>  EdkLogger.error('BuildReport', FORMAT_INVALID, 
> "PCD Value: %s, Type: %s" %(DscDefaultValue,
> Pcd.DatumType))
> 
>  InfDefaultValue = None
> 
>  PcdValue = DecDefaultValue
> @@ -1031,13 +1031,46 @@ class PcdReport(object):
>  SkuInfoList = Pcd.SkuInfoList
>  Pcd = 
> GlobalData.gStructurePcd[self.Arch][(Pcd.TokenCName, Pcd.TokenSpaceGuidCName)]
>  Pcd.DatumType = Pcd.StructName
>  if TypeName in ('DYNVPD', 'DEXVPD'):
>  Pcd.SkuInfoList = SkuInfoList
> -if Pcd.SkuOverrideValues:
> -DscMatch = True
> +if Pcd.PcdFieldValueFromComm:
> +BuildOptionMatch = True
>  DecMatch = False
> +elif Pcd.SkuOverrideValues:
> +DscOverride = False
> +if not Pcd.SkuInfoList:
> +OverrideValues = Pcd.SkuOverrideValues
> +if OverrideValues:
> +Keys = OverrideValues.keys()
> +Data = OverrideValues[Keys[0]]
> +Struct = Data.values()[0]
> +DscOverride = self.ParseStruct(Struct)
> +else:
> +SkuList = sorted(Pcd.SkuInfoList.keys())
> +for Sku in SkuList:
> +SkuInfo = Pcd.SkuInfoList[Sku]
> +if TypeName in ('DYNHII', 'DEXHII'):
> +if SkuInfo.DefaultStoreDict:
> +DefaultStoreList = 
> sorted(SkuInfo.DefaultStoreDict.keys())
> +for DefaultStore in 
> DefaultStoreList:
> +OverrideValues = 
> Pcd.SkuOverrideValues[Sku]
> +DscOverride = 
> self.ParseStruct(OverrideValues[DefaultStore])
> +if DscOverride:
> +break
> +else:
> +OverrideValues = 
> Pcd.SkuOverrideValues[Sku]
> +if OverrideValues:
> +Keys = OverrideValues.keys()
> +OverrideFieldStruct = 
> self.OverrideFieldValue(Pcd, OverrideValues[Keys[0]])
> +DscOverride = 
> self.ParseStruct(OverrideFieldStruct)
> +if DscOverride:
> +break
> +if DscOverride:
> +DscMatch = True
> +DecMatch = False
> +
>

[edk2] [Patch] BaseTools: Correct Structure Pcd value in the report

2018-03-02 Thread Yonghong Zhu
The patch "Fixed build failed issue" changed structure Pcd Object, so
we need update build report to correct structure Pcd Value.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Yonghong Zhu 
---
 BaseTools/Source/Python/build/BuildReport.py | 72 
 1 file changed, 63 insertions(+), 9 deletions(-)

diff --git a/BaseTools/Source/Python/build/BuildReport.py 
b/BaseTools/Source/Python/build/BuildReport.py
index b2cc6ee..f4d2c75 100644
--- a/BaseTools/Source/Python/build/BuildReport.py
+++ b/BaseTools/Source/Python/build/BuildReport.py
@@ -956,11 +956,11 @@ class PcdReport(object):
 DscDefaultValBak = DscDefaultValue
 DscDefaultValue = self.FdfPcdSet.get((Pcd.TokenCName, 
Key), DscDefaultValue)
 if DscDefaultValue != DscDefaultValBak:
 try:
 DscDefaultValue = 
ValueExpressionEx(DscDefaultValue, Pcd.DatumType, self._GuidDict)(True)
-except BadExpression, Value:
+except BadExpression, DscDefaultValue:
 EdkLogger.error('BuildReport', FORMAT_INVALID, 
"PCD Value: %s, Type: %s" %(DscDefaultValue, Pcd.DatumType))
 
 InfDefaultValue = None
 
 PcdValue = DecDefaultValue
@@ -1031,13 +1031,46 @@ class PcdReport(object):
 SkuInfoList = Pcd.SkuInfoList
 Pcd = 
GlobalData.gStructurePcd[self.Arch][(Pcd.TokenCName, Pcd.TokenSpaceGuidCName)]
 Pcd.DatumType = Pcd.StructName
 if TypeName in ('DYNVPD', 'DEXVPD'):
 Pcd.SkuInfoList = SkuInfoList
-if Pcd.SkuOverrideValues:
-DscMatch = True
+if Pcd.PcdFieldValueFromComm:
+BuildOptionMatch = True
 DecMatch = False
+elif Pcd.SkuOverrideValues:
+DscOverride = False
+if not Pcd.SkuInfoList:
+OverrideValues = Pcd.SkuOverrideValues
+if OverrideValues:
+Keys = OverrideValues.keys()
+Data = OverrideValues[Keys[0]]
+Struct = Data.values()[0]
+DscOverride = self.ParseStruct(Struct)
+else:
+SkuList = sorted(Pcd.SkuInfoList.keys())
+for Sku in SkuList:
+SkuInfo = Pcd.SkuInfoList[Sku]
+if TypeName in ('DYNHII', 'DEXHII'):
+if SkuInfo.DefaultStoreDict:
+DefaultStoreList = 
sorted(SkuInfo.DefaultStoreDict.keys())
+for DefaultStore in 
DefaultStoreList:
+OverrideValues = 
Pcd.SkuOverrideValues[Sku]
+DscOverride = 
self.ParseStruct(OverrideValues[DefaultStore])
+if DscOverride:
+break
+else:
+OverrideValues = 
Pcd.SkuOverrideValues[Sku]
+if OverrideValues:
+Keys = OverrideValues.keys()
+OverrideFieldStruct = 
self.OverrideFieldValue(Pcd, OverrideValues[Keys[0]])
+DscOverride = 
self.ParseStruct(OverrideFieldStruct)
+if DscOverride:
+break
+if DscOverride:
+DscMatch = True
+DecMatch = False
+
 #
 # Report PCD item according to their override relationship
 #
 if DecMatch and InfMatch:
 self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, 
IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, 
DecDefaultValue, '  ')
@@ -1080,10 +1113,18 @@ class PcdReport(object):
 FileWrite(File, gSectionEnd)
 else:
 if not ReportSubType and ModulePcdSet:
 FileWrite(File, gSubSectionEnd)
 
+def ParseStruct(self, struct):
+HasDscOverride = False
+if struct:
+for _, Values in struct.items():
+if Values[1] and Values[1].endswith('.dsc'):
+HasDscOverride = True
+