]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/UPT/Object/Parser/InfSoucesObject.py
BaseTools: Remove equality operator with None
[mirror_edk2.git] / BaseTools / Source / Python / UPT / Object / Parser / InfSoucesObject.py
CommitLineData
4234283c
LG
1## @file\r
2# This file is used to define class objects of INF file [Sources] section. \r
3# It will consumed by InfParser. \r
4#\r
5# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>\r
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
16InfSourcesObject\r
17'''\r
18\r
19import os\r
20\r
21from Logger import StringTable as ST\r
22from Logger import ToolError\r
23import Logger.Log as Logger\r
24from Library import GlobalData \r
25\r
26from Library.Misc import Sdict\r
27from Library.ExpressionValidate import IsValidFeatureFlagExp \r
28from Object.Parser.InfCommonObject import InfSectionCommonDef\r
29from Library.Misc import ValidFile \r
30from Library.ParserValidate import IsValidFamily\r
31from Library.ParserValidate import IsValidPath\r
32\r
33## __GenSourceInstance \r
34#\r
35# \r
36def GenSourceInstance(Item, CurrentLineOfItem, ItemObj):\r
37 \r
38 IsValidFileFlag = False\r
39 \r
40 if len(Item) < 6 and len(Item) >= 1:\r
41 #\r
42 # File | Family | TagName | ToolCode | FeatureFlagExpr\r
43 #\r
44 if len(Item) == 5:\r
45 #\r
46 # Validate Feature Flag Express\r
47 #\r
48 if Item[4].strip() == '':\r
49 Logger.Error("InfParser", \r
50 ToolError.FORMAT_INVALID,\r
51 ST.ERR_INF_PARSER_FEATURE_FLAG_EXP_MISSING,\r
52 File=CurrentLineOfItem[2], \r
53 Line=CurrentLineOfItem[1], \r
54 ExtraData=CurrentLineOfItem[0])\r
55 #\r
56 # Validate FFE \r
57 #\r
58 FeatureFlagRtv = IsValidFeatureFlagExp(Item[4].strip())\r
59 if not FeatureFlagRtv[0]:\r
60 Logger.Error("InfParser", \r
61 ToolError.FORMAT_INVALID,\r
62 ST.ERR_INF_PARSER_FEATURE_FLAG_EXP_SYNTAX_INVLID%(FeatureFlagRtv[1]),\r
63 File=CurrentLineOfItem[2], \r
64 Line=CurrentLineOfItem[1], \r
65 ExtraData=CurrentLineOfItem[0])\r
66 ItemObj.SetFeatureFlagExp(Item[4])\r
67 if len(Item) >= 4:\r
68 if Item[3].strip() == '':\r
69 ItemObj.SetToolCode(Item[3])\r
70 else:\r
71 Logger.Error("InfParser", \r
72 ToolError.FORMAT_INVALID,\r
73 ST.ERR_INF_PARSER_TOOLCODE_NOT_PERMITTED%(Item[2]),\r
74 File=CurrentLineOfItem[2], \r
75 Line=CurrentLineOfItem[1], \r
76 ExtraData=CurrentLineOfItem[0]) \r
77 if len(Item) >= 3:\r
78 if Item[2].strip() == '':\r
79 ItemObj.SetTagName(Item[2])\r
80 else:\r
81 Logger.Error("InfParser", \r
82 ToolError.FORMAT_INVALID,\r
83 ST.ERR_INF_PARSER_TAGNAME_NOT_PERMITTED%(Item[2]),\r
84 File=CurrentLineOfItem[2], \r
85 Line=CurrentLineOfItem[1], \r
86 ExtraData=CurrentLineOfItem[0])\r
87 if len(Item) >= 2:\r
88 if IsValidFamily(Item[1].strip()):\r
89 #\r
90 # To align with UDP specification. "*" is not permitted in UDP specification\r
91 #\r
92 if Item[1].strip() == "*":\r
93 Item[1] = ""\r
94 ItemObj.SetFamily(Item[1])\r
95 else:\r
96 Logger.Error("InfParser", \r
97 ToolError.FORMAT_INVALID,\r
98 ST.ERR_INF_PARSER_SOURCE_SECTION_FAMILY_INVALID%(Item[1]),\r
99 File=CurrentLineOfItem[2], \r
100 Line=CurrentLineOfItem[1], \r
101 ExtraData=CurrentLineOfItem[0])\r
102 if len(Item) >= 1:\r
103 #\r
104 # Validate file name exist.\r
105 #\r
106 FullFileName = os.path.normpath(os.path.realpath(os.path.join(GlobalData.gINF_MODULE_DIR, Item[0])))\r
107 if not (ValidFile(FullFileName) or ValidFile(Item[0])):\r
108 Logger.Error("InfParser", \r
109 ToolError.FORMAT_INVALID,\r
110 ST.ERR_FILELIST_EXIST%(Item[0]),\r
111 File=CurrentLineOfItem[2], \r
112 Line=CurrentLineOfItem[1], \r
113 ExtraData=CurrentLineOfItem[0])\r
114 \r
115 #\r
116 # Validate file exist/format.\r
117 #\r
118 \r
119 if IsValidPath(Item[0], GlobalData.gINF_MODULE_DIR):\r
120 IsValidFileFlag = True\r
121 else:\r
122 Logger.Error("InfParser", \r
123 ToolError.FORMAT_INVALID,\r
124 ST.ERR_INF_PARSER_FILE_NOT_EXIST_OR_NAME_INVALID%(Item[0]),\r
125 File=CurrentLineOfItem[2], \r
126 Line=CurrentLineOfItem[1], \r
127 ExtraData=CurrentLineOfItem[0])\r
128 return False\r
129 if IsValidFileFlag:\r
130 ItemObj.SetSourceFileName(Item[0]) \r
131 else:\r
132 Logger.Error("InfParser", \r
133 ToolError.FORMAT_INVALID, \r
134 ST.ERR_INF_PARSER_SOURCES_SECTION_CONTENT_ERROR,\r
135 File=CurrentLineOfItem[2], \r
136 Line=CurrentLineOfItem[1],\r
137 ExtraData=CurrentLineOfItem[0])\r
138 \r
139 return ItemObj \r
140\r
141## InfSourcesItemObject()\r
142# \r
143#\r
144class InfSourcesItemObject():\r
145 def __init__(self, \\r
146 SourceFileName = '', \\r
147 Family = '', \\r
148 TagName = '', \\r
149 ToolCode = '', \\r
150 FeatureFlagExp = ''):\r
151 self.SourceFileName = SourceFileName\r
152 self.Family = Family\r
153 self.TagName = TagName\r
154 self.ToolCode = ToolCode\r
155 self.FeatureFlagExp = FeatureFlagExp\r
156 self.HeaderString = ''\r
157 self.TailString = ''\r
158 self.SupArchList = []\r
159 \r
160 def SetSourceFileName(self, SourceFilename):\r
161 self.SourceFileName = SourceFilename\r
162 def GetSourceFileName(self):\r
163 return self.SourceFileName\r
164 \r
165 def SetFamily(self, Family):\r
166 self.Family = Family\r
167 def GetFamily(self):\r
168 return self.Family\r
169 \r
170 def SetTagName(self, TagName):\r
171 self.TagName = TagName\r
172 def GetTagName(self):\r
173 return self.TagName\r
174 \r
175 def SetToolCode(self, ToolCode):\r
176 self.ToolCode = ToolCode\r
177 def GetToolCode(self):\r
178 return self.ToolCode\r
179 \r
180 def SetFeatureFlagExp(self, FeatureFlagExp):\r
181 self.FeatureFlagExp = FeatureFlagExp\r
182 def GetFeatureFlagExp(self):\r
183 return self.FeatureFlagExp\r
184 \r
185 def SetHeaderString(self, HeaderString):\r
186 self.HeaderString = HeaderString\r
187 def GetHeaderString(self):\r
188 return self.HeaderString\r
189\r
190 def SetTailString(self, TailString):\r
191 self.TailString = TailString\r
192 def GetTailString(self):\r
193 return self.TailString\r
194 \r
195 def SetSupArchList(self, SupArchList):\r
196 self.SupArchList = SupArchList\r
197 def GetSupArchList(self):\r
198 return self.SupArchList \r
199##\r
200#\r
201#\r
202#\r
203class InfSourcesObject(InfSectionCommonDef):\r
204 def __init__(self):\r
205 self.Sources = Sdict()\r
206 InfSectionCommonDef.__init__(self)\r
207 \r
208 def SetSources(self, SourceList, Arch = None):\r
209 __SupArchList = []\r
210 for ArchItem in Arch:\r
211 #\r
212 # Validate Arch\r
213 # \r
4231a819 214 if (ArchItem == '' or ArchItem is None):\r
4234283c
LG
215 ArchItem = 'COMMON' \r
216 __SupArchList.append(ArchItem) \r
217\r
218 for Item in SourceList:\r
219 ItemObj = InfSourcesItemObject()\r
220 CurrentLineOfItem = Item[2]\r
221 Item = Item[0] \r
222 \r
223 ItemObj = GenSourceInstance(Item, CurrentLineOfItem, ItemObj)\r
224 \r
225 ItemObj.SetSupArchList(__SupArchList) \r
226 \r
227 if self.Sources.has_key((ItemObj)): \r
228 SourceContent = self.Sources[ItemObj]\r
229 SourceContent.append(ItemObj)\r
230 self.Sources[ItemObj] = SourceContent\r
231 else:\r
232 SourceContent = []\r
233 SourceContent.append(ItemObj)\r
234 self.Sources[ItemObj] = SourceContent\r
235 \r
236 return True\r
237 \r
238 def GetSources(self):\r
239 return self.Sources\r
240