| ## @file | |
| # Open an SPD file and load all its contents to a PackageClass object. | |
| # | |
| # Copyright (c) 2007, 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. | |
| # | |
| ## | |
| # Import Modules | |
| # | |
| import os | |
| from Common.XmlRoutines import * | |
| from Common.MigrationUtilities import * | |
| from CommonDataClass.PackageClass import * | |
| ## Load a list of Package Cloned Records. | |
| # | |
| # Read an input Package XML DOM object and return a list of Cloned Records | |
| # contained in the DOM object. | |
| # | |
| # @param XmlSpd An XML DOM object read from SPD file. | |
| # | |
| # @retvel ClonedRecords A list of Cloned Records loaded from XmlSpd. | |
| # | |
| def LoadPackageClonedRecords(XmlSpd): | |
| XmlTag = "PackageSurfaceArea/PackageDefinitions/ClonedFrom/Cloned" | |
| return map(LoadClonedRecord, XmlList(XmlSpd, XmlTag)) | |
| ## Load Package Header. | |
| # | |
| # Read an input Package XML DOM object and return Package Header class object | |
| # contained in the DOM object. | |
| # | |
| # @param XmlSpd An XML DOM object read from SPD file. | |
| # @param SpdFileName The file path of SPD File. | |
| # | |
| # @retvel PackageHeader A new Package Header object loaded from XmlSpd. | |
| # | |
| def LoadPackageHeader(XmlSpd, SpdFileName): | |
| PackageHeader = PackageHeaderClass() | |
| XmlTag = "PackageSurfaceArea/SpdHeader" | |
| SpdHeader = XmlNode(XmlSpd, XmlTag) | |
| SetIdentification(PackageHeader, SpdHeader, "PackageName", SpdFileName) | |
| SetCommonHeader(PackageHeader, SpdHeader) | |
| XmlTag = "PackageSurfaceArea/PackageDefinitions/ReadOnly" | |
| if XmlElement(XmlSpd, XmlTag).lower() == "true": | |
| PackageHeader.ReadOnly = True | |
| XmlTag = "PackageSurfaceArea/PackageDefinitions/RePackage" | |
| if XmlElement(XmlSpd, XmlTag).lower() == "true": | |
| PackageHeader.RePackage = True | |
| PackageHeader.ClonedFrom = LoadPackageClonedRecords(XmlSpd) | |
| return PackageHeader | |
| ## Load a list of Package Library Classes. | |
| # | |
| # Read an input Package XML DOM object and return a list of Library Classes | |
| # contained in the DOM object. | |
| # | |
| # @param XmlSpd An XML DOM object read from SPD file. | |
| # | |
| # @retvel LibraryClasses A list of Library Classes loaded from XmlSpd. | |
| # | |
| def LoadPackageLibraryClasses(XmlSpd): | |
| XmlTag = "PackageSurfaceArea/LibraryClassDeclarations/LibraryClass" | |
| return map(LoadLibraryClass, XmlList(XmlSpd, XmlTag)) | |
| ## Load a new Package Industry Std Header class object. | |
| # | |
| # Read an input XML IndustryStdHeader DOM object and return an object of | |
| # Industry Std Header contained in the DOM object. | |
| # | |
| # @param XmlIndustryStdHeader A child XML DOM object in Package XML DOM. | |
| # | |
| # @retvel PackageIndustryStdHeader A new Industry Std Header object created by XmlIndustryStdHeader. | |
| # | |
| def LoadPackageIndustryStdHeader(XmlIndustryStdHeader): | |
| PackageIndustryStdHeader = PackageIndustryStdHeaderClass() | |
| XmlTag = "Name" | |
| Name = XmlAttribute(XmlIndustryStdHeader, XmlTag) | |
| PackageIndustryStdHeader.Name = Name | |
| XmlTag = "IndustryStdHeader/IncludeHeader" | |
| IncludeHeader = XmlElement(XmlIndustryStdHeader, XmlTag) | |
| PackageIndustryStdHeader.IncludeHeader = IncludeHeader | |
| SetCommon(PackageIndustryStdHeader, XmlIndustryStdHeader) | |
| return PackageIndustryStdHeader | |
| ## Load a list of Package Industry Std Headers. | |
| # | |
| # Read an input Package XML DOM object and return a list of Industry Std Headers | |
| # contained in the DOM object. | |
| # | |
| # @param XmlSpd An XML DOM object read from SPD file. | |
| # | |
| # @retvel IndustryStdHeaders A list of Industry Std Headers loaded from XmlSpd. | |
| # | |
| def LoadPackageIndustryStdHeaders(XmlSpd): | |
| XmlTag = "PackageSurfaceArea/IndustryStdIncludes/IndustryStdHeader" | |
| return map(LoadPackageIndustryStdHeader, XmlList(XmlSpd, XmlTag)) | |
| ## Load a list of Package Module Files. | |
| # | |
| # Read an input Package XML DOM object and return a list of Module Files | |
| # contained in the DOM object. | |
| # | |
| # @param XmlSpd An XML DOM object read from SPD file. | |
| # | |
| # @retvel ModuleFiles A list of Module Files loaded from XmlSpd. | |
| # | |
| def LoadPackageModuleFiles(XmlSpd): | |
| XmlTag = "PackageSurfaceArea/MsaFiles/Filename" | |
| return XmlElementList(XmlSpd, XmlTag) | |
| ## Load a new Package Include Pkg Header class object. | |
| # | |
| # Read an input XML IncludePkgHeader DOM object and return an object of Include | |
| # Package Header contained in the DOM object. | |
| # | |
| # @param XmlPackageIncludeHeader A child XML DOM object in Package XML DOM. | |
| # | |
| # @retvel PackageIncludePkgHeader A new Include Pkg Header object created by | |
| # XmlPackageIncludeHeader. | |
| # | |
| def LoadPackageIncludePkgHeader(XmlPackageIncludeHeader): | |
| PackageIncludeHeader = PackageIncludePkgHeaderClass() | |
| IncludeHeader = XmlElementData(XmlPackageIncludeHeader) | |
| PackageIncludeHeader.IncludeHeader = IncludeHeader | |
| XmlTag = "ModuleType" | |
| ModuleTypes = XmlAttribute(XmlPackageIncludeHeader, XmlTag) | |
| PackageIncludeHeader.ModuleType = ModuleTypes.split() | |
| return PackageIncludeHeader | |
| ## Load a list of Package Include Pkg Headers. | |
| # | |
| # Read an input Package XML DOM object and return a list of Include Pkg Headers | |
| # contained in the DOM object. | |
| # | |
| # @param XmlSpd An XML DOM object read from SPD file. | |
| # | |
| # @retvel IncludePkgHeaders A list of Include Pkg Headers loaded from XmlSpd. | |
| # | |
| def LoadPackageIncludePkgHeaders(XmlSpd): | |
| XmlTag = "PackageSurfaceArea/PackageHeaders/IncludePkgHeader" | |
| return map(LoadPackageIncludePkgHeader, XmlList(XmlSpd, XmlTag)) | |
| ## Load a list of Package Guid Declarations. | |
| # | |
| # Read an input Package XML DOM object and return a list of Guid Declarations | |
| # contained in the DOM object. | |
| # | |
| # @param XmlSpd An XML DOM object read from SPD file. | |
| # | |
| # @retvel GuidDeclarations A list of Guid Declarations loaded from XmlSpd. | |
| # | |
| def LoadPackageGuidDeclarations(XmlSpd): | |
| XmlTag = "PackageSurfaceArea/GuidDeclarations/Entry" | |
| return map(LoadGuidProtocolPpiCommon, XmlList(XmlSpd, XmlTag)) | |
| ## Load a list of Package Protocol Declarations. | |
| # | |
| # Read an input Package XML DOM object and return a list of Protocol Declarations | |
| # contained in the DOM object. | |
| # | |
| # @param XmlSpd An XML DOM object read from SPD file. | |
| # | |
| # @retvel ProtocolDeclarations A list of Protocol Declarations loaded from XmlSpd. | |
| # | |
| def LoadPackageProtocolDeclarations(XmlSpd): | |
| XmlTag = "PackageSurfaceArea/ProtocolDeclarations/Entry" | |
| return map(LoadGuidProtocolPpiCommon, XmlList(XmlSpd, XmlTag)) | |
| ## Load a list of Package Ppi Declarations. | |
| # | |
| # Read an input Package XML DOM object and return a list of Ppi Declarations | |
| # contained in the DOM object. | |
| # | |
| # @param XmlSpd An XML DOM object read from SPD file. | |
| # | |
| # @retvel PpiDeclarations A list of Ppi Declarations loaded from XmlSpd. | |
| # | |
| def LoadPackagePpiDeclarations(XmlSpd): | |
| XmlTag = "PackageSurfaceArea/PpiDeclarations/Entry" | |
| return map(LoadGuidProtocolPpiCommon, XmlList(XmlSpd, XmlTag)) | |
| ## Load a list of Package Pcd Declarations. | |
| # | |
| # Read an input Package XML DOM object and return a list of Pcd Declarations | |
| # contained in the DOM object. | |
| # | |
| # @param XmlSpd An XML DOM object read from SPD file. | |
| # | |
| # @retvel PcdDeclarations A list of Pcd Declarations loaded from XmlSpd. | |
| # | |
| def LoadPackagePcdDeclarations(XmlSpd): | |
| XmlTag = "PackageSurfaceArea/PcdDeclarations/PcdEntry" | |
| return map(LoadPcd, XmlList(XmlSpd, XmlTag)) | |
| ## Load a list of Package User Extensions. | |
| # | |
| # Read an input Package XML DOM object and return a list of User Extensions | |
| # contained in the DOM object. | |
| # | |
| # @param XmlSpd An XML DOM object read from SPD file. | |
| # | |
| # @retvel UserExtensions A list of User Extensions loaded from XmlSpd. | |
| # | |
| def LoadPackageUserExtensions(XmlSpd): | |
| XmlTag = "PackageSurfaceArea/UserExtensions" | |
| return map(LoadUserExtensions, XmlList(XmlSpd, XmlTag)) | |
| ## Load a new Package class object. | |
| # | |
| # Read an input SPD File and return a new Package class Object. | |
| # | |
| # @param SpdFileName An XML DOM object read from SPD file. | |
| # | |
| # @retvel Package A new Module class object loaded from SPD File. | |
| # | |
| def LoadSpd(SpdFileName): | |
| XmlSpd = XmlParseFile(SpdFileName) | |
| EdkLogger.verbose("Xml Object loaded for file %s" % SpdFileName) | |
| Package = PackageClass() | |
| Package.Header = LoadPackageHeader(XmlSpd, SpdFileName) | |
| Package.LibraryClassDeclarations = LoadPackageLibraryClasses(XmlSpd) | |
| Package.IndustryStdHeaders = LoadPackageIndustryStdHeaders(XmlSpd) | |
| Package.ModuleFiles = LoadPackageModuleFiles(XmlSpd) | |
| Package.PackageIncludePkgHeaders = LoadPackageIncludePkgHeaders(XmlSpd) | |
| Package.GuidDeclarations = LoadPackageGuidDeclarations(XmlSpd) | |
| Package.ProtocolDeclarations = LoadPackageProtocolDeclarations(XmlSpd) | |
| Package.PpiDeclarations = LoadPackagePpiDeclarations(XmlSpd) | |
| Package.PcdDeclarations = LoadPackagePcdDeclarations(XmlSpd) | |
| Package.UserExtensions = LoadPackageUserExtensions(XmlSpd) | |
| return Package | |
| # This acts like the main() function for the script, unless it is 'import'ed | |
| # into another script. | |
| if __name__ == '__main__': | |
| pass |