buildframework/helium/tools/iad/packageiad.py
changeset 179 d8ac696cc51f
parent 1 be27ed110b50
equal deleted inserted replaced
1:be27ed110b50 179:d8ac696cc51f
    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