aboutsummaryrefslogtreecommitdiffstats
path: root/ubuntu-online-accounts/cc-plugins/generate-plugins.py
diff options
context:
space:
mode:
Diffstat (limited to 'ubuntu-online-accounts/cc-plugins/generate-plugins.py')
-rwxr-xr-xubuntu-online-accounts/cc-plugins/generate-plugins.py167
1 files changed, 167 insertions, 0 deletions
diff --git a/ubuntu-online-accounts/cc-plugins/generate-plugins.py b/ubuntu-online-accounts/cc-plugins/generate-plugins.py
new file mode 100755
index 000000000..9f03a289b
--- /dev/null
+++ b/ubuntu-online-accounts/cc-plugins/generate-plugins.py
@@ -0,0 +1,167 @@
+#!/usr/bin/env python
+
+# (name, CM, protocol, icon)
+ALL = [
+ ('Jabber', 'gabble', 'jabber', 'jabber'),
+ ]
+
+class Plugin:
+ def __init__(self, name, cm, protocol, icon):
+ self.name = name
+ self.cm = cm
+ self.protocol = protocol
+ self.icon = icon
+
+##### The plugin itself #####
+
+def generate_build_block(p):
+ la = 'lib%s_la' % p.protocol.replace('-', '_')
+
+ output = '''%s_SOURCES = \\
+ empathy-accounts-plugin.c \\
+ empathy-accounts-plugin.h \\
+ empathy-accounts-plugin-widget.c \\
+ empathy-accounts-plugin-widget.h
+%s_LDFLAGS = -module -avoid-version
+%s_LIBADD = \\
+ $(UOA_LIBS) \\
+ $(top_builddir)/libempathy-gtk/libempathy-gtk.la
+''' % (la, la, la)
+
+ return output
+
+def generate_makefile_am(plugins):
+ '''Generate Makefile.am'''
+ libs = []
+ build_blocks = []
+
+ for p in plugins:
+ name = ' lib%s.la' % p.protocol
+ libs.append(name)
+
+ build_blocks.append(generate_build_block(p))
+
+ f = open('Makefile.am', 'w')
+
+ f.write(
+'''# Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
+# Do NOT edit manually
+SUBDIRS = providers services
+
+plugindir = $(ACCOUNTS_PROVIDER_PLUGIN_DIR)
+
+INCLUDES = \\
+ -I$(top_builddir) \\
+ -I$(top_srcdir) \\
+ -DLOCALEDIR=\\""$(datadir)/locale"\\" \\
+ $(UOA_CFLAGS) \\
+ $(WARN_CFLAGS) \\
+ $(ERROR_CFLAGS) \\
+ $(DISABLE_DEPRECATED) \\
+ $(EMPATHY_CFLAGS)
+
+plugin_LTLIBRARIES = \\
+%s \\
+ $(NULL)
+
+%s''' % ('\\\n'.join(libs), '\n\n'.join(build_blocks)))
+
+##### Providers #####
+
+def generate_provider_file(p):
+ f = open('providers/%s.provider' % p.protocol, 'w')
+
+ f.write(
+'''<?xml version="1.0" encoding="UTF-8" ?>
+<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
+ Do NOT edit manually -->
+<provider id="%s">
+ <name>%s</name>
+ <icon>%s</icon>
+</provider>
+''' % (p.protocol, p.name, p.icon))
+
+def generate_providers(plugins):
+ '''generate providers/*.provider files and providers/Makefile.am'''
+
+ providers = []
+ for p in plugins:
+ providers.append(' %s.provider' % p.protocol)
+
+ generate_provider_file(p)
+
+ # providers/Makefile.am
+ f = open('providers/Makefile.am', 'w')
+ f.write(
+'''# Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
+# Do NOT edit manually
+providersdir = $(ACCOUNTS_PROVIDER_FILES_DIR)
+
+providers_DATA = \\
+%s \\
+ $(NULL)
+
+EXTRA_DIST = $(providers_DATA)
+''' % ('\\\n'.join(providers)))
+
+##### Services #####
+
+def generate_service_file(p):
+ f = open('services/%s-im.service' % p.protocol, 'w')
+
+ f.write(
+'''<?xml version="1.0" encoding="UTF-8" ?>
+<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
+ Do NOT edit manually -->
+<service id="%s-im">
+ <type>IM</type>
+ <name>%s</name>
+ <icon>%s</icon>
+ <provider>%s</provider>
+
+ <!-- default settings (account settings have precedence over these) -->
+ <template>
+ <group name="telepathy">
+ <setting name="manager">%s</setting>
+ <setting name="protocol">%s</setting>
+ </group>
+ </template>
+
+</service>
+''' % (p.protocol, p.name, p.icon, p.protocol, p.cm, p.protocol))
+
+def generate_services(plugins):
+ '''generate services/*-im.service files and services/Makefile.am'''
+
+ services = []
+ for p in plugins:
+ services.append(' %s-im.service' % p.protocol)
+
+ generate_service_file(p)
+
+ # providers/Makefile.am
+ f = open('services/Makefile.am', 'w')
+ f.write(
+'''# Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
+# Do NOT edit manually
+servicesdir = $(ACCOUNTS_SERVICE_FILES_DIR)
+
+services_DATA = \\
+%s \\
+ $(NULL)
+
+EXTRA_DIST = $(services_DATA)
+''' % ('\\\n'.join(services)))
+
+def generate_all():
+ plugins = []
+
+ for name, cm, protocol, icon in ALL:
+ plugins.append(Plugin(name, cm, protocol, icon))
+
+ generate_makefile_am(plugins)
+ generate_providers(plugins)
+ generate_services(plugins)
+
+if __name__ == '__main__':
+ generate_all()