1## @file
2# This file is used to define common items of class object
3#
4# Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>
5# 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# Generate help text
16#
17def GenerateHelpText(Text, Lang):
18    if Text:
19        Ht = HelpTextClass()
20        Ht.Lang = Lang
21        Ht.String = Text
22
23        return Ht
24
25    return None
26
27## CommonClass
28#
29# This class defined common items used in Module/Platform/Package files
30#
31# @param object:       Inherited from object class
32# @param Usage:        Input value for Usage, default is []
33# @param FeatureFlag:  Input value for FeatureFalg, default is ''
34# @param SupArchList:  Input value for SupArchList, default is []
35# @param HelpText:     Input value for HelpText, default is ''
36#
37# @var Usage:          To store value for Usage, selection scope is in below list
38#                      ALWAYS_CONSUMED | SOMETIMES_CONSUMED | ALWAYS_PRODUCED | SOMETIMES_PRODUCED | TO_START | BY_START | PRIVATE
39# @var FeatureFlag:    To store value for FeatureFlag
40# @var SupArchList:    To store value for SupArchList, selection scope is in below list
41#                      EBC | IA32 | X64 | IPF | ARM | PPC | AARCH64
42# @var HelpText:       To store value for HelpText
43#
44class CommonClass(object):
45    def __init__(self, Usage = None, FeatureFlag = '', SupArchList = None, HelpText = ''):
46        self.Usage = Usage
47        if self.Usage == None:
48            self.Usage = []
49        self.FeatureFlag = FeatureFlag
50        self.SupArchList = SupArchList
51        if self.SupArchList == None:
52            self.SupArchList = []
53        self.HelpText = HelpText
54        self.HelpTextList = []
55
56## CommonHeaderClass
57#
58# This class defined common items used in Module/Platform/Package files
59#
60# @param object:          Inherited from object class
61#
62# @var Abstract:          To store value for Abstract
63# @var Description:       To store value for Description
64# @var Copyright:         To store value for Copyright
65# @var License:           To store value for License
66# @var Specification:     To store value for Specification
67#
68class CommonHeaderClass(object):
69    def __init__(self):
70        self.Abstract = ''
71        self.Description = ''
72        self.Copyright = ''
73        self.License = ''
74        self.Specification = {}
75
76## HelpTextClass
77#
78# This class defined HelpText item used in PKG file
79#
80# @param object:     Inherited from object class
81#
82# @var Lang:         To store value for Lang
83# @var String:       To store value for String
84#
85class HelpTextClass(object):
86    def __init__(self):
87        self.Lang = ''
88        self.String = ''
89
90## DefineClass
91#
92# This class defined item DEFINE used in Module/Platform/Package files
93#
94# @param object:  Inherited from object class
95#
96# @var Define:    To store value for Define, it is a set structure as
97#                 { (DefineName, Arch) : DefineValue, ... }
98#
99class DefineClass(object):
100    def __init__(self):
101        self.Define = {}
102
103## ClonedRecordClass
104#
105# This class defined ClonedRecord items used in Module/Platform/Package files
106#
107# @param object:        Inherited from object class
108#
109# @var Id:              To store value for Id
110# @var FarGuid:         To store value for FarGuid
111# @var PackageGuid:     To store value for PackageGuid
112# @var PackageVersion:  To store value for PackageVersion
113# @var ModuleGuid:      To store value for ModuleGuid
114# @var ModuleVersion:   To store value for ModuleVersion
115#
116class ClonedRecordClass(object):
117    def __init__(self):
118        self.Id = 0
119        self.FarGuid = ''
120        self.PackageGuid = ''
121        self.PackageVersion = ''
122        self.ModuleGuid = ''
123        self.ModuleVersion = ''
124
125## IdentificationClass
126#
127# This class defined Identification items used in Module/Platform/Package files
128#
129# @param object:  Inherited from object class
130#
131# @var Name:      To store value for Name
132#                 ModuleName(Inf) / PackageName(Dec) / PlatformName(Dsc)
133# @var Guid:      To store value for Guid
134# @var Version:   To store value for Version
135# @var FileName:  To store value for FileName
136# @var FullPath:  To store value for FullPath
137#
138class IdentificationClass(object):
139    def __init__(self):
140        self.Name = ''
141        self.BaseName = ''
142        self.Guid = ''
143        self.Version = ''
144        self.FileName = ''
145        self.FullPath = ''
146        self.RelaPath = ''
147        self.PackagePath = ''
148        self.ModulePath = ''
149        self.CombinePath = ''
150
151## IncludeStatementClass
152#
153# This class defined IncludeFiles item used in Module/Platform/Package files
154#
155# @param object:      Inherited from object class
156#
157# @var IncludeFiles:  To store value for IncludeFiles
158#                     It is a set structure as { IncludeFile : [Arch1, Arch2, ...], ... }
159#
160class IncludeStatementClass(object):
161    def __init__(self):
162        self.IncludeFiles = {}
163
164## GuidProtocolPpiCommonClass
165#
166# This class defined Guid, Protocol and Ppi like items used in Module/Platform/Package files
167#
168# @param CommonClass:  Inherited from CommonClass class
169#
170# @var Name:           To store value for Name
171# @var CName:          To store value for CName
172# @var Guid:           To store value for Guid
173# @var Notify:         To store value for Notify
174# @var GuidTypeList:   To store value for GuidTypeList, selection scope is in below list
175#                      DATA_HUB_RECORD | EFI_EVENT | EFI_SYSTEM_CONFIGURATION_TABLE | EFI_VARIABLE | GUID | HII_PACKAGE_LIST | HOB | TOKEN_SPACE_GUID
176# @var SupModuleList:  To store value for SupModuleList, selection scope is in below list
177#                      BASE | SEC | PEI_CORE | PEIM | DXE_CORE | DXE_DRIVER | DXE_RUNTIME_DRIVER | DXE_SAL_DRIVER | DXE_SMM_DRIVER | UEFI_DRIVER | UEFI_APPLICATION | USER_DEFINED | SMM_CORE
178#
179class GuidProtocolPpiCommonClass(CommonClass):
180    def __init__(self):
181        self.Name = ''
182        self.CName = ''
183        self.Guid = ''
184        self.VariableName = ''
185        self.Notify = False
186        self.GuidTypeList = []
187        self.GuidTypeLists = []
188        self.SupModuleList = []
189        CommonClass.__init__(self)
190
191## LibraryClassClass
192#
193# This class defined Library item used in Module/Platform/Package files
194#
195# @param CommonClass:               Inherited from CommonClass class
196# @param DefineClass:               Inherited from DefineClass class
197#
198# @var LibraryClass:                To store value for LibraryClass
199# @var IncludeHeader:               To store value for IncludeHeader
200# @var RecommendedInstanceVersion:  To store value for RecommendedInstanceVersion
201# @var RecommendedInstanceGuid:     To store value for RecommendedInstanceGuid
202# @var RecommendedInstance:         To store value for RecommendedInstance, selection scope is in below list
203#                                   DATA_HUB_RECORD | EFI_EVENT | EFI_SYSTEM_CONFIGURATION_TABLE | EFI_VARIABLE | GUID | HII_PACKAGE_LIST | HOB | TOKEN_SPACE_GUID
204# @var SupModuleList:               To store value for SupModuleList, selection scope is in below list
205#                                   BASE | SEC | PEI_CORE | PEIM | DXE_CORE | DXE_DRIVER | DXE_RUNTIME_DRIVER | DXE_SAL_DRIVER | DXE_SMM_DRIVER | UEFI_DRIVER | UEFI_APPLICATION | USER_DEFINED | SMM_CORE
206#
207class LibraryClassClass(CommonClass, DefineClass):
208    def __init__(self):
209        self.LibraryClass = ''
210        self.IncludeHeader = ''
211        self.RecommendedInstanceVersion = ''
212        self.RecommendedInstanceGuid = ''
213        self.RecommendedInstance = ''
214        self.SupModuleList = []
215        CommonClass.__init__(self)
216        DefineClass.__init__(self)
217
218## GuidClass
219#
220# This class defined Guid item used in Module/Platform/Package files
221#
222# @param GuidProtocolPpiCommonClass:  Inherited from GuidProtocolPpiCommonClass class
223#
224class GuidClass(GuidProtocolPpiCommonClass):
225    def __init__(self):
226        GuidProtocolPpiCommonClass.__init__(self)
227
228## ProtocolClass
229#
230# This class defined Protocol item used in Module/Platform/Package files
231#
232# @param GuidProtocolPpiCommonClass:  Inherited from GuidProtocolPpiCommonClass class
233#
234class ProtocolClass(GuidProtocolPpiCommonClass):
235    def __init__(self):
236        GuidProtocolPpiCommonClass.__init__(self)
237
238## PpiClass
239#
240# This class defined Ppi item used in Module/Platform/Package files
241#
242# @param GuidProtocolPpiCommonClass:  Inherited from GuidProtocolPpiCommonClass class
243#
244class PpiClass(GuidProtocolPpiCommonClass):
245    def __init__(self):
246        GuidProtocolPpiCommonClass.__init__(self)
247
248## SkuInfoClass
249#
250# This class defined SkuInfo item used in Module/Platform/Package files
251#
252# @param object:           Inherited from object class
253# @param SkuIdName:        Input value for SkuIdName, default is ''
254# @param SkuId:            Input value for SkuId, default is ''
255# @param VariableName:     Input value for VariableName, default is ''
256# @param VariableGuid:     Input value for VariableGuid, default is ''
257# @param VariableOffset:   Input value for VariableOffset, default is ''
258# @param HiiDefaultValue:  Input value for HiiDefaultValue, default is ''
259# @param VpdOffset:        Input value for VpdOffset, default is ''
260# @param DefaultValue:     Input value for DefaultValue, default is ''
261#
262# @var SkuIdName:          To store value for SkuIdName
263# @var SkuId:              To store value for SkuId
264# @var VariableName:       To store value for VariableName
265# @var VariableGuid:       To store value for VariableGuid
266# @var VariableOffset:     To store value for VariableOffset
267# @var HiiDefaultValue:    To store value for HiiDefaultValue
268# @var VpdOffset:          To store value for VpdOffset
269# @var DefaultValue:       To store value for DefaultValue
270#
271class SkuInfoClass(object):
272    def __init__(self, SkuIdName = '', SkuId = '', VariableName = '', VariableGuid = '', VariableOffset = '',
273                 HiiDefaultValue = '', VpdOffset = '', DefaultValue = '', VariableGuidValue = '', VariableAttribute = ''):
274        self.SkuIdName = SkuIdName
275        self.SkuId = SkuId
276
277        #
278        # Used by Hii
279        #
280        self.VariableName = VariableName
281        self.VariableGuid = VariableGuid
282        self.VariableGuidValue = VariableGuidValue
283        self.VariableOffset = VariableOffset
284        self.HiiDefaultValue = HiiDefaultValue
285        self.VariableAttribute = VariableAttribute
286
287        #
288        # Used by Vpd
289        #
290        self.VpdOffset = VpdOffset
291
292        #
293        # Used by Default
294        #
295        self.DefaultValue = DefaultValue
296
297    ## Convert the class to a string
298    #
299    #  Convert each member of the class to string
300    #  Organize to a signle line format string
301    #
302    #  @retval Rtn Formatted String
303    #
304    def __str__(self):
305        Rtn = 'SkuId = ' + str(self.SkuId) + "," + \
306                    'SkuIdName = ' + str(self.SkuIdName) + "," + \
307                    'VariableName = ' + str(self.VariableName) + "," + \
308                    'VariableGuid = ' + str(self.VariableGuid) + "," + \
309                    'VariableOffset = ' + str(self.VariableOffset) + "," + \
310                    'HiiDefaultValue = ' + str(self.HiiDefaultValue) + "," + \
311                    'VpdOffset = ' + str(self.VpdOffset) + "," + \
312                    'DefaultValue = ' + str(self.DefaultValue) + ","
313        return Rtn
314## PcdErrorClass
315#
316#
317#
318class PcdErrorClass(object):
319    def __init__(self):
320        self.ValidValueList = ''
321        self.ValidValueListLang = ''
322        self.ValidValueRange = ''
323        self.Expression = ''
324        self.ErrorNumber = ''
325        self.ErrorMessage = []
326
327## PcdClass
328#
329# This class defined Pcd item used in Module/Platform/Package files
330#
331# @param CommonClass:          Inherited from CommonClass class
332# @param CName:                Input value for CName, default is ''
333# @param Token:                Input value for Token, default is ''
334# @param TokenSpaceGuidCName:  Input value for TokenSpaceGuidCName, default is ''
335# @param DatumType:            Input value for DatumType, default is ''
336# @param MaxDatumSize:         Input value for MaxDatumSize, default is ''
337# @param DefaultValue:         Input value for DefaultValue, default is ''
338# @param ItemType:             Input value for ItemType, default is ''
339# @param ValidUsage:           Input value for ValidUsage, default is []
340# @param SkuInfoList:          Input value for SkuInfoList, default is {}
341# @param SupModuleList:        Input value for SupModuleList, default is []
342#
343# @var CName:                  To store value for CName
344# @var Token:                  To store value for Token
345# @var TokenSpaceGuidCName:    To store value for TokenSpaceGuidCName
346# @var DatumType:              To store value for DatumType, selection scope is in below list
347#                              UINT8 | UINT16 | UINT32 | UINT64 | VOID* | BOOLEAN
348# @var MaxDatumSize:           To store value for MaxDatumSize
349# @var DefaultValue:           To store value for DefaultValue
350# @var ItemType:               To store value for ItemType, selection scope is in below list
351#                              FEATURE_FLAG | FIXED_AT_BUILD | PATCHABLE_IN_MODULE | DYNAMIC | DYNAMIC_EX
352# @var ValidUsage:             To store value for ValidUsage, selection scope is in below list
353#                              FEATURE_FLAG | FIXED_AT_BUILD | PATCHABLE_IN_MODULE | DYNAMIC | DYNAMIC_EX
354# @var SkuInfoList:            To store value for SkuInfoList
355#                              It is a set structure as { [SkuIdName] : SkuInfoClass }
356# @var SupModuleList:          To store value for SupModuleList, selection scope is in below list
357#                              BASE | SEC | PEI_CORE | PEIM | DXE_CORE | DXE_DRIVER | DXE_RUNTIME_DRIVER | DXE_SAL_DRIVER | DXE_SMM_DRIVER | UEFI_DRIVER | UEFI_APPLICATION | USER_DEFINED | SMM_CORE
358#
359class PcdClass(CommonClass):
360    def __init__(self, CName = '', Token = '', TokenSpaceGuidCName = '', DatumType = '', MaxDatumSize = '', DefaultValue = '', ItemType = '', ValidUsage = None, SkuInfoList = None, SupModuleList = None):
361        self.CName = CName
362        self.Token = Token
363        self.TokenSpaceGuidCName = TokenSpaceGuidCName
364        self.DatumType = DatumType
365        self.MaxDatumSize = MaxDatumSize
366        self.DefaultValue = DefaultValue
367        self.ItemType = ItemType
368        self.ValidUsage = ValidUsage
369        self.PcdItemType = ''
370        self.TokenSpaceGuidValue = ''
371        self.PcdUsage = ''
372        self.PcdCName = ''
373        self.Value = ''
374        self.Offset = ''
375        if self.ValidUsage == None:
376            self.ValidUsage = []
377        self.SkuInfoList = SkuInfoList
378        if self.SkuInfoList  == None:
379            self.SkuInfoList  = {}
380        self.SupModuleList = SupModuleList
381        if self.SupModuleList == None:
382            self.SupModuleList = []
383        CommonClass.__init__(self)
384        self.PcdErrors = []
385
386## BuildOptionClass
387#
388# This class defined BuildOption item used in Module/Platform/Package files
389#
390# @param IncludeStatementClass:  Inherited from IncludeStatementClass class
391# @param ToolChainFamily:        Input value for ToolChainFamily, default is ''
392# @param ToolChain:              Input value for ToolChain, default is ''
393# @param Option:                 Input value for Option, default is ''
394#
395# @var Statement:                To store value for Statement
396#                                It is a string in a special format as "Family:Target_TagName_Tarch_ToolCode_FLAGS = String"
397# @var ToolChainFamily:          To store value for ToolChainFamily
398# @var ToolChain:                To store value for ToolChain
399# @var Option:                   To store value for Option
400# @var BuildTarget:              To store value for BuildTarget
401# @var TagName:                  To store value for TagName
402# @var ToolCode:                 To store value for ToolCode
403# @var SupArchList:              To store value for SupArchList, selection scope is in below list
404#                                EBC | IA32 | X64 | IPF | ARM | PPC | AARCH64
405#
406class BuildOptionClass(IncludeStatementClass):
407    def __init__(self, ToolChainFamily = '', ToolChain = '', Option = ''):
408        IncludeStatementClass.__init__(self)
409        self.Statement = ''
410        self.ToolChainFamily = ToolChainFamily
411        self.ToolChain = ToolChain
412        self.Option = Option
413        self.BuildTarget = ''
414        self.TagName = ''
415        self.ToolCode = ''
416        self.SupArchList = []
417
418## IncludeClass
419#
420# This class defined Include item used in Module/Platform/Package files
421#
422# @param CommonClass:  Inherited from CommonClass class
423#
424# @var FilePath:       To store value for FilePath
425# @var ModuleType:     To store value for ModuleType
426# @var Comment:        To store value for Comment
427#
428class IncludeClass(CommonClass):
429    def __init__(self):
430        self.FilePath = ''
431        self.ModuleType = ''
432        self.SupModuleList = []
433        self.Comment = ''
434        CommonClass.__init__(self)
435
436## FileClass
437#
438#
439class FileClass(CommonClass):
440    def __init__(self):
441        self.Filename = ''
442        self.Executable = ''
443        self.Family = ''
444        self.FileType = ''
445        CommonClass.__init__(self)
446
447
448## MiscFileClass
449#
450#
451class MiscFileClass(CommonHeaderClass):
452    def __init__(self):
453        CommonHeaderClass.__init__(self)
454        self.Name = ''
455        self.Files = []
456
457
458## UserExtensionsClass
459#
460# This class defined UserExtensions item used in Module/Platform/Package files
461#
462# @param object:    Inherited from object class
463#
464# @var UserID:      To store value for UserID
465# @var Identifier:  To store value for Identifier
466# @var Content:     To store value for Content
467#
468class UserExtensionsClass(object):
469    def __init__(self):
470        self.UserID = ''
471        self.Identifier = 0
472        self.Content = ''
473        self.Defines = []
474        self.BuildOptions = []
475