Setting up your development environment (original) (raw)

View this page

Toggle table of contents sidebar

This chapter will help you set your development environment for librsvg.

System requirements

Downloading the source code

git clone https://gitlab.gnome.org/GNOME/librsvg.git

Setting up with podman

An easy way to set up a development environment is to use podman to download and run a container image. This is similar to having a chroot with all of librsvg’s dependencies already set up.

Install podman on your distro, and then:

cd librsvg # wherever you did your "git clone" sh ci/pull-container-image.sh

In the librsvg source tree, ci/pull-container-image.sh is a script that will invoke podman pull to download the container image that you can use for development. It is the same image that librsvg uses for its continuous integration pipeline (CI), so you can have exactly the same setup on your own machine.

That pull-container-image.sh script will give you instructions similar to these:

You can now run this: podman run --rm -ti --cap-add=SYS_PTRACE -v (pwd):/srv/project:z−w/srv/project(pwd):/srv/project:z -w /srv/project (pwd):/srv/project:zw/srv/projectimage_name

Don't forget to run this once inside the container: source ci/env.sh source ci/setup-dependencies-env.sh

You can cut&paste those commands (from the script’s output, not from this document!). The first one should give you a shell prompt inside the container. The second and third ones will make Rust available in the shell’s environment, and adjust some environment variables so that the compilation process can find the installed dependencies.

What’s all that magic? Let’s dissect the podman command line:

Finally, don’t forget to source ci/env.sh and source ci/setup-dependencies-env.sh once you are inside podman run.

You can now skip to Building and testing.

Setting up dependencies manually

To compile librsvg, you need the following packages installed. The minimum version is listed here; you may use a newer version instead.

Compilers and build tools:

Mandatory dependencies:

Optional dependencies:

The following sections describe how to install these dependencies on several systems. For fully manual builds, you can try using the script in ci/build-dependencies.sh. Librsvg’s continuous integration (CI) infrastructure uses that script to install the dependencies before building.

Debian based systems

As of 2018/Feb/22, librsvg cannot be built in debian stable andubuntu 18.04, as they have packages that are too old.

Build dependencies on Debian Testing or Ubuntu 18.10:

apt-get install -y gcc rustc cargo cargo-c ninja-build
meson gi-docgen python3-docutils git
libgdk-pixbuf2.0-dev libgirepository1.0-dev
libxml2-dev libcairo2-dev libpango1.0-dev

Additionally, as of September 2018 you need to add gdk-pixbufutilities to your path, see #331 for details:

PATH="$PATH:/usr/lib/x86_64-linux-gnu/gdk-pixbuf-2.0"

Fedora based systems

dnf install -y gcc rust rust-std-static cargo cargo-c ninja-build
meson gi-docgen python3-docutils git redhat-rpm-config
gdk-pixbuf2-devel gobject-introspection-devel
libxml2-devel cairo-devel cairo-gobject-devel pango-devel

openSUSE based systems

zypper install -y gcc rust rust-std cargo cargo-c ninja
meson python3-gi-docgen python38-docutils git
gdk-pixbuf-devel gobject-introspection-devel
libxml2-devel cairo-devel pango-devel

macOS systems

Dependencies may be installed using Homebrew or another package manager.

brew install meson gi-docgen pkgconfig gobject-introspection gdk-pixbuf pango

Building and testing

Make sure you have gone through the steps in Setting up with podman orSetting up dependencies manually. Then, do the following.

Normal development: You can use cargo build andcargo test as for a simple Rust project; this is what you will use most of the time during regular development. If you are using the podman container as per above, you should do this in the/srv/project directory most of the time.

After compiling with those commands, you can use the rsvg-convertbinary to casually test rendering an SVG file, for example, one that has a feature that you are developing. You can runtarget/debug/rsvg-convert -o output.png my_test_file.svg.

If you do a release build with cargo build --release, which includes optimizations, the binary will be in target/release/rsvg-convert. This version is much faster than the debug version.

Doing a full build: You can use the following:

mkdir -p _build meson setup _build -Ddocs=enabled -Dintrospection=enabled -Dvala=enabled meson compile -C _build meson test -C _build

You should only have to do that if you need to run the full test suite, for the C API tests and the tests for limiting memory consumption.