public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [Patch] BaseTools: Enhance the *P Flag display for Structure Pcd
@ 2018-10-11  7:06 Yonghong Zhu
  2018-10-12 13:32 ` Gao, Liming
  0 siblings, 1 reply; 2+ messages in thread
From: Yonghong Zhu @ 2018-10-11  7:06 UTC (permalink / raw)
  To: edk2-devel; +Cc: Liming Gao

Cover the case:
1.only define the structure Pcd in DEC file, it should not have any
Flag.
2.In the DEC file and DSC file only have the PCD's default value, and
without the field value, it should have *P Flag.

Cc: Liming Gao <liming.gao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Yonghong Zhu <yonghong.zhu@intel.com>
---
 BaseTools/Source/Python/build/BuildReport.py | 66 ++++++++++++++++------------
 1 file changed, 39 insertions(+), 27 deletions(-)

diff --git a/BaseTools/Source/Python/build/BuildReport.py b/BaseTools/Source/Python/build/BuildReport.py
index feaf6a5..031594b 100644
--- a/BaseTools/Source/Python/build/BuildReport.py
+++ b/BaseTools/Source/Python/build/BuildReport.py
@@ -1071,41 +1071,52 @@ class PcdReport(object):
                     if Pcd.PcdFieldValueFromComm:
                         BuildOptionMatch = True
                         DecMatch = False
                     elif Pcd.SkuOverrideValues:
                         DscOverride = False
-                        if not Pcd.SkuInfoList:
-                            OverrideValues = Pcd.SkuOverrideValues
-                            if OverrideValues:
-                                Keys = list(OverrideValues.keys())
-                                Data = OverrideValues[Keys[0]]
-                                Struct = list(Data.values())[0]
-                                DscOverride = self.ParseStruct(Struct)
+                        if Pcd.DefaultFromDSC:
+                            DscOverride = True
                         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]
+                            DictLen = 0
+                            for item in Pcd.SkuOverrideValues:
+                                DictLen += len(Pcd.SkuOverrideValues[item])
+                            if not DictLen:
+                                DscOverride = False
+                            else:
+                                if not Pcd.SkuInfoList:
+                                    OverrideValues = Pcd.SkuOverrideValues
                                     if OverrideValues:
                                         Keys = list(OverrideValues.keys())
-                                        OverrideFieldStruct = self.OverrideFieldValue(Pcd, OverrideValues[Keys[0]])
-                                        DscOverride = self.ParseStruct(OverrideFieldStruct)
-                                if DscOverride:
-                                    break
+                                        Data = OverrideValues[Keys[0]]
+                                        Struct = list(Data.values())
+                                        DscOverride = self.ParseStruct(Struct[0])
+                                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 = list(OverrideValues.keys())
+                                                OverrideFieldStruct = self.OverrideFieldValue(Pcd, OverrideValues[Keys[0]])
+                                                DscOverride = self.ParseStruct(OverrideFieldStruct)
+                                        if DscOverride:
+                                            break
                         if DscOverride:
                             DscDefaultValue = True
                             DscMatch = True
                             DecMatch = False
+                        else:
+                            DecMatch = True
                     else:
                         DscDefaultValue = True
                         DscMatch = True
                         DecMatch = False
 
@@ -1250,13 +1261,14 @@ class PcdReport(object):
             if IsStructure:
                 OverrideValues = Pcd.SkuOverrideValues
                 if OverrideValues:
                     Keys = list(OverrideValues.keys())
                     Data = OverrideValues[Keys[0]]
-                    Struct = list(Data.values())[0]
-                    OverrideFieldStruct = self.OverrideFieldValue(Pcd, Struct)
-                    self.PrintStructureInfo(File, OverrideFieldStruct)
+                    Struct = list(Data.values())
+                    if Struct:
+                        OverrideFieldStruct = self.OverrideFieldValue(Pcd, Struct[0])
+                        self.PrintStructureInfo(File, OverrideFieldStruct)
             self.PrintPcdDefault(File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue)
         else:
             FirstPrint = True
             SkuList = sorted(Pcd.SkuInfoList.keys())
             for Sku in SkuList:
-- 
2.6.1.windows.1



^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2018-10-12 13:32 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-10-11  7:06 [Patch] BaseTools: Enhance the *P Flag display for Structure Pcd Yonghong Zhu
2018-10-12 13:32 ` Gao, Liming

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox