summaryrefslogtreecommitdiff
path: root/BaseTools/Source/Python/UPT/GenMetaFile/GenDecFile.py
diff options
context:
space:
mode:
Diffstat (limited to 'BaseTools/Source/Python/UPT/GenMetaFile/GenDecFile.py')
-rw-r--r--BaseTools/Source/Python/UPT/GenMetaFile/GenDecFile.py694
1 files changed, 0 insertions, 694 deletions
diff --git a/BaseTools/Source/Python/UPT/GenMetaFile/GenDecFile.py b/BaseTools/Source/Python/UPT/GenMetaFile/GenDecFile.py
deleted file mode 100644
index d39c1827ba..0000000000
--- a/BaseTools/Source/Python/UPT/GenMetaFile/GenDecFile.py
+++ /dev/null
@@ -1,694 +0,0 @@
-## @file GenDecFile.py
-#
-# This file contained the logical of transfer package object to DEC files.
-#
-# Copyright (c) 2011 - 2016, Intel Corporation. All rights reserved.<BR>
-#
-# 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.
-#
-
-'''
-GenDEC
-'''
-import os
-import stat
-import codecs
-import md5
-from Core.FileHook import __FileHookOpen__
-from Library.Parsing import GenSection
-from Library.CommentGenerating import GenHeaderCommentSection
-from Library.CommentGenerating import GenGenericCommentF
-from Library.CommentGenerating import GenDecTailComment
-from Library.CommentGenerating import _GetHelpStr
-from Library.Misc import GuidStringToGuidStructureString
-from Library.Misc import SaveFileOnChange
-from Library.Misc import ConvertPath
-from Library.Misc import GetLocalValue
-from Library.DataType import TAB_SPACE_SPLIT
-from Library.DataType import TAB_COMMA_SPLIT
-from Library.DataType import END_OF_LINE
-from Library.DataType import TAB_ARCH_COMMON
-from Library.DataType import TAB_VALUE_SPLIT
-from Library.DataType import TAB_COMMENT_SPLIT
-from Library.DataType import TAB_PCD_VALIDRANGE
-from Library.DataType import TAB_PCD_VALIDLIST
-from Library.DataType import TAB_PCD_EXPRESSION
-from Library.DataType import TAB_DEC_DEFINES_DEC_SPECIFICATION
-from Library.DataType import TAB_DEC_DEFINES_PACKAGE_NAME
-from Library.DataType import TAB_DEC_DEFINES_PACKAGE_GUID
-from Library.DataType import TAB_DEC_DEFINES_PACKAGE_VERSION
-from Library.DataType import TAB_DEC_DEFINES_PKG_UNI_FILE
-from Library.DataType import TAB_DEC_PACKAGE_ABSTRACT
-from Library.DataType import TAB_DEC_PACKAGE_DESCRIPTION
-from Library.DataType import TAB_DEC_BINARY_ABSTRACT
-from Library.DataType import TAB_DEC_BINARY_DESCRIPTION
-from Library.DataType import TAB_LANGUAGE_EN_X
-from Library.DataType import TAB_BINARY_HEADER_USERID
-from Library.DataType import TAB_BINARY_HEADER_IDENTIFIER
-from Library.DataType import TAB_COMMENT_EDK1_SPLIT
-from Library.DataType import TAB_ENCODING_UTF16LE
-from Library.DataType import TAB_CAPHEX_START
-from Library.DataType import TAB_HEX_START
-from Library.DataType import TAB_UNDERLINE_SPLIT
-from Library.DataType import TAB_STR_TOKENERR
-from Library.DataType import TAB_STR_TOKENCNAME
-from Library.DataType import TAB_PCD_ERROR_SECTION_COMMENT
-from Library.DataType import TAB_PCD_ERROR
-from Library.DataType import TAB_SECTION_START
-from Library.DataType import TAB_SECTION_END
-from Library.DataType import TAB_SPLIT
-import Library.DataType as DT
-from Library.UniClassObject import FormatUniEntry
-from Library.String import GetUniFileName
-
-def GenPcd(Package, Content):
- #
- # generate [Pcd] section
- # <TokenSpcCName>.<TokenCName>|<Value>|<DatumType>|<Token>
- #
- ValidUsageDict = {}
- for Pcd in Package.GetPcdList():
- #
- # Generate generic comment
- #
- 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()
- DatumType = Pcd.GetDatumType()
- Token = Pcd.GetToken()
- ValidUsage = Pcd.GetValidUsage()
-
- if ValidUsage == 'FeaturePcd':
- ValidUsage = 'PcdsFeatureFlag'
- elif ValidUsage == 'PatchPcd':
- ValidUsage = 'PcdsPatchableInModule'
- elif ValidUsage == 'FixedPcd':
- ValidUsage = 'PcdsFixedAtBuild'
- elif ValidUsage == 'Pcd':
- ValidUsage = 'PcdsDynamic'
- elif ValidUsage == 'PcdEx':
- ValidUsage = 'PcdsDynamicEx'
-
- if ValidUsage in ValidUsageDict:
- NewSectionDict = ValidUsageDict[ValidUsage]
- else:
- NewSectionDict = {}
- ValidUsageDict[ValidUsage] = NewSectionDict
- Statement += TokenSpaceGuidCName + '.' + CName
- Statement += '|' + DefaultValue
- Statement += '|' + DatumType
- Statement += '|' + Token
- #
- # generate tail comment
- #
- if Pcd.GetSupModuleList():
- Statement += GenDecTailComment(Pcd.GetSupModuleList())
-
- ArchList = Pcd.GetSupArchList()
- ArchList.sort()
- SortedArch = ' '.join(ArchList)
- if SortedArch in NewSectionDict:
- NewSectionDict[SortedArch] = \
- NewSectionDict[SortedArch] + [Statement]
- else:
- 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.<TokenSpcCName>]' section
- #
- Content += END_OF_LINE + END_OF_LINE
- SectionComment = TAB_COMMENT_SPLIT + END_OF_LINE
- 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
- Content += SectionComment
- Content += SectionName
- for (TokenSpcCName, ErrorNumber) in Package.PcdErrorCommentDict:
- if TokenSpcCNameItem == TokenSpcCName:
- PcdErrorMsg = GetLocalValue(Package.PcdErrorCommentDict[(TokenSpcCName, ErrorNumber)])
- SectionItem = TAB_COMMENT_SPLIT + TAB_SPACE_SPLIT + TAB_SPACE_SPLIT + \
- 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
- #
- NewSectionDict = {}
-
- LeftOffset = 46
- # Get the line offset need
- # If the real one < the min one, use the min one
- # else use the real one
- for Guid in Package.GetGuidList():
- if len(Guid.GetCName()) > LeftOffset:
- LeftOffset = len(Guid.GetCName())
-
- # Generate
- for Guid in Package.GetGuidList():
- #
- # Generate generic comment
- #
- HelpTextList = Guid.GetHelpTextList()
- HelpStr = _GetHelpStr(HelpTextList)
- CommentStr = GenGenericCommentF(HelpStr, 2)
-
- Statement = CommentStr
- CName = Guid.GetCName()
- Value = GuidStringToGuidStructureString(Guid.GetGuid())
- Statement += CName.ljust(LeftOffset) + ' = ' + Value
- #
- # generate tail comment
- #
- if Guid.GetSupModuleList():
- Statement += GenDecTailComment(Guid.GetSupModuleList())
- ArchList = Guid.GetSupArchList()
- ArchList.sort()
- SortedArch = ' '.join(ArchList)
- if SortedArch in NewSectionDict:
- NewSectionDict[SortedArch] = \
- NewSectionDict[SortedArch] + [Statement]
- else:
- NewSectionDict[SortedArch] = [Statement]
-
- Content += GenSection('Guids', NewSectionDict, True, True)
-
- #
- # generate [Protocols] section
- #
- NewSectionDict = {}
- LeftOffset = 46
- # Get the line offset need
- # If the real one < the min one, use the min one
- # else use the real one
- for Protocol in Package.GetProtocolList():
- if len(Protocol.GetCName()) > LeftOffset:
- LeftOffset = len(Protocol.GetCName())
-
- for Protocol in Package.GetProtocolList():
- #
- # Generate generic comment
- #
- HelpTextList = Protocol.GetHelpTextList()
- HelpStr = _GetHelpStr(HelpTextList)
- CommentStr = GenGenericCommentF(HelpStr, 2)
-
- Statement = CommentStr
- CName = Protocol.GetCName()
- Value = GuidStringToGuidStructureString(Protocol.GetGuid())
- Statement += CName.ljust(LeftOffset) + ' = ' + Value
-
- #
- # generate tail comment
- #
- if Protocol.GetSupModuleList():
- Statement += GenDecTailComment(Protocol.GetSupModuleList())
- ArchList = Protocol.GetSupArchList()
- ArchList.sort()
- SortedArch = ' '.join(ArchList)
- if SortedArch in NewSectionDict:
- NewSectionDict[SortedArch] = \
- NewSectionDict[SortedArch] + [Statement]
- else:
- NewSectionDict[SortedArch] = [Statement]
-
- Content += GenSection('Protocols', NewSectionDict, True, True)
-
- #
- # generate [Ppis] section
- #
- NewSectionDict = {}
- LeftOffset = 46
- # Get the line offset need
- # If the real one < the min one, use the min one
- # else use the real one
- for Ppi in Package.GetPpiList():
- if len(Ppi.GetCName()) > LeftOffset:
- LeftOffset = len(Ppi.GetCName())
-
- for Ppi in Package.GetPpiList():
- #
- # Generate generic comment
- #
- HelpTextList = Ppi.GetHelpTextList()
- HelpStr = _GetHelpStr(HelpTextList)
- CommentStr = GenGenericCommentF(HelpStr, 2)
-
- Statement = CommentStr
- CName = Ppi.GetCName()
- Value = GuidStringToGuidStructureString(Ppi.GetGuid())
- Statement += CName.ljust(LeftOffset) + ' = ' + Value
-
- #
- # generate tail comment
- #
- if Ppi.GetSupModuleList():
- Statement += GenDecTailComment(Ppi.GetSupModuleList())
- ArchList = Ppi.GetSupArchList()
- ArchList.sort()
- SortedArch = ' '.join(ArchList)
- if SortedArch in NewSectionDict:
- NewSectionDict[SortedArch] = \
- NewSectionDict[SortedArch] + [Statement]
- else:
- 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
-#
-# @param Package: A Package
-#
-def PackageToDec(Package, DistHeader = None):
- #
- # Init global information for the file
- #
- ContainerFile = Package.GetFullPath()
-
- Content = ''
-
- #
- # Generate file header
- #
- PackageAbstract = GetLocalValue(Package.GetAbstract())
- PackageDescription = GetLocalValue(Package.GetDescription())
- PackageCopyright = ''
- PackageLicense = ''
- for (Lang, Copyright) in Package.GetCopyright():
- if Lang:
- pass
- PackageCopyright = Copyright
- for (Lang, License) in Package.GetLicense():
- if Lang:
- pass
- PackageLicense = License
- if not PackageAbstract and DistHeader:
- PackageAbstract = GetLocalValue(DistHeader.GetAbstract())
- if not PackageDescription and DistHeader:
- PackageDescription = GetLocalValue(DistHeader.GetDescription())
- if not PackageCopyright and DistHeader:
- for (Lang, Copyright) in DistHeader.GetCopyright():
- PackageCopyright = Copyright
- if not PackageLicense and DistHeader:
- for (Lang, License) in DistHeader.GetLicense():
- PackageLicense = License
-
- #
- # Generate header comment section of DEC file
- #
- Content += GenHeaderCommentSection(PackageAbstract, \
- PackageDescription, \
- PackageCopyright, \
- PackageLicense).replace('\r\n', '\n')
-
- #
- # Generate Binary header
- #
- for UserExtension in Package.GetUserExtensionList():
- if UserExtension.GetUserID() == TAB_BINARY_HEADER_USERID \
- and UserExtension.GetIdentifier() == TAB_BINARY_HEADER_IDENTIFIER:
- PackageBinaryAbstract = GetLocalValue(UserExtension.GetBinaryAbstract())
- PackageBinaryDescription = GetLocalValue(UserExtension.GetBinaryDescription())
- PackageBinaryCopyright = ''
- PackageBinaryLicense = ''
- for (Lang, Copyright) in UserExtension.GetBinaryCopyright():
- PackageBinaryCopyright = Copyright
- for (Lang, License) in UserExtension.GetBinaryLicense():
- PackageBinaryLicense = License
- if PackageBinaryAbstract and PackageBinaryDescription and \
- PackageBinaryCopyright and PackageBinaryLicense:
- Content += GenHeaderCommentSection(PackageBinaryAbstract,
- PackageBinaryDescription,
- PackageBinaryCopyright,
- PackageBinaryLicense,
- True)
-
- #
- # Generate PACKAGE_UNI_FILE for the Package
- #
- FileHeader = GenHeaderCommentSection(PackageAbstract, PackageDescription, PackageCopyright, PackageLicense, False, \
- TAB_COMMENT_EDK1_SPLIT)
- GenPackageUNIEncodeFile(Package, FileHeader)
-
- #
- # 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]
- # }
- #
-
- #
- # 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
- Statement = (u'%s ' % TAB_DEC_DEFINES_PACKAGE_NAME).ljust(LeftOffset) + u'= %s' % BaseName
- SpecialItemList.append(Statement)
-
- Statement = (u'%s ' % TAB_DEC_DEFINES_PACKAGE_VERSION).ljust(LeftOffset) + u'= %s' % Package.GetVersion()
- SpecialItemList.append(Statement)
-
- Statement = (u'%s ' % TAB_DEC_DEFINES_PACKAGE_GUID).ljust(LeftOffset) + u'= %s' % Package.GetGuid()
- SpecialItemList.append(Statement)
-
- if Package.UNIFlag:
- Statement = (u'%s ' % TAB_DEC_DEFINES_PKG_UNI_FILE).ljust(LeftOffset) + u'= %s' % Package.GetBaseName() + '.uni'
- SpecialItemList.append(Statement)
-
- for SortedArch in NewSectionDict:
- NewSectionDict[SortedArch] = \
- NewSectionDict[SortedArch] + SpecialItemList
- Content += GenSection('Defines', NewSectionDict)
-
- #
- # generate [Includes] section
- #
- NewSectionDict = {}
- IncludeArchList = Package.GetIncludeArchList()
- if IncludeArchList:
- for Path, ArchList in IncludeArchList:
- Statement = Path
- ArchList.sort()
- SortedArch = ' '.join(ArchList)
- if SortedArch in NewSectionDict:
- NewSectionDict[SortedArch] = \
- NewSectionDict[SortedArch] + [ConvertPath(Statement)]
- else:
- NewSectionDict[SortedArch] = [ConvertPath(Statement)]
-
- Content += GenSection('Includes', NewSectionDict)
-
- #
- # generate [guids][protocols][ppis] sections
- #
- Content = GenGuidProtocolPpi(Package, Content)
-
- #
- # generate [LibraryClasses] section
- #
- NewSectionDict = {}
- for LibraryClass in Package.GetLibraryClassList():
- #
- # Generate generic comment
- #
- HelpTextList = LibraryClass.GetHelpTextList()
- HelpStr = _GetHelpStr(HelpTextList)
- if HelpStr:
- HelpStr = '@libraryclass' + HelpStr
- CommentStr = GenGenericCommentF(HelpStr, 2, False, True)
-
- Statement = CommentStr
- Name = LibraryClass.GetLibraryClass()
- IncludeHeader = LibraryClass.GetIncludeHeader()
- Statement += Name + '|' + ConvertPath(IncludeHeader)
- #
- # generate tail comment
- #
- if LibraryClass.GetSupModuleList():
- Statement += \
- GenDecTailComment(LibraryClass.GetSupModuleList())
- ArchList = LibraryClass.GetSupArchList()
- ArchList.sort()
- SortedArch = ' '.join(ArchList)
- if SortedArch in NewSectionDict:
- NewSectionDict[SortedArch] = \
- NewSectionDict[SortedArch] + [Statement]
- else:
- NewSectionDict[SortedArch] = [Statement]
-
- Content += GenSection('LibraryClasses', NewSectionDict, True, True)
-
- #
- # Generate '# [Error.<TokenSpcCName>]' section
- #
- Content = GenPcdErrorMsgSection(Package, Content)
-
- Content = GenPcd(Package, Content)
-
- #
- # generate [UserExtensions] section
- #
- NewSectionDict = {}
- for UserExtension in Package.GetUserExtensionList():
- if UserExtension.GetUserID() == TAB_BINARY_HEADER_USERID and \
- UserExtension.GetIdentifier() == TAB_BINARY_HEADER_IDENTIFIER:
- continue
-
- # Generate Private Section first
- if UserExtension.GetUserID() == DT.TAB_INTEL and UserExtension.GetIdentifier() == DT.TAB_PRIVATE:
- Content += '\n' + UserExtension.GetStatement()
- continue
-
- Statement = UserExtension.GetStatement()
- if not Statement:
- continue
- else:
- LineList = Statement.split('\n')
- NewStatement = ""
- for Line in LineList:
- NewStatement += " %s\n" % Line
-
- SectionList = []
- SectionName = 'UserExtensions'
- UserId = UserExtension.GetUserID()
- if UserId:
- if '.' in UserId:
- UserId = '"' + UserId + '"'
- SectionName += '.' + UserId
- if UserExtension.GetIdentifier():
- SectionName += '.' + '"' + UserExtension.GetIdentifier() + '"'
- if not UserExtension.GetSupArchList():
- SectionList.append(SectionName)
- else:
- for Arch in UserExtension.GetSupArchList():
- SectionList.append(SectionName + '.' + Arch)
- SectionName = ', '.join(SectionList)
- SectionName = ''.join(['[', SectionName, ']\n'])
- Content += '\n' + SectionName + NewStatement
-
- SaveFileOnChange(ContainerFile, Content, False)
- if DistHeader.ReadOnly:
- os.chmod(ContainerFile, stat.S_IRUSR|stat.S_IRGRP|stat.S_IROTH)
- else:
- os.chmod(ContainerFile, stat.S_IRUSR|stat.S_IRGRP|stat.S_IROTH|stat.S_IWUSR|stat.S_IWGRP|stat.S_IWOTH)
- return ContainerFile
-
-## GenPackageUNIEncodeFile
-# GenPackageUNIEncodeFile, default is a UCS-2LE encode file
-#
-def GenPackageUNIEncodeFile(PackageObject, UniFileHeader = '', Encoding=TAB_ENCODING_UTF16LE):
- GenUNIFlag = False
- OnlyLANGUAGE_EN_X = True
- BinaryAbstract = []
- BinaryDescription = []
- #
- # 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():
- if Key == TAB_LANGUAGE_EN_X:
- 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:
- for (Key, Value) in UserExtension.GetBinaryAbstract():
- if Key == TAB_LANGUAGE_EN_X:
- GenUNIFlag = True
- else:
- OnlyLANGUAGE_EN_X = False
- BinaryAbstract.append((Key, Value))
-
- for (Key, Value) in UserExtension.GetBinaryDescription():
- if Key == TAB_LANGUAGE_EN_X:
- GenUNIFlag = True
- else:
- OnlyLANGUAGE_EN_X = False
- BinaryDescription.append((Key, Value))
-
- for Pcd in PackageObject.GetPcdList():
- for TxtObj in Pcd.GetPromptList() + Pcd.GetHelpTextList():
- if TxtObj.GetLang() == TAB_LANGUAGE_EN_X:
- 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():
- if Key == TAB_LANGUAGE_EN_X:
- GenUNIFlag = True
- else:
- OnlyLANGUAGE_EN_X = False
- if not GenUNIFlag:
- return
- elif OnlyLANGUAGE_EN_X:
- 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 = []
- for Pcd in PackageObject.GetPcdList():
- # Generate Prompt for each Pcd
- PcdPromptStrName = '#string ' + 'STR_' + Pcd.GetTokenSpaceGuidCName() + '_' + Pcd.GetCName() + '_PROMPT '
- TokenValueList = []
- for TxtObj in Pcd.GetPromptList():
- Lang = TxtObj.GetLang()
- PromptStr = TxtObj.GetString()
- #
- # Avoid generating the same PROMPT entry more than one time.
- #
- if (PcdPromptStrName, Lang) not in PromptGenList:
- TokenValueList.append((Lang, PromptStr))
- PromptGenList.append((PcdPromptStrName, Lang))
- 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 = []
- for TxtObj in Pcd.GetHelpTextList():
- Lang = TxtObj.GetLang()
- HelpStr = TxtObj.GetString()
- #
- # Avoid generating the same HELP entry more than one time.
- #
- if (PcdHelpStrName, Lang) not in HelpTextGenList:
- TokenValueList.append((Lang, HelpStr))
- HelpTextGenList.append((PcdHelpStrName, Lang))
- 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()
- if ErrorNo.startswith(TAB_HEX_START) or ErrorNo.startswith(TAB_CAPHEX_START):
- PcdErrStrName = '#string ' + TAB_STR_TOKENCNAME + TAB_UNDERLINE_SPLIT + Pcd.GetTokenSpaceGuidCName() \
- + TAB_UNDERLINE_SPLIT + TAB_STR_TOKENERR \
- + TAB_UNDERLINE_SPLIT + ErrorNo[2:]
- 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()
- 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 = ''
- ErrorCode = PcdErrObject.GetErrorNumber()
- ValidValueRange = PcdErrObject.GetValidValueRange()
- if ValidValueRange:
- 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 = \
- [Value for Value in ValidValue.split(TAB_SPACE_SPLIT) if Value]
- CommentStr = TAB_COMMENT_SPLIT + TAB_SPACE_SPLIT + TAB_PCD_VALIDLIST + TAB_SPACE_SPLIT
- 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
-