2 # Open an SPD file and load all its contents to a PackageClass object.
4 # Copyright (c) 2007, Intel Corporation
5 # All rights reserved. This program and the accompanying materials
6 # are licensed and made available under the terms and conditions of the BSD License
7 # which accompanies this distribution. The full text of the license may be found at
8 # http://opensource.org/licenses/bsd-license.php
10 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
18 from Common
.XmlRoutines
import *
19 from Common
.MigrationUtilities
import *
20 from CommonDataClass
.PackageClass
import *
23 ## Load a list of Package Cloned Records.
25 # Read an input Package XML DOM object and return a list of Cloned Records
26 # contained in the DOM object.
28 # @param XmlSpd An XML DOM object read from SPD file.
30 # @retvel ClonedRecords A list of Cloned Records loaded from XmlSpd.
32 def LoadPackageClonedRecords(XmlSpd
):
33 XmlTag
= "PackageSurfaceArea/PackageDefinitions/ClonedFrom/Cloned"
34 return map(LoadClonedRecord
, XmlList(XmlSpd
, XmlTag
))
37 ## Load Package Header.
39 # Read an input Package XML DOM object and return Package Header class object
40 # contained in the DOM object.
42 # @param XmlSpd An XML DOM object read from SPD file.
43 # @param SpdFileName The file path of SPD File.
45 # @retvel PackageHeader A new Package Header object loaded from XmlSpd.
47 def LoadPackageHeader(XmlSpd
, SpdFileName
):
48 PackageHeader
= PackageHeaderClass()
50 XmlTag
= "PackageSurfaceArea/SpdHeader"
51 SpdHeader
= XmlNode(XmlSpd
, XmlTag
)
53 SetIdentification(PackageHeader
, SpdHeader
, "PackageName", SpdFileName
)
54 SetCommonHeader(PackageHeader
, SpdHeader
)
56 XmlTag
= "PackageSurfaceArea/PackageDefinitions/ReadOnly"
57 if XmlElement(XmlSpd
, XmlTag
).lower() == "true":
58 PackageHeader
.ReadOnly
= True
60 XmlTag
= "PackageSurfaceArea/PackageDefinitions/RePackage"
61 if XmlElement(XmlSpd
, XmlTag
).lower() == "true":
62 PackageHeader
.RePackage
= True
64 PackageHeader
.ClonedFrom
= LoadPackageClonedRecords(XmlSpd
)
69 ## Load a list of Package Library Classes.
71 # Read an input Package XML DOM object and return a list of Library Classes
72 # contained in the DOM object.
74 # @param XmlSpd An XML DOM object read from SPD file.
76 # @retvel LibraryClasses A list of Library Classes loaded from XmlSpd.
78 def LoadPackageLibraryClasses(XmlSpd
):
79 XmlTag
= "PackageSurfaceArea/LibraryClassDeclarations/LibraryClass"
80 return map(LoadLibraryClass
, XmlList(XmlSpd
, XmlTag
))
83 ## Load a new Package Industry Std Header class object.
85 # Read an input XML IndustryStdHeader DOM object and return an object of
86 # Industry Std Header contained in the DOM object.
88 # @param XmlIndustryStdHeader A child XML DOM object in Package XML DOM.
90 # @retvel PackageIndustryStdHeader A new Industry Std Header object created by XmlIndustryStdHeader.
92 def LoadPackageIndustryStdHeader(XmlIndustryStdHeader
):
93 PackageIndustryStdHeader
= PackageIndustryStdHeaderClass()
96 Name
= XmlAttribute(XmlIndustryStdHeader
, XmlTag
)
97 PackageIndustryStdHeader
.Name
= Name
99 XmlTag
= "IndustryStdHeader/IncludeHeader"
100 IncludeHeader
= XmlElement(XmlIndustryStdHeader
, XmlTag
)
101 PackageIndustryStdHeader
.IncludeHeader
= IncludeHeader
103 SetCommon(PackageIndustryStdHeader
, XmlIndustryStdHeader
)
105 return PackageIndustryStdHeader
108 ## Load a list of Package Industry Std Headers.
110 # Read an input Package XML DOM object and return a list of Industry Std Headers
111 # contained in the DOM object.
113 # @param XmlSpd An XML DOM object read from SPD file.
115 # @retvel IndustryStdHeaders A list of Industry Std Headers loaded from XmlSpd.
117 def LoadPackageIndustryStdHeaders(XmlSpd
):
118 XmlTag
= "PackageSurfaceArea/IndustryStdIncludes/IndustryStdHeader"
119 return map(LoadPackageIndustryStdHeader
, XmlList(XmlSpd
, XmlTag
))
122 ## Load a list of Package Module Files.
124 # Read an input Package XML DOM object and return a list of Module Files
125 # contained in the DOM object.
127 # @param XmlSpd An XML DOM object read from SPD file.
129 # @retvel ModuleFiles A list of Module Files loaded from XmlSpd.
131 def LoadPackageModuleFiles(XmlSpd
):
132 XmlTag
= "PackageSurfaceArea/MsaFiles/Filename"
133 return XmlElementList(XmlSpd
, XmlTag
)
136 ## Load a new Package Include Pkg Header class object.
138 # Read an input XML IncludePkgHeader DOM object and return an object of Include
139 # Package Header contained in the DOM object.
141 # @param XmlPackageIncludeHeader A child XML DOM object in Package XML DOM.
143 # @retvel PackageIncludePkgHeader A new Include Pkg Header object created by
144 # XmlPackageIncludeHeader.
146 def LoadPackageIncludePkgHeader(XmlPackageIncludeHeader
):
147 PackageIncludeHeader
= PackageIncludePkgHeaderClass()
149 IncludeHeader
= XmlElementData(XmlPackageIncludeHeader
)
150 PackageIncludeHeader
.IncludeHeader
= IncludeHeader
152 XmlTag
= "ModuleType"
153 ModuleTypes
= XmlAttribute(XmlPackageIncludeHeader
, XmlTag
)
154 PackageIncludeHeader
.ModuleType
= ModuleTypes
.split()
156 return PackageIncludeHeader
159 ## Load a list of Package Include Pkg Headers.
161 # Read an input Package XML DOM object and return a list of Include Pkg Headers
162 # contained in the DOM object.
164 # @param XmlSpd An XML DOM object read from SPD file.
166 # @retvel IncludePkgHeaders A list of Include Pkg Headers loaded from XmlSpd.
168 def LoadPackageIncludePkgHeaders(XmlSpd
):
169 XmlTag
= "PackageSurfaceArea/PackageHeaders/IncludePkgHeader"
170 return map(LoadPackageIncludePkgHeader
, XmlList(XmlSpd
, XmlTag
))
173 ## Load a list of Package Guid Declarations.
175 # Read an input Package XML DOM object and return a list of Guid Declarations
176 # contained in the DOM object.
178 # @param XmlSpd An XML DOM object read from SPD file.
180 # @retvel GuidDeclarations A list of Guid Declarations loaded from XmlSpd.
182 def LoadPackageGuidDeclarations(XmlSpd
):
183 XmlTag
= "PackageSurfaceArea/GuidDeclarations/Entry"
184 return map(LoadGuidProtocolPpiCommon
, XmlList(XmlSpd
, XmlTag
))
187 ## Load a list of Package Protocol Declarations.
189 # Read an input Package XML DOM object and return a list of Protocol Declarations
190 # contained in the DOM object.
192 # @param XmlSpd An XML DOM object read from SPD file.
194 # @retvel ProtocolDeclarations A list of Protocol Declarations loaded from XmlSpd.
196 def LoadPackageProtocolDeclarations(XmlSpd
):
197 XmlTag
= "PackageSurfaceArea/ProtocolDeclarations/Entry"
198 return map(LoadGuidProtocolPpiCommon
, XmlList(XmlSpd
, XmlTag
))
201 ## Load a list of Package Ppi Declarations.
203 # Read an input Package XML DOM object and return a list of Ppi Declarations
204 # contained in the DOM object.
206 # @param XmlSpd An XML DOM object read from SPD file.
208 # @retvel PpiDeclarations A list of Ppi Declarations loaded from XmlSpd.
210 def LoadPackagePpiDeclarations(XmlSpd
):
211 XmlTag
= "PackageSurfaceArea/PpiDeclarations/Entry"
212 return map(LoadGuidProtocolPpiCommon
, XmlList(XmlSpd
, XmlTag
))
215 ## Load a list of Package Pcd Declarations.
217 # Read an input Package XML DOM object and return a list of Pcd Declarations
218 # contained in the DOM object.
220 # @param XmlSpd An XML DOM object read from SPD file.
222 # @retvel PcdDeclarations A list of Pcd Declarations loaded from XmlSpd.
224 def LoadPackagePcdDeclarations(XmlSpd
):
225 XmlTag
= "PackageSurfaceArea/PcdDeclarations/PcdEntry"
226 return map(LoadPcd
, XmlList(XmlSpd
, XmlTag
))
229 ## Load a list of Package User Extensions.
231 # Read an input Package XML DOM object and return a list of User Extensions
232 # contained in the DOM object.
234 # @param XmlSpd An XML DOM object read from SPD file.
236 # @retvel UserExtensions A list of User Extensions loaded from XmlSpd.
238 def LoadPackageUserExtensions(XmlSpd
):
239 XmlTag
= "PackageSurfaceArea/UserExtensions"
240 return map(LoadUserExtensions
, XmlList(XmlSpd
, XmlTag
))
243 ## Load a new Package class object.
245 # Read an input SPD File and return a new Package class Object.
247 # @param SpdFileName An XML DOM object read from SPD file.
249 # @retvel Package A new Module class object loaded from SPD File.
251 def LoadSpd(SpdFileName
):
252 XmlSpd
= XmlParseFile(SpdFileName
)
253 EdkLogger
.verbose("Xml Object loaded for file %s" % SpdFileName
)
255 Package
= PackageClass()
256 Package
.Header
= LoadPackageHeader(XmlSpd
, SpdFileName
)
257 Package
.LibraryClassDeclarations
= LoadPackageLibraryClasses(XmlSpd
)
258 Package
.IndustryStdHeaders
= LoadPackageIndustryStdHeaders(XmlSpd
)
259 Package
.ModuleFiles
= LoadPackageModuleFiles(XmlSpd
)
260 Package
.PackageIncludePkgHeaders
= LoadPackageIncludePkgHeaders(XmlSpd
)
261 Package
.GuidDeclarations
= LoadPackageGuidDeclarations(XmlSpd
)
262 Package
.ProtocolDeclarations
= LoadPackageProtocolDeclarations(XmlSpd
)
263 Package
.PpiDeclarations
= LoadPackagePpiDeclarations(XmlSpd
)
264 Package
.PcdDeclarations
= LoadPackagePcdDeclarations(XmlSpd
)
265 Package
.UserExtensions
= LoadPackageUserExtensions(XmlSpd
)
270 # This acts like the main() function for the script, unless it is 'import'ed
271 # into another script.
272 if __name__
== '__main__':