Update tools from tp-glib 0.7.6
authorXavier Claessens <xclaesse@src.gnome.org>
Fri, 11 Apr 2008 13:11:22 +0000 (13:11 +0000)
committerXavier Claessens <xclaesse@src.gnome.org>
Fri, 11 Apr 2008 13:11:22 +0000 (13:11 +0000)
svn path=/trunk/; revision=915

tools/Makefile.am
tools/doc-generator.xsl
tools/glib-client-gen.py
tools/glib-ginterface-gen.py
tools/gobject-foo.py [new file with mode: 0644]
tools/ls-interfaces.xsl [new file with mode: 0644]
tools/make-all-async.xsl [new file with mode: 0644]
tools/spec-to-introspect.xsl [new file with mode: 0644]
tools/telepathy-glib-env.in [new file with mode: 0644]
tools/with-session-bus.sh [new file with mode: 0644]

index 4bf514f163f7b3c8e84af69276f660e4e0f58a0e..bd1f4c00265566626d52d930e0350cfa06be440a 100644 (file)
@@ -1,3 +1,11 @@
+abs_top_builddir = @abs_top_builddir@
+
+noinst_SCRIPTS = telepathy-glib-env
+
+telepathy-glib-env: telepathy-glib-env.in Makefile
+       sed -e 's![@]abs_top_builddir[@]!$(abs_top_builddir)!' $< > $@
+       chmod +x $@
+
 EXTRA_DIST = \
     c-constants-generator.xsl \
     check-coding-style.mk \
@@ -15,8 +23,14 @@ EXTRA_DIST = \
     glib-ginterface-gen.py \
     glib-gtypes-generator.py \
     glib-signals-marshal-gen.py \
+    gobject-foo.py \
     identity.xsl \
-    libglibcodegen.py
+    libglibcodegen.py \
+    ls-interfaces.xsl \
+    make-all-async.xsl \
+    spec-to-introspect.xsl \
+    telepathy-glib-env.in \
+    with-session-bus.sh
 
 CLEANFILES = libglibcodegen.pyc libglibcodegen.pyo $(noinst_SCRIPTS)
 
@@ -31,11 +45,11 @@ glib-gtypes-generator.py: libglibcodegen.py
 glib-signals-marshal-gen.py: libglibcodegen.py
        touch $@
 
-TELEPATHY_GLIB_SRCDIR = $(top_srcdir)/../telepathy-glib
-maintainer-update-from-telepathy-glib:
+TELEPATHY_SPEC_SRCDIR = $(top_srcdir)/../telepathy-spec
+maintainer-update-from-telepathy-spec:
        set -e && cd $(srcdir) && \
        for x in $(EXTRA_DIST); do \
-               if test -f $(TELEPATHY_GLIB_SRCDIR)/tools/$$x; then \
-                       cp $(TELEPATHY_GLIB_SRCDIR)/tools/$$x $$x; \
+               if test -f $(TELEPATHY_SPEC_SRCDIR)/tools/$$x; then \
+                       cp $(TELEPATHY_SPEC_SRCDIR)/tools/$$x $$x; \
                fi; \
        done
index 83b42dc556039fe1b8ce8c33d4ac131b5a528045..8fd4dd3a4a6f0ed35a131c07c462a80cf1f43482 100644 (file)
@@ -2,7 +2,7 @@
 The master copy of this stylesheet is in the Telepathy spec repository -
 please make any changes there.
 
-Copyright (C) 2006, 2007 Collabora Limited
+Copyright (C) 2006-2008 Collabora Limited
 
 This library is free software; you can redistribute it and/or
 modify it under the terms of the GNU Lesser General Public
@@ -12,20 +12,27 @@ version 2.1 of the License, or (at your option) any later version.
 This library is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
+Lesser General Public License for more details.
 
 You should have received a copy of the GNU Lesser General Public
 License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 -->
 
 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
-  exclude-result-prefixes="tp">
+  xmlns:html="http://www.w3.org/1999/xhtml"
+  exclude-result-prefixes="tp html">
   <!--Don't move the declaration of the HTML namespace up here - XMLNSs
   don't work ideally in the presence of two things that want to use the
   absence of a prefix, sadly. -->
 
+  <xsl:template match="html:*" mode="html">
+    <xsl:copy>
+      <xsl:apply-templates mode="html"/>
+    </xsl:copy>
+  </xsl:template>
+
   <xsl:template match="*" mode="identity">
     <xsl:copy>
       <xsl:apply-templates mode="identity"/>
@@ -33,7 +40,14 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   </xsl:template>
 
   <xsl:template match="tp:docstring">
-    <xsl:apply-templates select="node()" mode="identity"/>
+    <xsl:apply-templates select="text() | html:*" mode="html"/>
+    <xsl:apply-templates select="tp:rationale"/>
+  </xsl:template>
+
+  <xsl:template match="tp:rationale">
+    <div xmlns="http://www.w3.org/1999/xhtml" class="rationale">
+      <xsl:apply-templates select="node()" mode="html"/>
+    </div>
   </xsl:template>
 
   <xsl:template match="tp:errors">
@@ -90,7 +104,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   </xsl:template>
   <xsl:template match="/tp:spec/tp:license">
     <div xmlns="http://www.w3.org/1999/xhtml" class="license">
-      <xsl:apply-templates mode="identity"/>
+      <xsl:apply-templates mode="html"/>
     </div>
   </xsl:template>
 
@@ -141,13 +155,32 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
     <xsl:choose>
       <xsl:when test="tp:property">
-        <h2 xmlns="http://www.w3.org/1999/xhtml">Properties:</h2>
+        <h2 xmlns="http://www.w3.org/1999/xhtml">Telepathy Properties:</h2>
+        <p xmlns="http://www.w3.org/1999/xhtml">Accessed using the
+          <a href="#org.freedesktop.Telepathy.Properties">Telepathy
+            Properties</a> interface.</p>
         <dl xmlns="http://www.w3.org/1999/xhtml">
           <xsl:apply-templates select="tp:property"/>
         </dl>
       </xsl:when>
       <xsl:otherwise>
-        <p xmlns="http://www.w3.org/1999/xhtml">Interface has no properties.</p>
+        <p xmlns="http://www.w3.org/1999/xhtml">Interface has no Telepathy
+          properties.</p>
+      </xsl:otherwise>
+    </xsl:choose>
+
+    <xsl:choose>
+      <xsl:when test="property">
+        <h2 xmlns="http://www.w3.org/1999/xhtml">D-Bus core Properties:</h2>
+        <p xmlns="http://www.w3.org/1999/xhtml">Accessed using the
+          org.freedesktop.DBus.Properties interface.</p>
+        <dl xmlns="http://www.w3.org/1999/xhtml">
+          <xsl:apply-templates select="property"/>
+        </dl>
+      </xsl:when>
+      <xsl:otherwise>
+        <p xmlns="http://www.w3.org/1999/xhtml">Interface has no D-Bus core
+          properties.</p>
       </xsl:otherwise>
     </xsl:choose>
 
@@ -219,6 +252,36 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     </dl>
   </xsl:template>
 
+  <xsl:template match="property">
+    <dt xmlns="http://www.w3.org/1999/xhtml">
+      <a name="{concat(../@name, '.', @name)}">
+        <code><xsl:value-of select="@name"/></code>
+      </a>
+      <xsl:text> - </xsl:text>
+      <code><xsl:value-of select="@type"/></code>
+      <xsl:call-template name="parenthesized-tp-type"/>
+      <xsl:text>, </xsl:text>
+      <xsl:choose>
+        <xsl:when test="@access = 'read'">
+          <xsl:text>read-only</xsl:text>
+        </xsl:when>
+        <xsl:when test="@access = 'write'">
+          <xsl:text>write-only</xsl:text>
+        </xsl:when>
+        <xsl:when test="@access = 'readwrite'">
+          <xsl:text>read/write</xsl:text>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:text>access: </xsl:text>
+          <code><xsl:value-of select="@access"/></code>
+        </xsl:otherwise>
+      </xsl:choose>
+    </dt>
+    <dd xmlns="http://www.w3.org/1999/xhtml">
+      <xsl:apply-templates select="tp:docstring"/>
+    </dd>
+  </xsl:template>
+
   <xsl:template match="tp:property">
     <dt xmlns="http://www.w3.org/1999/xhtml">
       <xsl:if test="@name">
@@ -626,13 +689,14 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
             float: right;
             font-style: italic;
           }
-          .method {
+          .method, .signal, .property {
             margin-left: 1em;
             margin-right: 4em;
           }
-          .signal {
-            margin-left: 1em;
-            margin-right: 4em;
+          .rationale {
+            font-style: italic;
+            border-left: 0.25em solid #808080;
+            padding-left: 0.5em;
           }
 
         </style>
@@ -650,19 +714,19 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
         <h2>Interfaces</h2>
         <ul>
-        <xsl:for-each select="node/interface">
+          <xsl:for-each select="//node/interface">
             <li><code><a href="#{@name}"><xsl:value-of select="@name"/></a></code></li>
           </xsl:for-each>
         </ul>
 
-        <xsl:apply-templates select="node"/>
+        <xsl:apply-templates select="//node"/>
         <xsl:apply-templates select="tp:generic-types"/>
         <xsl:apply-templates select="tp:errors"/>
 
         <h1>Index</h1>
         <h2>Index of interfaces</h2>
         <ul>
-        <xsl:for-each select="node/interface">
+          <xsl:for-each select="//node/interface">
             <li><code><a href="#{@name}"><xsl:value-of select="@name"/></a></code></li>
           </xsl:for-each>
         </ul>
index 4ff78cd0b569bab43e70e1b70a1c2eeb72773288..fede212dca495e268f76342eb192dffbae2bc859 100644 (file)
@@ -46,6 +46,8 @@ class Generator(object):
         self.basename = basename
         self.group = opts.get('--group', None)
         self.iface_quark_prefix = opts.get('--iface-quark-prefix', None)
+        self.tp_proxy_api = tuple(map(int,
+                opts.get('--tp-proxy-api', '0').split('.')))
         self.proxy_cls = opts.get('--subclass', 'TpProxy') + ' *'
         self.proxy_arg = opts.get('--subclass', 'void') + ' *'
         self.proxy_assert = opts.get('--subclass-assert', 'TP_IS_PROXY')
@@ -142,7 +144,7 @@ class Generator(object):
 
         if args:
             self.b('static void')
-            self.b('%s (DBusGProxy *proxy,' % collect_name)
+            self.b('%s (DBusGProxy *proxy G_GNUC_UNUSED,' % collect_name)
 
             for arg in args:
                 name, info, tp_type, elt = arg
@@ -208,7 +210,7 @@ class Generator(object):
 
         self.b('static void')
         self.b('%s (TpProxy *tpproxy,' % invoke_name)
-        self.b('    GError *error,')
+        self.b('    GError *error G_GNUC_UNUSED,')
         self.b('    GValueArray *args,')
         self.b('    GCallback generic_callback,')
         self.b('    gpointer user_data,')
@@ -721,6 +723,7 @@ class Generator(object):
                 self.b('            0,')
 
         self.b('            error, user_data, weak_object);')
+        self.b('      g_error_free (error);')
         self.b('      return NULL;')
         self.b('    }')
         self.b('')
@@ -801,12 +804,12 @@ class Generator(object):
                                                          member_lc)
 
         self.b('static void')
-        self.b('%s (TpProxy *self,' % reentrant_invoke)
+        self.b('%s (TpProxy *self G_GNUC_UNUSED,' % reentrant_invoke)
         self.b('    GError *error,')
         self.b('    GValueArray *args,')
-        self.b('    GCallback unused,')
-        self.b('    gpointer user_data,')
-        self.b('    GObject *unused2)')
+        self.b('    GCallback unused G_GNUC_UNUSED,')
+        self.b('    gpointer user_data G_GNUC_UNUSED,')
+        self.b('    GObject *unused2 G_GNUC_UNUSED)')
         self.b('{')
         self.b('  _%s_%s_run_state_%s *state = user_data;'
                % (self.prefix_lc, iface_lc, member_lc))
@@ -1026,17 +1029,23 @@ class Generator(object):
         signals = node.getElementsByTagName('signal')
         methods = node.getElementsByTagName('method')
 
-        self.b('static inline void')
-        self.b('%s_add_signals_for_%s (DBusGProxy *proxy)'
-                % (self.prefix_lc, name.lower()))
-        self.b('{')
+        if signals:
+            self.b('static inline void')
+            self.b('%s_add_signals_for_%s (DBusGProxy *proxy)'
+                    % (self.prefix_lc, name.lower()))
+            self.b('{')
 
-        for signal in signals:
-            self.do_signal_add(signal)
+            if self.tp_proxy_api >= (0, 7, 6):
+                self.b('  if (!tp_proxy_dbus_g_proxy_claim_for_signal_adding '
+                       '(proxy))')
+                self.b('    return;')
 
-        self.b('}')
-        self.b('')
-        self.b('')
+            for signal in signals:
+                self.do_signal_add(signal)
+
+            self.b('}')
+            self.b('')
+            self.b('')
 
         for signal in signals:
             self.do_signal(name, signal)
@@ -1080,17 +1089,20 @@ class Generator(object):
             self.b(' * #TpProxy::interface-added.')
             self.b(' */')
             self.b('static void')
-            self.b('%s_%s_add_signals (TpProxy *self,'
+            self.b('%s_%s_add_signals (TpProxy *self G_GNUC_UNUSED,'
                     % (self.prefix_lc, self.group))
             self.b('    guint quark,')
             self.b('    DBusGProxy *proxy,')
-            self.b('    gpointer unused)')
+            self.b('    gpointer unused G_GNUC_UNUSED)')
 
             self.b('{')
 
             for node in nodes:
                 iface = node.getElementsByTagName('interface')[0]
                 self.iface_dbus = iface.getAttribute('name')
+                signals = node.getElementsByTagName('signal')
+                if not signals:
+                    continue
                 name = node.getAttribute('name').replace('/', '').lower()
                 self.iface_uc = name.upper()
                 self.b('  if (quark == %s)' % self.get_iface_quark())
@@ -1114,7 +1126,7 @@ def types_to_gtypes(types):
 if __name__ == '__main__':
     options, argv = gnu_getopt(sys.argv[1:], '',
                                ['group=', 'subclass=', 'subclass-assert=',
-                                'iface-quark-prefix='])
+                                'iface-quark-prefix=', 'tp-proxy-api='])
 
     opts = {}
 
index 0c7c419e643ae90fa719349dcd80e39be1f06c11..36f3242b094282bee21ab5b168641e383f11ac67 100644 (file)
@@ -204,7 +204,7 @@ class Generator(object):
             base_init_code.extend(self.do_signal(signal))
 
         self.b('static inline void')
-        self.b('%s%s_base_init_once (gpointer klass)'
+        self.b('%s%s_base_init_once (gpointer klass G_GNUC_UNUSED)'
                % (self.prefix_, node_name_lc))
         self.b('{')
         self.b('  static TpDBusPropertiesMixinPropInfo properties[%d] = {'
diff --git a/tools/gobject-foo.py b/tools/gobject-foo.py
new file mode 100644 (file)
index 0000000..5921cab
--- /dev/null
@@ -0,0 +1,81 @@
+#!/usr/bin/python
+
+# gobject-foo.py: generate standard GObject type macros etc.
+#
+# The master copy of this program is in the telepathy-glib repository -
+# please make any changes there.
+#
+# Copyright (C) 2007 Collabora Ltd. <http://www.collabora.co.uk/>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+def gobject_header(head, tail, as_interface=False):
+    out = []
+    o = out.append
+
+    name = head + '_' + tail
+    MixedCase = name.replace('_', '')
+    lower_case = name.lower()
+    UPPER_CASE = name.upper()
+
+    gtype = head.upper() + '_TYPE_' + tail.upper()
+
+    o("typedef struct _%s %s;" % (MixedCase, MixedCase))
+    o("typedef struct _%sClass %sClass;" % (MixedCase, MixedCase))
+    o("typedef struct _%sPrivate %sPrivate;" % (MixedCase, MixedCase))
+    o("")
+    o("GType %s_get_type (void);" % lower_case)
+    o("")
+
+    o("#define %s \\" % gtype)
+    o("  (%s_get_type ())" % lower_case)
+
+    o("#define %s(obj) \\" % UPPER_CASE)
+    o("  (G_TYPE_CHECK_INSTANCE_CAST ((obj), %s, \\" % gtype)
+    o("                               %s))" % MixedCase)
+
+    if not as_interface:
+        o("#define %s_CLASS(klass) \\" % UPPER_CASE)
+        o("  (G_TYPE_CHECK_CLASS_CAST ((klass), %s, \\" % gtype)
+        o("                            %sClass))" % MixedCase)
+
+    o("#define %s_IS_%s(obj) \\" % (head.upper(), tail.upper()))
+    o("  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), %s))" % gtype)
+
+    if not as_interface:
+        o("#define %s_IS_%s_CLASS(klass) \\" % (head.upper(), tail.upper()))
+        o("  (G_TYPE_CHECK_CLASS_TYPE ((klass), %s))" % gtype)
+
+    o("#define %s_GET_CLASS(obj) \\" % UPPER_CASE)
+    o("  (G_TYPE_INSTANCE_GET_CLASS ((obj), %s, \\" % gtype)
+    o("                              %sClass))" % MixedCase)
+
+    return out
+
+if __name__ == '__main__':
+    import sys
+    from getopt import gnu_getopt
+
+    options, argv = gnu_getopt(sys.argv[1:], '', ['interface'])
+
+    as_interface = False
+
+    for opt, val in options:
+        if opt == '--interface':
+            as_interface = True
+
+    head, tail = argv
+
+    print '\n'.join(gobject_header(head, tail, as_interface=as_interface))
diff --git a/tools/ls-interfaces.xsl b/tools/ls-interfaces.xsl
new file mode 100644 (file)
index 0000000..22c4ff5
--- /dev/null
@@ -0,0 +1,35 @@
+<!--
+Extract a space-separated list of interface classnames from the Telepathy spec.
+The master copy of this stylesheet is in the Telepathy spec repository -
+please make any changes there.
+
+Copyright (C) 2006, 2007 Collabora Limited
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+  <xsl:output method="text" indent="no" encoding="ascii"/>
+
+  <xsl:template match="text()"/>
+
+  <xsl:template match="node">
+    <xsl:value-of select="concat(' ', translate(@name, '/', ''), ' ')"/>
+  </xsl:template>
+
+</xsl:stylesheet>
+
+<!-- vim:set sw=2 sts=2 et noai noci: -->
diff --git a/tools/make-all-async.xsl b/tools/make-all-async.xsl
new file mode 100644 (file)
index 0000000..634ee3c
--- /dev/null
@@ -0,0 +1,43 @@
+<!-- Alter a D-Bus introspection XML file to add the DBus.GLib.Async annotation
+to all methods.
+The master copy of this stylesheet is in the telepathy-glib repository -
+please make any changes there.
+
+Copyright (C) 2006, 2007 Collabora Limited
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+  <xsl:output method="xml" indent="yes" encoding="ascii"/>
+
+  <xsl:template match="method">
+    <xsl:copy>
+      <xsl:apply-templates select="@*|node()"/>
+      <xsl:if test="not(annotation[name='org.freedesktop.DBus.GLib.Async'])">
+        <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      </xsl:if>
+    </xsl:copy>
+  </xsl:template>
+
+  <xsl:template match="@*|node()">
+    <xsl:copy>
+      <xsl:apply-templates select="@*|node()"/>
+    </xsl:copy>
+  </xsl:template>
+
+</xsl:stylesheet>
+
+<!-- vim:set sw=2 sts=2 et: -->
diff --git a/tools/spec-to-introspect.xsl b/tools/spec-to-introspect.xsl
new file mode 100644 (file)
index 0000000..980604a
--- /dev/null
@@ -0,0 +1,51 @@
+<!-- Remove Telepathy extensions from a D-Bus interface, trying to leave only
+DTD-compliant introspection XML. The output still needs to be subjected to the
+following sed filter:
+sed -e 's@xmlns:tp="http://telepathy\.freedesktop\.org/wiki/DbusSpec.extensions-v0"@@g'
+
+The master copy of this stylesheet is in the Telepathy spec repository -
+please make any changes there.
+
+Copyright (C) 2006, 2007 Collabora Limited
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+  xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
+  exclude-result-prefixes="tp">
+
+  <xsl:template match="*">
+    <xsl:copy>
+      <xsl:for-each select="@*">
+        <xsl:if test="not(starts-with(name(), 'tp:'))">
+          <xsl:copy/>
+        </xsl:if>
+      </xsl:for-each>
+      <xsl:apply-templates/>
+    </xsl:copy>
+  </xsl:template>
+
+  <xsl:template match="tp:*"/>
+  <xsl:template match="text()"/>
+
+  <xsl:output method="xml" indent="yes" encoding="UTF-8"
+    omit-xml-declaration="no"
+    doctype-system="http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd"
+    doctype-public="-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" />
+
+</xsl:stylesheet>
+
+<!-- vim:set sw=2 sts=2 et: -->
diff --git a/tools/telepathy-glib-env.in b/tools/telepathy-glib-env.in
new file mode 100644 (file)
index 0000000..ddc47bf
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/sh
+abs_top_builddir="@abs_top_builddir@"
+export abs_top_builddir
+LD_LIBRARY_PATH="${abs_top_builddir}/telepathy-glib/.libs${LD_LIBRARY_PATH:+":${LD_LIBRARY_PATH}"}"
+export LD_LIBRARY_PATH
+G_DEBUG="fatal_criticals,fatal_warnings${G_DEBUG:+",${G_DEBUG}"}"
+export G_DEBUG
+
+exec "$@"
diff --git a/tools/with-session-bus.sh b/tools/with-session-bus.sh
new file mode 100644 (file)
index 0000000..26d9f24
--- /dev/null
@@ -0,0 +1,73 @@
+#!/bin/sh
+# with-session-bus.sh - run a program with a temporary D-Bus session daemon
+#
+# The canonical location of this program is the telepathy-glib tools/
+# directory, please synchronize any changes with that copy.
+#
+# Copyright (C) 2007 Collabora Ltd. <http://www.collabora.co.uk/>
+#
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved.
+
+set -e
+
+me=with-session-bus
+
+dbus_daemon_args="--print-address=5 --print-pid=6 --fork"
+
+usage ()
+{
+  echo "usage: $me [options] -- program [program_options]" >&2
+  echo "Requires write access to the current directory." >&2
+  exit 2
+}
+
+while test "z$1" != "z--"; do
+  case "$1" in
+  --session)
+    dbus_daemon_args="$dbus_daemon_args --session"
+    shift
+    ;;
+  --config-file=*)
+    # FIXME: assumes config file doesn't contain any special characters
+    dbus_daemon_args="$dbus_daemon_args $1"
+    shift
+    ;;
+  *)
+    usage
+    ;;
+  esac
+done
+shift
+if test "z$1" = "z"; then usage; fi
+
+exec 5> $me-$$.address
+exec 6> $me-$$.pid
+
+cleanup ()
+{
+  pid=`head -n1 $me-$$.pid`
+  if test -n "$pid" ; then
+    echo "Killing temporary bus daemon: $pid" >&2
+    kill -INT "$pid"
+  fi
+  rm -f $me-$$.address
+  rm -f $me-$$.pid
+}
+
+trap cleanup INT HUP TERM
+dbus-daemon $dbus_daemon_args
+
+{ echo -n "Temporary bus daemon is "; cat $me-$$.address; } >&2
+{ echo -n "Temporary bus daemon PID is "; head -n1 $me-$$.pid; } >&2
+
+e=0
+DBUS_SESSION_BUS_ADDRESS="`cat $me-$$.address`"
+export DBUS_SESSION_BUS_ADDRESS
+"$@" || e=$?
+
+trap - INT HUP TERM
+cleanup
+
+exit $e