dbus/bus run-with-tmp-session-bus.sh, NONE, 1.1 print-introspect.c,
NONE, 1.1 driver.c, 1.67, 1.68 Makefile.am, 1.33,
1.34 .cvsignore, 1.6, 1.7
Colin Walters
walters at freedesktop.org
Sat Mar 12 08:33:03 PST 2005
Update of /cvs/dbus/dbus/bus
In directory gabe:/tmp/cvs-serv7493/bus
Modified Files:
driver.c Makefile.am .cvsignore
Added Files:
run-with-tmp-session-bus.sh print-introspect.c
Log Message:
2005-03-11 Colin Walters <walters at verbum.org>
* glib/Makefile.am: Generate dbus-glib-bindings.h and
install it.
* bus/print-introspect.c: New file; prints introspection
data for a given name and object path.
* bus/run-with-tmp-session-bus.sh: New file, refactored
from test/glib/run-test.sh. Creates a temporary session
bus and runs another program.
* test/glib/run-test.sh: Refactor to invoke
run-with-tmp-session-bus.sh.
* bus/driver.c (bus_driver_handle_introspect): Fix to print new
introspection format. Also change to use DBUS_TYPE_x_AS_STRING
macros instead of hardcoding.
* glib/.cvsignore, bus/.cvsignore, test/glib/.cvsignore: Update.
--- NEW FILE: run-with-tmp-session-bus.sh ---
#! /bin/bash
SCRIPTNAME=$0
WRAPPED_SCRIPT=$1
shift
function die()
{
if ! test -z "$DBUS_SESSION_BUS_PID" ; then
echo "killing message bus "$DBUS_SESSION_BUS_PID >&2
kill -9 $DBUS_SESSION_BUS_PID
fi
echo $SCRIPTNAME: $* >&2
exit 1
}
if test -z "$DBUS_TOP_BUILDDIR" ; then
die "Must set DBUS_TOP_BUILDDIR"
fi
## convenient to be able to ctrl+C without leaking the message bus process
trap 'die "Received SIGINT"' SIGINT
CONFIG_FILE=./run-with-tmp-session-bus.conf
SERVICE_DIR="$DBUS_TOP_BUILDDIR/test/data/valid-service-files"
ESCAPED_SERVICE_DIR=`echo $SERVICE_DIR | sed -e 's/\//\\\\\\//g'`
echo "escaped service dir is: $ESCAPED_SERVICE_DIR" >&2
## create a configuration file based on the standard session.conf
cat $DBUS_TOP_BUILDDIR/bus/session.conf | \
sed -e 's/<servicedir>.*$/<servicedir>'$ESCAPED_SERVICE_DIR'<\/servicedir>/g' | \
sed -e 's/<include.*$//g' \
> $CONFIG_FILE
echo "Created configuration file $CONFIG_FILE" >&2
export PATH=$DBUS_TOP_BUILDDIR/bus:$PATH
## the libtool script found by the path search should already do this, but
export LD_LIBRARY_PATH=$DBUS_TOP_BUILDDIR/dbus/.libs:$LD_LIBRARY_PATH
unset DBUS_SESSION_BUS_ADDRESS
unset DBUS_SESSION_BUS_PID
echo "Running $DBUS_TOP_BUILDDIR/tools/dbus-launch --sh-syntax --config-file=$CONFIG_FILE" >&2
eval `$DBUS_TOP_BUILDDIR/tools/dbus-launch --sh-syntax --config-file=$CONFIG_FILE`
if test -z "$DBUS_SESSION_BUS_PID" ; then
die "Failed to launch message bus for introspection generation to run"
fi
echo "Started bus pid $DBUS_SESSION_BUS_PID at $DBUS_SESSION_BUS_ADDRESS" >&2
# Execute wrapped script
echo "Running $WRAPPED_SCRIPT $@" >&2
$WRAPPED_SCRIPT "$@" || die "script \"$WRAPPED_SCRIPT\" failed"
kill -TERM $DBUS_SESSION_BUS_PID || die "Message bus vanished! should not have happened" && echo "Killed daemon $DBUS_SESSION_BUS_PID" >&2
sleep 2
## be sure it really died
kill -9 $DBUS_SESSION_BUS_PID > /dev/null 2>&1 || true
exit 0
--- NEW FILE: print-introspect.c ---
/* -*- mode: C; c-file-style: "gnu" -*- */
/* gather-introspect.c Dump introspection data from service to stdout
*
* Copyright (C) 2005 Red Hat, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dbus/dbus.h>
static void
usage (char *name, int ecode)
{
fprintf (stderr, "Usage: %s <service> <destination object path>\n", name);
exit (ecode);
}
int
main (int argc, char *argv[])
{
DBusConnection *connection;
DBusError error;
DBusMessage *message;
DBusMessage *reply;
const char *service;
const char *path;
const char *introspect_data;
if (argc != 3)
usage (argv[0], 1);
service = argv[1];
path = argv[2];
dbus_error_init (&error);
connection = dbus_bus_get (DBUS_BUS_SESSION, &error);
if (connection == NULL)
{
fprintf (stderr, "Failed to open connection to session bus: %s\n",
error.message);
dbus_error_free (&error);
exit (1);
}
message = dbus_message_new_method_call (NULL,
path,
DBUS_INTERFACE_INTROSPECTABLE,
"Introspect");
if (message == NULL)
{
fprintf (stderr, "Couldn't allocate D-BUS message\n");
exit (1);
}
if (!dbus_message_set_destination (message, service))
{
fprintf (stderr, "Not enough memory\n");
exit (1);
}
reply = dbus_connection_send_with_reply_and_block (connection,
message,
-1,
&error);
dbus_message_unref (message);
if (dbus_error_is_set (&error))
{
fprintf (stderr, "Error: %s\n", error.message);
exit (1);
}
if (!dbus_message_get_args (reply, &error,
DBUS_TYPE_STRING,
&introspect_data,
DBUS_TYPE_INVALID))
{
fprintf (stderr, "Error: %s\n", error.message);
exit (1);
}
printf ("%s", introspect_data);
dbus_message_unref (reply);
dbus_connection_disconnect (connection);
exit (0);
}
Index: driver.c
===================================================================
RCS file: /cvs/dbus/dbus/bus/driver.c,v
retrieving revision 1.67
retrieving revision 1.68
diff -u -d -r1.67 -r1.68
--- driver.c 17 Feb 2005 21:19:49 -0000 1.67
+++ driver.c 12 Mar 2005 16:33:00 -0000 1.68
@@ -1136,7 +1136,7 @@
goto oom;
if (!_dbus_string_append (&xml, " <method name=\"Introspect\">\n"))
goto oom;
- if (!_dbus_string_append (&xml, " <arg name=\"data\" direction=\"out\" type=\"string\"/>\n"))
+ if (!_dbus_string_append_printf (&xml, " <arg name=\"data\" direction=\"out\" type=\"%s\"/>\n", DBUS_TYPE_STRING_AS_STRING))
goto oom;
if (!_dbus_string_append (&xml, " </method>\n"))
goto oom;
@@ -1163,15 +1163,15 @@
else if (strcmp (message_handlers[i].in_args,
DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_UINT32_AS_STRING) == 0)
{
- if (!_dbus_string_append (&xml, " <arg direction=\"in\" type=\"string\"/>\n"))
+ if (!_dbus_string_append_printf (&xml, " <arg direction=\"in\" type=\"%s\"/>\n", DBUS_TYPE_STRING_AS_STRING))
goto oom;
- if (!_dbus_string_append (&xml, " <arg direction=\"in\" type=\"uint32\"/>\n"))
+ if (!_dbus_string_append_printf (&xml, " <arg direction=\"in\" type=\"%s\"/>\n", DBUS_TYPE_UINT32_AS_STRING))
goto oom;
}
else if (strcmp (message_handlers[i].in_args,
DBUS_TYPE_STRING_AS_STRING) == 0)
{
- if (!_dbus_string_append (&xml, " <arg direction=\"in\" type=\"string\"/>\n"))
+ if (!_dbus_string_append_printf (&xml, " <arg direction=\"in\" type=\"%s\"/>\n", DBUS_TYPE_STRING_AS_STRING))
goto oom;
}
else
@@ -1186,26 +1186,26 @@
else if (strcmp (message_handlers[i].out_args,
DBUS_TYPE_STRING_AS_STRING) == 0)
{
- if (!_dbus_string_append (&xml, " <arg direction=\"out\" type=\"string\"/>\n"))
+ if (!_dbus_string_append_printf (&xml, " <arg direction=\"out\" type=\"%s\"/>\n", DBUS_TYPE_STRING_AS_STRING))
goto oom;
}
else if (strcmp (message_handlers[i].out_args,
DBUS_TYPE_BOOLEAN_AS_STRING) == 0)
{
- if (!_dbus_string_append (&xml, " <arg direction=\"out\" type=\"boolean\"/>\n"))
+ if (!_dbus_string_append_printf (&xml, " <arg direction=\"out\" type=\"%s\"/>\n", DBUS_TYPE_BOOLEAN_AS_STRING))
goto oom;
}
else if (strcmp (message_handlers[i].out_args,
DBUS_TYPE_UINT32_AS_STRING) == 0)
{
- if (!_dbus_string_append (&xml, " <arg direction=\"out\" type=\"uint32\"/>\n"))
+ if (!_dbus_string_append_printf (&xml, " <arg direction=\"out\" type=\"%s\"/>\n", DBUS_TYPE_UINT32_AS_STRING))
goto oom;
}
else if (strcmp (message_handlers[i].out_args,
DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING) == 0)
{
/* FIXME introspection format doesn't handle arrays yet */
- if (!_dbus_string_append (&xml, " <arg direction=\"out\" type=\"string\"/>\n"))
+ if (!_dbus_string_append_printf (&xml, " <arg direction=\"out\" type=\"%s\"/>\n", DBUS_TYPE_STRING_AS_STRING))
goto oom;
}
else
Index: Makefile.am
===================================================================
RCS file: /cvs/dbus/dbus/bus/Makefile.am,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -d -r1.33 -r1.34
--- Makefile.am 18 Jan 2005 22:20:38 -0000 1.33
+++ Makefile.am 12 Mar 2005 16:33:00 -0000 1.34
@@ -77,7 +77,7 @@
## we use noinst_PROGRAMS not check_PROGRAMS so that we build
## even when not doing "make check"
-noinst_PROGRAMS=$(TESTS)
+noinst_PROGRAMS=$(TESTS) print-introspect
bus_test_SOURCES= \
$(BUS_SOURCES) \
@@ -85,9 +85,20 @@
bus_test_LDADD=$(top_builddir)/dbus/libdbus-convenience.la $(DBUS_BUS_LIBS)
+print_introspect_SOURCES = print-introspect.c
+print_introspect_LDADD = $(top_builddir)/dbus/libdbus-convenience.la $(DBUS_BUS_LIBS)
+
+run-with-tmp-session-bus.sh: dbus-daemon
+
+all-local: dbus-bus-introspect.xml
+
+dbus-bus-introspect.xml: $(srcdir)/run-with-tmp-session-bus.sh
+ DBUS_TOP_BUILDDIR=$(top_builddir) $(srcdir)/run-with-tmp-session-bus.sh ./print-introspect org.freedesktop.DBus /org/freedesktop/DBus > dbus-bus-introspect.xml.tmp && mv dbus-bus-introspect.xml.tmp dbus-bus-introspect.xml
+
## mop up the gcov files
clean-local:
/bin/rm *.bb *.bbg *.da *.gcov || true
+ /bin/rm -f run-with-tmp-session-bus.conf
install-data-hook:
$(mkinstalldirs) $(DESTDIR)/$(localstatedir)/run/dbus
@@ -125,4 +136,4 @@
#### Extra dist
-EXTRA_DIST=$(CONFIG_IN_FILES) $(SCRIPT_IN_FILES) $(man_MANS) $(MAN_IN_FILES)
+EXTRA_DIST=$(CONFIG_IN_FILES) $(SCRIPT_IN_FILES) $(man_MANS) $(MAN_IN_FILES) run-with-tmp-session-bus.sh
Index: .cvsignore
===================================================================
RCS file: /cvs/dbus/dbus/bus/.cvsignore,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- .cvsignore 17 Feb 2005 21:25:49 -0000 1.6
+++ .cvsignore 12 Mar 2005 16:33:00 -0000 1.7
@@ -14,4 +14,7 @@
messagebus
session.conf
system.conf
+run-with-tmp-session-bus.conf
dbus-daemon.1
+print-introspect
+dbus-bus-introspect.xml
More information about the dbus-commit
mailing list