1 ## @file GenMetaFileMisc.py
3 # This file contained the miscellaneous routines for GenMetaFile usage.
5 # Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
7 # SPDX-License-Identifier: BSD-2-Clause-Patent
14 from Library
import DataType
as DT
15 from Library
import GlobalData
16 from Parser
.DecParser
import Dec
18 # AddExternToDefineSec
20 # @param SectionDict: string of source file path/name
21 # @param Arch: string of source file family field
22 # @param ExternList: string of source file FeatureFlag field
24 def AddExternToDefineSec(SectionDict
, Arch
, ExternList
):
26 for ArchList
, EntryPoint
, UnloadImage
, Constructor
, Destructor
, FFE
, HelpStringList
in ExternList
:
29 Statement
= (u
'%s ' % DT
.TAB_INF_DEFINES_ENTRY_POINT
).ljust(LeftOffset
) + u
'= %s' % EntryPoint
31 Statement
+= ' | %s' % FFE
32 if len(HelpStringList
) > 0:
33 Statement
= HelpStringList
[0].GetString() + '\n' + Statement
34 if len(HelpStringList
) > 1:
35 Statement
= Statement
+ HelpStringList
[1].GetString()
36 SectionDict
[Arch
] = SectionDict
[Arch
] + [Statement
]
39 Statement
= (u
'%s ' % DT
.TAB_INF_DEFINES_UNLOAD_IMAGE
).ljust(LeftOffset
) + u
'= %s' % UnloadImage
41 Statement
+= ' | %s' % FFE
43 if len(HelpStringList
) > 0:
44 Statement
= HelpStringList
[0].GetString() + '\n' + Statement
45 if len(HelpStringList
) > 1:
46 Statement
= Statement
+ HelpStringList
[1].GetString()
47 SectionDict
[Arch
] = SectionDict
[Arch
] + [Statement
]
50 Statement
= (u
'%s ' % DT
.TAB_INF_DEFINES_CONSTRUCTOR
).ljust(LeftOffset
) + u
'= %s' % Constructor
52 Statement
+= ' | %s' % FFE
54 if len(HelpStringList
) > 0:
55 Statement
= HelpStringList
[0].GetString() + '\n' + Statement
56 if len(HelpStringList
) > 1:
57 Statement
= Statement
+ HelpStringList
[1].GetString()
58 SectionDict
[Arch
] = SectionDict
[Arch
] + [Statement
]
61 Statement
= (u
'%s ' % DT
.TAB_INF_DEFINES_DESTRUCTOR
).ljust(LeftOffset
) + u
'= %s' % Destructor
63 Statement
+= ' | %s' % FFE
65 if len(HelpStringList
) > 0:
66 Statement
= HelpStringList
[0].GetString() + '\n' + Statement
67 if len(HelpStringList
) > 1:
68 Statement
= Statement
+ HelpStringList
[1].GetString()
69 SectionDict
[Arch
] = SectionDict
[Arch
] + [Statement
]
73 # Using TokenSpaceGuidValue and Token to obtain PcdName from DEC file
75 def ObtainPcdName(Packages
, TokenSpaceGuidValue
, Token
):
76 TokenSpaceGuidName
= ''
78 TokenSpaceGuidNameFound
= False
80 for PackageDependency
in Packages
:
82 # Generate generic comment
84 Guid
= PackageDependency
.GetGuid()
85 Version
= PackageDependency
.GetVersion()
89 # find package path/name
91 for PkgInfo
in GlobalData
.gWSPKG_LIST
:
92 if Guid
== PkgInfo
[1]:
93 if (not Version
) or (Version
== PkgInfo
[2]):
97 # The dependency package in workspace
100 if Path
not in GlobalData
.gPackageDict
:
102 GlobalData
.gPackageDict
[Path
] = DecFile
104 DecFile
= GlobalData
.gPackageDict
[Path
]
106 DecGuidsDict
= DecFile
.GetGuidSectionObject().ValueDict
107 DecPcdsDict
= DecFile
.GetPcdSectionObject().ValueDict
109 TokenSpaceGuidName
= ''
111 TokenSpaceGuidNameFound
= False
114 # Get TokenSpaceGuidCName from Guids section
116 for GuidKey
in DecGuidsDict
:
117 GuidList
= DecGuidsDict
[GuidKey
]
118 for GuidItem
in GuidList
:
119 if TokenSpaceGuidValue
.upper() == GuidItem
.GuidString
.upper():
120 TokenSpaceGuidName
= GuidItem
.GuidCName
121 TokenSpaceGuidNameFound
= True
123 if TokenSpaceGuidNameFound
:
126 # Retrieve PcdCName from Pcds Section
128 for PcdKey
in DecPcdsDict
:
129 PcdList
= DecPcdsDict
[PcdKey
]
130 for PcdItem
in PcdList
:
131 if TokenSpaceGuidName
== PcdItem
.TokenSpaceGuidCName
and Token
== PcdItem
.TokenValue
:
132 PcdCName
= PcdItem
.TokenCName
133 return TokenSpaceGuidName
, PcdCName
135 # The dependency package in ToBeInstalledDist
137 for Dist
in GlobalData
.gTO_BE_INSTALLED_DIST_LIST
:
138 for Package
in Dist
.PackageSurfaceArea
.values():
139 if Guid
== Package
.Guid
:
140 for GuidItem
in Package
.GuidList
:
141 if TokenSpaceGuidValue
.upper() == GuidItem
.Guid
.upper():
142 TokenSpaceGuidName
= GuidItem
.CName
143 TokenSpaceGuidNameFound
= True
145 for PcdItem
in Package
.PcdList
:
146 if TokenSpaceGuidName
== PcdItem
.TokenSpaceGuidCName
and Token
== PcdItem
.Token
:
147 PcdCName
= PcdItem
.CName
148 return TokenSpaceGuidName
, PcdCName
150 return TokenSpaceGuidName
, PcdCName
153 # transfer dict that using (Statement, SortedArch) as key,
154 # (GenericComment, UsageComment) as value into a dict that using SortedArch as
155 # key and NewStatement as value
157 def TransferDict(OrigDict
, Type
=None):
160 if Type
in ['INF_GUID', 'INF_PPI_PROTOCOL']:
162 if Type
in ['INF_PCD']:
165 for Statement
, SortedArch
in OrigDict
:
166 if len(Statement
) > LeftOffset
:
167 LeftOffset
= len(Statement
)
169 for Statement
, SortedArch
in OrigDict
:
170 Comment
= OrigDict
[Statement
, SortedArch
]
172 # apply the NComment/1Comment rule
174 if Comment
.find('\n') != len(Comment
) - 1:
175 NewStateMent
= Comment
+ Statement
178 NewStateMent
= Statement
.ljust(LeftOffset
) + ' ' + Comment
.rstrip('\n')
180 NewStateMent
= Statement
+ ' ' + Comment
.rstrip('\n')
182 if SortedArch
in NewDict
:
183 NewDict
[SortedArch
] = NewDict
[SortedArch
] + [NewStateMent
]
185 NewDict
[SortedArch
] = [NewStateMent
]