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