]>
Commit | Line | Data |
---|---|---|
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 | |
16 | InfSourcesObject\r | |
17 | '''\r | |
18 | \r | |
19 | import os\r | |
20 | \r | |
21 | from Logger import StringTable as ST\r | |
22 | from Logger import ToolError\r | |
23 | import Logger.Log as Logger\r | |
24 | from Library import GlobalData \r | |
25 | \r | |
26 | from Library.Misc import Sdict\r | |
27 | from Library.ExpressionValidate import IsValidFeatureFlagExp \r | |
28 | from Object.Parser.InfCommonObject import InfSectionCommonDef\r | |
29 | from Library.Misc import ValidFile \r | |
30 | from Library.ParserValidate import IsValidFamily\r | |
31 | from Library.ParserValidate import IsValidPath\r | |
32 | \r | |
33 | ## __GenSourceInstance \r | |
34 | #\r | |
35 | # \r | |
36 | def 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 | |
144 | class 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 | |
203 | class 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 | |
27c4ceb4 | 227 | if (ItemObj) in self.Sources:\r |
4234283c LG |
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 |