Telepathy consists of multiple components that need to be compiled and installed separately in a certain order. Initially you should start by compiling and installing telepathy-glib, then continue with mission-control and any glib-based connection managers that you need, such as telepathy-gabble (highly recommended), telepathy-haze, etc… On the Qt side, you should first compile and install telepathy-qt and then continue with any qt-based components.

GLib-based components (autotools)

All the GLib-based components at the moment use the autotools build system. The compilation and installation procedure for them is the same.

In this example, we are going to compile telepathy-glib:

git clone git://anongit.freedesktop.org/telepathy/telepathy-glib
cd telepathy-glib
./autogen.sh --prefix=$PREFIX
make install  # optional, to install the binaries and headers in $PREFIX

Obviously, PREFIX can be set to another path in your system.

Finding libraries when building other components

After building telepathy-glib and/or telepathy-qt, other components will need to be able to find their binaries and headers. This can be achieved by exporting the PKG_CONFIG_PATH environment variable to point to the path where the pkgconfig (.pc) files of the libraries are installed.

For example, assuming that you have installed telepathy-glib in $HOME/telepathy as in the above instructions, here is how to compile telepathy-gabble with it:

git clone git://anongit.freedesktop.org/telepathy/telepathy-gabble
cd telepathy-gabble
PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig ./autogen.sh --prefix=$PREFIX
make install   # optional, to install the binaries in $PREFIX

Qt-based components (CMake)

All the Qt-based components at the moment use the CMake build system. The compilation and installation procedure for them is the same.

git clone git://anongit.freedesktop.org/telepathy/telepathy-qt
cd telepathy-qt
mkdir build
cd build
make install   # optional, to install the binaries and headers in $PREFIX

The PKG_CONFIG_PATH environment variable here is exported in order for telepathy-qt to be able to find telepathy-glib, which is an optional (but recommended) dependency for building some unit tests.

Running unit tests

After having built a component with the make command, you can run its unit tests by executing make check. This will run all the automatic unit tests and will report their status on the output.

Which components should I build?

That depends on what you want, but you should probably at least build the following:

  • Telepathy GLib, required as a dependency for Mission Control
  • Mission Control, the Account Manager and Channel Dispatcher, which is necessary to start any connection or channel
  • Telepathy Gabble, the XMPP connection manager, which also doubles as the reference CM to test things with
  • A client… Empathy / KDE-Telepathy / yours…

Nice to have

  • Telepathy Logger, for logging messages and events
  • Telepathy Haze, for supporting many protocols that are implemented in libpurple (pidgin/adium)
  • Other connection managers…

Running from a non-system prefix

Telepathy components are normally launched by the D-Bus daemon when their well-known address is requested on the bus. This is implemented by adding D-Bus .service files in the dbus services directory that tell D-Bus how to launch the necessary component, given an address. This directory is normally $PREFIX/share/dbus-1/services

For example, telepathy-gabble has the well-known address org.freedesktop.Telepathy.ConnectionManager.gabble and therefore installs the file $PREFIX/share/dbus-1/services/org.freedesktop.Telepathy.ConnectionManager.gabble.service that contains an Exec= line pointing to the path of the telepathy-gabble executable.

The D-Bus daemon, by default, looks for these files in $XDG_DATA_DIRS/dbus-1/services, where $XDG_DATA_DIRS is a directory list, like $PATH that defaults to /usr/share:/usr/local/share. As you can understand, in order for your D-Bus daemon to find the .service files that you just installed from source, either your $PREFIX must be /usr or /usr/local, or you need to change $XDG_DATA_DIRS to look like $PREFIX/share:/usr/share:/usr/local/share.

However, both of these methods are usually undesirable. Changing $XDG_DATA_DIRS must happen before your desktop session starts and it’s quite tricky to achieve, and installing in /usr or /usr/local is often undesirable because it requires root and messes up with your system.

The solution

The solution is to run an isolated dbus-daemon for your telepathy. The following script can achive this for you:


export PREFIX=$HOME/telepathy/install
export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig
export LD_LIBRARY_PATH=$PREFIX/lib:$PREFIX/lib/x86_64-linux-gnu
export PATH=$PREFIX/bin:$PATH

export XDG_DATA_DIRS=$PREFIX/share:/usr/share:/usr/local/share
export QT_PLUGIN_PATH=$PREFIX/lib/x86_64-linux-gnu/plugins:/usr/lib/x86_64-linux-gnu/qt5/plugins/

dbus-launch --sh-syntax --exit-with-session /bin/bash

# cleanup - --exit-with-session waits for SIGHUP to quit dbus-daemon
DBUS_LAUNCH_PID=`ps | grep dbus-launch | cut -d' ' -f1`

Running the above script will launch a shell with an independent dbus session, where you can start telepathy clients and work with them. You could also replace /bin/bash in the dbus-launch command line directly with a client, like ktp-contactlist or empathy if you prefer to launch the client directly instead of dropping in a shell.