[telepathy-glib/master] glib-client-gen.py: add support for deprecating or not generating _run_ methods

Simon McVittie simon.mcvittie at collabora.co.uk
Wed Jun 10 06:34:11 PDT 2009


---
 examples/extensions/Makefile.am |    3 ++-
 telepathy-glib/Makefile.am      |   10 ++++++++++
 tools/glib-client-gen.py        |   31 +++++++++++++++++++++++++------
 3 files changed, 37 insertions(+), 7 deletions(-)

diff --git a/examples/extensions/Makefile.am b/examples/extensions/Makefile.am
index 0bd2e37..2053010 100644
--- a/examples/extensions/Makefile.am
+++ b/examples/extensions/Makefile.am
@@ -116,13 +116,14 @@ _gen/connection.xml: connection.xml $(wildcard *.xml) $(tools_dir)/xincludator.p
 	$(QUIET_GEN)$(PYTHON) $(tools_dir)/xincludator.py $< > $@
 
 _gen/cli-connection-body.h _gen/cli-connection.h: _gen/connection.xml \
-	$(tools_dir)/glib-client-gen.py
+	$(tools_dir)/glib-client-gen.py Makefile.am
 	$(QUIET_GEN)$(PYTHON) $(tools_dir)/glib-client-gen.py \
 		--group=connection \
 		--subclass=TpConnection \
 		--subclass-assert=TP_IS_CONNECTION \
 		--iface-quark-prefix=EXAMPLE_IFACE_QUARK \
 		--tp-proxy-api=0.7.6 \
+		--generate-reentrant \
 		$< Example_Cli _gen/cli-connection
 
 _gen/svc-connection.c _gen/svc-connection.h: _gen/connection.xml \
diff --git a/telepathy-glib/Makefile.am b/telepathy-glib/Makefile.am
index a1b5147..5b167c8 100644
--- a/telepathy-glib/Makefile.am
+++ b/telepathy-glib/Makefile.am
@@ -362,29 +362,38 @@ _gen/tp-cli-%-body.h _gen/tp-cli-%.h: _gen/tp-spec-%.xml \
 	subclass= ; \
 	subclass_assert= ; \
 	case $* in \
+		generic) \
+			maybe_reentrant=--generate-reentrant; \
+			;; \
 		channel) \
 			subclass=--subclass=TpChannel; \
 			subclass_assert=--subclass-assert=TP_IS_CHANNEL; \
+			maybe_reentrant=--generate-reentrant; \
 			;; \
 		connection-manager) \
 			subclass=--subclass=TpConnectionManager; \
 			subclass_assert=--subclass-assert=TP_IS_CONNECTION_MANAGER \
+			maybe_reentrant=--generate-reentrant; \
 			;; \
 		connection) \
 			subclass=--subclass=TpConnection; \
 			subclass_assert=--subclass-assert=TP_IS_CONNECTION; \
+			maybe_reentrant=--generate-reentrant; \
 			;; \
 		media-session-handler) \
 			subclass=--subclass=TpMediaSessionHandler; \
 			subclass_assert=--subclass-assert=TP_IS_MEDIA_SESSION_HANDLER; \
+			maybe_reentrant=--generate-reentrant; \
 			;; \
 		media-stream-handler) \
 			subclass=--subclass=TpMediaStreamHandler; \
 			subclass_assert=--subclass-assert=TP_IS_MEDIA_STREAM_HANDLER; \
+			maybe_reentrant=--generate-reentrant; \
 			;; \
 		dbus-daemon) \
 			subclass=--subclass=TpDBusDaemon; \
 			subclass_assert=--subclass-assert=TP_IS_DBUS_DAEMON; \
+			maybe_reentrant=--generate-reentrant; \
 			;; \
 	esac; \
 	$(PYTHON) $(tools_dir)/glib-client-gen.py \
@@ -392,4 +401,5 @@ _gen/tp-cli-%-body.h _gen/tp-cli-%.h: _gen/tp-spec-%.xml \
 		--group `echo $* | tr - _` \
 		--iface-quark-prefix=TP_IFACE_QUARK \
 		--tp-proxy-api=0.7.6 \
+		$$maybe_reentrant \
 		$< Tp_Cli _gen/tp-cli-$*
diff --git a/tools/glib-client-gen.py b/tools/glib-client-gen.py
index a3714f1..6988596 100644
--- a/tools/glib-client-gen.py
+++ b/tools/glib-client-gen.py
@@ -55,6 +55,9 @@ class Generator(object):
             % opts.get('--subclass', 'TpProxy'))
         if self.proxy_arg == 'void *':
             self.proxy_arg = 'gpointer '
+        self.generate_reentrant = ('--generate-reentrant' in opts or
+                '--deprecate-reentrant' in opts)
+        self.deprecate_reentrant = opts.get('--deprecate-reentrant', None)
 
     def h(self, s):
         if isinstance(s, unicode):
@@ -801,6 +804,16 @@ class Generator(object):
         self.b('}')
         self.b('')
 
+        if self.generate_reentrant:
+            self.do_method_reentrant(method, iface_lc, member, member_lc,
+                                     in_args, out_args, collect_callback)
+
+        # leave a gap for the end of the method
+        self.b('')
+        self.h('')
+
+    def do_method_reentrant(self, method, iface_lc, member, member_lc, in_args,
+            out_args, collect_callback):
         # Reentrant blocking calls
         # Example:
         # gboolean tp_cli_properties_interface_run_get_properties
@@ -885,6 +898,9 @@ class Generator(object):
         self.b('}')
         self.b('')
 
+        if self.deprecate_reentrant:
+            self.h('#ifndef %s' % self.deprecate_reentrant)
+
         self.h('gboolean %s_%s_run_%s (%sproxy,'
                % (self.prefix_lc, iface_lc, member_lc, self.proxy_arg))
         self.h('    gint timeout_ms,')
@@ -948,7 +964,13 @@ class Generator(object):
             self.b('    %s*%s,' % (ctype, name))
 
         self.h('    GError **error,')
-        self.h('    GMainLoop **loop);')
+
+        if self.deprecate_reentrant:
+            self.h('    GMainLoop **loop) G_GNUC_DEPRECATED;')
+            self.h('#endif /* not %s */' % self.deprecate_reentrant)
+        else:
+            self.h('    GMainLoop **loop);')
+
         self.h('')
 
         self.b('    GError **error,')
@@ -1020,10 +1042,6 @@ class Generator(object):
         self.b('}')
         self.b('')
 
-        # leave a gap for the end of the method
-        self.b('')
-        self.h('')
-
     def do_signal_add(self, signal):
         marshaller_items = []
         gtypes = []
@@ -1153,7 +1171,8 @@ def types_to_gtypes(types):
 if __name__ == '__main__':
     options, argv = gnu_getopt(sys.argv[1:], '',
                                ['group=', 'subclass=', 'subclass-assert=',
-                                'iface-quark-prefix=', 'tp-proxy-api='])
+                                'iface-quark-prefix=', 'tp-proxy-api=',
+                                'generate-reentrant', 'deprecate-reentrant='])
 
     opts = {}
 
-- 
1.5.6.5




More information about the telepathy-commits mailing list