summaryrefslogtreecommitdiffstats
path: root/BaseTools/Source/Python/spd2dec/LoadSpd.py
diff options
context:
space:
mode:
Diffstat (limited to 'BaseTools/Source/Python/spd2dec/LoadSpd.py')
-rw-r--r--BaseTools/Source/Python/spd2dec/LoadSpd.py273
1 files changed, 273 insertions, 0 deletions
diff --git a/BaseTools/Source/Python/spd2dec/LoadSpd.py b/BaseTools/Source/Python/spd2dec/LoadSpd.py
new file mode 100644
index 0000000000..e94e7fc317
--- /dev/null
+++ b/BaseTools/Source/Python/spd2dec/LoadSpd.py
@@ -0,0 +1,273 @@
+## @file
+# Open an SPD file and load all its contents to a PackageClass object.
+#
+# Copyright (c) 2007, 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.
+#
+
+##
+# 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