Sat, 30 Jul 2005 00:23:21 +0000
[gaim-migrate @ 13272]
Moved DBUS init call from gtkmain.c to core.c
Reimplemented DBUS bindings mechamism to use low-level GLib bindings
as described in my last blog entry. This way plugins can add new DBUS
methods on the fly. Also wrote an example plugin that demonstrate how
to do it.
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
1 | # This programs takes a C header file as the input and produces: |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
2 | # |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
3 | # with option --mode=xml: xml dbus specification |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
4 | # with option --mode=c: C wrappers |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
5 | # |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
6 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
7 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
8 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
9 | import re |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
10 | import string |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
11 | import sys |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
12 | |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
13 | options = {} |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
14 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
15 | for arg in sys.argv[1:]: |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
16 | if arg[0:2] == "--": |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
17 | mylist = arg[2:].split("=",1) |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
18 | command = mylist[0] |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
19 | if len(mylist) > 1: |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
20 | options[command] = mylist[1] |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
21 | else: |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
22 | options[command] = None |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
23 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
24 | # list of object types |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
25 | |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
26 | # objecttypes = [] |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
27 | |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
28 | # for objecttype in file("dbus-auto-structs.txt"): |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
29 | # objecttypes.append(objecttype.strip()) |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
30 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
31 | # a dictionary of simple types |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
32 | # each TYPE maps into a pair (dbus-type-name, compatible-c-type-name) |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
33 | # if compatible-c-type-name is None then it is the same as TYPE |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
34 | |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
35 | # simpletypes = { |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
36 | # "int" : ("i", None), |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
37 | # "gint" : ("i", None), |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
38 | # "guint" : ("u", None), |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
39 | # "gboolean" : ("i", "int") |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
40 | # } |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
41 | |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
42 | simpletypes = ["int", "gint", "guint", "gboolean"] |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
43 | |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
44 | # for enum in file("dbus-auto-enums.txt"): |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
45 | # simpletypes[enum.strip()] = ("i", "int") |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
46 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
47 | # functions that shouldn't be exported |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
48 | |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
49 | excluded = ["gaim_accounts_load", "gaim_account_set_presence", |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
50 | "gaim_conv_placement_get_fnc_id", "gaim_conv_placement_add_fnc"] |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
51 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
52 | pointer = "#pointer#" |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
53 | |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
54 | functions = [] |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
55 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
56 | cparams = [] |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
57 | cparamsout = [] |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
58 | cdecls = [] |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
59 | ccode = [] |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
60 | ccodeout = [] |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
61 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
62 | myexception = "My Exception" |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
63 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
64 | def ctopascal(name): |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
65 | newname = "" |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
66 | for word in name.split("_"): |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
67 | newname += word.capitalize() |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
68 | return newname |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
69 | |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
70 | def c_print(function): |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
71 | print "static DBusMessage *%s_DBUS(DBusMessage *message_DBUS, DBusError *error_DBUS) {" \ |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
72 | % function |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
73 | |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
74 | print "DBusMessage *reply_DBUS;" |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
75 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
76 | for decl in cdecls: |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
77 | print decl |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
78 | |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
79 | print "dbus_message_get_args(message_DBUS, error_DBUS, ", |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
80 | for param in cparams: |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
81 | print "DBUS_TYPE_%s, &%s," % param, |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
82 | print "DBUS_TYPE_INVALID);" |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
83 | |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
84 | print "CHECK_ERROR(error_DBUS);" |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
85 | |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
86 | for code in ccode: |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
87 | print code |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
88 | |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
89 | print "reply_DBUS = dbus_message_new_method_return (message_DBUS);" |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
90 | |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
91 | print "dbus_message_append_args(reply_DBUS, ", |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
92 | for param in cparamsout: |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
93 | if type(param) is str: |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
94 | print "%s, " % param |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
95 | else: |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
96 | print "DBUS_TYPE_%s, &%s, " % param, |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
97 | print "DBUS_TYPE_INVALID);" |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
98 | |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
99 | for code in ccodeout: |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
100 | print code |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
101 | |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
102 | print "return reply_DBUS;\n}\n" |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
103 | |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
104 | functions.append(function) |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
105 | |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
106 | def c_clear(): |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
107 | global cparams, cdecls, ccode, cparamsout, ccodeout |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
108 | cparams = [] |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
109 | cdecls = [] |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
110 | ccode = [] |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
111 | cparamsout = [] |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
112 | ccodeout = [] |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
113 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
114 | |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
115 | def printdispatchtable(): |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
116 | print "static GaimDBusBinding bindings_DBUS[] = { " |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
117 | for function in functions: |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
118 | print '{"%s", %s_DBUS},' % (ctopascal(function), function) |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
119 | print "{NULL, NULL}" |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
120 | print "};" |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
121 | |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
122 | print "#define GAIM_DBUS_REGISTER_BINDINGS(handle) gaim_dbus_register_bindings(handle, bindings_DBUS)" |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
123 | |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
124 | # processing an input parameter |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
125 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
126 | def inputvar(mytype, name): |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
127 | global ccode, cparams, cdecls |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
128 | const = False |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
129 | if mytype[0] == "const": |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
130 | mytype = mytype[1:] |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
131 | const = True |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
132 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
133 | # simple types (int, gboolean, etc.) and enums |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
134 | if (len(mytype) == 1) and \ |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
135 | ((mytype[0] in simpletypes) or (mytype[0].startswith("Gaim"))): |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
136 | cdecls.append("dbus_int32_t %s;" % name) |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
137 | cparams.append(("INT32", name)) |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
138 | return |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
139 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
140 | # pointers ... |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
141 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
142 | if (len(mytype) == 2) and (mytype[1] == pointer): |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
143 | # strings |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
144 | if mytype[0] == "char": |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
145 | if const: |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
146 | cdecls.append("const char *%s;" % name) |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
147 | cparams.append(("STRING", name)) |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
148 | ccode .append("NULLIFY(%s);" % name) |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
149 | return |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
150 | else: |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
151 | raise myexception |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
152 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
153 | # known object types are transformed to integer handles |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
154 | elif mytype[0].startswith("Gaim"): |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
155 | cdecls.append("dbus_int32_t %s_ID;" % name) |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
156 | cdecls.append("%s *%s;" % (mytype[0], name)) |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
157 | cparams.append(("INT32", name + "_ID")) |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
158 | ccode.append("GAIM_DBUS_ID_TO_POINTER(%s, %s_ID, %s, error_DBUS);" % \ |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
159 | (name, name, mytype[0])) |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
160 | return |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
161 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
162 | # unknown pointers are always replaced with NULL |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
163 | else: |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
164 | cdecls.append("dbus_int32_t %s_NULL;" % name) |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
165 | cdecls .append("%s *%s;" % (mytype[0], name)) |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
166 | cparams.append(("INT32", name + "_NULL")) |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
167 | ccode .append("%s = NULL;" % name) |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
168 | return |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
169 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
170 | raise myexception |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
171 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
172 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
173 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
174 | # processing an output parameter |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
175 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
176 | def outputvar(mytype, name, call): |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
177 | # the "void" type is simple ... |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
178 | if mytype == ["void"]: |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
179 | ccode.append("%s;" % call) # just call the function |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
180 | return |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
181 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
182 | # a constant string |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
183 | if mytype == ["const", "char", pointer]: |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
184 | cdecls.append("const char *%s;" % name) |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
185 | ccode.append("%s = null_to_empty(%s);" % (name, call)) |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
186 | cparamsout.append(("STRING", name)) |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
187 | return |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
188 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
189 | # simple types (ints, booleans, enums, ...) |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
190 | if (len(mytype) == 1) and \ |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
191 | ((mytype[0] in simpletypes) or (mytype[0].startswith("Gaim"))): |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
192 | cdecls.append("dbus_int32_t %s;" % name) |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
193 | ccode.append("%s = %s;" % (name, call)) |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
194 | cparamsout.append(("INT32", name)) |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
195 | return |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
196 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
197 | # pointers ... |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
198 | if (len(mytype) == 2) and (mytype[1] == pointer): |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
199 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
200 | # handles |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
201 | if mytype[0].startswith("Gaim"): |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
202 | cdecls.append("dbus_int32_t %s;" % name) |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
203 | ccode .append("GAIM_DBUS_POINTER_TO_ID(%s, %s, error_DBUS);" % (name, call)) |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
204 | cparamsout.append(("INT32", name)) |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
205 | return |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
206 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
207 | # GList*, GSList*, assume that list is a list of objects |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
208 | # not a list of strings!!! |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
209 | # this does NOT release memory occupied by the list |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
210 | if mytype[0] in ["GList", "GSList"]: |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
211 | cdecls.append("dbus_int32_t %s_LEN;" % name) |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
212 | cdecls.append("dbus_int32_t *%s;" % name) |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
213 | ccode.append("%s = gaim_dbusify_%s(%s, FALSE, &%s_LEN);" % \ |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
214 | (name, mytype[0], call, name)) |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
215 | cparamsout.append("DBUS_TYPE_ARRAY, DBUS_TYPE_INT32, &%s, %s_LEN" \ |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
216 | % (name, name)) |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
217 | ccodeout.append("g_free(%s);" % name) |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
218 | return |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
219 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
220 | raise myexception |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
221 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
222 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
223 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
224 | def processfunction(functionparam, paramlist): |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
225 | c_clear() |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
226 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
227 | ftokens = functionparam.split() |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
228 | functiontype, function = ftokens[:-1], ftokens[-1] |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
229 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
230 | if function in excluded: |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
231 | return |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
232 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
233 | origfunction = function |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
234 | function = function.lower() |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
235 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
236 | names = [] |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
237 | for param in paramlist: |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
238 | tokens = param.split() |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
239 | if len(tokens) < 2: |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
240 | raise myexception |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
241 | type, name = tokens[:-1], tokens[-1] |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
242 | inputvar(type, name) |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
243 | names.append(name) |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
244 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
245 | outputvar(functiontype, "RESULT", |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
246 | "%s(%s)" % (origfunction, ", ".join(names))) |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
247 | |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
248 | c_print(function) |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
249 | |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
250 | |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
251 | |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
252 | |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
253 | print "/* Generated by %s. Do not edit! */" % sys.argv[0] |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
254 | |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
255 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
256 | |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
257 | regexp = r"^(\w[^()]*)\(([^()]*)\)\s*;\s*$"; |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
258 | |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
259 | |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
260 | if "export-only" in options: |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
261 | fprefix = "DBUS_EXPORT\s+" |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
262 | else: |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
263 | fprefix = "" |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
264 | |
|
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
265 | functionregexp = re.compile("^%s(\w[^()]*)\(([^()]*)\)\s*;\s*$" % fprefix) |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
266 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
267 | inputiter = iter(sys.stdin) |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
268 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
269 | for line in inputiter: |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
270 | words = line.split() |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
271 | if len(words) == 0: # empty line |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
272 | continue |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
273 | if line[0] == "#": # preprocessor directive |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
274 | continue |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
275 | if words[0] in ["typedef", "struct", "enum", "static"]: |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
276 | continue |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
277 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
278 | # accumulate lines until the parentheses are balance or an |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
279 | # empty line has been encountered |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
280 | myline = line.strip() |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
281 | while myline.count("(") > myline.count(")"): |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
282 | newline = inputiter.next().strip() |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
283 | if len(newline) == 0: |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
284 | break |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
285 | myline += " " + newline |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
286 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
287 | # is this a function declaration? |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
288 | thematch = functionregexp.match( |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
289 | myline.replace("*", " " + pointer + " ")) |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
290 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
291 | if thematch is None: |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
292 | continue |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
293 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
294 | function = thematch.group(1) |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
295 | parameters = thematch.group(2).strip() |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
296 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
297 | if (parameters == "void") or (parameters == ""): |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
298 | paramlist = [] |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
299 | else: |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
300 | paramlist = parameters.split(",") |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
301 | |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
302 | try: |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
303 | processfunction(function, paramlist) |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
304 | except myexception: |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
305 | sys.stderr.write(myline + "\n") |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
306 | except: |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
307 | sys.stderr.write(myline + "\n") |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
308 | raise |
|
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
309 | |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
310 | printdispatchtable() |
|
11146
c56333373e3c
[gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
311 |