]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/CommonDataClass/DistributionPackageClass.py
Check In tool source code based on Build tool project revision r1655.
[mirror_edk2.git] / BaseTools / Source / Python / CommonDataClass / DistributionPackageClass.py
CommitLineData
30fdf114
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) 2008, Intel Corporation\r
5# All rights reserved. This program and the accompanying materials\r
6# are licensed and made available under the terms and conditions of the BSD License\r
7# which accompanies this distribution. The full text of the license may be found at\r
8# http://opensource.org/licenses/bsd-license.php\r
9#\r
10# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
13##\r
14# Import Modules\r
15#\r
16import os.path\r
17from CommonClass import *\r
18from Common.Misc import sdict\r
19from Common.Misc import GetFiles\r
20from Common.DecClassObjectLight import Dec\r
21from Common.InfClassObjectLight import Inf\r
22from Common.XmlParser import *\r
23\r
24## DistributionPackageHeaderClass\r
25#\r
26class DistributionPackageHeaderClass(IdentificationClass, CommonHeaderClass):\r
27 def __init__(self):\r
28 IdentificationClass.__init__(self)\r
29 CommonHeaderClass.__init__(self)\r
30 self.ReadOnly = 'False'\r
31 self.RePackage = 'True'\r
32 self.Vendor = ''\r
33 self.Date = ''\r
34 self.Signature = 'Md5Sum'\r
35 self.XmlSpecification = ''\r
36\r
37## DistributionPackageClass\r
38#\r
39#\r
40class DistributionPackageClass(object):\r
41 def __init__(self):\r
42 self.Header = DistributionPackageHeaderClass()\r
43 self.PackageSurfaceArea = sdict() # {(Guid, Version, Path) : PackageObj}\r
44 self.ModuleSurfaceArea = sdict() # {(Guid, Version, Path) : ModuleObj}\r
45 self.Tools = MiscFileClass()\r
46 self.MiscellaneousFiles = MiscFileClass()\r
47 self.UserExtensions = []\r
48 \r
49 ## Get all included packages and modules for a distribution package\r
50 # \r
51 # @param WorkspaceDir: WorkspaceDir\r
52 # @param PackageList: A list of all packages\r
53 # @param ModuleList: A list of all modules\r
54 #\r
55 def GetDistributionPackage(self, WorkspaceDir, PackageList, ModuleList):\r
56 AllGuidVersionDict = {}\r
57 # Get Packages\r
58 if PackageList:\r
59 for PackageFile in PackageList:\r
60 PackageFileFullPath = os.path.normpath(os.path.join(WorkspaceDir, PackageFile))\r
61 DecObj = Dec(PackageFileFullPath, True, WorkspaceDir)\r
62 PackageObj = DecObj.Package\r
63 AllGuidVersionDict[PackageFileFullPath] = [PackageObj.PackageHeader.Guid, PackageObj.PackageHeader.Version]\r
64 \r
65 # Parser inf file one bye one\r
66 for File in PackageObj.MiscFiles.Files:\r
67 Filename = os.path.normpath(os.path.join(PackageObj.PackageHeader.RelaPath, File.Filename))\r
68 (Name, ExtName) = os.path.splitext(Filename)\r
69 if ExtName.upper() == '.INF':\r
70 InfObj = Inf(Filename, True, WorkspaceDir, DecObj.Identification.PackagePath)\r
71 ModuleObj = InfObj.Module\r
72 AllGuidVersionDict[File] = [ModuleObj.ModuleHeader.Guid, ModuleObj.ModuleHeader.Version]\r
73 # Find and update Guid/Version of LibraryClass\r
74 for Item in ModuleObj.LibraryClasses:\r
75 if Item.RecommendedInstance:\r
76 LibClassIns = os.path.normpath(os.path.join(WorkspaceDir, Item.RecommendedInstance))\r
77 Guid, Version = '', ''\r
78 if LibClassIns in AllGuidVersionDict:\r
79 Guid = AllGuidVersionDict[LibClassIns][0]\r
80 Version = AllGuidVersionDict[LibClassIns][1]\r
81 else:\r
82 Lib = Inf(LibClassIns, True, WorkspaceDir)\r
83 Guid = Lib.Module.ModuleHeader.Guid\r
84 Version = Lib.Module.ModuleHeader.Version\r
85 AllGuidVersionDict[LibClassIns] = [Guid, Version]\r
86 Item.RecommendedInstanceGuid = Guid\r
87 Item.RecommendedInstanceVersion = Version\r
88 # Find and update Guid/Version of \r
89 for Item in ModuleObj.PackageDependencies:\r
90 if Item.FilePath:\r
91 PackageFilePath = os.path.normpath(os.path.join(WorkspaceDir, Item.FilePath))\r
92 Guid, Version = '', ''\r
93 if PackageFilePath in AllGuidVersionDict:\r
94 Guid = AllGuidVersionDict[PackageFilePath][0]\r
95 Version = AllGuidVersionDict[PackageFilePath][1]\r
96 else:\r
97 PackageDependencies = Dec(PackageFilePath, True, WorkspaceDir)\r
98 Guid = PackageDependencies.Package.PackageHeader.Guid\r
99 Version = PackageDependencies.Package.PackageHeader.Version\r
100 AllGuidVersionDict[PackageFilePath] = [Guid, Version]\r
101 Item.PackageGuid = Guid\r
102 Item.PackageVersion = Version\r
103\r
104 # Add module to package\r
105 PackageObj.Modules[(ModuleObj.ModuleHeader.Guid, ModuleObj.ModuleHeader.Version, ModuleObj.ModuleHeader.CombinePath)] = ModuleObj\r
106 self.PackageSurfaceArea[(PackageObj.PackageHeader.Guid, PackageObj.PackageHeader.Version, PackageObj.PackageHeader.CombinePath)] = PackageObj\r
107\r
108 # Get Modules\r
109 if ModuleList:\r
110 for ModuleFile in ModuleList:\r
111 ModuleFileFullPath = os.path.normpath(os.path.join(WorkspaceDir, ModuleFile))\r
112 InfObj = Inf(ModuleFileFullPath, True, WorkspaceDir)\r
113 ModuleObj = InfObj.Module\r
114 AllGuidVersionDict[ModuleFileFullPath] = [ModuleObj.ModuleHeader.Guid, ModuleObj.ModuleHeader.Version]\r
115 # Find and update Guid/Version of LibraryClass\r
116 for Item in ModuleObj.LibraryClasses:\r
117 if Item.RecommendedInstance:\r
118 LibClassIns = os.path.normpath(os.path.join(WorkspaceDir, Item.RecommendedInstance))\r
119 Guid, Version = '', ''\r
120 if LibClassIns in AllGuidVersionDict:\r
121 Guid = AllGuidVersionDict[LibClassIns][0]\r
122 Version = AllGuidVersionDict[LibClassIns][1]\r
123 else:\r
124 Lib = Inf(LibClassIns, True, WorkspaceDir)\r
125 Guid = Lib.Module.ModuleHeader.Guid\r
126 Version = Lib.Module.ModuleHeader.Version\r
127 AllGuidVersionDict[LibClassIns] = [Guid, Version]\r
128 Item.RecommendedInstanceGuid = Guid\r
129 Item.RecommendedInstanceVersion = Version\r
130 # Find and update Guid/Version of \r
131 for Item in ModuleObj.PackageDependencies:\r
132 if Item.FilePath:\r
133 PackageFilePath = os.path.normpath(os.path.join(WorkspaceDir, Item.FilePath))\r
134 Guid, Version = '', ''\r
135 if PackageFilePath in AllGuidVersionDict:\r
136 Guid = AllGuidVersionDict[PackageFilePath][0]\r
137 Version = AllGuidVersionDict[PackageFilePath][1]\r
138 else:\r
139 PackageDependencies = Dec(PackageFilePath, True, WorkspaceDir)\r
140 Guid = PackageDependencies.Package.PackageHeader.Guid\r
141 Version = PackageDependencies.Package.PackageHeader.Version\r
142 AllGuidVersionDict[PackageFilePath] = [Guid, Version]\r
143 Item.PackageGuid = Guid\r
144 Item.PackageVersion = Version\r
145 self.ModuleSurfaceArea[(ModuleObj.ModuleHeader.Guid, ModuleObj.ModuleHeader.Version, ModuleObj.ModuleHeader.CombinePath)] = ModuleObj\r
146\r
147##\r
148#\r
149# This acts like the main() function for the script, unless it is 'import'ed into another\r
150# script.\r
151#\r
152if __name__ == '__main__':\r
153 pass\r
154 D = DistributionPackageClass()\r
155 D.GetDistributionPackage(os.getenv('WORKSPACE'), ['MdePkg/MdePkg.dec', 'TianoModulePkg/TianoModulePkg.dec'], ['MdeModulePkg/Application/HelloWorld/HelloWorld.inf'])\r
156 Xml = DistributionPackageXml()\r
157 print Xml.ToXml(D)\r
158 E = Xml.FromXml('C:\\2.xml')\r
159 #print Xml.ToXml(E)\r