diff -r 044383f39525 -r be27ed110b50 buildframework/helium/tools/iad/packageiad.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/buildframework/helium/tools/iad/packageiad.py Wed Oct 28 14:39:48 2009 +0000 @@ -0,0 +1,119 @@ +#============================================================================ +#Name : packageiad.py +#Part of : Helium + +#Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +#All rights reserved. +#This component and the accompanying materials are made available +#under the terms of the License "Eclipse Public License v1.0" +#which accompanies this distribution, and is available +#at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +#Initial Contributors: +#Nokia Corporation - initial contribution. +# +#Contributors: +# +#Description: +#=============================================================================== +import os +import sys +import xml.dom.minidom +import iadinfo +import zipfile +import encodings.utf_8 + +class IADPackager : + + def __init__ (self) : + self.hasStub = False + + def getBldDirs (self, layer, bldDirs) : + units = layer.getElementsByTagName ("unit") + for unit in units : + dir = unit.getAttribute ("bldFile").rstrip ('\\/') + i = dir.rfind ("\\") + if i == - 1 : + i = dir.rfind ("/") + bldDirs.append (dir[:i + 1]) + + def getLayer (self, configuration, layers, bldDirs) : + layerRef = configuration.getElementsByTagName ("layerRef")[0].getAttribute ("layerName") + for layer in layers : + if layer.getAttribute ("name") == layerRef : + self.getBldDirs (layer, bldDirs) + + def createInfoFiles (self, sisInfo) : + depends = xml.dom.minidom.parse ("depends.xml") + info = xml.dom.minidom.parseString (sisInfo) + + infoFile = file ("sisinfo.xml", "w") + platDeps = info.getElementsByTagName("platform_dependency") + packageDeps = info.getElementsByTagName("package_dependency") + for packageDep in packageDeps : + p = depends.createElement ("package") + depends.childNodes[1].appendChild (p) + for child in packageDep.childNodes : + p.appendChild (child) + infoFile.write (info.toxml ()) + infoFile.close() + depFile = file ("depends.xml", "w") + depFile.write (depends.toxml ()) + depFile.close() + + def createSis (self, packageDir, packageName) : + sisReader = iadinfo.IADHandler() + os.chdir (packageDir) + sisPackage = packageName + ".sis" + stubPackage = packageName + "_stub.sis" + print "Creating", sisPackage + cmd = makesis + " package.pkg " + sisPackage + os.system (cmd) + self.createInfoFiles (sisReader.getInfo (sisPackage)) + if os.path.exists(stubPackage) : + print "Creating stub SIS file", stubPackage + self.hasStub = True + cmd = makesis + " -s package.pkg " + stubPackage + os.system (cmd) + + def createPackage (self, topDir, packageName) : + print "Creating package", packageName + os.chdir (topDir) + zipFile = packageName + ".zip" + sisFile = packageName + '/' + packageName + ".sis" + infoFile = packageName + "/sisinfo.xml" + depFile = packageName + "/depends.xml" + zip = zipfile.ZipFile (zipFile, "w") + zip.write (sisFile, sisFile.encode ("utf-8")) + zip.write (infoFile, infoFile.encode ("utf-8")) + zip.write (depFile, depFile.encode ("utf-8")) + if self.hasStub : + stubFile = packageName + '/' + packageName + "_stub.sis" + zip.write (stubFile, stubFile.encode ("utf-8")) + zip.close() + + + def processSisDir (self, sisDir) : + for root, dirs, files in os.walk (sisDir): + for name in dirs : + self.createSis (os.path.join (root, name), name) + self.createPackage (root, name) + +makesis = sys.argv[3] + "\\epoc32\\tools\\makesis.exe" +signsis = sys.argv[3] + "\\epoc32\\tools\\signsis.exe" + +sysdef = xml.dom.minidom.parse (sys.argv[1]) +configurations = sysdef.getElementsByTagName ("configuration") +layers = sysdef.getElementsByTagName ("layer") +bldDirs = [] + +packager = IADPackager() + +for configuration in configurations : + if configuration.getAttribute ("name") == sys.argv[2] : + packager.getLayer (configuration, layers, bldDirs) + + +for bldDir in bldDirs : + packager.processSisDir (sys.argv[3] + bldDir + "sis\\") +