Mercurial > pidgin
diff libpurple/dbus-analyze-signals.py @ 27590:a08e84032814
merge of '2348ff22f0ff3453774b8b25b36238465580c609'
and 'e76f11543c2a4aa05bdf584f087cbe3439029661'
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Sun, 12 Jul 2009 05:43:38 +0000 |
parents | 3a0552df3379 |
children | 9f6b8e5998ec |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/dbus-analyze-signals.py Sun Jul 12 05:43:38 2009 +0000 @@ -0,0 +1,60 @@ +# 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> + +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]') + +print "/* Generated by %s. Do not edit! */" % sys.argv[0] +print "const char *dbus_signals = " +for match in registerregex.finditer(sys.stdin.read()): + 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 + + 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 + + print "\"</signal>\\n\"" + +print ";" +