pidgin/pidgin

Merged pidgin/main into default

2017-06-15, Arkadiy Illarionov
8bcae3a0b165
Merged pidgin/main into default
# This program takes a C source as the input and produces the list of
# all signals registered.
#
# Output is:
# <signal name="Changed">
# <arg name="new_value" type="b"/>
# </signal>
from __future__ import absolute_import, division, print_function
import argparse
import fileinput
import re
import sys
# List "excluded" contains signals that shouldn't be exported via
# DBus. If you remove a signal from this list, please make sure
# that it does not break "make" with the configure option
# "--enable-dbus" turned on.
excluded = [
# purple_dbus_signal_emit_purple prevents our "dbus-method-called"
# signal from being propagated to dbus.
"dbus-method-called",
]
registerregex = re.compile(
"purple_signal_register[^;]+\"([\w\-]+)\"[^;]+(purple_marshal_\w+)[^;]+;")
nameregex = re.compile('[-_][a-z]')
parser = argparse.ArgumentParser()
parser.add_argument('input', nargs='*',
help='Input files (or stdin if not specified)')
parser.add_argument('-o', '--output', type=argparse.FileType('w'),
help='Output to file instead of stdout')
cmd_args = parser.parse_args()
print("/* Generated by %s. Do not edit! */" % (sys.argv[0], ),
file=cmd_args.output)
print("const char *dbus_signals = ", file=cmd_args.output)
input = ''.join(list(fileinput.input(cmd_args.input)))
for match in registerregex.finditer(input):
signal = match.group(1)
marshal = match.group(2)
if signal in excluded:
continue
signal = nameregex.sub(lambda x: x.group()[1].upper(), '-' + signal)
print("\" <signal name='%s'>\\n\"" % (signal, ), file=cmd_args.output)
args = marshal.split('_')
# ['purple', 'marshal', <return type>, '', args...]
if len(args) > 4:
for arg in args[4:]:
if arg == "POINTER":
type = 'p'
elif arg == "ENUM":
type = 'i'
elif arg == "INT":
type = 'i'
elif arg == "UINT":
type = 'u'
elif arg == "INT64":
type = 'x'
elif arg == "UINT64":
type = 't'
elif arg == "BOOLEAN":
type = 'b'
print("\" <arg type='%s'/>\\n\"" % (type, ),
file=cmd_args.output)
print("\" </signal>\\n\"", file=cmd_args.output)
print(";", file=cmd_args.output)