qtecomplugins/supplements/xqecom/xqecom.py
branchRCL_3
changeset 9 5d007b20cfd0
--- /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)
+