.. 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