]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/spd2dec/LoadSpd.py
Check In tool source code based on Build tool project revision r1655.
[mirror_edk2.git] / BaseTools / Source / Python / spd2dec / LoadSpd.py
diff --git a/BaseTools/Source/Python/spd2dec/LoadSpd.py b/BaseTools/Source/Python/spd2dec/LoadSpd.py
new file mode 100644 (file)
index 0000000..e94e7fc
--- /dev/null
@@ -0,0 +1,273 @@
+## @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