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