587
|
1 |
#============================================================================
|
|
2 |
#Name : packageiad.py
|
|
3 |
#Part of : Helium
|
|
4 |
|
|
5 |
#Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
|
6 |
#All rights reserved.
|
|
7 |
#This component and the accompanying materials are made available
|
|
8 |
#under the terms of the License "Eclipse Public License v1.0"
|
|
9 |
#which accompanies this distribution, and is available
|
|
10 |
#at the URL "http://www.eclipse.org/legal/epl-v10.html".
|
|
11 |
#
|
|
12 |
#Initial Contributors:
|
|
13 |
#Nokia Corporation - initial contribution.
|
|
14 |
#
|
|
15 |
#Contributors:
|
|
16 |
#
|
|
17 |
#Description:
|
|
18 |
#===============================================================================
|
|
19 |
|
|
20 |
""" packageIAD.py module """
|
|
21 |
|
|
22 |
import os
|
|
23 |
import sys
|
|
24 |
import xml.dom.minidom
|
|
25 |
import iadinfo
|
|
26 |
import zipfile
|
|
27 |
|
|
28 |
|
|
29 |
class IADPackager :
|
|
30 |
""" package IAD class "
|
|
31 |
"""
|
|
32 |
|
|
33 |
def __init__(self) :
|
|
34 |
""" class init method """
|
|
35 |
self.hasStub = False
|
|
36 |
|
|
37 |
def getBldDirs(self, layer, bldDirs) :
|
|
38 |
""" get the list of build directories """
|
|
39 |
units = layer.getElementsByTagName ("unit")
|
|
40 |
for unit in units :
|
628
|
41 |
dir_ = unit.getAttribute ("bldFile").rstrip ('\\/')
|
|
42 |
i = dir_.rfind ("\\")
|
587
|
43 |
if i == - 1 :
|
628
|
44 |
i = dir_.rfind ("/")
|
|
45 |
bldDirs.append (dir_[:i + 1])
|
587
|
46 |
|
|
47 |
def getLayer(self, configuration, layers, bldDirs) :
|
|
48 |
""" get each layer info """
|
|
49 |
layerRef = configuration.getElementsByTagName ("layerRef")[0].getAttribute ("layerName")
|
|
50 |
for layer in layers :
|
|
51 |
if layer.getAttribute ("name") == layerRef :
|
|
52 |
self.getBldDirs (layer, bldDirs)
|
|
53 |
|
|
54 |
def createInfoFiles(self, sisInfo) :
|
|
55 |
""" create the INfo files depends.xml etc."""
|
|
56 |
depends = xml.dom.minidom.parse ("depends.xml")
|
|
57 |
info = xml.dom.minidom.parseString (sisInfo)
|
|
58 |
|
|
59 |
infoFile = file ("sisinfo.xml", "w")
|
|
60 |
packageDeps = info.getElementsByTagName("package_dependency")
|
|
61 |
for packageDep in packageDeps :
|
|
62 |
pack = depends.createElement ("package")
|
|
63 |
depends.childNodes[1].appendChild (pack)
|
|
64 |
for child in packageDep.childNodes :
|
|
65 |
pack.appendChild (child)
|
|
66 |
infoFile.write (info.toxml ())
|
|
67 |
infoFile.close()
|
|
68 |
depFile = file ("depends.xml", "w")
|
|
69 |
depFile.write (depends.toxml ())
|
|
70 |
depFile.close()
|
|
71 |
|
|
72 |
def createSis(self, packageDir, packageName, makesis) :
|
|
73 |
""" create the .sis file """
|
|
74 |
sisReader = iadinfo.IADHandler()
|
|
75 |
os.chdir (packageDir)
|
|
76 |
sisPackage = packageName + ".sis"
|
|
77 |
stubPackage = packageName + "_stub.sis"
|
|
78 |
print "Creating", sisPackage
|
|
79 |
cmd = makesis + " package.pkg " + sisPackage
|
|
80 |
os.system (cmd)
|
|
81 |
self.createInfoFiles (sisReader.getInfo(sisPackage))
|
|
82 |
if os.path.exists(stubPackage) :
|
|
83 |
print "Creating stub SIS file", stubPackage
|
|
84 |
self.hasStub = True
|
|
85 |
cmd = makesis + " -s package.pkg " + stubPackage
|
|
86 |
os.system (cmd)
|
|
87 |
|
|
88 |
def createPackage(self, topDir, packageName) :
|
|
89 |
""" create the Data Package """
|
|
90 |
print "Creating package", packageName
|
|
91 |
os.chdir (topDir)
|
|
92 |
zipFile = packageName + ".zip"
|
|
93 |
sisFile = packageName + '/' + packageName + ".sis"
|
|
94 |
infoFile = packageName + "/sisinfo.xml"
|
|
95 |
depFile = packageName + "/depends.xml"
|
628
|
96 |
zip_ = zipfile.ZipFile (zipFile, "w")
|
|
97 |
zip_.write (sisFile, sisFile.encode ("utf-8"))
|
|
98 |
zip_.write (infoFile, infoFile.encode ("utf-8"))
|
|
99 |
zip_.write (depFile, depFile.encode ("utf-8"))
|
587
|
100 |
if self.hasStub :
|
|
101 |
stubFile = packageName + '/' + packageName + "_stub.sis"
|
628
|
102 |
zip_.write (stubFile, stubFile.encode ("utf-8"))
|
|
103 |
zip_.close()
|
587
|
104 |
|
|
105 |
|
|
106 |
def processSisDir(self, sisDir, makesis) :
|
|
107 |
""" handle the directory used to create the .sis file """
|
|
108 |
for root, dirs, _ in os.walk (sisDir):
|
|
109 |
for name in dirs :
|
|
110 |
self.createSis (os.path.join (root, name), name, makesis)
|
|
111 |
self.createPackage (root, name)
|
|
112 |
|
|
113 |
def main(sysdefFile, sysdefconfigs, bldDrive):
|
|
114 |
""" main to called when imported """
|
|
115 |
makesis = bldDrive + "\\epoc32\\tools\\makesis.exe"
|
|
116 |
|
|
117 |
sysdef = xml.dom.minidom.parse (sysdefFile)
|
|
118 |
configurations = sysdef.getElementsByTagName ("configuration")
|
|
119 |
layers = sysdef.getElementsByTagName ("layer")
|
|
120 |
bldDirs = []
|
|
121 |
|
|
122 |
packager = IADPackager()
|
|
123 |
|
|
124 |
for configuration in configurations :
|
|
125 |
if configuration.getAttribute ("name") == sysdefconfigs :
|
|
126 |
packager.getLayer (configuration, layers, bldDirs)
|
|
127 |
|
|
128 |
|
|
129 |
for bldDir in bldDirs :
|
|
130 |
packager.processSisDir (bldDrive + bldDir + "sis\\", makesis)
|
|
131 |
|
|
132 |
if __name__ == "__main__":
|
|
133 |
main(sys.argv[1], sys.argv[2], sys.argv[3])
|