--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/qtecomplugins/supplements/xqecom/xqecom.py Tue Aug 31 16:02:37 2010 +0300
@@ -0,0 +1,255 @@
+#!/usr/bin/env python
+"""
+This is part of qtextensions/qtecomplugins extension. It pregenerates few files needed during compilation of ecom plugins.
+Those includes:
+ * registration resource file
+ * stubs
+ * pkg file
+ * iby file
+"""
+
+import logging
+import datetime
+import sys
+from optparse import OptionParser
+
+class Generator(object):
+ def __init__(self, args):
+ if len(args)==5:
+ if args[2]=="":
+ interfaceValue = args[0]+".dll"
+ else:
+ interfaceValue = args[2]
+ self.args = {
+ 'target': args[0],
+ 'uid3': args[1],
+ 'interface': interfaceValue,
+ 'configuration': args[3],
+ 'configurationFile': args[4],
+ 'timestamp': datetime.datetime.now()
+ }
+ else:
+ logging.fatal("illegal number of arguments: %d" % len(args))
+ sys.exit(1)
+ def generate(self):
+ logging.warning("%s is not generating anything useful" % self.__class__.__name__)
+ def strip(self, s):
+ l = len(s) - len(s.lstrip())
+ def stripOrNot(x):
+ x = x + '\n'
+ if l>=len(x):
+ return x
+ else:
+ return x[l:]
+ return ''.join(map(stripOrNot, s.splitlines(False)))
+
+class RssGenerator(Generator):
+ """
+ RSS generator.
+ """
+ def __init__(self, args):
+ super(self.__class__, self).__init__(args)
+ def generate(self):
+ fileName = self.args['target'] + ".rss"
+ dllName = self.args['target'] + ".dll"
+
+ if self.args['interface'] == "":
+ self.args['interface'] = dllName
+
+ if self.args['configurationFile'] != "":
+ opaqueDataFile = file(self.args['configurationFile'])
+ self.args['opaqueData'] = ((''.join(opaqueDataFile.readlines())).replace('\n', '').replace('"', '\\"'))[:255];
+ else:
+ self.args['opaqueData'] = self.args['configuration']
+
+ output = file(fileName, "w")
+ header = """\
+ // ==============================================================================
+ // Generated by xqecom on %(timestamp)s
+ // This file is generated by xqecom and should not be modified by the user.
+ // Name : %(target)s.rss
+ // Part of :
+ // Description : Fixes common plugin symbols to known ordinals
+ // Version :
+ // ==============================================================================
+
+
+ #include <registryinfov2.rh>
+
+ #include <xqtecom.hrh>
+
+ #include <ecomstub_%(uid3)s.hrh>
+
+ RESOURCE REGISTRY_INFO theInfo
+ {
+ resource_format_version = RESOURCE_FORMAT_VERSION_2;
+ dll_uid = %(uid3)s;
+ interfaces =
+ {
+ INTERFACE_INFO
+ {
+ interface_uid = KQtEcomPluginInterfaceUID;
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = KQtEcomPluginImplementationUid;
+ version_no = 1;
+ display_name = "%(target)s.dll";
+ // SERVICE.INTERFACE_NAME
+ default_data = "%(interface)s";
+ // SERVICE.CONFIGURATION
+ opaque_data = "%(opaqueData)s";
+ }
+ };
+ }
+ };
+ }"""
+
+ output.write(self.strip(header) % self.args )
+
+
+class PkgGenerator(Generator):
+ """
+ PKG generator.
+ """
+ def __init__(self, args):
+ super(self.__class__, self).__init__(args)
+ def generate(self):
+ content='''\
+ // ============================================================================
+ // Generated by xqecom on %(timestamp)s
+ // This file is generated by xqecom and should not be modified by the user.
+ // ============================================================================
+
+ ; Language
+ &EN
+
+ ; SIS header: name, uid, version
+ #{%(target)s},(%(uid3)s),1,0,0
+
+ ; Localised Vendor name
+ %%{"Nokia, Qt Software"}
+
+ ; Unique Vendor name
+ :"Nokia, Qt Software"
+
+ ; Dependencies
+ [0x101F7961],0,0,0,{"S60ProductID"}
+ [0x102032BE],0,0,0,{"S60ProductID"}
+ [0x102752AE],0,0,0,{"S60ProductID"}
+ [0x1028315F],0,0,0,{"S60ProductID"}
+ (0x2001E61C), 4, 5, 0, {"QtLibs pre-release"}
+
+ ;files
+ "\\epoc32\\release\\armv5\\urel\\%(target)s.dll" - "!:\\sys\\bin\\%(target)s.dll"
+ "\\epoc32\\data\\Z\\resource\\plugins\\%(target)s.rsc" - "!:\\resource\\plugins\\%(target)s.rsc"'''
+
+ fileName = self.args['target'] + ".pkg"
+ output = file(fileName, "w")
+ output.write(self.strip(content) % self.args)
+
+
+class IbyGenerator(Generator):
+ """
+ IBY generator.
+ """
+ def __init__(self, args):
+ super(self.__class__, self).__init__(args)
+ def generate(self):
+ self.args['TARGET']=self.args['target'].upper()
+ content="""\
+ // ============================================================================
+ // Generated by xqecom on %(timestamp)s
+ // This file is generated by xqecom and should not be modified by the user.
+ // ============================================================================
+
+ #ifndef %(TARGET)s_IBY
+ #define %(TARGET)s_IBY
+
+ #include <bldvariant.hrh>
+
+ ECOM_PLUGIN( %(target)s.dll, %(target)s.rsc )
+
+ #endif //%(TARGET)s_IBY"""
+
+ fileName = self.args['target'] + ".iby"
+ output = file(fileName, "w")
+ output.write(self.strip(content) % self.args)
+
+class StubsGenerator(Generator):
+ """
+ Stubs generator.
+ """
+ def __init__(self, args):
+ super(self.__class__, self).__init__(args)
+ def generate(self):
+ contentHrh="""\
+ // ============================================================================
+ // Generated by xqecom on %(timestamp)s
+ // This file is generated by xqecom and should not be modified by the user.
+ // ============================================================================
+
+ #ifndef ECOMSTUB_%(uid3)s_HRH
+ #define ECOMSTUB_%(uid3)s_HRH
+ #define KQtEcomPluginImplementationUid %(uid3)s
+ #endif //ECOMSTUB_%(uid3)s_HRH"""
+
+ fileName = "ecomstub_" + self.args['uid3'] + ".hrh"
+ output = file(fileName, "w")
+ output.write(self.strip(contentHrh) % self.args)
+
+ contentCpp="""\
+ // ============================================================================
+ // Generated by xqecom on %(timestamp)s
+ // This file is generated by xqecom and should not be modified by the user.
+ // ============================================================================
+
+ #include <xqplugin.h>
+ #include <ecomstub_%(uid3)s.hrh>
+ #include <ecom/implementationproxy.h>
+ XQ_PLUGIN_ECOM_HEADER(%(target)s)
+ const TImplementationProxy implementationTable[] =
+ {
+ IMPLEMENTATION_PROXY_ENTRY(%(uid3)s, C%(target)sFactory::NewL)
+ };
+
+ EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+ {
+ aTableCount = sizeof( implementationTable ) / sizeof( TImplementationProxy );
+ return implementationTable;
+ }"""
+
+ fileName = "ecomstub_" + self.args['uid3'] + ".cpp"
+ output = file(fileName, "w")
+ output.write(self.strip(contentCpp) % self.args)
+
+
+def runGenerators(generators, args):
+ for g in generators:
+ logging.debug("about to run generator: %s" % g.__name__)
+ try:
+ instance = g(args)
+ instance.generate()
+ except Exception, ex:
+ logging.error("Exception in %s: '%s'" % (g.__name__, ex))
+ logging.error("Exception in %s: '%s'" % (g.__name__, ex))
+ raise
+
+if (__name__=="__main__"):
+ arguments = sys.argv[1:]
+
+ op = OptionParser()
+ op.usage="%prog [options] [<target> <uid3> <interface> <configuration> <configurationFile>]"
+
+# op.add_option("-t", "--target", help="plugin target name")
+# op.add_option("-u", "--uid3", help="plugin uid3")
+# op.add_option("-i", "--interface", help="interface name")
+# op.add_option("-c", "--configuration", help="configuration")
+# op.add_option("-f", "--configuration-file", help="configuration file")
+
+ (options, args) = op.parse_args(arguments)
+
+ generators = [RssGenerator, PkgGenerator, IbyGenerator, StubsGenerator]
+ runGenerators(generators, args)
+