]>
Commit | Line | Data |
---|---|---|
4234283c LG |
1 | ## @file GenMetaFileMisc.py\r |
2 | #\r | |
3 | # This file contained the miscellaneous routines for GenMetaFile usage.\r | |
4 | #\r | |
f7496d71 | 5 | # Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>\r |
4234283c | 6 | #\r |
2e351cbe | 7 | # SPDX-License-Identifier: BSD-2-Clause-Patent\r |
4234283c LG |
8 | #\r |
9 | \r | |
10 | '''\r | |
11 | GenMetaFileMisc\r | |
12 | '''\r | |
13 | \r | |
14 | from Library import DataType as DT\r | |
15 | from Library import GlobalData\r | |
16 | from Parser.DecParser import Dec\r | |
17 | \r | |
18 | # AddExternToDefineSec\r | |
19 | #\r | |
20 | # @param SectionDict: string of source file path/name\r | |
21 | # @param Arch: string of source file family field\r | |
22 | # @param ExternList: string of source file FeatureFlag field\r | |
f7496d71 | 23 | #\r |
4234283c | 24 | def AddExternToDefineSec(SectionDict, Arch, ExternList):\r |
421ccda3 | 25 | LeftOffset = 31\r |
4234283c LG |
26 | for ArchList, EntryPoint, UnloadImage, Constructor, Destructor, FFE, HelpStringList in ExternList:\r |
27 | if Arch or ArchList:\r | |
28 | if EntryPoint:\r | |
421ccda3 | 29 | Statement = (u'%s ' % DT.TAB_INF_DEFINES_ENTRY_POINT).ljust(LeftOffset) + u'= %s' % EntryPoint\r |
4234283c LG |
30 | if FFE:\r |
31 | Statement += ' | %s' % FFE\r | |
32 | if len(HelpStringList) > 0:\r | |
33 | Statement = HelpStringList[0].GetString() + '\n' + Statement\r | |
34 | if len(HelpStringList) > 1:\r | |
35 | Statement = Statement + HelpStringList[1].GetString()\r | |
36 | SectionDict[Arch] = SectionDict[Arch] + [Statement]\r | |
421ccda3 | 37 | \r |
4234283c | 38 | if UnloadImage:\r |
421ccda3 | 39 | Statement = (u'%s ' % DT.TAB_INF_DEFINES_UNLOAD_IMAGE).ljust(LeftOffset) + u'= %s' % UnloadImage\r |
4234283c LG |
40 | if FFE:\r |
41 | Statement += ' | %s' % FFE\r | |
421ccda3 | 42 | \r |
4234283c LG |
43 | if len(HelpStringList) > 0:\r |
44 | Statement = HelpStringList[0].GetString() + '\n' + Statement\r | |
45 | if len(HelpStringList) > 1:\r | |
46 | Statement = Statement + HelpStringList[1].GetString()\r | |
47 | SectionDict[Arch] = SectionDict[Arch] + [Statement]\r | |
421ccda3 | 48 | \r |
4234283c | 49 | if Constructor:\r |
421ccda3 | 50 | Statement = (u'%s ' % DT.TAB_INF_DEFINES_CONSTRUCTOR).ljust(LeftOffset) + u'= %s' % Constructor\r |
4234283c LG |
51 | if FFE:\r |
52 | Statement += ' | %s' % FFE\r | |
421ccda3 | 53 | \r |
4234283c LG |
54 | if len(HelpStringList) > 0:\r |
55 | Statement = HelpStringList[0].GetString() + '\n' + Statement\r | |
56 | if len(HelpStringList) > 1:\r | |
421ccda3 HC |
57 | Statement = Statement + HelpStringList[1].GetString()\r |
58 | SectionDict[Arch] = SectionDict[Arch] + [Statement]\r | |
59 | \r | |
4234283c | 60 | if Destructor:\r |
421ccda3 | 61 | Statement = (u'%s ' % DT.TAB_INF_DEFINES_DESTRUCTOR).ljust(LeftOffset) + u'= %s' % Destructor\r |
4234283c LG |
62 | if FFE:\r |
63 | Statement += ' | %s' % FFE\r | |
421ccda3 | 64 | \r |
4234283c LG |
65 | if len(HelpStringList) > 0:\r |
66 | Statement = HelpStringList[0].GetString() + '\n' + Statement\r | |
67 | if len(HelpStringList) > 1:\r | |
68 | Statement = Statement + HelpStringList[1].GetString()\r | |
69 | SectionDict[Arch] = SectionDict[Arch] + [Statement]\r | |
421ccda3 | 70 | \r |
4234283c LG |
71 | ## ObtainPcdName\r |
72 | #\r | |
73 | # Using TokenSpaceGuidValue and Token to obtain PcdName from DEC file\r | |
74 | #\r | |
75 | def ObtainPcdName(Packages, TokenSpaceGuidValue, Token):\r | |
56636814 HC |
76 | TokenSpaceGuidName = ''\r |
77 | PcdCName = ''\r | |
78 | TokenSpaceGuidNameFound = False\r | |
79 | \r | |
4234283c LG |
80 | for PackageDependency in Packages:\r |
81 | #\r | |
82 | # Generate generic comment\r | |
83 | #\r | |
84 | Guid = PackageDependency.GetGuid()\r | |
85 | Version = PackageDependency.GetVersion()\r | |
421ccda3 | 86 | \r |
56636814 | 87 | Path = None\r |
4234283c LG |
88 | #\r |
89 | # find package path/name\r | |
f7496d71 | 90 | #\r |
4234283c LG |
91 | for PkgInfo in GlobalData.gWSPKG_LIST:\r |
92 | if Guid == PkgInfo[1]:\r | |
93 | if (not Version) or (Version == PkgInfo[2]):\r | |
94 | Path = PkgInfo[3]\r | |
95 | break\r | |
421ccda3 | 96 | \r |
56636814 HC |
97 | # The dependency package in workspace\r |
98 | if Path:\r | |
99 | DecFile = None\r | |
100 | if Path not in GlobalData.gPackageDict:\r | |
101 | DecFile = Dec(Path)\r | |
102 | GlobalData.gPackageDict[Path] = DecFile\r | |
103 | else:\r | |
104 | DecFile = GlobalData.gPackageDict[Path]\r | |
105 | \r | |
106 | DecGuidsDict = DecFile.GetGuidSectionObject().ValueDict\r | |
107 | DecPcdsDict = DecFile.GetPcdSectionObject().ValueDict\r | |
108 | \r | |
109 | TokenSpaceGuidName = ''\r | |
110 | PcdCName = ''\r | |
111 | TokenSpaceGuidNameFound = False\r | |
112 | \r | |
113 | #\r | |
114 | # Get TokenSpaceGuidCName from Guids section\r | |
115 | #\r | |
116 | for GuidKey in DecGuidsDict:\r | |
117 | GuidList = DecGuidsDict[GuidKey]\r | |
118 | for GuidItem in GuidList:\r | |
119 | if TokenSpaceGuidValue.upper() == GuidItem.GuidString.upper():\r | |
120 | TokenSpaceGuidName = GuidItem.GuidCName\r | |
121 | TokenSpaceGuidNameFound = True\r | |
122 | break\r | |
123 | if TokenSpaceGuidNameFound:\r | |
4234283c | 124 | break\r |
56636814 HC |
125 | #\r |
126 | # Retrieve PcdCName from Pcds Section\r | |
127 | #\r | |
128 | for PcdKey in DecPcdsDict:\r | |
129 | PcdList = DecPcdsDict[PcdKey]\r | |
130 | for PcdItem in PcdList:\r | |
131 | if TokenSpaceGuidName == PcdItem.TokenSpaceGuidCName and Token == PcdItem.TokenValue:\r | |
132 | PcdCName = PcdItem.TokenCName\r | |
133 | return TokenSpaceGuidName, PcdCName\r | |
134 | \r | |
135 | # The dependency package in ToBeInstalledDist\r | |
136 | else:\r | |
137 | for Dist in GlobalData.gTO_BE_INSTALLED_DIST_LIST:\r | |
138 | for Package in Dist.PackageSurfaceArea.values():\r | |
139 | if Guid == Package.Guid:\r | |
140 | for GuidItem in Package.GuidList:\r | |
141 | if TokenSpaceGuidValue.upper() == GuidItem.Guid.upper():\r | |
142 | TokenSpaceGuidName = GuidItem.CName\r | |
143 | TokenSpaceGuidNameFound = True\r | |
144 | break\r | |
145 | for PcdItem in Package.PcdList:\r | |
146 | if TokenSpaceGuidName == PcdItem.TokenSpaceGuidCName and Token == PcdItem.Token:\r | |
147 | PcdCName = PcdItem.CName\r | |
148 | return TokenSpaceGuidName, PcdCName\r | |
421ccda3 | 149 | \r |
4234283c LG |
150 | return TokenSpaceGuidName, PcdCName\r |
151 | \r | |
152 | ## _TransferDict\r | |
f7496d71 | 153 | # transfer dict that using (Statement, SortedArch) as key,\r |
4234283c | 154 | # (GenericComment, UsageComment) as value into a dict that using SortedArch as\r |
f7496d71 | 155 | # key and NewStatement as value\r |
4234283c | 156 | #\r |
421ccda3 | 157 | def TransferDict(OrigDict, Type=None):\r |
4234283c | 158 | NewDict = {}\r |
421ccda3 HC |
159 | LeftOffset = 0\r |
160 | if Type in ['INF_GUID', 'INF_PPI_PROTOCOL']:\r | |
161 | LeftOffset = 45\r | |
162 | if Type in ['INF_PCD']:\r | |
163 | LeftOffset = 75\r | |
164 | if LeftOffset > 0:\r | |
165 | for Statement, SortedArch in OrigDict:\r | |
166 | if len(Statement) > LeftOffset:\r | |
167 | LeftOffset = len(Statement)\r | |
f7496d71 | 168 | \r |
4234283c LG |
169 | for Statement, SortedArch in OrigDict:\r |
170 | Comment = OrigDict[Statement, SortedArch]\r | |
171 | #\r | |
172 | # apply the NComment/1Comment rule\r | |
173 | #\r | |
421ccda3 | 174 | if Comment.find('\n') != len(Comment) - 1:\r |
4234283c LG |
175 | NewStateMent = Comment + Statement\r |
176 | else:\r | |
421ccda3 HC |
177 | if LeftOffset:\r |
178 | NewStateMent = Statement.ljust(LeftOffset) + ' ' + Comment.rstrip('\n')\r | |
179 | else:\r | |
180 | NewStateMent = Statement + ' ' + Comment.rstrip('\n')\r | |
4234283c LG |
181 | \r |
182 | if SortedArch in NewDict:\r | |
183 | NewDict[SortedArch] = NewDict[SortedArch] + [NewStateMent]\r | |
184 | else:\r | |
185 | NewDict[SortedArch] = [NewStateMent]\r | |
186 | \r | |
421ccda3 HC |
187 | return NewDict\r |
188 | \r |