import subprocess\r
import threading\r
from datetime import datetime\r
-from StringIO import StringIO\r
+from io import BytesIO\r
from Common import EdkLogger\r
from Common.Misc import SaveFileOnChange\r
from Common.Misc import GuidStructureByteArrayToGuidString\r
\r
## Split each lines in file\r
#\r
-# This method is used to split the lines in file to make the length of each line \r
+# This method is used to split the lines in file to make the length of each line\r
# less than MaxLength.\r
#\r
# @param Content The content of file\r
NewContentList.append(Line)\r
for NewLine in NewContentList:\r
NewContent += NewLine + TAB_LINE_BREAK\r
- \r
+\r
NewContent = NewContent.replace(TAB_LINE_BREAK, gEndOfLine).replace('\r\r\n', gEndOfLine)\r
return NewContent\r
- \r
- \r
- \r
+\r
+\r
+\r
##\r
# Parse binary dependency expression section\r
#\r
for Guid in Package.Guids:\r
GuidValue = GuidStructureStringToGuidString(Package.Guids[Guid])\r
self._GuidDb[GuidValue.upper()] = Guid\r
- \r
+ for Ma in Pa.ModuleAutoGenList:\r
+ for Pcd in Ma.FixedVoidTypePcds:\r
+ PcdValue = Ma.FixedVoidTypePcds[Pcd]\r
+ if len(PcdValue.split(',')) == 16:\r
+ GuidValue = GuidStructureByteArrayToGuidString(PcdValue)\r
+ self._GuidDb[GuidValue.upper()] = Pcd\r
##\r
# Parse the binary dependency expression files.\r
- # \r
+ #\r
# This function parses the binary dependency expression file and translate it\r
# to the instruction list.\r
#\r
OpCode = DepexFile.read(1)\r
\r
return DepexStatement\r
- \r
+\r
##\r
# Reports library information\r
#\r
\r
if ModuleType in [SUP_MODULE_SEC, SUP_MODULE_PEI_CORE, SUP_MODULE_DXE_CORE, SUP_MODULE_SMM_CORE, SUP_MODULE_MM_CORE_STANDALONE, SUP_MODULE_UEFI_APPLICATION]:\r
return\r
- \r
+\r
for Source in M.SourceFileList:\r
if os.path.splitext(Source.Path)[1].lower() == ".dxs":\r
Match = gDxsDependencyPattern.search(open(Source.Path).read())\r
FileWrite(File, gSubSectionSep)\r
except:\r
EdkLogger.warn(None, "Dependency expression file is corrupted", self._DepexFileName)\r
- \r
+\r
FileWrite(File, "Dependency Expression (DEPEX) from %s" % self.Source)\r
\r
if self.Source == "INF":\r
cmd = ["GenFw", "--rebase", str(0), "-o", Tempfile, DefaultEFIfile]\r
try:\r
PopenObject = subprocess.Popen(' '.join(cmd), stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)\r
- except Exception, X:\r
+ except Exception as X:\r
EdkLogger.error("GenFw", COMMAND_FAILURE, ExtraData="%s: %s" % (str(X), cmd[0]))\r
EndOfProcedure = threading.Event()\r
EndOfProcedure.clear()\r
DecDefaultValue = self.DecPcdDefault.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName, DecType))\r
DscDefaultValue = self.DscPcdDefault.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName))\r
DscDefaultValBak = DscDefaultValue\r
+ Field = ''\r
+ for (CName, Guid, Field) in self.FdfPcdSet:\r
+ if CName == PcdTokenCName and Guid == Key:\r
+ DscDefaultValue = self.FdfPcdSet[(CName, Guid, Field)]\r
+ break\r
DscDefaultValue = self.FdfPcdSet.get((Pcd.TokenCName, Key), DscDefaultValue)\r
if DscDefaultValue != DscDefaultValBak:\r
try:\r
DscDefaultValue = ValueExpressionEx(DscDefaultValue, Pcd.DatumType, self._GuidDict)(True)\r
- except BadExpression, DscDefaultValue:\r
+ except BadExpression as DscDefaultValue:\r
EdkLogger.error('BuildReport', FORMAT_INVALID, "PCD Value: %s, Type: %s" %(DscDefaultValue, Pcd.DatumType))\r
\r
InfDefaultValue = None\r
PcdValue = DecDefaultValue\r
if DscDefaultValue:\r
PcdValue = DscDefaultValue\r
+ Pcd.DefaultValue = PcdValue\r
if ModulePcdSet is not None:\r
if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type) not in ModulePcdSet:\r
continue\r
- InfDefault, PcdValue = ModulePcdSet[Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type]\r
+ InfDefaultValue, PcdValue = ModulePcdSet[Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type]\r
Pcd.DefaultValue = PcdValue\r
- if InfDefault == "":\r
- InfDefault = None\r
+ if InfDefaultValue == "":\r
+ InfDefaultValue = None\r
\r
BuildOptionMatch = False\r
if GlobalData.BuildOptionPcd:\r
#\r
# Report PCD item according to their override relationship\r
#\r
- if DecMatch and InfMatch:\r
+ if DecMatch:\r
self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, ' ')\r
+ elif InfDefaultValue and InfMatch:\r
+ self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*M')\r
elif BuildOptionMatch:\r
self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*B')\r
else:\r
- if DscMatch:\r
- if (Pcd.TokenCName, Key) in self.FdfPcdSet:\r
+ if DscDefaultValue and DscMatch:\r
+ if (Pcd.TokenCName, Key, Field) in self.FdfPcdSet:\r
self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*F')\r
else:\r
self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*P')\r
for Array in ArrayList:\r
FileWrite(File, Array)\r
else:\r
- FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 15, ModulePath, ModuleDefault.strip()))\r
+ Value = ModuleDefault.strip()\r
+ if Pcd.DatumType in TAB_PCD_CLEAN_NUMERIC_TYPES:\r
+ if Value.startswith(('0x', '0X')):\r
+ Value = '{} ({:d})'.format(Value, int(Value, 0))\r
+ else:\r
+ Value = "0x{:X} ({})".format(int(Value, 0), Value)\r
+ FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 15, ModulePath, Value))\r
\r
if ModulePcdSet is None:\r
FileWrite(File, gSectionEnd)\r
FileWrite(File, Array)\r
else:\r
if Pcd.DatumType in TAB_PCD_CLEAN_NUMERIC_TYPES:\r
- if Value.startswith(('0x','0X')):\r
+ if Value.startswith(('0x', '0X')):\r
Value = '{} ({:d})'.format(Value, int(Value, 0))\r
else:\r
Value = "0x{:X} ({})".format(int(Value, 0), Value)\r
else:\r
if IsByteArray:\r
if self.SkuSingle:\r
- FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, ' ' , TypeName, '(' + Pcd.DatumType + ')', "{"))\r
+ FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', "{"))\r
else:\r
- FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ' , TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', "{"))\r
+ FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', "{"))\r
for Array in ArrayList:\r
FileWrite(File, Array)\r
else:\r
else:\r
Value = "0x{:X} ({})".format(int(Value, 0), Value)\r
if self.SkuSingle:\r
- FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, ' ' , TypeName, '(' + Pcd.DatumType + ')', Value))\r
+ FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', Value))\r
else:\r
- FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ' , TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', Value))\r
+ FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', Value))\r
if TypeName in ('DYNVPD', 'DEXVPD'):\r
FileWrite(File, '%*s' % (self.MaxLen + 4, SkuInfo.VpdOffset))\r
if IsStructure:\r
for Key, Values in OverrideStruct.items():\r
if Values[1] and Values[1].endswith('.dsc'):\r
OverrideFieldStruct[Key] = Values\r
+ if Pcd.PcdFieldValueFromFdf:\r
+ for Key, Values in Pcd.PcdFieldValueFromFdf.items():\r
+ OverrideFieldStruct[Key] = Values\r
if Pcd.PcdFieldValueFromComm:\r
for Key, Values in Pcd.PcdFieldValueFromComm.items():\r
OverrideFieldStruct[Key] = Values\r
EotEndTime = time.time()\r
EotDuration = time.strftime("%H:%M:%S", time.gmtime(int(round(EotEndTime - EotStartTime))))\r
EdkLogger.quiet("EOT run time: %s\n" % EotDuration)\r
- \r
+\r
#\r
# Parse the output of EOT tool\r
#\r
PlatformPcds = {}\r
#\r
# Collect PCDs declared in DEC files.\r
- # \r
+ #\r
for Pa in Wa.AutoGenObjectList:\r
for Package in Pa.PackageList:\r
for (TokenCName, TokenSpaceGuidCName, DecType) in Package.Pcds:\r
for Match in gOffsetGuidPattern.finditer(FvReport):\r
Guid = Match.group(2).upper()\r
OffsetInfo[Match.group(1)] = self._GuidsDb.get(Guid, Guid)\r
- OffsetList = OffsetInfo.keys()\r
- OffsetList.sort()\r
+ OffsetList = sorted(OffsetInfo.keys())\r
for Offset in OffsetList:\r
FileWrite (File, "%s %s" % (Offset, OffsetInfo[Offset]))\r
except IOError:\r
self.DepexParser = None\r
if "DEPEX" in ReportType:\r
self.DepexParser = DepexParser(Wa)\r
- \r
+\r
self.ModuleReportList = []\r
if MaList is not None:\r
self._IsModuleBuild = True\r
if not self._IsModuleBuild:\r
if "PCD" in ReportType:\r
self.PcdReport.GenerateReport(File, None)\r
- \r
+\r
if "FLASH" in ReportType:\r
for FdReportListItem in self.FdReportList:\r
FdReportListItem.GenerateReport(File)\r
if ReportFile:\r
self.ReportList = []\r
self.ReportType = []\r
- if ReportType: \r
+ if ReportType:\r
for ReportTypeItem in ReportType:\r
if ReportTypeItem not in self.ReportType:\r
self.ReportType.append(ReportTypeItem)\r
def GenerateReport(self, BuildDuration, AutoGenTime, MakeTime, GenFdsTime):\r
if self.ReportFile:\r
try:\r
- File = StringIO('')\r
+ File = BytesIO('')\r
for (Wa, MaList) in self.ReportList:\r
PlatformReport(Wa, MaList, self.ReportType).GenerateReport(File, BuildDuration, AutoGenTime, MakeTime, GenFdsTime, self.ReportType)\r
Content = FileLinesSplit(File.getvalue(), gLineMaxLength)\r
EdkLogger.error("BuildReport", CODE_ERROR, "Unknown fatal error when generating build report", ExtraData=self.ReportFile, RaiseError=False)\r
EdkLogger.quiet("(Python %s on %s\n%s)" % (platform.python_version(), sys.platform, traceback.format_exc()))\r
File.close()\r
- \r
+\r
# This acts like the main() function for the script, unless it is 'import'ed into another script.\r
if __name__ == '__main__':\r
pass\r