.. SPDX-License-Identifier: LGPL-2.1-or-later
===========
Development
===========
Overview
========
Rygel is mostly written in `Vala `_ with the occasional C glue code where required.
Large parts of the code are available via shared-library APIs (such as `librygel-server `_
and `librygel-renderer-gst `_)
which are generally expected to be used via the documented C or Vala API.
Rygel is based on `GUPnP `_. See the `GUPnP API and tutorial documentation `_ and the `GUPnP-AV documentation `_.
Rygel's default media engine is based on `GStreamer `_, but developers may `implement alternative Rygel media engines `_
to use other multimedia frameworks.
A slightly more in-depth description of the code structure and program flows can be found at :doc:`architecture documentation`.
Getting the source code
=======================
* Rygel development takes place in GitLab ``_
* Released tar balls are available from GNOME's FTP server. ``_
Getting the dependencies
========================
All dependencies should be available from most distributions. The easiest way would be to use
the distribution's way to get the build dependencies for a specific package, such as
.. code-block:: sh
apt build-dep rygel
for Debian-based distributions or
.. code-block:: sh
dnf builddep rygel
for Fedora etc.
A full list of dependencies can be found in `README.md `_
Building the code
=================
.. code-block:: sh
meson setup build
ninja -C build
The build is configurable through various build options. Refer to `meson_options.txt `_
for all available options.
One useful option during development is ``-Duninstalled`` which will allow you run Rygel directly from the ``build`` folder without installing it to your system.
Installing the code
===================
To install what you have built above, just run
.. code-block:: sh
sudo ninja -C build install
Notes on debugging
==================
Valgrind
--------
* Follow the hints and tricks shown in the `GNOME's developer documentation `_
* Use the `suppression file from gstreamer-common `_
* Use the `suppression file from GLib `_
* Use `Rygel's suppression file `_
* Set the environment variable ``RYGEL_PLUGIN_TIMEOUT`` to something very large, for example 9999.
Testing Rygel
=============
UPnP control points known to work with Rygel are the tools from the `GUPnP Tools suite `_ and
`BubbleUPnP for Android `_.
Notes on debugging
==================
Valgrind
--------
* Follow the hints and tricks shown in the `GNOME's developer documentation `_
* Use the `suppression file from gstreamer-common `_
* Use the `suppression file from GLib `_
* Use `Rygel's suppression file `_
* Set the environment variable ``RYGEL_PLUGIN_TIMEOUT`` to something very large, for example 9999.
.. toctree::
:hidden:
coding-style
architecture
integration