New: Introduce runQuery variants that accept a custom QSparqlConnection
[qtcontacts-tracker:hasselmms-qtcontacts-tracker.git] / tools / with-session-bus.sh
1 #!/bin/sh
2 # with-session-bus.sh - run a program with a temporary D-Bus session daemon
3 #
4 # The canonical location of this program is the telepathy-glib tools/
5 # directory, please synchronize any changes with that copy.
6 #
7 # Copyright (C) 2007-2008 Collabora Ltd. <http://www.collabora.co.uk/>
8 #
9 # Copying and distribution of this file, with or without modification,
10 # are permitted in any medium without royalty provided the copyright
11 # notice and this notice are preserved.
12
13 tmpdir=$(mktemp -d)
14
15 export XDG_DATA_HOME=$tmpdir/.local
16 export XDG_CACHE_HOME=$tmpdir/.cache
17 export XDG_CONFIG_HOME=$tmpdir/.config
18 trap "rm -rf $tmpdir; exit" INT TERM EXIT
19
20 set -e
21
22 me=with-session-bus
23
24 dbus_daemon_args="--print-address=5 --print-pid=6 --fork"
25 sleep=0
26
27 usage ()
28 {
29   echo "usage: $me [options] -- program [program_options]" >&2
30   echo "Requires write access to the current directory." >&2
31   echo "" >&2
32   echo "If \$WITH_SESSION_BUS_FORK_DBUS_MONITOR is set, fork dbus-monitor" >&2
33   echo "with the arguments in \$WITH_SESSION_BUS_FORK_DBUS_MONITOR_OPT." >&2
34   echo "The output of dbus-monitor is saved in $me-<pid>.dbus-monitor-logs" >&2
35   exit 2
36 }
37
38 while test "z$1" != "z--"; do
39   case "$1" in
40   --sleep=*)
41     sleep="$1"
42     sleep="${sleep#--sleep=}"
43     shift
44     ;;
45   --session)
46     dbus_daemon_args="$dbus_daemon_args --session"
47     shift
48     ;;
49   --config-file=*)
50     # FIXME: assumes config file doesn't contain any special characters
51     dbus_daemon_args="$dbus_daemon_args $1"
52     shift
53     ;;
54   *)
55     usage
56     ;;
57   esac
58 done
59 shift
60 if test "z$1" = "z"; then usage; fi
61
62 exec 5> $me-$$.address
63 exec 6> $me-$$.pid
64
65 cleanup ()
66 {
67   pid=`head -n1 $me-$$.pid`
68   if test -n "$pid" ; then
69     echo "Killing temporary bus daemon: $pid" >&2
70     kill -INT "$pid"
71   fi
72   rm -f $me-$$.address
73   rm -f $me-$$.pid
74 }
75
76 trap cleanup INT HUP TERM
77 dbus-daemon $dbus_daemon_args
78
79 { echo -n "Temporary bus daemon is "; cat $me-$$.address; } >&2
80 { echo -n "Temporary bus daemon PID is "; head -n1 $me-$$.pid; } >&2
81
82 e=0
83 DBUS_SESSION_BUS_ADDRESS="`cat $me-$$.address`"
84 export DBUS_SESSION_BUS_ADDRESS
85
86 if [ -n "$WITH_SESSION_BUS_FORK_DBUS_MONITOR" ] ; then
87   echo -n "Forking dbus-monitor $WITH_SESSION_BUS_FORK_DBUS_MONITOR_OPT" >&2
88   echo -n "$me-$$.dbus-monitor-logs"
89   dbus-monitor $WITH_SESSION_BUS_FORK_DBUS_MONITOR_OPT \
90         > $me-$$.dbus-monitor-logs 2>&1 &
91 fi
92
93 "$@" || e=$?
94
95 if test $sleep != 0; then
96   sleep $sleep
97 fi
98
99 trap - INT HUP TERM
100 cleanup
101
102 exit $e