Blame lasso/extract_types.py

Packit Service 88ab54
Packit Service 88ab54
import glob
Packit Service 88ab54
import re
Packit Service 88ab54
import sys
Packit Service 88ab54
from six.moves import cStringIO as StringIO
Packit Service 88ab54
import six
Packit Service 88ab54
Packit Service 88ab54
enable_wsf = 0
Packit Service 88ab54
Packit Service 88ab54
if '-wsf' in sys.argv:
Packit Service 88ab54
    enable_wsf = 1
Packit Service 88ab54
Packit Service 88ab54
if len(sys.argv) == 2+enable_wsf:
Packit Service 88ab54
    srcdir = sys.argv[1]
Packit Service 88ab54
else:
Packit Service 88ab54
    srcdir = '.'
Packit Service 88ab54
Packit Service 88ab54
wsf = ['lasso_disco_', 'lasso_dst_', 'lasso_is_', 'lasso_profile_service_',
Packit Service 88ab54
        'lasso_discovery', 'lasso_wsf', 'lasso_interaction_', 'lasso_utility_',
Packit Service 88ab54
        'lasso_sa_', 'lasso_soap_binding', 'lasso_authentication', 'lasso_wsse_',
Packit Service 88ab54
        'lasso_sec_', 'lasso_idwsf2', 'lasso_wsf2', 'lasso_wsa_',
Packit Service 88ab54
        'lasso_wsu_']
Packit Service 88ab54
if enable_wsf:
Packit Service 88ab54
    wsf = []
Packit Service 88ab54
Packit Service 88ab54
fd = StringIO()
Packit Service 88ab54
Packit Service 88ab54
six.print_("/* This file has been autogenerated; changes will be lost */", file=fd)
Packit Service 88ab54
six.print_("", file=fd)
Packit Service 88ab54
six.print_("typedef GType (*type_function) ();", file=fd)
Packit Service 88ab54
six.print_("", file=fd)
Packit Service 88ab54
Packit Service 88ab54
header_files = []
Packit Service 88ab54
for header_file in glob.glob('%s/*/*.h' % srcdir) + glob.glob('%s/*/*/*.h' % srcdir):
Packit Service 88ab54
    if ('/id-wsf/' in header_file or '/id-wsf-2.0' in header_file) and not enable_wsf:
Packit Service 88ab54
        continue
Packit Service 88ab54
    header_files.append(header_file)
Packit Service 88ab54
    try:
Packit Service 88ab54
        type = re.findall('lasso_.*get_type', open(header_file).read())[0]
Packit Service 88ab54
    except IndexError:
Packit Service 88ab54
        continue
Packit Service 88ab54
    for t in wsf:
Packit Service 88ab54
        if type.startswith(t):
Packit Service 88ab54
            break
Packit Service 88ab54
    else:
Packit Service 88ab54
        six.print_("extern GType %s();" % type, file=fd)
Packit Service 88ab54
Packit Service 88ab54
six.print_("", file=fd)
Packit Service 88ab54
six.print_("type_function functions[] = {", file=fd)
Packit Service 88ab54
for header_file in header_files:
Packit Service 88ab54
    try:
Packit Service 88ab54
        type = re.findall('lasso_.*get_type', open(header_file).read())[0]
Packit Service 88ab54
    except IndexError:
Packit Service 88ab54
        continue
Packit Service 88ab54
    for t in wsf:
Packit Service 88ab54
        if type.startswith(t):
Packit Service 88ab54
            break
Packit Service 88ab54
    else:
Packit Service 88ab54
        six.print_("\t%s," % type, file=fd)
Packit Service 88ab54
six.print_("\tNULL", file=fd)
Packit Service 88ab54
six.print_("};", file=fd)
Packit Service 88ab54
Packit Service 88ab54
open('types.c', 'w').write(fd.getvalue())