]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/UPT/Core/DistributionPackageClass.py
Sync BaseTool trunk (version r2460) into EDKII BaseTools. The change mainly includes:
[mirror_edk2.git] / BaseTools / Source / Python / UPT / Core / DistributionPackageClass.py
CommitLineData
4234283c
LG
1## @file\r
2# This file is used to define a class object to describe a distribution package\r
3#\r
4# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>\r
5#\r
6# This program and the accompanying materials are licensed and made available \r
7# under the terms and conditions of the BSD License which accompanies this \r
8# distribution. The full text of the license may be found at \r
9# http://opensource.org/licenses/bsd-license.php\r
10#\r
11# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13\r
14'''\r
15DistributionPackageClass\r
16'''\r
17\r
18##\r
19# Import Modules\r
20#\r
21import os.path\r
22\r
23from Library.Misc import Sdict\r
24from Library.Misc import GetNonMetaDataFiles\r
25from PomAdapter.InfPomAlignment import InfPomAlignment\r
26from PomAdapter.DecPomAlignment import DecPomAlignment\r
27import Logger.Log as Logger\r
28from Logger import StringTable as ST\r
29from Logger.ToolError import OPTION_VALUE_INVALID\r
30from Logger.ToolError import FatalError\r
31from Logger.ToolError import EDK1_INF_ERROR\r
32from Object.POM.CommonObject import IdentificationObject\r
33from Object.POM.CommonObject import CommonHeaderObject\r
34from Object.POM.CommonObject import MiscFileObject\r
35\r
36## DistributionPackageHeaderClass\r
37#\r
38# @param IdentificationObject: Identification Object\r
39# @param CommonHeaderObject: Common Header Object\r
40#\r
41class DistributionPackageHeaderObject(IdentificationObject, \\r
42 CommonHeaderObject):\r
43 def __init__(self):\r
44 IdentificationObject.__init__(self)\r
45 CommonHeaderObject.__init__(self)\r
46 self.ReadOnly = ''\r
47 self.RePackage = ''\r
48 self.Vendor = ''\r
49 self.Date = ''\r
50 self.Signature = 'Md5Sum'\r
51 self.XmlSpecification = ''\r
52 \r
53 def GetReadOnly(self):\r
54 return self.ReadOnly\r
55 \r
56 def SetReadOnly(self, ReadOnly):\r
57 self.ReadOnly = ReadOnly\r
58 \r
59 def GetRePackage(self):\r
60 return self.RePackage\r
61 \r
62 def SetRePackage(self, RePackage):\r
63 self.RePackage = RePackage\r
64 \r
65 def GetVendor(self):\r
66 return self.Vendor\r
67 \r
68 def SetDate(self, Date):\r
69 self.Date = Date\r
70 \r
71 def GetDate(self):\r
72 return self.Date\r
73 \r
74 def SetSignature(self, Signature):\r
75 self.Signature = Signature\r
76 \r
77 def GetSignature(self):\r
78 return self.Signature\r
79 \r
80 def SetXmlSpecification(self, XmlSpecification):\r
81 self.XmlSpecification = XmlSpecification\r
82 \r
83 def GetXmlSpecification(self):\r
84 return self.XmlSpecification\r
85 \r
86## DistributionPackageClass\r
87#\r
88# @param object: DistributionPackageClass\r
89# \r
90class DistributionPackageClass(object):\r
91 def __init__(self):\r
92 self.Header = DistributionPackageHeaderObject()\r
93 #\r
94 # {(Guid, Version, Path) : PackageObj}\r
95 #\r
96 self.PackageSurfaceArea = Sdict() \r
97 #\r
d0acc87a 98 # {(Guid, Version, Name, Path) : ModuleObj}\r
4234283c
LG
99 #\r
100 self.ModuleSurfaceArea = Sdict() \r
101 self.Tools = MiscFileObject()\r
102 self.MiscellaneousFiles = MiscFileObject()\r
103 self.UserExtensions = []\r
104 self.FileList = []\r
105 \r
106 ## Get all included packages and modules for a distribution package\r
107 # \r
108 # @param WorkspaceDir: WorkspaceDir\r
109 # @param PackageList: A list of all packages\r
110 # @param ModuleList: A list of all modules\r
111 #\r
112 def GetDistributionPackage(self, WorkspaceDir, PackageList, ModuleList):\r
113 #\r
114 # Get Packages\r
115 #\r
116 if PackageList:\r
117 for PackageFile in PackageList:\r
118 PackageFileFullPath = \\r
119 os.path.normpath(os.path.join(WorkspaceDir, PackageFile))\r
120 DecObj = DecPomAlignment(PackageFileFullPath, WorkspaceDir, CheckMulDec = True)\r
121 PackageObj = DecObj\r
122 #\r
123 # Parser inf file one bye one\r
124 #\r
125 ModuleInfFileList = PackageObj.GetModuleFileList()\r
126 for File in ModuleInfFileList:\r
127 WsRelPath = os.path.join(PackageObj.GetPackagePath(), File)\r
128 WsRelPath = os.path.normpath(WsRelPath)\r
129 if ModuleList and WsRelPath in ModuleList:\r
130 Logger.Error("UPT",\r
131 OPTION_VALUE_INVALID, \r
132 ST.ERR_NOT_STANDALONE_MODULE_ERROR%\\r
133 (WsRelPath, PackageFile))\r
134 Filename = os.path.normpath\\r
135 (os.path.join(PackageObj.GetRelaPath(), File))\r
136 os.path.splitext(Filename)\r
137 #\r
138 # Call INF parser to generate Inf Object.\r
139 # Actually, this call is not directly call, but wrapped by \r
140 # Inf class in InfPomAlignment.\r
141 #\r
142 try:\r
143 ModuleObj = InfPomAlignment(Filename, WorkspaceDir, \\r
144 PackageObj.GetPackagePath())\r
145 \r
146 #\r
147 # Add module to package\r
148 #\r
149 ModuleDict = PackageObj.GetModuleDict()\r
150 ModuleDict[(ModuleObj.GetGuid(), \\r
151 ModuleObj.GetVersion(), \\r
d0acc87a 152 ModuleObj.GetName(), \\r
4234283c
LG
153 ModuleObj.GetCombinePath())] = ModuleObj\r
154 PackageObj.SetModuleDict(ModuleDict)\r
155 except FatalError, ErrCode:\r
156 if ErrCode.message == EDK1_INF_ERROR:\r
157 Logger.Warn("UPT",\r
158 ST.WRN_EDK1_INF_FOUND%Filename)\r
159 else:\r
160 raise\r
161 \r
162 self.PackageSurfaceArea\\r
163 [(PackageObj.GetGuid(), PackageObj.GetVersion(), \\r
164 PackageObj.GetCombinePath())] = PackageObj\r
165\r
166 #\r
167 # Get Modules\r
168 #\r
169 if ModuleList:\r
170 for ModuleFile in ModuleList:\r
171 ModuleFileFullPath = \\r
172 os.path.normpath(os.path.join(WorkspaceDir, ModuleFile))\r
173 try:\r
174 ModuleObj = InfPomAlignment(ModuleFileFullPath, \r
175 WorkspaceDir)\r
d0acc87a
LG
176 ModuleKey = (ModuleObj.GetGuid(), \r
177 ModuleObj.GetVersion(), \r
178 ModuleObj.GetName(), \r
179 ModuleObj.GetCombinePath())\r
180 self.ModuleSurfaceArea[ModuleKey] = ModuleObj\r
4234283c
LG
181 except FatalError, ErrCode:\r
182 if ErrCode.message == EDK1_INF_ERROR:\r
183 Logger.Error("UPT",\r
184 EDK1_INF_ERROR,\r
185 ST.WRN_EDK1_INF_FOUND%ModuleFileFullPath, \r
186 ExtraData=ST.ERR_NOT_SUPPORTED_SA_MODULE)\r
187 else:\r
188 raise \r
189\r
190 ## Get all files included for a distribution package, except tool/misc of \r
191 # distribution level\r
192 # \r
193 # @retval DistFileList A list of filepath for NonMetaDataFile, relative to workspace\r
194 # @retval MetaDataFileList A list of filepath for MetaDataFile, relative to workspace\r
195 #\r
196 def GetDistributionFileList(self):\r
197 MetaDataFileList = []\r
198 \r
199 for Guid, Version, Path in self.PackageSurfaceArea:\r
200 Package = self.PackageSurfaceArea[Guid, Version, Path]\r
201 PackagePath = Package.GetPackagePath()\r
202 FullPath = Package.GetFullPath()\r
203 MetaDataFileList.append(Path)\r
204 IncludePathList = Package.GetIncludePathList()\r
205 for IncludePath in IncludePathList:\r
206 SearchPath = os.path.normpath(os.path.join(os.path.dirname(FullPath), IncludePath))\r
207 AddPath = os.path.normpath(os.path.join(PackagePath, IncludePath))\r
208 self.FileList += GetNonMetaDataFiles(SearchPath, ['CVS', '.svn'], False, AddPath)\r
209 \r
210 Module = None\r
211 ModuleDict = Package.GetModuleDict()\r
d0acc87a
LG
212 for Guid, Version, Name, Path in ModuleDict:\r
213 Module = ModuleDict[Guid, Version, Name, Path]\r
4234283c
LG
214 ModulePath = Module.GetModulePath()\r
215 FullPath = Module.GetFullPath()\r
216 PkgRelPath = os.path.normpath(os.path.join(PackagePath, ModulePath))\r
217 MetaDataFileList.append(Path)\r
218 self.FileList += GetNonMetaDataFiles(os.path.dirname(FullPath), ['CVS', '.svn'], False, PkgRelPath)\r
219 \r
d0acc87a
LG
220 for Guid, Version, Name, Path in self.ModuleSurfaceArea:\r
221 Module = self.ModuleSurfaceArea[Guid, Version, Name, Path]\r
4234283c
LG
222 ModulePath = Module.GetModulePath()\r
223 FullPath = Module.GetFullPath()\r
224 MetaDataFileList.append(Path)\r
225 self.FileList += GetNonMetaDataFiles(os.path.dirname(FullPath), ['CVS', '.svn'], False, ModulePath)\r
226 \r
227 return self.FileList, MetaDataFileList\r
228\r
229 \r
230\r