]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/UPT/Object/Parser/InfPackagesObject.py
BaseTools: Remove equality operator with None
[mirror_edk2.git] / BaseTools / Source / Python / UPT / Object / Parser / InfPackagesObject.py
CommitLineData
4234283c
LG
1## @file\r
2# This file is used to define class objects of INF file [Packages] 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
16InfPackageObject\r
17'''\r
18\r
19from Logger import StringTable as ST\r
20from Logger import ToolError\r
21import Logger.Log as Logger\r
22from Library import GlobalData \r
23\r
24from Library.Misc import Sdict\r
25from Library.ParserValidate import IsValidPath\r
26from Library.ExpressionValidate import IsValidFeatureFlagExp \r
27\r
28class InfPackageItem():\r
29 def __init__(self, \r
30 PackageName = '',\r
31 FeatureFlagExp = '',\r
32 HelpString = ''):\r
33 self.PackageName = PackageName\r
34 self.FeatureFlagExp = FeatureFlagExp\r
35 self.HelpString = HelpString\r
36 self.SupArchList = []\r
37 \r
38 def SetPackageName(self, PackageName):\r
39 self.PackageName = PackageName\r
40 def GetPackageName(self):\r
41 return self.PackageName\r
42 \r
43 def SetFeatureFlagExp(self, FeatureFlagExp):\r
44 self.FeatureFlagExp = FeatureFlagExp\r
45 def GetFeatureFlagExp(self):\r
46 return self.FeatureFlagExp\r
47 \r
48 def SetHelpString(self, HelpString):\r
49 self.HelpString = HelpString\r
50 def GetHelpString(self):\r
51 return self.HelpString\r
52 \r
53 def SetSupArchList(self, SupArchList):\r
54 self.SupArchList = SupArchList\r
55 def GetSupArchList(self):\r
56 return self.SupArchList\r
57\r
58 \r
59## INF package section\r
60#\r
61#\r
62#\r
63class InfPackageObject():\r
64 def __init__(self):\r
65 self.Packages = Sdict()\r
66 #\r
67 # Macro defined in this section should be only used in this section.\r
68 #\r
69 self.Macros = {}\r
70 \r
71 def SetPackages(self, PackageData, Arch = None):\r
72 IsValidFileFlag = False\r
73 SupArchList = []\r
74 for ArchItem in Arch:\r
75 #\r
76 # Validate Arch\r
77 # \r
4231a819 78 if (ArchItem == '' or ArchItem is None):\r
4234283c
LG
79 ArchItem = 'COMMON'\r
80 SupArchList.append(ArchItem) \r
81 \r
82 for PackageItem in PackageData:\r
83 PackageItemObj = InfPackageItem()\r
84 HelpStringObj = PackageItem[1]\r
85 CurrentLineOfPackItem = PackageItem[2]\r
86 PackageItem = PackageItem[0]\r
4231a819 87 if HelpStringObj is not None:\r
4234283c
LG
88 HelpString = HelpStringObj.HeaderComments + HelpStringObj.TailComments\r
89 PackageItemObj.SetHelpString(HelpString) \r
90 if len(PackageItem) >= 1:\r
91 #\r
92 # Validate file exist/format.\r
93 #\r
94 if IsValidPath(PackageItem[0], ''):\r
95 IsValidFileFlag = True\r
96 elif IsValidPath(PackageItem[0], GlobalData.gINF_MODULE_DIR):\r
97 IsValidFileFlag = True \r
98 elif IsValidPath(PackageItem[0], GlobalData.gWORKSPACE):\r
99 IsValidFileFlag = True\r
100 else:\r
101 Logger.Error("InfParser", \r
102 ToolError.FORMAT_INVALID,\r
103 ST.ERR_INF_PARSER_FILE_NOT_EXIST_OR_NAME_INVALID%(PackageItem[0]),\r
104 File=CurrentLineOfPackItem[2], \r
105 Line=CurrentLineOfPackItem[1], \r
106 ExtraData=CurrentLineOfPackItem[0])\r
107 return False\r
108 if IsValidFileFlag: \r
109 PackageItemObj.SetPackageName(PackageItem[0])\r
110 if len(PackageItem) == 2:\r
111 #\r
112 # Validate Feature Flag Express\r
113 #\r
114 if PackageItem[1].strip() == '':\r
115 Logger.Error("InfParser", \r
116 ToolError.FORMAT_INVALID, \r
117 ST.ERR_INF_PARSER_FEATURE_FLAG_EXP_MISSING,\r
118 File=CurrentLineOfPackItem[2], \r
119 Line=CurrentLineOfPackItem[1], \r
120 ExtraData=CurrentLineOfPackItem[0])\r
121 #\r
122 # Validate FFE \r
123 #\r
124 FeatureFlagRtv = IsValidFeatureFlagExp(PackageItem[1].strip())\r
125 if not FeatureFlagRtv[0]:\r
126 Logger.Error("InfParser", \r
127 ToolError.FORMAT_INVALID,\r
128 ST.ERR_INF_PARSER_FEATURE_FLAG_EXP_SYNTAX_INVLID%(FeatureFlagRtv[1]),\r
129 File=CurrentLineOfPackItem[2], \r
130 Line=CurrentLineOfPackItem[1], \r
131 ExtraData=CurrentLineOfPackItem[0])\r
132 \r
133 PackageItemObj.SetFeatureFlagExp(PackageItem[1].strip())\r
134 \r
135 if len(PackageItem) > 2:\r
136 #\r
137 # Invalid format of Package statement \r
138 #\r
139 Logger.Error("InfParser", \r
140 ToolError.FORMAT_INVALID, \r
141 ST.ERR_INF_PARSER_PACKAGE_SECTION_CONTENT_ERROR,\r
142 File=CurrentLineOfPackItem[2], \r
143 Line=CurrentLineOfPackItem[1], \r
144 ExtraData=CurrentLineOfPackItem[0])\r
145 PackageItemObj.SetSupArchList(SupArchList)\r
146 \r
147 #\r
148 # Determine package file name duplicate. Follow below rule:\r
149 #\r
150 # A package filename must not be duplicated within a [Packages] \r
151 # section. Package filenames may appear in multiple architectural \r
152 # [Packages] sections. A package filename listed in an \r
153 # architectural [Packages] section must not be listed in the common\r
154 # architectural [Packages] section.\r
155 # \r
156 # NOTE: This check will not report error now.\r
157 # \r
158 for Item in self.Packages:\r
159 if Item.GetPackageName() == PackageItemObj.GetPackageName():\r
160 ItemSupArchList = Item.GetSupArchList()\r
161 for ItemArch in ItemSupArchList:\r
162 for PackageItemObjArch in SupArchList:\r
163 if ItemArch == PackageItemObjArch:\r
164 #\r
165 # ST.ERR_INF_PARSER_ITEM_DUPLICATE\r
166 #\r
167 pass\r
168 if ItemArch.upper() == 'COMMON' or PackageItemObjArch.upper() == 'COMMON':\r
169 #\r
170 # ST.ERR_INF_PARSER_ITEM_DUPLICATE_COMMON\r
171 #\r
172 pass\r
173 \r
174 if self.Packages.has_key((PackageItemObj)): \r
175 PackageList = self.Packages[PackageItemObj]\r
176 PackageList.append(PackageItemObj)\r
177 self.Packages[PackageItemObj] = PackageList\r
178 else:\r
179 PackageList = []\r
180 PackageList.append(PackageItemObj)\r
181 self.Packages[PackageItemObj] = PackageList\r
182 \r
183 return True\r
184 \r
185 def GetPackages(self, Arch = None):\r
4231a819 186 if Arch is None:\r
4234283c 187 return self.Packages