jami-docs/build/dependencies.md

174 lines
7.3 KiB
Markdown

# Dependencies
Jami is a large and complex piece of software, and depends on several external free software libraries.
The dependencies and how to install them on some systems are outlined below.
[//]: # (TODO: Distinguish between build time and runtime dependencies?)
[//]: # (TODO: Provide separate instructions for dnf and zypper?)
## jami-daemon
Building the Jami daemon requires the following tools and libraries:
- GNU Autotools (autoconf, autoconf-archive, autopoint, and automake)
- GCC (GNU Compiler Collection) C++ compiler (g++)
- [GNU Make](https://www.gnu.org/software/make/manual/)
- [GNU gettext](https://www.gnu.org/software/gettext/)
- [GNU Libtool](https://www.gnu.org/software/libtool/)
- [GnuTLS](https://gnutls.org/)
- [Argon2](https://wikipedia.org/wiki/Argon2)
- [asio](https://wikipedia.org/wiki/Audio_Stream_Input/Output)
- [dbus](https://www.freedesktop.org/wiki/Software/dbus/)
- dbus-c++
- [libupnp](https://github.com/pupnp/pupnp)
- [libssl](https://www.openssl.org/)
- [libpulse](https://gitlab.freedesktop.org/pulseaudio/pulseaudio)
- [libasound2](https://github.com/pop-os/libasound2)
- [libexpat](https://libexpat.github.io/)
- [pcre3](https://www.pcre.org/)
- [yaml-cpp](https://github.com/jbeder/yaml-cpp)
- [libXext](https://gitlab.freedesktop.org/xorg/lib/libxext)
- libxfixes
- [speex](https://www.speex.org/)
- speexdsp
- uuid
- [FFmpeg](https://ffmpeg.org/) (libavcodec, libavdevice, libswscale, and libavutil)
- [opus](https://opus-codec.org/)
- [udev](https://wikipedia.org/wiki/Udev)
- [fmt](https://github.com/fmtlib/fmt)
- gsm
- [pjproject](https://www.pjsip.org/) (custom Jami fork required)
- [jsoncpp](https://github.com/open-source-parsers/jsoncpp)
- [libarchive](https://libarchive.org/)
- [libnatpmp](https://github.com/miniupnp/libnatpmp)
- [libva](https://github.com/intel/libva)
- [libcrypto++](https://github.com/weidai11/cryptopp)
- [libvdpau](https://wikipedia.org/wiki/VDPAU)
- [libsecp256k1](https://github.com/bitcoin-core/secp256k1)
- [libgit2](https://libgit2.org/)
- [http-parser](https://pub.dev/packages/http_parser)
- [nasm](https://www.nasm.us/)
- [yasm](https://yasm.tortall.net/)
- [Nettle](https://www.lysator.liu.se/~nisse/nettle/)
- [OpenDHT](https://github.com/savoirfairelinux/opendht)
- [RESTinio](https://github.com/Stiffstream/restinio)
- [webrtc-audio-processing](https://github.com/tonarino/webrtc-audio-processing)
- [zlib](https://zlib.net/)
On dpkg/Debian-based GNU/Linux distributions
(such as [Debian](https://www.debian.org/), [Trisquel](https://trisquel.info/), [Ubuntu](https://ubuntu.com/), and [Linux Mint](https://www.linuxmint.com/)),
the packages can be installed with `apt-get` or `apt` as follows:
```
sudo apt-get install autoconf autoconf-archive autopoint automake \
cmake make dbus doxygen graphviz g++ gettext libasound2-dev \
libavcodec-dev libavdevice-dev libavformat-dev libboost-dev \
libcppunit-dev libdbus-1-dev libdbus-c++-dev libexpat1-dev \
libgnutls28-dev libgtk-3-dev libjack-dev libopus-dev \
libpcre3-dev libpulse-dev libssl-dev libspeex-dev \
libspeexdsp-dev libswscale-dev libtool libudev-dev \
libyaml-cpp-dev sip-tester swig uuid-dev yasm libjsoncpp-dev \
libva-dev libvdpau-dev libmsgpack-dev pandoc nasm dpkg-dev
```
On RPM-based GNU/Linux distributions
(such as [Fedora](https://fedoraproject.org/) and [openSUSE](https://www.opensuse.org/)),
the packages can be installed with `dnf`, `yum`, or `zypper` as follows:
```
sudo dnf install autoconf autoconf-archive automake cmake make \
speexdsp-devel pulseaudio-libs-devel libtool dbus-devel \
expat-devel pcre-devel doxygen graphviz yaml-cpp-devel \
boost-devel dbus-c++-devel dbus-devel libXext-devel \
libXfixes-devel yasm speex-devel chrpath check uuid-c++-devel \
gettext-devel gcc-c++ which alsa-lib-devel systemd-devel \
libuuid-devel uuid-devel gnutls-devel nettle-devel opus-devel \
speexdsp-devel yaml-cpp-devel swig jsoncpp-devel patch \
libva-devel openssl-devel libvdpau-devel msgpack-devel \
sqlite-devel openssl-static pandoc nasm bzip2
```
If there are any issues with missing dependencies, please check:
* The Jami package definitions, distributed on [dl.jami.net](https://dl.jami.net/); and
* The `build.py` script, on the `jami-project` repository.
## jami-client-qt
```{seealso}
For complete instructions on how to build the Qt Desktop client,
please refer to the [INSTALL.md](https://git.jami.net/savoirfairelinux/jami-client-qt/-/blob/master/INSTALL.md) file.
```
Building the Jami client requires the following tools and libraries:
- jami-daemon
- libnm
- libnotify
- libqrencode
- libayatana-appindicator or libappindicator (optional, for notifications)
- qt6-base
- qt6-declarative
- qt6-graphicaleffects
- qt6-multimedia
- qt6-networkauth
- qt6-svg
- qt6-tools
- qt6-webengine (optional, currently for link previews and some media
file previews)
The libqt-jami and jami-libqt packages from [dl.jami.net](https://dl.jami.net/) provide the required Qt 6 dependencies on supported dpkg/Debian-based and RPM-based GNU/Linux distributions, respectively.
This is especially useful for building Jami on slightly older versions of these distributions where Qt 6 is not yet packaged in the distribution's official repositories.
To install this package providing the Qt 6 dependencies on a supported distribution:
1. Add the respective [dl.jami.net](https://dl.jami.net/) repository by following the instructions on the [Download Jami for GNU/Linux](https://jami.net/download-jami-linux) webpage; and
2. Install the package using the Terminal command `sudo apt-get install libqt-jami` (for dpkg/Debian-based GNU/Linux distributions) or `sudo dnf install jami-libqt` (for RPM-based GNU/Linux distributions).
On dpkg/Debian-based GNU/Linux distributions
(such as Debian, Trisquel, Ubuntu, and Linux Mint),
the packages can be installed with `apt-get` or `apt` as follows:
```
sudo apt-get install qt6-base-dev qt6-tools-dev \
qt6-tools-dev-tools qt6-l10n-tools libqt6sql6-sqlite \
libqt6core5compat6-dev libqt6networkauth6-dev \
qt6-multimedia-dev libqt6svg6-dev qt6-declarative-dev \
qml6-module-qt-labs-qmlmodels \
qml6-module-qt5compat-graphicaleffects \
qml6-module-qtqml-workerscript qml6-module-qtmultimedia \
qml6-module-qtquick qml6-module-qtquick-controls \
qml6-module-qtquick-dialogs qml6-module-qtquick-layouts \
qml6-module-qtquick-shapes qml6-module-qtquick-window \
qml6-module-qtquick-templates qml6-module-qt-labs-platform \
libqrencode-dev libnm-dev libnotify-dev
```
To install the optional Qt WebEngine packages:
```
sudo apt-get install libqt6webengine6-data \
libqt6webenginecore6-bin qt6-webengine-dev \
qt6-webengine-dev-tools qml6-module-qtwebengine \
qml6-module-qtwebchannel
```
On RPM-based GNU/Linux distributions
(such as Fedora and openSUSE),
the packages can be installed with `dnf`, `yum`, or `zypper` as follows:
```
sudo dnf install qt6-qtbase-devel qt6-qtsvg-devel \
qt6-qtmultimedia-devel qt6-qtdeclarative-devel qrencode-devel \
NetworkManager-libnm-devel
```
To install the optional Qt WebEngine packages:
```
sudo dnf install qt6-qtwebengine-devel
```
```{note}
The easiest approach would be to install the libqt-jami or jami-libqt package on your supported dpkg/Debian-based or RPM-based GNU/Linux distribution, respectively.
This would ensure that:
* All the required Qt 6 dependencies are fetched; and
* The application is as similar as possible at what is being built and tested.
```