X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=BaseTools%2FSource%2FPython%2FUPT%2FGenMetaFile%2FGenDecFile.py;h=91952a5feec79f52ce8c4143e2c2c95110baa3e6;hb=2e351cbe8e190271b3716284fc1076551d005472;hp=a1a9d38087ee854fb465bf724eb79ce56fbf9525;hpb=0d1f5b2b5dc3c1cf381be0a1ec8f960dc6029a93;p=mirror_edk2.git diff --git a/BaseTools/Source/Python/UPT/GenMetaFile/GenDecFile.py b/BaseTools/Source/Python/UPT/GenMetaFile/GenDecFile.py index a1a9d38087..91952a5fee 100644 --- a/BaseTools/Source/Python/UPT/GenMetaFile/GenDecFile.py +++ b/BaseTools/Source/Python/UPT/GenMetaFile/GenDecFile.py @@ -4,13 +4,7 @@ # # Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.
# -# This program and the accompanying materials are licensed and made available -# under the terms and conditions of the BSD License which accompanies this -# distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# SPDX-License-Identifier: BSD-2-Clause-Patent # ''' @@ -19,7 +13,7 @@ GenDEC import os import stat import codecs -import md5 +from hashlib import md5 from Core.FileHook import __FileHookOpen__ from Library.Parsing import GenSection from Library.CommentGenerating import GenHeaderCommentSection @@ -70,7 +64,7 @@ from Library.StringUtils import GetUniFileName def GenPcd(Package, Content): # # generate [Pcd] section - # .||| + # .||| # ValidUsageDict = {} for Pcd in Package.GetPcdList(): @@ -80,16 +74,16 @@ def GenPcd(Package, Content): HelpTextList = Pcd.GetHelpTextList() HelpStr = _GetHelpStr(HelpTextList) CommentStr = GenGenericCommentF(HelpStr, 2) - + PromptList = Pcd.GetPromptList() PromptStr = _GetHelpStr(PromptList) CommentStr += GenGenericCommentF(PromptStr.strip(), 1, True) - + PcdErrList = Pcd.GetPcdErrorsList() for PcdErr in PcdErrList: CommentStr += GenPcdErrComment(PcdErr) Statement = CommentStr - + CName = Pcd.GetCName() TokenSpaceGuidCName = Pcd.GetTokenSpaceGuidCName() DefaultValue = Pcd.GetDefaultValue() @@ -107,7 +101,7 @@ def GenPcd(Package, Content): ValidUsage = 'PcdsDynamic' elif ValidUsage == 'PcdEx': ValidUsage = 'PcdsDynamicEx' - + if ValidUsage in ValidUsageDict: NewSectionDict = ValidUsageDict[ValidUsage] else: @@ -129,17 +123,17 @@ def GenPcd(Package, Content): NewSectionDict[SortedArch] = \ NewSectionDict[SortedArch] + [Statement] else: - NewSectionDict[SortedArch] = [Statement] - + NewSectionDict[SortedArch] = [Statement] + for ValidUsage in ValidUsageDict: Content += GenSection(ValidUsage, ValidUsageDict[ValidUsage], True, True) - + return Content def GenPcdErrorMsgSection(Package, Content): if not Package.PcdErrorCommentDict: return Content - + # # Generate '# [Error.]' section # @@ -148,14 +142,14 @@ def GenPcdErrorMsgSection(Package, Content): SectionComment += TAB_COMMENT_SPLIT + TAB_SPACE_SPLIT + TAB_PCD_ERROR_SECTION_COMMENT + END_OF_LINE SectionComment += TAB_COMMENT_SPLIT + END_OF_LINE TokenSpcCNameList = [] - + # # Get TokenSpcCName list in PcdErrorCommentDict in Package object # for (TokenSpcCName, ErrorNumber) in Package.PcdErrorCommentDict: if TokenSpcCName not in TokenSpcCNameList: TokenSpcCNameList.append(TokenSpcCName) - + for TokenSpcCNameItem in TokenSpcCNameList: SectionName = TAB_COMMENT_SPLIT + TAB_SPACE_SPLIT + TAB_SECTION_START + TAB_PCD_ERROR + \ TAB_SPLIT + TokenSpcCNameItem + TAB_SECTION_END + END_OF_LINE @@ -168,10 +162,10 @@ def GenPcdErrorMsgSection(Package, Content): ErrorNumber + TAB_SPACE_SPLIT + TAB_VALUE_SPLIT + TAB_SPACE_SPLIT + \ PcdErrorMsg + END_OF_LINE Content += SectionItem - + Content += TAB_COMMENT_SPLIT return Content - + def GenGuidProtocolPpi(Package, Content): # # generate [Guids] section @@ -203,17 +197,17 @@ def GenGuidProtocolPpi(Package, Content): # generate tail comment # if Guid.GetSupModuleList(): - Statement += GenDecTailComment(Guid.GetSupModuleList()) + Statement += GenDecTailComment(Guid.GetSupModuleList()) ArchList = sorted(Guid.GetSupArchList()) SortedArch = ' '.join(ArchList) if SortedArch in NewSectionDict: NewSectionDict[SortedArch] = \ NewSectionDict[SortedArch] + [Statement] else: - NewSectionDict[SortedArch] = [Statement] + NewSectionDict[SortedArch] = [Statement] Content += GenSection('Guids', NewSectionDict, True, True) - + # # generate [Protocols] section # @@ -232,9 +226,9 @@ def GenGuidProtocolPpi(Package, Content): # HelpTextList = Protocol.GetHelpTextList() HelpStr = _GetHelpStr(HelpTextList) - CommentStr = GenGenericCommentF(HelpStr, 2) + CommentStr = GenGenericCommentF(HelpStr, 2) - Statement = CommentStr + Statement = CommentStr CName = Protocol.GetCName() Value = GuidStringToGuidStructureString(Protocol.GetGuid()) Statement += CName.ljust(LeftOffset) + ' = ' + Value @@ -250,9 +244,9 @@ def GenGuidProtocolPpi(Package, Content): NewSectionDict[SortedArch] = \ NewSectionDict[SortedArch] + [Statement] else: - NewSectionDict[SortedArch] = [Statement] + NewSectionDict[SortedArch] = [Statement] - Content += GenSection('Protocols', NewSectionDict, True, True) + Content += GenSection('Protocols', NewSectionDict, True, True) # # generate [Ppis] section @@ -290,28 +284,28 @@ def GenGuidProtocolPpi(Package, Content): NewSectionDict[SortedArch] = \ NewSectionDict[SortedArch] + [Statement] else: - NewSectionDict[SortedArch] = [Statement] + NewSectionDict[SortedArch] = [Statement] Content += GenSection('Ppis', NewSectionDict, True, True) - + return Content ## Transfer Package Object to Dec files # -# Transfer all contents of a standard Package Object to a Dec file +# Transfer all contents of a standard Package Object to a Dec file # -# @param Package: A Package +# @param Package: A Package # def PackageToDec(Package, DistHeader = None): # # Init global information for the file # ContainerFile = Package.GetFullPath() - + Content = '' - + # - # Generate file header + # Generate file header # PackageAbstract = GetLocalValue(Package.GetAbstract()) PackageDescription = GetLocalValue(Package.GetDescription()) @@ -335,7 +329,7 @@ def PackageToDec(Package, DistHeader = None): if not PackageLicense and DistHeader: for (Lang, License) in DistHeader.GetLicense(): PackageLicense = License - + # # Generate header comment section of DEC file # @@ -345,7 +339,7 @@ def PackageToDec(Package, DistHeader = None): PackageLicense).replace('\r\n', '\n') # - # Generate Binary header + # Generate Binary header # for UserExtension in Package.GetUserExtensionList(): if UserExtension.GetUserID() == TAB_BINARY_HEADER_USERID \ @@ -357,12 +351,12 @@ def PackageToDec(Package, DistHeader = None): for (Lang, Copyright) in UserExtension.GetBinaryCopyright(): PackageBinaryCopyright = Copyright for (Lang, License) in UserExtension.GetBinaryLicense(): - PackageBinaryLicense = License + PackageBinaryLicense = License if PackageBinaryAbstract and PackageBinaryDescription and \ PackageBinaryCopyright and PackageBinaryLicense: - Content += GenHeaderCommentSection(PackageBinaryAbstract, - PackageBinaryDescription, - PackageBinaryCopyright, + Content += GenHeaderCommentSection(PackageBinaryAbstract, + PackageBinaryDescription, + PackageBinaryCopyright, PackageBinaryLicense, True) @@ -374,23 +368,23 @@ def PackageToDec(Package, DistHeader = None): GenPackageUNIEncodeFile(Package, FileHeader) # - # for each section, maintain a dict, sorted arch will be its key, + # for each section, maintain a dict, sorted arch will be its key, #statement list will be its data # { 'Arch1 Arch2 Arch3': [statement1, statement2], - # 'Arch1' : [statement1, statement3] + # 'Arch1' : [statement1, statement3] # } # - + # - # generate [Defines] section + # generate [Defines] section # LeftOffset = 31 NewSectionDict = {TAB_ARCH_COMMON : []} SpecialItemList = [] - + Statement = (u'%s ' % TAB_DEC_DEFINES_DEC_SPECIFICATION).ljust(LeftOffset) + u'= %s' % '0x00010017' SpecialItemList.append(Statement) - + BaseName = Package.GetBaseName() if BaseName.startswith('.') or BaseName.startswith('-'): BaseName = '_' + BaseName @@ -405,7 +399,7 @@ def PackageToDec(Package, DistHeader = None): if Package.UNIFlag: Statement = (u'%s ' % TAB_DEC_DEFINES_PKG_UNI_FILE).ljust(LeftOffset) + u'= %s' % Package.GetBaseName() + '.uni' - SpecialItemList.append(Statement) + SpecialItemList.append(Statement) for SortedArch in NewSectionDict: NewSectionDict[SortedArch] = \ @@ -417,7 +411,7 @@ def PackageToDec(Package, DistHeader = None): # NewSectionDict = {} IncludeArchList = Package.GetIncludeArchList() - if IncludeArchList: + if IncludeArchList: for Path, ArchList in IncludeArchList: Statement = Path ArchList.sort() @@ -465,7 +459,7 @@ def PackageToDec(Package, DistHeader = None): NewSectionDict[SortedArch] = \ NewSectionDict[SortedArch] + [Statement] else: - NewSectionDict[SortedArch] = [Statement] + NewSectionDict[SortedArch] = [Statement] Content += GenSection('LibraryClasses', NewSectionDict, True, True) @@ -473,7 +467,7 @@ def PackageToDec(Package, DistHeader = None): # Generate '# [Error.]' section # Content = GenPcdErrorMsgSection(Package, Content) - + Content = GenPcd(Package, Content) # @@ -498,7 +492,7 @@ def PackageToDec(Package, DistHeader = None): NewStatement = "" for Line in LineList: NewStatement += " %s\n" % Line - + SectionList = [] SectionName = 'UserExtensions' UserId = UserExtension.GetUserID() @@ -533,7 +527,7 @@ def GenPackageUNIEncodeFile(PackageObject, UniFileHeader = '', Encoding=TAB_ENCO BinaryAbstract = [] BinaryDescription = [] # - # If more than one language code is used for any element that would be present in the PACKAGE_UNI_FILE, + # If more than one language code is used for any element that would be present in the PACKAGE_UNI_FILE, # then the PACKAGE_UNI_FILE must be created. # for (Key, Value) in PackageObject.GetAbstract() + PackageObject.GetDescription(): @@ -541,7 +535,7 @@ def GenPackageUNIEncodeFile(PackageObject, UniFileHeader = '', Encoding=TAB_ENCO GenUNIFlag = True else: OnlyLANGUAGE_EN_X = False - + for UserExtension in PackageObject.GetUserExtensionList(): if UserExtension.GetUserID() == TAB_BINARY_HEADER_USERID \ and UserExtension.GetIdentifier() == TAB_BINARY_HEADER_IDENTIFIER: @@ -565,7 +559,7 @@ def GenPackageUNIEncodeFile(PackageObject, UniFileHeader = '', Encoding=TAB_ENCO GenUNIFlag = True else: OnlyLANGUAGE_EN_X = False - + for PcdError in Pcd.GetPcdErrorsList(): if PcdError.GetErrorNumber().startswith('0x') or PcdError.GetErrorNumber().startswith('0X'): for (Key, Value) in PcdError.GetErrorMessageList(): @@ -579,26 +573,26 @@ def GenPackageUNIEncodeFile(PackageObject, UniFileHeader = '', Encoding=TAB_ENCO return else: PackageObject.UNIFlag = True - + if not os.path.exists(os.path.dirname(PackageObject.GetFullPath())): os.makedirs(os.path.dirname(PackageObject.GetFullPath())) - + ContainerFile = GetUniFileName(os.path.dirname(PackageObject.GetFullPath()), PackageObject.GetBaseName()) Content = UniFileHeader + '\r\n' Content += '\r\n' - + Content += FormatUniEntry('#string ' + TAB_DEC_PACKAGE_ABSTRACT, PackageObject.GetAbstract(), ContainerFile) + '\r\n' - + Content += FormatUniEntry('#string ' + TAB_DEC_PACKAGE_DESCRIPTION, PackageObject.GetDescription(), ContainerFile) \ + '\r\n' - + Content += FormatUniEntry('#string ' + TAB_DEC_BINARY_ABSTRACT, BinaryAbstract, ContainerFile) + '\r\n' - + Content += FormatUniEntry('#string ' + TAB_DEC_BINARY_DESCRIPTION, BinaryDescription, ContainerFile) + '\r\n' - + PromptGenList = [] - HelpTextGenList = [] + HelpTextGenList = [] for Pcd in PackageObject.GetPcdList(): # Generate Prompt for each Pcd PcdPromptStrName = '#string ' + 'STR_' + Pcd.GetTokenSpaceGuidCName() + '_' + Pcd.GetCName() + '_PROMPT ' @@ -607,7 +601,7 @@ def GenPackageUNIEncodeFile(PackageObject, UniFileHeader = '', Encoding=TAB_ENCO Lang = TxtObj.GetLang() PromptStr = TxtObj.GetString() # - # Avoid generating the same PROMPT entry more than one time. + # Avoid generating the same PROMPT entry more than one time. # if (PcdPromptStrName, Lang) not in PromptGenList: TokenValueList.append((Lang, PromptStr)) @@ -615,7 +609,7 @@ def GenPackageUNIEncodeFile(PackageObject, UniFileHeader = '', Encoding=TAB_ENCO PromptString = FormatUniEntry(PcdPromptStrName, TokenValueList, ContainerFile) + '\r\n' if PromptString not in Content: Content += PromptString - + # Generate Help String for each Pcd PcdHelpStrName = '#string ' + 'STR_' + Pcd.GetTokenSpaceGuidCName() + '_' + Pcd.GetCName() + '_HELP ' TokenValueList = [] @@ -623,7 +617,7 @@ def GenPackageUNIEncodeFile(PackageObject, UniFileHeader = '', Encoding=TAB_ENCO Lang = TxtObj.GetLang() HelpStr = TxtObj.GetString() # - # Avoid generating the same HELP entry more than one time. + # Avoid generating the same HELP entry more than one time. # if (PcdHelpStrName, Lang) not in HelpTextGenList: TokenValueList.append((Lang, HelpStr)) @@ -631,7 +625,7 @@ def GenPackageUNIEncodeFile(PackageObject, UniFileHeader = '', Encoding=TAB_ENCO HelpTextString = FormatUniEntry(PcdHelpStrName, TokenValueList, ContainerFile) + '\r\n' if HelpTextString not in Content: Content += HelpTextString - + # Generate PcdError for each Pcd if ErrorNo exist. for PcdError in Pcd.GetPcdErrorsList(): ErrorNo = PcdError.GetErrorNumber() @@ -642,33 +636,33 @@ def GenPackageUNIEncodeFile(PackageObject, UniFileHeader = '', Encoding=TAB_ENCO PcdErrString = FormatUniEntry(PcdErrStrName, PcdError.GetErrorMessageList(), ContainerFile) + '\r\n' if PcdErrString not in Content: Content += PcdErrString - + File = codecs.open(ContainerFile, 'w', Encoding) File.write(u'\uFEFF' + Content) File.stream.close() - Md5Sigature = md5.new(__FileHookOpen__(str(ContainerFile), 'rb').read()) - Md5Sum = Md5Sigature.hexdigest() + Md5Signature = md5(__FileHookOpen__(str(ContainerFile), 'rb').read()) + Md5Sum = Md5Signature.hexdigest() if (ContainerFile, Md5Sum) not in PackageObject.FileList: PackageObject.FileList.append((ContainerFile, Md5Sum)) return ContainerFile - + ## GenPcdErrComment # # @param PcdErrObject: PcdErrorObject -# +# # @retval CommentStr: Generated comment lines, with prefix "#" -# +# def GenPcdErrComment (PcdErrObject): - CommentStr = '' + CommentStr = '' ErrorCode = PcdErrObject.GetErrorNumber() ValidValueRange = PcdErrObject.GetValidValueRange() if ValidValueRange: - CommentStr = TAB_COMMENT_SPLIT + TAB_SPACE_SPLIT + TAB_PCD_VALIDRANGE + TAB_SPACE_SPLIT + CommentStr = TAB_COMMENT_SPLIT + TAB_SPACE_SPLIT + TAB_PCD_VALIDRANGE + TAB_SPACE_SPLIT if ErrorCode: CommentStr += ErrorCode + TAB_SPACE_SPLIT + TAB_VALUE_SPLIT + TAB_SPACE_SPLIT CommentStr += ValidValueRange + END_OF_LINE - + ValidValue = PcdErrObject.GetValidValue() if ValidValue: ValidValueList = \ @@ -677,13 +671,13 @@ def GenPcdErrComment (PcdErrObject): if ErrorCode: CommentStr += ErrorCode + TAB_SPACE_SPLIT + TAB_VALUE_SPLIT + TAB_SPACE_SPLIT CommentStr += TAB_COMMA_SPLIT.join(ValidValueList) + END_OF_LINE - + Expression = PcdErrObject.GetExpression() if Expression: CommentStr = TAB_COMMENT_SPLIT + TAB_SPACE_SPLIT + TAB_PCD_EXPRESSION + TAB_SPACE_SPLIT if ErrorCode: CommentStr += ErrorCode + TAB_SPACE_SPLIT + TAB_VALUE_SPLIT + TAB_SPACE_SPLIT CommentStr += Expression + END_OF_LINE - + return CommentStr