[Spice-devel] [PATCH RFC] Support for building with Meson

Eduardo Lima (Etrunko) etrunko at redhat.com
Thu Mar 22 17:18:15 UTC 2018


Here is the result of work in progress with replacing autotools with
Meson. I am sending the patches on the ML for easier visualization, but
if you want to try it, I would really recommend pulling from my gitlab
repositories, e.g.:

  $ git remote add etrunko https://gitlab.com/etrunko/spice-protocol
  $ git remote add etrunko https://gitlab.com/etrunko/spice-common
  $ git remote add etrunko https://gitlab.com/etrunko/spice-server

The development branch is named meson for all repositories.

- Requirements:

Python >= 3.5, as required by meson itself.

The required Meson version is 0.45.0, which includes some interesting
features for the specific use case of subprojects, just like
spice-common.

Recent distros are probably still lagging behind on the package version,
but there is an easy way to upgrade meson, by installing a new version
on your $HOME/.local directory with python 'pip'.

  $ pip3 install --upgrade --user meson

After downloading the meson package, it is necessary to tell python
where to find it, via the PYTHONPATH environment variable.

  $ export PYTHONPATH='$HOME/.local/lib/python3.6/site-packages

Then you are ready to go.

- Basic workflow:

With Meson, building in-tree is not possible at all, so we need to pass
a directory as argument to meson where we want the build to be done.
This has the advantage of creating builds with different options under
the same parent directory, e.g.:

  $ meson ./build --prefix=/usr
  $ meson ./build-extra -Dextra-checks=true -Dalignment-checks=true

This is equivalent to the autogen/configure step in autotools. Meson
itself is only responsible for the configure phase, where it creates
the files that will be used by another lower level build-system, which
will actually do the build. The default one is ninja.

  $ ninja -C ./build
  $ ninja -C ./build install

Ninja defaults to parallel builds, and this can be changed with the -j
flag.

  $ ninja -j 10 -C ./build

- Done:

Protocol, common and server.

- Missing:

  * Server:
    - tests need to be adjusted so the executable can run in a path
      other than the source files.
    - version generation with git-version-gen if building from tarball.
      IMHO, git-version-gen could be removed.
    - Checks (syntax, etc), in maint.mk and cfg.mk, that are done whith
      make distcheck.

  * Spice Gtk:
    - Work in progress, but it will not interfere as much with other
      projects, especially spice-common, as server did. When ready to be
      used I will follow the same structure as others.

- Hacking:

Meson has a python-like syntax and it is very well documented. The key
files are:

  * meson.build: Mandatory for the project root and usually found under
                 each directory you want something to be built.

  * meson_options.txt: Options that can interfere with the result of the
                       build.

For more details, please refer to the websites of each project:

  http://mesonbuild.com
  http://ninja-build.org

--
Eduardo de Barros Lima (Etrunko)
Software Engineer - RedHat
etrunko at redhat.com



More information about the Spice-devel mailing list