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