## @file InfPomAlignment.py\r
# This file contained the adapter for convert INF parser object to POM Object\r
#\r
-# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>\r
#\r
# This program and the accompanying materials are licensed and made available \r
# under the terms and conditions of the BSD License which accompanies this \r
# Import modules\r
#\r
import os.path\r
-\r
from Logger import StringTable as ST\r
import Logger.Log as Logger\r
-\r
from Library.String import FORMAT_INVALID\r
from Library.String import PARSER_ERROR\r
from Library.String import NormPath\r
from Library.Misc import ConvertVersionToDecimal\r
from Library.Misc import GetHelpStringByRemoveHashKey\r
from Library.Misc import ConvertArchList\r
+from Library.Misc import GetRelativePath\r
+from Library.Misc import PathClass\r
from Library.Parsing import GetPkgInfoFromDec\r
+from Library.UniClassObject import UniFileClassObject\r
+from Library.UniClassObject import ConvertSpecialUnicodes\r
+from Library.UniClassObject import GetLanguageCode1766\r
from Library import DataType as DT\r
from Library import GlobalData\r
-\r
+from Library.ParserValidate import IsValidPath\r
from Object.POM import CommonObject\r
from Object.POM.ModuleObject import ModuleObject\r
from Object.POM.ModuleObject import ExternObject\r
from PomAdapter.InfPomAlignmentMisc import GenModuleHeaderUserExt\r
from PomAdapter.InfPomAlignmentMisc import GenBinaryData\r
from Parser import InfParser\r
-\r
-\r
+from PomAdapter.DecPomAlignment import DecPomAlignment\r
+from Common.MultipleWorkspace import MultipleWorkspace as mws\r
\r
## InfPomAlignment\r
#\r
#\r
def __init__(self, FileName, WorkSpace=None, PackagePath='', Skip=False):\r
ModuleObject.__init__(self)\r
-\r
self.Parser = None\r
self.FileName = FileName\r
self.WorkSpace = WorkSpace\r
self.ModulePath = ''\r
self.WorkspaceDir = " "\r
self.CustomMakefile = []\r
-\r
+ self.UniFileClassObject = None\r
self.SetPackagePath(PackagePath)\r
#\r
# Call GenInfPomObjects function to fill POM object.\r
if Skip:\r
OrigConfig = Logger.SUPRESS_ERROR\r
Logger.SUPRESS_ERROR = True\r
- self._GenInfPomObjects(Skip)\r
- Logger.SUPRESS_ERROR = OrigConfig\r
+ try:\r
+ self._GenInfPomObjects(Skip)\r
+ finally:\r
+ Logger.SUPRESS_ERROR = OrigConfig\r
else:\r
self._GenInfPomObjects(Skip)\r
\r
self._GenGuidProtocolPpis(DT.TAB_PROTOCOLS)\r
self._GenGuidProtocolPpis(DT.TAB_PPIS)\r
self._GenDepexes()\r
- self._GenMiscFiles(self.FullPath, Skip)\r
\r
## Convert [Defines] section content to InfDefObject\r
#\r
ArchList = GetSplitValueList(ArchString, ' ')\r
ArchList = ConvertArchList(ArchList)\r
HasCalledFlag = False\r
-\r
#\r
# Get data from Sdict()\r
#\r
# ModuleSurfaceArea.Header.Name element\r
#\r
self.SetName(os.path.splitext(os.path.basename(self.FileName))[0])\r
-\r
self.WorkspaceDir = " "\r
#\r
# CombinePath and ModulePath\r
#\r
- PathCount = self.FullPath.upper().find(self.WorkSpace.upper()) + len(self.WorkSpace) + 1\r
- CombinePath = self.FullPath[PathCount:]\r
+ CombinePath = GetRelativePath(self.FullPath, self.WorkSpace)\r
self.SetCombinePath(CombinePath)\r
-\r
ModulePath = os.path.split(CombinePath)[0]\r
ModuleRelativePath = ModulePath\r
if self.GetPackagePath() != '':\r
- ModuleRelativePath = ModulePath[ModulePath.find(self.GetPackagePath()) + len(self.GetPackagePath()) + 1:]\r
+ ModuleRelativePath = GetRelativePath(ModulePath, self.GetPackagePath())\r
self.SetModulePath(ModuleRelativePath)\r
-\r
#\r
# For Define Seciton Items.\r
#\r
DefineObj = ValueList\r
-\r
#\r
# Convert UEFI/PI version to decimal number\r
#\r
__PiVersion = ConvertVersionToDecimal(__PiVersion)\r
\r
self.SetPiSpecificationVersion(str(__PiVersion))\r
-\r
SpecList = DefineObj.GetSpecification()\r
NewSpecList = []\r
for SpecItem in SpecList:\r
ST.ERR_INF_PARSER_DEFINE_SECTION_MUST_ITEM_NOT_EXIST % ("BASE_NAME"), File=self.FullPath)\r
else:\r
self.SetBaseName(DefineObj.GetBaseName().GetValue())\r
+ if DefineObj.GetModuleUniFileName():\r
+ self.UniFileClassObject = UniFileClassObject([PathClass(DefineObj.GetModuleUniFileName())])\r
+ else:\r
+ self.UniFileClassObject = None\r
if DefineObj.GetInfVersion() == None:\r
Logger.Error("InfParser", FORMAT_INVALID,\r
ST.ERR_INF_PARSER_DEFINE_SECTION_MUST_ITEM_NOT_EXIST % ("INF_VERSION"), File=self.FullPath)\r
#\r
Logger.Error("Parser", PARSER_ERROR, ST.ERR_INF_PARSER_NOT_SUPPORT_EDKI_INF, ExtraData=self.FullPath,\r
RaiseError=Logger.IS_RAISE_ERROR)\r
-\r
#\r
# if there is Shadow, Should judge the MODULE_TYPE in \r
# SEC, PEI_CORE and PEIM\r
\r
if DefineObj.GetPcdIsDriver() != None:\r
self.SetPcdIsDriver(DefineObj.GetPcdIsDriver().GetValue())\r
-\r
#\r
# LIBRARY_CLASS\r
#\r
self._GenModuleHeaderLibClass(DefineObj, ArchList)\r
-\r
#\r
# CUSTOM_MAKEFILE\r
#\r
if not HasCalledFlag:\r
self._GenModuleHeaderExterns(DefineObj)\r
HasCalledFlag = True\r
-\r
#\r
# each module has only one module header\r
#\r
# put all define statement into user-extension sections\r
# \r
DefinesDictNew = GenModuleHeaderUserExt(DefineObj, ArchString)\r
-\r
if DefinesDictNew:\r
UserExtension = CommonObject.UserExtensionObject()\r
UserExtension.SetDefinesDict(DefinesDictNew)\r
UserExtension.SetIdentifier('DefineModifiers')\r
UserExtension.SetUserID('EDK2')\r
self.SetUserExtensionList(self.GetUserExtensionList() + [UserExtension])\r
-\r
#\r
# Get all meta-file header information\r
# the record is list of items formated: \r
# [LineValue, Arch, StartLine, ID, Third]\r
#\r
-\r
InfHeaderObj = self.Parser.InfHeader\r
#\r
# Put header information into POM object\r
#\r
- self.SetAbstract(InfHeaderObj.GetAbstract())\r
- self.SetDescription(InfHeaderObj.GetDescription())\r
- self.SetCopyright(InfHeaderObj.GetCopyright())\r
- self.SetLicense(InfHeaderObj.GetLicense())\r
+ if self.UniFileClassObject:\r
+ Lang = DT.TAB_LANGUAGE_EN_X\r
+ else:\r
+ Lang = DT.TAB_LANGUAGE_EN_US\r
+ if InfHeaderObj.GetAbstract():\r
+ self.SetAbstract((Lang, InfHeaderObj.GetAbstract()))\r
+ if InfHeaderObj.GetDescription():\r
+ self.SetDescription((Lang, InfHeaderObj.GetDescription()))\r
+ if InfHeaderObj.GetCopyright():\r
+ self.SetCopyright(('', InfHeaderObj.GetCopyright()))\r
+ if InfHeaderObj.GetLicense():\r
+ self.SetLicense(('', InfHeaderObj.GetLicense()))\r
+ #\r
+ # Put Binary header information into POM object\r
+ #\r
+ InfBinaryHeaderObj = self.Parser.InfBinaryHeader\r
+ if InfBinaryHeaderObj.GetAbstract():\r
+ self.SetBinaryHeaderAbstract((Lang, InfBinaryHeaderObj.GetAbstract()))\r
+ if InfBinaryHeaderObj.GetDescription():\r
+ self.SetBinaryHeaderDescription((Lang, InfBinaryHeaderObj.GetDescription()))\r
+ if InfBinaryHeaderObj.GetCopyright():\r
+ self.SetBinaryHeaderCopyright(('', InfBinaryHeaderObj.GetCopyright()))\r
+ if InfBinaryHeaderObj.GetLicense():\r
+ self.SetBinaryHeaderLicense(('', InfBinaryHeaderObj.GetLicense()))\r
\r
## GenModuleHeaderLibClass\r
#\r
Hob.SetSupArchList(Item.GetSupArchList())\r
if Item.GetHelpString():\r
HelpTextObj = CommonObject.TextObject()\r
+ if self.UniFileClassObject:\r
+ HelpTextObj.SetLang(DT.TAB_LANGUAGE_EN_X)\r
HelpTextObj.SetString(Item.GetHelpString())\r
Hob.SetHelpTextList([HelpTextObj])\r
HobList.append(Hob)\r
Event.SetUsage(Item.GetUsage())\r
if Item.GetHelpString():\r
HelpTextObj = CommonObject.TextObject()\r
+ if self.UniFileClassObject:\r
+ HelpTextObj.SetLang(DT.TAB_LANGUAGE_EN_X)\r
HelpTextObj.SetString(Item.GetHelpString())\r
Event.SetHelpTextList([HelpTextObj])\r
EventList.append(Event)\r
BootMode.SetUsage(Item.GetUsage())\r
if Item.GetHelpString():\r
HelpTextObj = CommonObject.TextObject()\r
+ if self.UniFileClassObject:\r
+ HelpTextObj.SetLang(DT.TAB_LANGUAGE_EN_X)\r
HelpTextObj.SetString(Item.GetHelpString())\r
BootMode.SetHelpTextList([HelpTextObj])\r
BootModeList.append(BootMode)\r
BuildOptionsList = self.Parser.InfBuildOptionSection.GetBuildOptions()\r
if not GlobalData.gIS_BINARY_INF:\r
BuildOptionDict = {}\r
-\r
for BuildOptionObj in BuildOptionsList:\r
ArchList = BuildOptionObj.GetSupArchList()\r
ArchList = ConvertArchList(ArchList)\r
BuildOptionsContent = BuildOptionObj.GetContent()\r
ArchString = ' '.join(ArchList)\r
-\r
if not BuildOptionsContent:\r
continue\r
-\r
BuildOptionDict[ArchString] = BuildOptionsContent\r
-\r
if not BuildOptionDict:\r
return\r
UserExtension = CommonObject.UserExtensionObject()\r
#\r
LibClassObj = self.Parser.InfLibraryClassSection.LibraryClasses\r
Keys = LibClassObj.keys()\r
-\r
for Key in Keys:\r
LibraryClassData = LibClassObj[Key]\r
for Item in LibraryClassData:\r
LibraryClass.SetSupArchList(ConvertArchList(Item.GetSupArchList()))\r
LibraryClass.SetSupModuleList(Item.GetSupModuleList())\r
HelpStringObj = Item.GetHelpString()\r
-\r
if HelpStringObj != None:\r
CommentString = GetHelpStringByRemoveHashKey(HelpStringObj.HeaderComments +\r
HelpStringObj.TailComments)\r
HelpTextHeaderObj = CommonObject.TextObject()\r
+ if self.UniFileClassObject:\r
+ HelpTextHeaderObj.SetLang(DT.TAB_LANGUAGE_EN_X)\r
HelpTextHeaderObj.SetString(CommentString)\r
LibraryClass.SetHelpTextList([HelpTextHeaderObj])\r
-\r
self.SetLibraryClassList(self.GetLibraryClassList() + [LibraryClass])\r
\r
## GenPackages\r
# Get all Packages\r
#\r
PackageObj = self.Parser.InfPackageSection.Packages\r
-\r
#\r
# Go through each arch\r
#\r
PackageDependency.SetSupArchList(ConvertArchList(PackageItemObj.GetSupArchList()))\r
PackageDependency.SetFeatureFlag(PackageItemObj.GetFeatureFlagExp())\r
\r
- PkgInfo = GetPkgInfoFromDec(os.path.normpath(os.path.join(self.WorkSpace,\r
- NormPath(PackageItemObj.GetPackageName()))))\r
+ PkgInfo = GetPkgInfoFromDec(mws.join(self.WorkSpace, NormPath(PackageItemObj.GetPackageName())))\r
if PkgInfo[1] and PkgInfo[2]:\r
PackageDependency.SetGuid(PkgInfo[1])\r
PackageDependency.SetVersion(PkgInfo[2])\r
def _GenPcds(self):\r
if not GlobalData.gIS_BINARY_INF:\r
Logger.Debug(2, "Generate %s ..." % DT.TAB_PCDS)\r
-\r
#\r
# Get all Pcds\r
#\r
PcdObj = self.Parser.InfPcdSection.Pcds\r
KeysList = PcdObj.keys()\r
-\r
#\r
# Go through each arch\r
#\r
Pcd.SetFeatureFlag(PcdItemObj.GetFeatureFlagExp())\r
Pcd.SetSupArchList(ConvertArchList(PcdItemObj.GetSupportArchList()))\r
HelpTextObj = CommonObject.TextObject()\r
+ if self.UniFileClassObject:\r
+ HelpTextObj.SetLang(DT.TAB_LANGUAGE_EN_X)\r
HelpTextObj.SetString(CommentItem.GetHelpStringItem())\r
Pcd.SetHelpTextList([HelpTextObj])\r
PcdList = self.GetPcdList()\r
Identifier = UserExtensionDataObj.GetIdString()\r
if Identifier.startswith('"') and Identifier.endswith('"'):\r
Identifier = Identifier[1:-1]\r
+ #\r
+ # Generate miscellaneous files on INF file\r
+ #\r
+ if UserId == 'TianoCore' and Identifier == 'ExtraFiles':\r
+ self._GenMiscFiles(UserExtensionDataObj.GetContent())\r
UserExtension.SetIdentifier(Identifier)\r
UserExtension.SetStatement(UserExtensionDataObj.GetContent())\r
UserExtension.SetSupArchList(ConvertArchList(UserExtensionDataObj.GetSupArchList()))\r
self.SetUserExtensionList(self.GetUserExtensionList() + [UserExtension])\r
-\r
+ \r
+ #\r
+ # Gen UserExtensions of TianoCore."BinaryHeader"\r
+ #\r
+ \r
+ #Get Binary header from INF file\r
+ BinaryAbstractList = self.BinaryHeaderAbstractList\r
+ BinaryDescriptionList = self.BinaryHeaderDescriptionList\r
+ BinaryCopyrightList = self.BinaryHeaderCopyrightList\r
+ BinaryLicenseList = self.BinaryHeaderLicenseList\r
+ #Get Binary header from UNI file\r
+ # Initialize UniStrDict, the top keys are language codes\r
+ UniStrDict = {}\r
+ if self.UniFileClassObject:\r
+ UniStrDict = self.UniFileClassObject.OrderedStringList\r
+ for Lang in UniStrDict:\r
+ for StringDefClassObject in UniStrDict[Lang]:\r
+ Lang = GetLanguageCode1766(Lang)\r
+ if StringDefClassObject.StringName == DT.TAB_INF_BINARY_ABSTRACT:\r
+ BinaryAbstractList.append((Lang, ConvertSpecialUnicodes(StringDefClassObject.StringValue)))\r
+ if StringDefClassObject.StringName == DT.TAB_INF_BINARY_DESCRIPTION:\r
+ BinaryDescriptionList.append((Lang, ConvertSpecialUnicodes(StringDefClassObject.StringValue)))\r
+ if BinaryAbstractList or BinaryDescriptionList or BinaryCopyrightList or BinaryLicenseList:\r
+ BinaryUserExtension = CommonObject.UserExtensionObject()\r
+ BinaryUserExtension.SetBinaryAbstract(BinaryAbstractList)\r
+ BinaryUserExtension.SetBinaryDescription(BinaryDescriptionList)\r
+ BinaryUserExtension.SetBinaryCopyright(BinaryCopyrightList)\r
+ BinaryUserExtension.SetBinaryLicense(BinaryLicenseList)\r
+ BinaryUserExtension.SetIdentifier(DT.TAB_BINARY_HEADER_IDENTIFIER)\r
+ BinaryUserExtension.SetUserID(DT.TAB_BINARY_HEADER_USERID)\r
+ self.SetUserExtensionList(self.GetUserExtensionList() + [BinaryUserExtension])\r
+ \r
def _GenDepexesList(self, SmmDepexList, DxeDepexList, PeiDepexList):\r
if SmmDepexList:\r
self.SetSmmDepex(SmmDepexList)\r
ModuleType = Depex.GetModuleType()\r
ModuleTypeList = []\r
if IsLibraryClass:\r
- if not self.GetIsLibraryModList():\r
+ if self.GetModuleType() == 'BASE' and not ModuleType:\r
+ Logger.Error("\nMkPkg", PARSER_ERROR,\r
+ ST.ERR_INF_PARSER_DEPEX_SECTION_INVALID_FOR_BASE_LIBRARY_CLASS,\r
+ self.GetFullPath(), RaiseError=True)\r
+ if self.GetModuleType() != 'BASE' and not self.GetIsLibraryModList():\r
Logger.Error("\nMkPkg", PARSER_ERROR, ST.ERR_INF_PARSER_DEPEX_SECTION_INVALID_FOR_LIBRARY_CLASS,\r
self.GetFullPath(), RaiseError=True)\r
- if ModuleType and ModuleType not in self.GetIsLibraryModList():\r
+ if self.GetModuleType() != 'BASE' and ModuleType and ModuleType not in self.GetIsLibraryModList():\r
Logger.Error("\nMkPkg", PARSER_ERROR, ST.ERR_INF_PARSER_DEPEX_SECTION_NOT_DETERMINED,\r
self.GetFullPath(), RaiseError=True)\r
if ModuleType:\r
DepexIns.SetFeatureFlag(Depex.GetFeatureFlagExp())\r
if Depex.HelpString:\r
HelpIns = CommonObject.TextObject()\r
+ if self.UniFileClassObject:\r
+ HelpIns.SetLang(DT.TAB_LANGUAGE_EN_X)\r
HelpIns.SetString(GetHelpStringByRemoveHashKey(Depex.HelpString))\r
DepexIns.SetHelpText(HelpIns)\r
\r
BinaryObj = self.Parser.InfBinariesSection.GetBinary()\r
\r
BinaryData = BinaryObj.keys()\r
- BinaryData.sort()\r
\r
#\r
# If the INF file does not contain a [Sources] section, and the INF file does contain a [Binaries] section, \r
AsBuildLibIns = AsBuildLibraryClassObject()\r
AsBuildLibIns.SetLibGuid(LibItem.GetFileGuid())\r
AsBuildLibIns.SetLibVersion(LibItem.GetVersion())\r
+ AsBuildLibIns.SetSupArchList(LibItem.GetSupArchList())\r
AsBuildLibraryClassList.append(AsBuildLibIns)\r
AsBuildIns.SetLibraryInstancesList(AsBuildLibraryClassList)\r
\r
# BuildOption AsBuild Info\r
# \r
for BuildOptionItem in self.Parser.InfBuildOptionSection.GetBuildOptions():\r
- AsBuildBuildOptionList += BuildOptionItem.GetAsBuildList()\r
+ AsBuildBuildOptionList.append(BuildOptionItem)\r
AsBuildIns.SetBuildFlagsList(AsBuildBuildOptionList)\r
\r
#\r
#\r
AsBuildIns = self._GenAsBuiltPcds(self.Parser.InfPcdSection.GetPcds(), AsBuildIns)\r
\r
+ #\r
+ # Parse the DEC file that contains the GUID value of the GUID CName which is used by\r
+ # SUBTYPE_GUID type binary file in the Binaries section in the INF file\r
+ #\r
+ DecObjList = []\r
+ if not self.PackagePath:\r
+ WorkSpace = os.path.normpath(self.WorkSpace)\r
+ TempPath = ModulePath = os.path.normpath(self.ModulePath)\r
+ while ModulePath:\r
+ TempPath = ModulePath\r
+ ModulePath = os.path.dirname(ModulePath)\r
+ PackageName = TempPath\r
+ DecFilePath = os.path.normpath(os.path.join(WorkSpace, PackageName)) \r
+ if DecFilePath:\r
+ for File in os.listdir(DecFilePath):\r
+ if File.upper().endswith('.DEC'):\r
+ DecFileFullPath = os.path.normpath(os.path.join(DecFilePath, File))\r
+ DecObjList.append(DecPomAlignment(DecFileFullPath, self.WorkSpace))\r
+ \r
+ \r
BinariesDict, AsBuildIns, BinaryFileObjectList = GenBinaryData(BinaryData, BinaryObj,\r
BinariesDict,\r
AsBuildIns,\r
BinaryFileObjectList,\r
self.GetSupArchList(),\r
- self.BinaryModule)\r
-\r
+ self.BinaryModule,\r
+ DecObjList)\r
+ \r
BinariesDict2 = {}\r
for Key in BinariesDict:\r
ValueList = BinariesDict[Key]\r
Pcd.SetItemType(PcdItem[0])\r
Pcd.SetFeatureFlag(PcdItemObj.GetFeatureFlagExp())\r
Pcd.SetSupArchList(ConvertArchList(PcdItemObj.GetSupportArchList()))\r
- HelpTextObj = CommonObject.TextObject()\r
- HelpTextObj.SetString(PcdItemObj.GetHelpStringList())\r
- Pcd.SetHelpTextList([HelpTextObj])\r
+ Pcd.SetValidUsage(PcdItemObj.GetValidUsage())\r
+ for CommentItem in PcdItemObj.GetHelpStringList():\r
+ HelpTextObj = CommonObject.TextObject()\r
+ if self.UniFileClassObject:\r
+ HelpTextObj.SetLang(DT.TAB_LANGUAGE_EN_X)\r
+ HelpTextObj.SetString(CommentItem.GetHelpStringItem())\r
+ Pcd.SetHelpTextList(Pcd.GetHelpTextList() + [HelpTextObj])\r
AsBuildPatchPcdList.append(Pcd)\r
- else:\r
+ elif PcdItem[0].upper() == DT.TAB_INF_PCD_EX.upper():\r
PcdItemObj = PcdItem[1]\r
Pcd = CommonObject.PcdObject()\r
Pcd.SetTokenSpaceGuidValue(PcdItemObj.GetTokenSpaceGuidValue())\r
Pcd.SetItemType(PcdItem[0])\r
Pcd.SetFeatureFlag(PcdItemObj.GetFeatureFlagExp())\r
Pcd.SetSupArchList(ConvertArchList(PcdItemObj.GetSupportArchList()))\r
- HelpTextObj = CommonObject.TextObject()\r
- HelpTextObj.SetString(PcdItemObj.GetHelpStringList())\r
- Pcd.SetHelpTextList([HelpTextObj])\r
+ Pcd.SetValidUsage(PcdItemObj.GetValidUsage())\r
+ for CommentItem in PcdItemObj.GetHelpStringList():\r
+ HelpTextObj = CommonObject.TextObject()\r
+ if self.UniFileClassObject:\r
+ HelpTextObj.SetLang(DT.TAB_LANGUAGE_EN_X)\r
+ HelpTextObj.SetString(CommentItem.GetHelpStringItem())\r
+ Pcd.SetHelpTextList(Pcd.GetHelpTextList() + [HelpTextObj])\r
AsBuildPcdExList.append(Pcd)\r
AsBuildIns.SetPatchPcdList(AsBuildPatchPcdList)\r
AsBuildIns.SetPcdExList(AsBuildPcdExList)\r
ListObject.SetSupArchList(ConvertArchList(Item.GetSupArchList()))\r
ListObject.SetFeatureFlag(Item.GetFeatureFlagExp())\r
HelpString = GuidComentItem.GetHelpStringItem()\r
- HelpTxtTailObj = CommonObject.TextObject()\r
- HelpTxtTailObj.SetString(HelpString)\r
-\r
- ListObject.SetHelpTextList([HelpTxtTailObj])\r
-\r
+ if HelpString.strip():\r
+ HelpTxtTailObj = CommonObject.TextObject()\r
+ if self.UniFileClassObject:\r
+ HelpTxtTailObj.SetLang(DT.TAB_LANGUAGE_EN_X)\r
+ HelpTxtTailObj.SetString(HelpString)\r
+ ListObject.SetHelpTextList([HelpTxtTailObj])\r
+ \r
GuidProtocolPpiList.append(ListObject)\r
elif Type == DT.TAB_PROTOCOLS:\r
ProtocolData = ProtocolObj.keys()\r
ListObject.SetFeatureFlag(Item.GetFeatureFlagExp())\r
ListObject.SetNotify(CommentItem.GetNotify())\r
ListObject.SetUsage(CommentItem.GetUsageItem())\r
- HelpTxtObj = CommonObject.TextObject()\r
HelpString = CommentItem.GetHelpStringItem()\r
- HelpTxtObj.SetString(HelpString)\r
- ListObject.SetHelpTextList([HelpTxtObj])\r
+ if HelpString.strip():\r
+ HelpTxtObj = CommonObject.TextObject()\r
+ if self.UniFileClassObject:\r
+ HelpTxtObj.SetLang(DT.TAB_LANGUAGE_EN_X)\r
+ HelpTxtObj.SetString(HelpString)\r
+ ListObject.SetHelpTextList([HelpTxtObj])\r
GuidProtocolPpiList.append(ListObject)\r
elif Type == DT.TAB_PPIS:\r
PpiData = PpisObj.keys()\r
ListObject.SetFeatureFlag(Item.GetFeatureFlagExp())\r
ListObject.SetNotify(CommentItem.GetNotify())\r
ListObject.SetUsage(CommentItem.GetUsage())\r
- HelpTextObj = CommonObject.TextObject()\r
HelpString = CommentItem.GetHelpStringItem()\r
- HelpTextObj.SetString(HelpString)\r
- ListObject.SetHelpTextList([HelpTextObj])\r
+ if HelpString.strip():\r
+ HelpTextObj = CommonObject.TextObject()\r
+ if self.UniFileClassObject:\r
+ HelpTextObj.SetLang(DT.TAB_LANGUAGE_EN_X)\r
+ HelpTextObj.SetString(HelpString)\r
+ ListObject.SetHelpTextList([HelpTextObj])\r
GuidProtocolPpiList.append(ListObject)\r
\r
if Type == DT.TAB_GUIDS:\r
#\r
# @param ContainerFile: The Inf file full path\r
#\r
- def _GenMiscFiles(self, ContainerFile, Skip):\r
- pass\r
-\r
+ def _GenMiscFiles(self, Content):\r
+ MiscFileObj = CommonObject.MiscFileObject()\r
+ for Line in Content.splitlines():\r
+ FileName = ''\r
+ if '#' in Line:\r
+ FileName = Line[:Line.find('#')]\r
+ else:\r
+ FileName = Line\r
+ if FileName:\r
+ if IsValidPath(FileName, GlobalData.gINF_MODULE_DIR):\r
+ FileObj = CommonObject.FileObject()\r
+ FileObj.SetURI(FileName)\r
+ MiscFileObj.SetFileList(MiscFileObj.GetFileList()+[FileObj])\r
+ else:\r
+ Logger.Error("InfParser", \r
+ FORMAT_INVALID,\r
+ ST.ERR_INF_PARSER_FILE_NOT_EXIST_OR_NAME_INVALID%(Line),\r
+ File=GlobalData.gINF_MODULE_NAME,\r
+ ExtraData=Line) \r
+ self.SetMiscFileList(self.GetMiscFileList()+[MiscFileObj]) \r
+ \r