Blame lasso/extract_types.py

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