]>
git.proxmox.com Git - mirror_edk2.git/blob - BaseTools/Scripts/PackageDocumentTools/plugins/EdkPlugins/edk2/model/dec.py
3 # Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
5 # SPDX-License-Identifier: BSD-2-Clause-Patent
8 from plugins
.EdkPlugins
.basemodel
import ini
10 from plugins
.EdkPlugins
.basemodel
.message
import *
12 class DECFile(ini
.BaseINIFile
):
14 def GetSectionInstance(self
, parent
, name
, isCombined
=False):
15 return DECSection(parent
, name
, isCombined
)
17 def GetComponents(self
):
18 return self
.GetSectionByName('Components')
20 def GetPackageRootPath(self
):
21 return os
.path
.dirname(self
.GetFilename()).strip()
23 def GetBaseName(self
):
24 return self
.GetDefine("PACKAGE_NAME").strip()
27 return self
.GetDefine("PACKAGE_VERSION").strip()
29 def GetSectionObjectsByName(self
, name
, arch
=None):
31 sects
= self
.GetSectionByName(name
)
33 # skip unmatched archtecture content
34 if not sect
.IsArchMatch(arch
):
37 for obj
in sect
.GetObjects():
42 class DECSection(ini
.BaseINISection
):
43 def GetSectionINIObject(self
, parent
):
46 if type.lower().find('defines') != -1:
47 return DECDefineSectionObject(self
)
48 if type.lower().find('includes') != -1:
49 return DECIncludeObject(self
)
50 if type.lower().find('pcd') != -1:
51 return DECPcdObject(self
)
52 if type.lower() == 'libraryclasses':
53 return DECLibraryClassObject(self
)
54 if type.lower() == 'guids':
55 return DECGuidObject(self
)
56 if type.lower() == 'ppis':
57 return DECPpiObject(self
)
58 if type.lower() == 'protocols':
59 return DECProtocolObject(self
)
61 return DECSectionObject(self
)
64 arr
= self
._name
.split('.')
68 arr
= self
._name
.split('.')
73 def IsArchMatch(self
, arch
):
74 if arch
is None or self
.GetArch() == 'common':
77 if self
.GetArch().lower() != arch
.lower():
82 class DECSectionObject(ini
.BaseINISectionObject
):
84 return self
.GetParent().GetArch()
86 class DECDefineSectionObject(DECSectionObject
):
87 def __init__(self
, parent
):
88 DECSectionObject
.__init
__(self
, parent
)
93 assert (self
._start
== self
._end
), 'The object in define section must be in single line'
95 line
= self
.GetLineByOffset(self
._start
).strip()
97 line
= line
.split('#')[0]
100 ErrorMsg('Invalid define section object',
102 self
.GetParent().GetName()
106 self
._key
= arr
[0].strip()
107 self
._value
= arr
[1].strip()
117 class DECGuidObject(DECSectionObject
):
120 def __init__(self
, parent
):
121 DECSectionObject
.__init
__(self
, parent
)
125 line
= self
.GetLineByOffset(self
._start
).strip().split('#')[0]
126 self
._name
= line
.split('=')[0].strip()
127 self
._guid
= line
.split('=')[1].strip()
128 objdict
= DECGuidObject
._objs
129 if self
._name
not in objdict
.keys():
130 objdict
[self
._name
] = [self
]
132 objdict
[self
._name
].append(self
)
143 objdict
= DECGuidObject
._objs
144 objdict
[self
._name
].remove(self
)
145 if len(objdict
[self
._name
]) == 0:
146 del objdict
[self
._name
]
150 return DECGuidObject
._objs
152 class DECPpiObject(DECSectionObject
):
154 def __init__(self
, parent
):
155 DECSectionObject
.__init
__(self
, parent
)
159 line
= self
.GetLineByOffset(self
._start
).strip().split('#')[0]
160 self
._name
= line
.split('=')[0].strip()
161 self
._guid
= line
.split('=')[1].strip()
162 objdict
= DECPpiObject
._objs
163 if self
._name
not in objdict
.keys():
164 objdict
[self
._name
] = [self
]
166 objdict
[self
._name
].append(self
)
177 objdict
= DECPpiObject
._objs
178 objdict
[self
._name
].remove(self
)
179 if len(objdict
[self
._name
]) == 0:
180 del objdict
[self
._name
]
184 return DECPpiObject
._objs
186 class DECProtocolObject(DECSectionObject
):
189 def __init__(self
, parent
):
190 DECSectionObject
.__init
__(self
, parent
)
194 line
= self
.GetLineByOffset(self
._start
).strip().split('#')[0]
195 self
._name
= line
.split('=')[0].strip()
196 self
._guid
= line
.split('=')[1].strip()
197 objdict
= DECProtocolObject
._objs
198 if self
._name
not in objdict
.keys():
199 objdict
[self
._name
] = [self
]
201 objdict
[self
._name
].append(self
)
212 objdict
= DECProtocolObject
._objs
213 objdict
[self
._name
].remove(self
)
214 if len(objdict
[self
._name
]) == 0:
215 del objdict
[self
._name
]
220 return DECProtocolObject
._objs
222 class DECLibraryClassObject(DECSectionObject
):
225 def __init__(self
, parent
):
226 DECSectionObject
.__init
__(self
, parent
)
227 self
.mClassName
= None
228 self
.mHeaderFile
= None
231 line
= self
.GetLineByOffset(self
._start
).strip().split('#')[0]
232 self
.mClassName
, self
.mHeaderFile
= line
.split('|')
233 objdict
= DECLibraryClassObject
._objs
234 if self
.mClassName
not in objdict
.keys():
235 objdict
[self
.mClassName
] = [self
]
237 objdict
[self
.mClassName
].append(self
)
240 def GetClassName(self
):
241 return self
.mClassName
244 return self
.mClassName
246 def GetHeaderFile(self
):
247 return self
.mHeaderFile
250 objdict
= DECLibraryClassObject
._objs
251 objdict
[self
.mClassName
].remove(self
)
252 if len(objdict
[self
.mClassName
]) == 0:
253 del objdict
[self
.mClassName
]
257 return DECLibraryClassObject
._objs
259 class DECIncludeObject(DECSectionObject
):
260 def __init__(self
, parent
):
261 DECSectionObject
.__init
__(self
, parent
)
264 return self
.GetLineByOffset(self
._start
).split('#')[0].strip()
266 class DECPcdObject(DECSectionObject
):
269 def __init__(self
, parent
):
270 DECSectionObject
.__init
__(self
, parent
)
272 self
.mPcdDefaultValue
= None
273 self
.mPcdDataType
= None
274 self
.mPcdToken
= None
277 line
= self
.GetLineByOffset(self
._start
).strip().split('#')[0]
278 (self
.mPcdName
, self
.mPcdDefaultValue
, self
.mPcdDataType
, self
.mPcdToken
) = line
.split('|')
279 objdict
= DECPcdObject
._objs
280 if self
.mPcdName
not in objdict
.keys():
281 objdict
[self
.mPcdName
] = [self
]
283 objdict
[self
.mPcdName
].append(self
)
288 objdict
= DECPcdObject
._objs
289 objdict
[self
.mPcdName
].remove(self
)
290 if len(objdict
[self
.mPcdName
]) == 0:
291 del objdict
[self
.mPcdName
]
293 def GetPcdType(self
):
294 return self
.GetParent().GetType()
296 def GetPcdName(self
):
299 def GetPcdValue(self
):
300 return self
.mPcdDefaultValue
302 def GetPcdDataType(self
):
303 return self
.mPcdDataType
305 def GetPcdToken(self
):
306 return self
.mPcdToken
309 return self
.GetPcdName().split('.')[1]
313 return DECPcdObject
._objs