def ToXml(self, PackageObject2, Key): if self.PackagePath: pass Element1 = CreateXmlElement('Name', PackageObject2.GetName(), [], \ [['BaseName', PackageObject2.GetBaseName()]]) Element2 = CreateXmlElement('GUID', PackageObject2.GetGuid(), [], \ [['Version', PackageObject2.GetVersion()]]) NodeList = [Element1, Element2] UNIPackageAbrstractList = [] UNIPackageDescriptionList = [] # Get Abstract and Description from Uni File # if the Uni File exists if PackageObject2.UniFileClassObject is not None: UniStrDict = PackageObject2.UniFileClassObject.OrderedStringList for Lang in UniStrDict: for StringDefClassObject in UniStrDict[Lang]: if not StringDefClassObject.StringValue: continue if StringDefClassObject.StringName == DataType.TAB_DEC_PACKAGE_ABSTRACT: UNIPackageAbrstractList.append( (GetLanguageCode1766(Lang), ConvertSpecialUnicodes( StringDefClassObject.StringValue))) if StringDefClassObject.StringName == DataType.TAB_DEC_PACKAGE_DESCRIPTION: UNIPackageDescriptionList.append( (GetLanguageCode1766(Lang), ConvertSpecialUnicodes( StringDefClassObject.StringValue))) # Get Abstract and Description from DEC File Header for (Lang, Value) in PackageObject2.GetCopyright(): if Value: NodeList.append( CreateXmlElement(DataType.TAB_HEADER_COPYRIGHT, Value, [], [])) for (Lang, Value) in PackageObject2.GetLicense(): if Value: NodeList.append( CreateXmlElement(DataType.TAB_HEADER_LICENSE, Value, [], [])) for (Lang, Value) in PackageObject2.GetAbstract() + UNIPackageAbrstractList: if Value: NodeList.append( CreateXmlElement(DataType.TAB_HEADER_ABSTRACT, Value, [], [['Lang', Lang]])) for (Lang, Value ) in PackageObject2.GetDescription() + UNIPackageDescriptionList: if Value: NodeList.append( CreateXmlElement(DataType.TAB_HEADER_DESCRIPTION, Value, [], [['Lang', Lang]])) NodeList.append(['PackagePath', PackageObject2.GetPackagePath()]) AttributeList = [] Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList) return Root
def ToXml(self, Header, Key): if self.GUID: pass Element1 = CreateXmlElement( 'Name', Header.GetName(), [], [['BaseName', Header.GetBaseName()]]) Element2 = CreateXmlElement( 'GUID', Header.GetGuid(), [], [['Version', Header.GetVersion()]]) NodeList = [ Element1, Element2, ] UNIInfAbstractList = [] UNIInfDescriptionList = [] # Get Abstract and Description from Uni File # if the Uni File exists if Header.UniFileClassObject is not None: UniStrDict = Header.UniFileClassObject.OrderedStringList for Lang in UniStrDict: for StringDefClassObject in UniStrDict[Lang]: if not StringDefClassObject.StringValue: continue if StringDefClassObject.StringName == DataType.TAB_INF_ABSTRACT: UNIInfAbstractList.append( (GetLanguageCode1766(Lang), ConvertSpecialUnicodes( StringDefClassObject.StringValue))) if StringDefClassObject.StringName == DataType.TAB_INF_DESCRIPTION: UNIInfDescriptionList.append( (GetLanguageCode1766(Lang), ConvertSpecialUnicodes( StringDefClassObject.StringValue))) # Get Abstract and Description from INF File Header for (Lang, Value) in Header.GetCopyright(): if Value: NodeList.append(CreateXmlElement('Copyright', Value, [], [])) for (Lang, Value) in Header.GetLicense(): if Value: NodeList.append(CreateXmlElement('License', Value, [], [])) for (Lang, Value) in Header.GetAbstract() + UNIInfAbstractList: if Value: NodeList.append( CreateXmlElement('Abstract', Value, [], [['Lang', Lang]])) for (Lang, Value) in Header.GetDescription() + UNIInfDescriptionList: if Value: NodeList.append( CreateXmlElement('Description', Value, [], [['Lang', Lang]])) AttributeList = [] Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList) return Root
def _GenUserExtensions(self): # # UserExtensions # UserExtensionObj = self.Parser.InfUserExtensionSection.UserExtension Keys = UserExtensionObj.keys() for Key in Keys: UserExtensionData = UserExtensionObj[Key] for UserExtensionDataObj in UserExtensionData: UserExtension = CommonObject.UserExtensionObject() UserId = UserExtensionDataObj.GetUserId() if UserId.startswith('"') and UserId.endswith('"'): UserId = UserId[1:-1] UserExtension.SetUserID(UserId) Identifier = UserExtensionDataObj.GetIdString() if Identifier.startswith('"') and Identifier.endswith('"'): Identifier = Identifier[1:-1] # # Generate miscellaneous files on INF file # if UserId == 'TianoCore' and Identifier == 'ExtraFiles': self._GenMiscFiles(UserExtensionDataObj.GetContent()) UserExtension.SetIdentifier(Identifier) UserExtension.SetStatement(UserExtensionDataObj.GetContent()) UserExtension.SetSupArchList(ConvertArchList(UserExtensionDataObj.GetSupArchList())) self.SetUserExtensionList(self.GetUserExtensionList() + [UserExtension]) # # Gen UserExtensions of TianoCore."BinaryHeader" # #Get Binary header from INF file BinaryAbstractList = self.BinaryHeaderAbstractList BinaryDescriptionList = self.BinaryHeaderDescriptionList BinaryCopyrightList = self.BinaryHeaderCopyrightList BinaryLicenseList = self.BinaryHeaderLicenseList #Get Binary header from UNI file # Initialize UniStrDict, the top keys are language codes UniStrDict = {} if self.UniFileClassObject: UniStrDict = self.UniFileClassObject.OrderedStringList for Lang in UniStrDict: for StringDefClassObject in UniStrDict[Lang]: Lang = GetLanguageCode1766(Lang) if StringDefClassObject.StringName == DT.TAB_INF_BINARY_ABSTRACT: BinaryAbstractList.append((Lang, ConvertSpecialUnicodes(StringDefClassObject.StringValue))) if StringDefClassObject.StringName == DT.TAB_INF_BINARY_DESCRIPTION: BinaryDescriptionList.append((Lang, ConvertSpecialUnicodes(StringDefClassObject.StringValue))) if BinaryAbstractList or BinaryDescriptionList or BinaryCopyrightList or BinaryLicenseList: BinaryUserExtension = CommonObject.UserExtensionObject() BinaryUserExtension.SetBinaryAbstract(BinaryAbstractList) BinaryUserExtension.SetBinaryDescription(BinaryDescriptionList) BinaryUserExtension.SetBinaryCopyright(BinaryCopyrightList) BinaryUserExtension.SetBinaryLicense(BinaryLicenseList) BinaryUserExtension.SetIdentifier(DT.TAB_BINARY_HEADER_IDENTIFIER) BinaryUserExtension.SetUserID(DT.TAB_BINARY_HEADER_USERID) self.SetUserExtensionList(self.GetUserExtensionList() + [BinaryUserExtension])
def GenPcds(self, ContainerFile): Logger.Debug(2, "Generate %s ..." % TAB_PCDS) PcdObj = self.DecParser.GetPcdSectionObject() # # Get all Pcds # PcdDeclarations = [] IterList = [ (TAB_PCDS_FIXED_AT_BUILD_NULL, 'FixedPcd'), (TAB_PCDS_PATCHABLE_IN_MODULE_NULL, 'PatchPcd'), (TAB_PCDS_FEATURE_FLAG_NULL, 'FeaturePcd'), (TAB_PCDS_DYNAMIC_EX_NULL, 'PcdEx'), (TAB_PCDS_DYNAMIC_NULL, 'Pcd')] PromptStrList = [] HelpStrList = [] PcdErrStrList = [] # Initialize UniStrDict dictionary, top keys are language codes UniStrDict = {} StrList = [] Language = '' if self.UniFileClassObject: Language = TAB_LANGUAGE_EN_X else: Language = TAB_LANGUAGE_EN_US if self.UniFileClassObject: UniStrDict = self.UniFileClassObject.OrderedStringList for Lang in UniStrDict: for StringDefClassObject in UniStrDict[Lang]: StrList = StringDefClassObject.StringName.split('_') # StringName format is STR_<TOKENSPACECNAME>_<PCDCNAME>_PROMPT if len(StrList) == 4 and StrList[0] == TAB_STR_TOKENCNAME and StrList[3] == TAB_STR_TOKENPROMPT: PromptStrList.append((GetLanguageCode1766(Lang), StringDefClassObject.StringName, \ StringDefClassObject.StringValue)) # StringName format is STR_<TOKENSPACECNAME>_<PCDCNAME>_HELP if len(StrList) == 4 and StrList[0] == TAB_STR_TOKENCNAME and StrList[3] == TAB_STR_TOKENHELP: HelpStrList.append((GetLanguageCode1766(Lang), StringDefClassObject.StringName, \ StringDefClassObject.StringValue)) # StringName format is STR_<TOKENSPACECNAME>_ERR_## if len(StrList) == 4 and StrList[0] == TAB_STR_TOKENCNAME and StrList[2] == TAB_STR_TOKENERR: PcdErrStrList.append((GetLanguageCode1766(Lang), StringDefClassObject.StringName, \ StringDefClassObject.StringValue)) # # For each PCD type # for PcdType, Type in IterList: # # Go through all archs # # for Arch in self.SupArchList + [TAB_ARCH_COMMON]: # for Item in PcdObj.GetPcdsByType(PcdType.upper()): PcdDeclaration = GenPcdDeclaration( ContainerFile, (Item.TokenSpaceGuidCName, Item.TokenCName, Item.DefaultValue, Item.DatumType, Item.TokenValue, Type, Item.GetHeadComment(), Item.GetTailComment(), ''), Language, self.DecParser.GetDefineSectionMacro() ) PcdDeclaration.SetSupArchList(Item.GetArchListOfType(PcdType)) # # Get PCD error message from PCD error comment section in DEC file # for PcdErr in PcdDeclaration.GetPcdErrorsList(): if (PcdDeclaration.GetTokenSpaceGuidCName(), PcdErr.GetErrorNumber()) \ in self.DecParser.PcdErrorCommentDict: Key = (PcdDeclaration.GetTokenSpaceGuidCName(), PcdErr.GetErrorNumber()) PcdErr.SetErrorMessageList(PcdErr.GetErrorMessageList() + \ [(Language, self.DecParser.PcdErrorCommentDict[Key])]) for Index in range(0, len(PromptStrList)): StrNameList = PromptStrList[Index][1].split('_') if StrNameList[1].lower() == Item.TokenSpaceGuidCName.lower() and \ StrNameList[2].lower() == Item.TokenCName.lower(): TxtObj = TextObject() TxtObj.SetLang(PromptStrList[Index][0]) TxtObj.SetString(PromptStrList[Index][2]) for Prompt in PcdDeclaration.GetPromptList(): if Prompt.GetLang() == TxtObj.GetLang() and \ Prompt.GetString() == TxtObj.GetString(): break else: PcdDeclaration.SetPromptList(PcdDeclaration.GetPromptList() + [TxtObj]) for Index in range(0, len(HelpStrList)): StrNameList = HelpStrList[Index][1].split('_') if StrNameList[1].lower() == Item.TokenSpaceGuidCName.lower() and \ StrNameList[2].lower() == Item.TokenCName.lower(): TxtObj = TextObject() TxtObj.SetLang(HelpStrList[Index][0]) TxtObj.SetString(HelpStrList[Index][2]) for HelpStrObj in PcdDeclaration.GetHelpTextList(): if HelpStrObj.GetLang() == TxtObj.GetLang() and \ HelpStrObj.GetString() == TxtObj.GetString(): break else: PcdDeclaration.SetHelpTextList(PcdDeclaration.GetHelpTextList() + [TxtObj]) # # Get PCD error message from UNI file # for Index in range(0, len(PcdErrStrList)): StrNameList = PcdErrStrList[Index][1].split('_') if StrNameList[1].lower() == Item.TokenSpaceGuidCName.lower() and \ StrNameList[2].lower() == TAB_STR_TOKENERR.lower(): for PcdErr in PcdDeclaration.GetPcdErrorsList(): if PcdErr.GetErrorNumber().lower() == (TAB_HEX_START + StrNameList[3]).lower() and \ (PcdErrStrList[Index][0], PcdErrStrList[Index][2]) not in PcdErr.GetErrorMessageList(): PcdErr.SetErrorMessageList(PcdErr.GetErrorMessageList() + \ [(PcdErrStrList[Index][0], PcdErrStrList[Index][2])]) # # Check to prevent missing error message if a Pcd has the error code. # for PcdErr in PcdDeclaration.GetPcdErrorsList(): if PcdErr.GetErrorNumber().strip(): if not PcdErr.GetErrorMessageList(): Logger.Error('UPT', FORMAT_INVALID, ST.ERR_DECPARSE_PCD_UNMATCHED_ERRORCODE % PcdErr.GetErrorNumber(), ContainerFile, PcdErr.GetLineNum(), PcdErr.GetFileLine()) PcdDeclarations.append(PcdDeclaration) self.SetPcdList(self.GetPcdList() + PcdDeclarations) self.CheckPcdValue()
def GenPackageHeader(self, ContainerFile): Logger.Debug(2, "Generate PackageHeader ...") DefinesDict = {} # # Update all defines item in database # DefObj = self.DecParser.GetDefineSectionObject() for Item in DefObj.GetDefines(): # # put items into Dict except for PackageName, Guid, Version, DEC_SPECIFICATION # SkipItemList = [TAB_DEC_DEFINES_PACKAGE_NAME, \ TAB_DEC_DEFINES_PACKAGE_GUID, TAB_DEC_DEFINES_PACKAGE_VERSION, \ TAB_DEC_DEFINES_DEC_SPECIFICATION, TAB_DEC_DEFINES_PKG_UNI_FILE] if Item.Key in SkipItemList: continue DefinesDict['%s = %s' % (Item.Key, Item.Value)] = TAB_ARCH_COMMON self.SetBaseName(DefObj.GetPackageName()) self.SetVersion(DefObj.GetPackageVersion()) # self.SetName(DefObj.GetPackageName() + ' Version ' + \ # DefObj.GetPackageVersion()) self.SetName(os.path.splitext(self.GetFileName())[0]) self.SetGuid(DefObj.GetPackageGuid()) if DefObj.GetPackageUniFile(): ValidateUNIFilePath(DefObj.GetPackageUniFile()) self.UniFileClassObject = \ UniFileClassObject([PathClass(os.path.join(DefObj.GetPackagePath(), DefObj.GetPackageUniFile()))]) else: self.UniFileClassObject = None if DefinesDict: UserExtension = UserExtensionObject() UserExtension.SetDefinesDict(DefinesDict) UserExtension.SetIdentifier('DefineModifiers') UserExtension.SetUserID('EDK2') self.SetUserExtensionList( self.GetUserExtensionList() + [UserExtension] ) # # Get File header information # if self.UniFileClassObject: Lang = TAB_LANGUAGE_EN_X else: Lang = TAB_LANGUAGE_EN_US Abstract, Description, Copyright, License = \ ParseHeaderCommentSection(self.DecParser.GetHeadComment(), ContainerFile) if Abstract: self.SetAbstract((Lang, Abstract)) if Description: self.SetDescription((Lang, Description)) if Copyright: self.SetCopyright(('', Copyright)) if License: self.SetLicense(('', License)) # # Get Binary header information # if self.DecParser.BinaryHeadComment: Abstract, Description, Copyright, License = \ ParseHeaderCommentSection(self.DecParser.BinaryHeadComment, ContainerFile, True) if not Abstract or not Description or not Copyright or not License: Logger.Error('MkPkg', FORMAT_INVALID, ST.ERR_INVALID_BINARYHEADER_FORMAT, ContainerFile) else: self.SetBinaryHeaderAbstract((Lang, Abstract)) self.SetBinaryHeaderDescription((Lang, Description)) self.SetBinaryHeaderCopyright(('', Copyright)) self.SetBinaryHeaderLicense(('', License)) BinaryAbstractList = [] BinaryDescriptionList = [] #Get Binary header from UNI file # Initialize the UniStrDict dictionary, top keys are language codes UniStrDict = {} if self.UniFileClassObject: UniStrDict = self.UniFileClassObject.OrderedStringList for Lang in UniStrDict: for StringDefClassObject in UniStrDict[Lang]: Lang = GetLanguageCode1766(Lang) if StringDefClassObject.StringName == TAB_DEC_BINARY_ABSTRACT: if (Lang, ConvertSpecialUnicodes(StringDefClassObject.StringValue)) \ not in self.GetBinaryHeaderAbstract(): BinaryAbstractList.append((Lang, ConvertSpecialUnicodes(StringDefClassObject.StringValue))) if StringDefClassObject.StringName == TAB_DEC_BINARY_DESCRIPTION: if (Lang, ConvertSpecialUnicodes(StringDefClassObject.StringValue)) \ not in self.GetBinaryHeaderDescription(): BinaryDescriptionList.append((Lang, ConvertSpecialUnicodes(StringDefClassObject.StringValue))) #Combine Binary header from DEC file and UNI file BinaryAbstractList = self.GetBinaryHeaderAbstract() + BinaryAbstractList BinaryDescriptionList = self.GetBinaryHeaderDescription() + BinaryDescriptionList BinaryCopyrightList = self.GetBinaryHeaderCopyright() BinaryLicenseList = self.GetBinaryHeaderLicense() #Generate the UserExtensionObject for TianoCore."BinaryHeader" if BinaryAbstractList or BinaryDescriptionList or BinaryCopyrightList or BinaryLicenseList: BinaryUserExtension = UserExtensionObject() BinaryUserExtension.SetBinaryAbstract(BinaryAbstractList) BinaryUserExtension.SetBinaryDescription(BinaryDescriptionList) BinaryUserExtension.SetBinaryCopyright(BinaryCopyrightList) BinaryUserExtension.SetBinaryLicense(BinaryLicenseList) BinaryUserExtension.SetIdentifier(TAB_BINARY_HEADER_IDENTIFIER) BinaryUserExtension.SetUserID(TAB_BINARY_HEADER_USERID) self.SetUserExtensionList(self.GetUserExtensionList() + [BinaryUserExtension])