mirror of https://github.com/acidanthera/audk.git
274 lines
9.5 KiB
Python
274 lines
9.5 KiB
Python
## @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
|