aboutsummaryrefslogblamecommitdiffstats
path: root/ubuntu-online-accounts/cc-plugins/generate-plugins.py
blob: a5acab4889efe27e775400d08263cb2a09cff3ea (plain) (tree)
1
2
3
4
5
6
7
8
9



                            




                                                        
                                                 







                                                          








                                                 
                            
 














                                            
                                                                              
















































































                                                                                               
                                                                              

















































                                                                                               



                                                  
                                       
                                    

                                   
                                           
                                                   
                                                        
                                          


                 


                                      



                     



                                                   




                                                    

                                                



                                                                                  











                                                  
















                                                                       





                                                       
                      




































                                                                                  
                     



















                                                                                  



                                                  

































                                                                                  
                                     




                               
#!/usr/bin/env python

# (name, CM, protocol, icon)
ALL = [
        ('AIM', 'haze', 'aim', 'aim'),
        ('GaduGadu', 'haze', 'gadugadu', 'gadugadu'),
        ('Groupwise', 'haze', 'groupwise', 'groupwise'),
        ('ICQ', 'haze', 'icq', 'icq'),
        ('IRC', 'idle', 'irc', 'irc'),
        ('Jabber', 'gabble', 'jabber', 'jabber'),
        ('Mxit', 'haze', 'mxit', 'mxit'),
        ('Myspace', 'haze', 'myspace', 'myspace'),
        ('SIP', 'sofiasip', 'sip', 'sip'),
        ('Salut', 'salut', 'local-xmpp', 'people-nearby'),
        ('Sametime', 'haze', 'sametime', 'sametime'),
        ('Yahoo Japan', 'haze', 'yahoojp', 'yahoo'),
        ('Yahoo!', 'haze', 'yahoo', 'yahoo'),
        ('Zephyr', 'haze', 'zephyr', 'zephyr'),
      ]

class Plugin:
    def __init__(self, name, cm, protocol, icon):
        self.name = name
        self.cm = cm
        self.protocol = protocol
        self.icon = icon

##### account-plugins/ #####

def magic_replace(text, protocol):
    p = protocol.replace('-', '_')

    l = protocol.split('-')
    l = map(str.title, l)
    camel = ''.join(l)

    text = text.replace('$lower', p)
    text = text.replace('$UPPER', p.upper())
    text = text.replace('$Camel', camel)

    return text

def generate_plugin_header(p):
    # header
    f = open('account-plugins/empathy-accounts-plugin-%s.h' % p.protocol, 'w')

    tmp = '''/* # Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
 * Do NOT edit manually */

/*
 * empathy-accounts-plugin-%s.h
 *
 * Copyright (C) 2012 Collabora Ltd. <http://www.collabora.co.uk/>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */


#ifndef __EMPATHY_ACCOUNTS_PLUGIN_$UPPER_H__
#define __EMPATHY_ACCOUNTS_PLUGIN_$UPPER_H__

#include "empathy-accounts-plugin.h"

G_BEGIN_DECLS

typedef struct _EmpathyAccountsPlugin$Camel EmpathyAccountsPlugin$Camel;
typedef struct _EmpathyAccountsPlugin$CamelClass EmpathyAccountsPlugin$CamelClass;

struct _EmpathyAccountsPlugin$CamelClass
{
  /*<private>*/
  EmpathyAccountsPluginClass parent_class;
};

struct _EmpathyAccountsPlugin$Camel
{
  /*<private>*/
  EmpathyAccountsPlugin parent;
};

GType empathy_accounts_plugin_$lower_get_type (void);

/* TYPE MACROS */
#define EMPATHY_TYPE_ACCOUNTS_PLUGIN_$UPPER \\
  (empathy_accounts_plugin_$lower_get_type ())
#define EMPATHY_ACCOUNTS_PLUGIN_$UPPER(obj) \\
  (G_TYPE_CHECK_INSTANCE_CAST((obj), \\
    EMPATHY_TYPE_ACCOUNTS_PLUGIN_$UPPER, \\
    EmpathyAccountsPlugin$Camel))
#define EMPATHY_ACCOUNTS_PLUGIN_$UPPER_CLASS(klass) \\
  (G_TYPE_CHECK_CLASS_CAST((klass), \\
    EMPATHY_TYPE_ACCOUNTS_PLUGIN_$UPPER, \\
    EmpathyAccountsPlugin$CamelClass))
#define EMPATHY_IS_ACCOUNTS_PLUGIN_$UPPER(obj) \\
  (G_TYPE_CHECK_INSTANCE_TYPE((obj), \\
    EMPATHY_TYPE_ACCOUNTS_PLUGIN_$UPPER))
#define EMPATHY_IS_ACCOUNTS_PLUGIN_$UPPER_CLASS(klass) \\
  (G_TYPE_CHECK_CLASS_TYPE((klass), \\
    EMPATHY_TYPE_ACCOUNTS_PLUGIN_$UPPER))
#define EMPATHY_ACCOUNTS_PLUGIN_$UPPER_GET_CLASS(obj) \\
  (G_TYPE_INSTANCE_GET_CLASS ((obj), \\
    EMPATHY_TYPE_ACCOUNTS_PLUGIN_$UPPER, \\
    EmpathyAccountsPlugin$CamelClass))

GType ap_module_get_object_type (void);

G_END_DECLS

#endif /* #ifndef __EMPATHY_ACCOUNTS_PLUGIN_$UPPER_H__*/''' % (p.protocol)

    f.write(magic_replace (tmp, p.protocol))

def generate_plugin_code(p):
    # header
    f = open('account-plugins/empathy-accounts-plugin-%s.c' % p.protocol, 'w')

    tmp = '''/* # Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
 * Do NOT edit manually */

/*
 * empathy-accounts-plugin-%s.c
 *
 * Copyright (C) 2012 Collabora Ltd. <http://www.collabora.co.uk/>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */

#include "config.h"

#include "empathy-accounts-plugin-%s.h"

G_DEFINE_TYPE (EmpathyAccountsPlugin$Camel, empathy_accounts_plugin_$lower,\\
        EMPATHY_TYPE_ACCOUNTS_PLUGIN)

static void
empathy_accounts_plugin_$lower_class_init (
    EmpathyAccountsPlugin$CamelClass *klass)
{
}

static void
empathy_accounts_plugin_$lower_init (EmpathyAccountsPlugin$Camel *self)
{
}

GType
ap_module_get_object_type (void)
{
  return EMPATHY_TYPE_ACCOUNTS_PLUGIN_$UPPER;
}''' % (p.protocol, p.protocol)

    f.write(magic_replace (tmp, p.protocol))

def generate_build_block(p):
    la = 'lib%s_la' % p.protocol.replace('-', '_')

    output = '''%s_SOURCES = \\
    empathy-accounts-plugin-%s.c \\
    empathy-accounts-plugin-%s.h
%s_LDFLAGS = -module -avoid-version
%s_LIBADD = \\
    libempathy-uoa-account-plugin.la \\
    $(top_builddir)/libempathy/libempathy.la \\
    $(top_builddir)/libempathy-gtk/libempathy-gtk.la
''' % (la, p.protocol, p.protocol, la, la)

    return output


def generate_account_plugins(plugins):
    '''account-plugins/'''
    libs = []
    build_blocks = []

    for p in plugins:
        # empathy-accounts-plugin-$protocol.[ch]'''
        generate_plugin_header(p)
        generate_plugin_code(p)

        name = '    lib%s.la' % p.protocol
        libs.append(name)

        build_blocks.append(generate_build_block(p))

    # Makefile.am
    f = open('account-plugins/Makefile.am', 'w')

    f.write(
'''# Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
# Do NOT edit manually
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)

pkglib_LTLIBRARIES = libempathy-uoa-account-plugin.la

# this API is not stable and will never be, so use -release to make the
# SONAME of the plugin library change with every Empathy release.
libempathy_uoa_account_plugin_la_LDFLAGS = \\
   -no-undefined \\
   -release $(VERSION)

libempathy_uoa_account_plugin_la_SOURCES = \\
    empathy-accounts-plugin.c \\
    empathy-accounts-plugin.h \\
    empathy-accounts-plugin-widget.c \\
    empathy-accounts-plugin-widget.h

libempathy_uoa_account_plugin_la_LIBADD = \\
    $(UOA_LIBS)

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>
    <group name="auth">
      <setting name="method">password</setting>
      <setting name="mechanism">password</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_account_plugins(plugins)
    generate_providers(plugins)
    generate_services(plugins)

if __name__ == '__main__':
    generate_all()