]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/UPT/GenMetaFile/GenMetaFileMisc.py
BaseTools: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / BaseTools / Source / Python / UPT / GenMetaFile / GenMetaFileMisc.py
CommitLineData
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
11GenMetaFileMisc\r
12'''\r
13\r
14from Library import DataType as DT\r
15from Library import GlobalData\r
16from 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 24def 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
75def 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 157def 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