]> git.proxmox.com Git - mirror_edk2.git/blob - 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
1 ## @file
2 # Open an SPD file and load all its contents to a PackageClass object.
3 #
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
9 #
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.
12 #
13
14 ##
15 # Import Modules
16 #
17 import os
18 from Common.XmlRoutines import *
19 from Common.MigrationUtilities import *
20 from CommonDataClass.PackageClass import *
21
22
23 ## Load a list of Package Cloned Records.
24 #
25 # Read an input Package XML DOM object and return a list of Cloned Records
26 # contained in the DOM object.
27 #
28 # @param XmlSpd An XML DOM object read from SPD file.
29 #
30 # @retvel ClonedRecords A list of Cloned Records loaded from XmlSpd.
31 #
32 def LoadPackageClonedRecords(XmlSpd):
33 XmlTag = "PackageSurfaceArea/PackageDefinitions/ClonedFrom/Cloned"
34 return map(LoadClonedRecord, XmlList(XmlSpd, XmlTag))
35
36
37 ## Load Package Header.
38 #
39 # Read an input Package XML DOM object and return Package Header class object
40 # contained in the DOM object.
41 #
42 # @param XmlSpd An XML DOM object read from SPD file.
43 # @param SpdFileName The file path of SPD File.
44 #
45 # @retvel PackageHeader A new Package Header object loaded from XmlSpd.
46 #
47 def LoadPackageHeader(XmlSpd, SpdFileName):
48 PackageHeader = PackageHeaderClass()
49
50 XmlTag = "PackageSurfaceArea/SpdHeader"
51 SpdHeader = XmlNode(XmlSpd, XmlTag)
52
53 SetIdentification(PackageHeader, SpdHeader, "PackageName", SpdFileName)
54 SetCommonHeader(PackageHeader, SpdHeader)
55
56 XmlTag = "PackageSurfaceArea/PackageDefinitions/ReadOnly"
57 if XmlElement(XmlSpd, XmlTag).lower() == "true":
58 PackageHeader.ReadOnly = True
59
60 XmlTag = "PackageSurfaceArea/PackageDefinitions/RePackage"
61 if XmlElement(XmlSpd, XmlTag).lower() == "true":
62 PackageHeader.RePackage = True
63
64 PackageHeader.ClonedFrom = LoadPackageClonedRecords(XmlSpd)
65
66 return PackageHeader
67
68
69 ## Load a list of Package Library Classes.
70 #
71 # Read an input Package XML DOM object and return a list of Library Classes
72 # contained in the DOM object.
73 #
74 # @param XmlSpd An XML DOM object read from SPD file.
75 #
76 # @retvel LibraryClasses A list of Library Classes loaded from XmlSpd.
77 #
78 def LoadPackageLibraryClasses(XmlSpd):
79 XmlTag = "PackageSurfaceArea/LibraryClassDeclarations/LibraryClass"
80 return map(LoadLibraryClass, XmlList(XmlSpd, XmlTag))
81
82
83 ## Load a new Package Industry Std Header class object.
84 #
85 # Read an input XML IndustryStdHeader DOM object and return an object of
86 # Industry Std Header contained in the DOM object.
87 #
88 # @param XmlIndustryStdHeader A child XML DOM object in Package XML DOM.
89 #
90 # @retvel PackageIndustryStdHeader A new Industry Std Header object created by XmlIndustryStdHeader.
91 #
92 def LoadPackageIndustryStdHeader(XmlIndustryStdHeader):
93 PackageIndustryStdHeader = PackageIndustryStdHeaderClass()
94
95 XmlTag = "Name"
96 Name = XmlAttribute(XmlIndustryStdHeader, XmlTag)
97 PackageIndustryStdHeader.Name = Name
98
99 XmlTag = "IndustryStdHeader/IncludeHeader"
100 IncludeHeader = XmlElement(XmlIndustryStdHeader, XmlTag)
101 PackageIndustryStdHeader.IncludeHeader = IncludeHeader
102
103 SetCommon(PackageIndustryStdHeader, XmlIndustryStdHeader)
104
105 return PackageIndustryStdHeader
106
107
108 ## Load a list of Package Industry Std Headers.
109 #
110 # Read an input Package XML DOM object and return a list of Industry Std Headers
111 # contained in the DOM object.
112 #
113 # @param XmlSpd An XML DOM object read from SPD file.
114 #
115 # @retvel IndustryStdHeaders A list of Industry Std Headers loaded from XmlSpd.
116 #
117 def LoadPackageIndustryStdHeaders(XmlSpd):
118 XmlTag = "PackageSurfaceArea/IndustryStdIncludes/IndustryStdHeader"
119 return map(LoadPackageIndustryStdHeader, XmlList(XmlSpd, XmlTag))
120
121
122 ## Load a list of Package Module Files.
123 #
124 # Read an input Package XML DOM object and return a list of Module Files
125 # contained in the DOM object.
126 #
127 # @param XmlSpd An XML DOM object read from SPD file.
128 #
129 # @retvel ModuleFiles A list of Module Files loaded from XmlSpd.
130 #
131 def LoadPackageModuleFiles(XmlSpd):
132 XmlTag = "PackageSurfaceArea/MsaFiles/Filename"
133 return XmlElementList(XmlSpd, XmlTag)
134
135
136 ## Load a new Package Include Pkg Header class object.
137 #
138 # Read an input XML IncludePkgHeader DOM object and return an object of Include
139 # Package Header contained in the DOM object.
140 #
141 # @param XmlPackageIncludeHeader A child XML DOM object in Package XML DOM.
142 #
143 # @retvel PackageIncludePkgHeader A new Include Pkg Header object created by
144 # XmlPackageIncludeHeader.
145 #
146 def LoadPackageIncludePkgHeader(XmlPackageIncludeHeader):
147 PackageIncludeHeader = PackageIncludePkgHeaderClass()
148
149 IncludeHeader = XmlElementData(XmlPackageIncludeHeader)
150 PackageIncludeHeader.IncludeHeader = IncludeHeader
151
152 XmlTag = "ModuleType"
153 ModuleTypes = XmlAttribute(XmlPackageIncludeHeader, XmlTag)
154 PackageIncludeHeader.ModuleType = ModuleTypes.split()
155
156 return PackageIncludeHeader
157
158
159 ## Load a list of Package Include Pkg Headers.
160 #
161 # Read an input Package XML DOM object and return a list of Include Pkg Headers
162 # contained in the DOM object.
163 #
164 # @param XmlSpd An XML DOM object read from SPD file.
165 #
166 # @retvel IncludePkgHeaders A list of Include Pkg Headers loaded from XmlSpd.
167 #
168 def LoadPackageIncludePkgHeaders(XmlSpd):
169 XmlTag = "PackageSurfaceArea/PackageHeaders/IncludePkgHeader"
170 return map(LoadPackageIncludePkgHeader, XmlList(XmlSpd, XmlTag))
171
172
173 ## Load a list of Package Guid Declarations.
174 #
175 # Read an input Package XML DOM object and return a list of Guid Declarations
176 # contained in the DOM object.
177 #
178 # @param XmlSpd An XML DOM object read from SPD file.
179 #
180 # @retvel GuidDeclarations A list of Guid Declarations loaded from XmlSpd.
181 #
182 def LoadPackageGuidDeclarations(XmlSpd):
183 XmlTag = "PackageSurfaceArea/GuidDeclarations/Entry"
184 return map(LoadGuidProtocolPpiCommon, XmlList(XmlSpd, XmlTag))
185
186
187 ## Load a list of Package Protocol Declarations.
188 #
189 # Read an input Package XML DOM object and return a list of Protocol Declarations
190 # contained in the DOM object.
191 #
192 # @param XmlSpd An XML DOM object read from SPD file.
193 #
194 # @retvel ProtocolDeclarations A list of Protocol Declarations loaded from XmlSpd.
195 #
196 def LoadPackageProtocolDeclarations(XmlSpd):
197 XmlTag = "PackageSurfaceArea/ProtocolDeclarations/Entry"
198 return map(LoadGuidProtocolPpiCommon, XmlList(XmlSpd, XmlTag))
199
200
201 ## Load a list of Package Ppi Declarations.
202 #
203 # Read an input Package XML DOM object and return a list of Ppi Declarations
204 # contained in the DOM object.
205 #
206 # @param XmlSpd An XML DOM object read from SPD file.
207 #
208 # @retvel PpiDeclarations A list of Ppi Declarations loaded from XmlSpd.
209 #
210 def LoadPackagePpiDeclarations(XmlSpd):
211 XmlTag = "PackageSurfaceArea/PpiDeclarations/Entry"
212 return map(LoadGuidProtocolPpiCommon, XmlList(XmlSpd, XmlTag))
213
214
215 ## Load a list of Package Pcd Declarations.
216 #
217 # Read an input Package XML DOM object and return a list of Pcd Declarations
218 # contained in the DOM object.
219 #
220 # @param XmlSpd An XML DOM object read from SPD file.
221 #
222 # @retvel PcdDeclarations A list of Pcd Declarations loaded from XmlSpd.
223 #
224 def LoadPackagePcdDeclarations(XmlSpd):
225 XmlTag = "PackageSurfaceArea/PcdDeclarations/PcdEntry"
226 return map(LoadPcd, XmlList(XmlSpd, XmlTag))
227
228
229 ## Load a list of Package User Extensions.
230 #
231 # Read an input Package XML DOM object and return a list of User Extensions
232 # contained in the DOM object.
233 #
234 # @param XmlSpd An XML DOM object read from SPD file.
235 #
236 # @retvel UserExtensions A list of User Extensions loaded from XmlSpd.
237 #
238 def LoadPackageUserExtensions(XmlSpd):
239 XmlTag = "PackageSurfaceArea/UserExtensions"
240 return map(LoadUserExtensions, XmlList(XmlSpd, XmlTag))
241
242
243 ## Load a new Package class object.
244 #
245 # Read an input SPD File and return a new Package class Object.
246 #
247 # @param SpdFileName An XML DOM object read from SPD file.
248 #
249 # @retvel Package A new Module class object loaded from SPD File.
250 #
251 def LoadSpd(SpdFileName):
252 XmlSpd = XmlParseFile(SpdFileName)
253 EdkLogger.verbose("Xml Object loaded for file %s" % SpdFileName)
254
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)
266
267 return Package
268
269
270 # This acts like the main() function for the script, unless it is 'import'ed
271 # into another script.
272 if __name__ == '__main__':
273 pass