--- /dev/null
+## @file\r
+# Open an SPD file and load all its contents to a PackageClass object.\r
+#\r
+# Copyright (c) 2007, Intel Corporation\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+\r
+##\r
+# Import Modules\r
+#\r
+import os\r
+from Common.XmlRoutines import *\r
+from Common.MigrationUtilities import *\r
+from CommonDataClass.PackageClass import *\r
+\r
+\r
+## Load a list of Package Cloned Records.\r
+#\r
+# Read an input Package XML DOM object and return a list of Cloned Records\r
+# contained in the DOM object.\r
+#\r
+# @param XmlSpd An XML DOM object read from SPD file.\r
+#\r
+# @retvel ClonedRecords A list of Cloned Records loaded from XmlSpd.\r
+#\r
+def LoadPackageClonedRecords(XmlSpd):\r
+ XmlTag = "PackageSurfaceArea/PackageDefinitions/ClonedFrom/Cloned"\r
+ return map(LoadClonedRecord, XmlList(XmlSpd, XmlTag))\r
+\r
+\r
+## Load Package Header.\r
+#\r
+# Read an input Package XML DOM object and return Package Header class object\r
+# contained in the DOM object.\r
+#\r
+# @param XmlSpd An XML DOM object read from SPD file.\r
+# @param SpdFileName The file path of SPD File.\r
+#\r
+# @retvel PackageHeader A new Package Header object loaded from XmlSpd.\r
+#\r
+def LoadPackageHeader(XmlSpd, SpdFileName):\r
+ PackageHeader = PackageHeaderClass()\r
+ \r
+ XmlTag = "PackageSurfaceArea/SpdHeader"\r
+ SpdHeader = XmlNode(XmlSpd, XmlTag)\r
+ \r
+ SetIdentification(PackageHeader, SpdHeader, "PackageName", SpdFileName)\r
+ SetCommonHeader(PackageHeader, SpdHeader)\r
+ \r
+ XmlTag = "PackageSurfaceArea/PackageDefinitions/ReadOnly"\r
+ if XmlElement(XmlSpd, XmlTag).lower() == "true":\r
+ PackageHeader.ReadOnly = True\r
+\r
+ XmlTag = "PackageSurfaceArea/PackageDefinitions/RePackage"\r
+ if XmlElement(XmlSpd, XmlTag).lower() == "true":\r
+ PackageHeader.RePackage = True\r
+\r
+ PackageHeader.ClonedFrom = LoadPackageClonedRecords(XmlSpd)\r
+ \r
+ return PackageHeader\r
+\r
+\r
+## Load a list of Package Library Classes.\r
+#\r
+# Read an input Package XML DOM object and return a list of Library Classes\r
+# contained in the DOM object.\r
+#\r
+# @param XmlSpd An XML DOM object read from SPD file.\r
+#\r
+# @retvel LibraryClasses A list of Library Classes loaded from XmlSpd.\r
+#\r
+def LoadPackageLibraryClasses(XmlSpd):\r
+ XmlTag = "PackageSurfaceArea/LibraryClassDeclarations/LibraryClass"\r
+ return map(LoadLibraryClass, XmlList(XmlSpd, XmlTag))\r
+\r
+\r
+## Load a new Package Industry Std Header class object.\r
+#\r
+# Read an input XML IndustryStdHeader DOM object and return an object of\r
+# Industry Std Header contained in the DOM object.\r
+#\r
+# @param XmlIndustryStdHeader A child XML DOM object in Package XML DOM.\r
+#\r
+# @retvel PackageIndustryStdHeader A new Industry Std Header object created by XmlIndustryStdHeader.\r
+#\r
+def LoadPackageIndustryStdHeader(XmlIndustryStdHeader):\r
+ PackageIndustryStdHeader = PackageIndustryStdHeaderClass()\r
+ \r
+ XmlTag = "Name"\r
+ Name = XmlAttribute(XmlIndustryStdHeader, XmlTag)\r
+ PackageIndustryStdHeader.Name = Name\r
+ \r
+ XmlTag = "IndustryStdHeader/IncludeHeader"\r
+ IncludeHeader = XmlElement(XmlIndustryStdHeader, XmlTag)\r
+ PackageIndustryStdHeader.IncludeHeader = IncludeHeader\r
+ \r
+ SetCommon(PackageIndustryStdHeader, XmlIndustryStdHeader)\r
+ \r
+ return PackageIndustryStdHeader\r
+\r
+\r
+## Load a list of Package Industry Std Headers.\r
+#\r
+# Read an input Package XML DOM object and return a list of Industry Std Headers\r
+# contained in the DOM object.\r
+#\r
+# @param XmlSpd An XML DOM object read from SPD file.\r
+#\r
+# @retvel IndustryStdHeaders A list of Industry Std Headers loaded from XmlSpd.\r
+#\r
+def LoadPackageIndustryStdHeaders(XmlSpd):\r
+ XmlTag = "PackageSurfaceArea/IndustryStdIncludes/IndustryStdHeader"\r
+ return map(LoadPackageIndustryStdHeader, XmlList(XmlSpd, XmlTag))\r
+\r
+\r
+## Load a list of Package Module Files.\r
+#\r
+# Read an input Package XML DOM object and return a list of Module Files\r
+# contained in the DOM object.\r
+#\r
+# @param XmlSpd An XML DOM object read from SPD file.\r
+#\r
+# @retvel ModuleFiles A list of Module Files loaded from XmlSpd.\r
+#\r
+def LoadPackageModuleFiles(XmlSpd):\r
+ XmlTag = "PackageSurfaceArea/MsaFiles/Filename"\r
+ return XmlElementList(XmlSpd, XmlTag)\r
+\r
+\r
+## Load a new Package Include Pkg Header class object.\r
+#\r
+# Read an input XML IncludePkgHeader DOM object and return an object of Include\r
+# Package Header contained in the DOM object.\r
+#\r
+# @param XmlPackageIncludeHeader A child XML DOM object in Package XML DOM.\r
+#\r
+# @retvel PackageIncludePkgHeader A new Include Pkg Header object created by\r
+# XmlPackageIncludeHeader.\r
+#\r
+def LoadPackageIncludePkgHeader(XmlPackageIncludeHeader):\r
+ PackageIncludeHeader = PackageIncludePkgHeaderClass()\r
+ \r
+ IncludeHeader = XmlElementData(XmlPackageIncludeHeader)\r
+ PackageIncludeHeader.IncludeHeader = IncludeHeader\r
+ \r
+ XmlTag = "ModuleType"\r
+ ModuleTypes = XmlAttribute(XmlPackageIncludeHeader, XmlTag)\r
+ PackageIncludeHeader.ModuleType = ModuleTypes.split()\r
+ \r
+ return PackageIncludeHeader\r
+\r
+\r
+## Load a list of Package Include Pkg Headers.\r
+#\r
+# Read an input Package XML DOM object and return a list of Include Pkg Headers\r
+# contained in the DOM object.\r
+#\r
+# @param XmlSpd An XML DOM object read from SPD file.\r
+#\r
+# @retvel IncludePkgHeaders A list of Include Pkg Headers loaded from XmlSpd.\r
+#\r
+def LoadPackageIncludePkgHeaders(XmlSpd):\r
+ XmlTag = "PackageSurfaceArea/PackageHeaders/IncludePkgHeader"\r
+ return map(LoadPackageIncludePkgHeader, XmlList(XmlSpd, XmlTag))\r
+\r
+\r
+## Load a list of Package Guid Declarations.\r
+#\r
+# Read an input Package XML DOM object and return a list of Guid Declarations\r
+# contained in the DOM object.\r
+#\r
+# @param XmlSpd An XML DOM object read from SPD file.\r
+#\r
+# @retvel GuidDeclarations A list of Guid Declarations loaded from XmlSpd.\r
+#\r
+def LoadPackageGuidDeclarations(XmlSpd):\r
+ XmlTag = "PackageSurfaceArea/GuidDeclarations/Entry"\r
+ return map(LoadGuidProtocolPpiCommon, XmlList(XmlSpd, XmlTag))\r
+\r
+\r
+## Load a list of Package Protocol Declarations.\r
+#\r
+# Read an input Package XML DOM object and return a list of Protocol Declarations\r
+# contained in the DOM object.\r
+#\r
+# @param XmlSpd An XML DOM object read from SPD file.\r
+#\r
+# @retvel ProtocolDeclarations A list of Protocol Declarations loaded from XmlSpd.\r
+#\r
+def LoadPackageProtocolDeclarations(XmlSpd):\r
+ XmlTag = "PackageSurfaceArea/ProtocolDeclarations/Entry"\r
+ return map(LoadGuidProtocolPpiCommon, XmlList(XmlSpd, XmlTag))\r
+\r
+\r
+## Load a list of Package Ppi Declarations.\r
+#\r
+# Read an input Package XML DOM object and return a list of Ppi Declarations\r
+# contained in the DOM object.\r
+#\r
+# @param XmlSpd An XML DOM object read from SPD file.\r
+#\r
+# @retvel PpiDeclarations A list of Ppi Declarations loaded from XmlSpd.\r
+#\r
+def LoadPackagePpiDeclarations(XmlSpd):\r
+ XmlTag = "PackageSurfaceArea/PpiDeclarations/Entry"\r
+ return map(LoadGuidProtocolPpiCommon, XmlList(XmlSpd, XmlTag))\r
+\r
+\r
+## Load a list of Package Pcd Declarations.\r
+#\r
+# Read an input Package XML DOM object and return a list of Pcd Declarations\r
+# contained in the DOM object.\r
+#\r
+# @param XmlSpd An XML DOM object read from SPD file.\r
+#\r
+# @retvel PcdDeclarations A list of Pcd Declarations loaded from XmlSpd.\r
+#\r
+def LoadPackagePcdDeclarations(XmlSpd):\r
+ XmlTag = "PackageSurfaceArea/PcdDeclarations/PcdEntry"\r
+ return map(LoadPcd, XmlList(XmlSpd, XmlTag))\r
+\r
+\r
+## Load a list of Package User Extensions.\r
+#\r
+# Read an input Package XML DOM object and return a list of User Extensions\r
+# contained in the DOM object.\r
+#\r
+# @param XmlSpd An XML DOM object read from SPD file.\r
+#\r
+# @retvel UserExtensions A list of User Extensions loaded from XmlSpd.\r
+#\r
+def LoadPackageUserExtensions(XmlSpd):\r
+ XmlTag = "PackageSurfaceArea/UserExtensions"\r
+ return map(LoadUserExtensions, XmlList(XmlSpd, XmlTag))\r
+\r
+\r
+## Load a new Package class object.\r
+#\r
+# Read an input SPD File and return a new Package class Object.\r
+#\r
+# @param SpdFileName An XML DOM object read from SPD file.\r
+#\r
+# @retvel Package A new Module class object loaded from SPD File.\r
+#\r
+def LoadSpd(SpdFileName):\r
+ XmlSpd = XmlParseFile(SpdFileName)\r
+ EdkLogger.verbose("Xml Object loaded for file %s" % SpdFileName)\r
+\r
+ Package = PackageClass()\r
+ Package.Header = LoadPackageHeader(XmlSpd, SpdFileName)\r
+ Package.LibraryClassDeclarations = LoadPackageLibraryClasses(XmlSpd)\r
+ Package.IndustryStdHeaders = LoadPackageIndustryStdHeaders(XmlSpd)\r
+ Package.ModuleFiles = LoadPackageModuleFiles(XmlSpd)\r
+ Package.PackageIncludePkgHeaders = LoadPackageIncludePkgHeaders(XmlSpd)\r
+ Package.GuidDeclarations = LoadPackageGuidDeclarations(XmlSpd)\r
+ Package.ProtocolDeclarations = LoadPackageProtocolDeclarations(XmlSpd)\r
+ Package.PpiDeclarations = LoadPackagePpiDeclarations(XmlSpd)\r
+ Package.PcdDeclarations = LoadPackagePcdDeclarations(XmlSpd)\r
+ Package.UserExtensions = LoadPackageUserExtensions(XmlSpd)\r
+ \r
+ return Package\r
+\r
+\r
+# This acts like the main() function for the script, unless it is 'import'ed\r
+# into another script.\r
+if __name__ == '__main__':\r
+ pass\r