Meson support
This adds support for meson to:
- Build the xfce-build container properly for project libs that use meson.
- Allow CI to work for projects that are switching to meson.
- Build release tarballs properly when using
xfce-do-release
.
Additionally, I've added a "project template" that folks can use to help get started in their own migrations, including a README
that describes how it works, as well as including some useful information.
I opted to create a separate GitLab CI yaml file for Meson rather than attempting to make the existing one work for both, with conditionals and whatnot. First off, after reading some GitLab CI docs, it wasn't straightforward how to do it. Second, I think we should let each project switch over explicitly: that is, a maintainer might want to check in some Meson files, but leave their autotools files there until they're satisfied and happy, but be able to pick which build system (or both!) CI uses.
I was a bit opinionated on the topic of project version number management. Meson doesn't have any built-in way to deal with dynamic or automated version number changes, or appending git hashes. So I "invented" something: each repo needs to have a After some discussion, we still have a version
file in its root that has one or two lines: first line has the latest release version string, and second line optionally says "git". If it says "git", it's considered a non-release version, and the git hash is appended to the version string specified on the first line. I've included a print-version
script (that each project will have to copy-paste into their tree) that takes care of that process, and the provided meson.build
template makes use of it.version.sh
script, but instead of having a version
file, it uses git describe
to determine the version and git hash, uses meson.add_dist_script()
to rewrite the meson.build
when making the dist tarball so it hard-codes the release version (since otherwise it'd require a git checkout to build).
I also did my best in the provided meson.build
file to set up compiler warnings and errors, as well as debug defines and settings, similarly to how our autotools M4 macros do it. The only difference (well, aside from any mistakes I may have made) is that there's no way to set the default buildtype (release
vs. debugoptimized
) based on whether it's a release tarball or a git checkout. That's unfortunately a limitation of Meson. But I think it's fine to set the default to debugoptimized
(which sets things up more or less like our autotools --enable-debug=yes
option), and users and distro packagers will need to pass --buildtype=release
to meson setup
.
At any rate, here's how I've set things up so Meson's --buildtype
matches to our autotools --enable-debug
:
--buildtype=? |
--enable-debug=? |
---|---|
minsize | no |
plain | minimal (but without debug symbols) |
release | minimal |
debugoptimized | yes |
debug | full |
The minsize
type is a little off the beaten path, so I appropriated it for our no
setup. It kinda makes sense, I guess, as disabling gobject cast checks and asserts does make the binary smaller? Sure... A quick check suggests that Debian doesn't pass --enable-debug
at all, which would give them minimal
, which seems like a safe thing to do. Of course, now they'll need to pass something, or they'll get debugoptimized
.
Still to be done:
- Actually test these changes. I haven't yet!
-
(.xz should be fine)meson dist
builds an xz archive, whereas with autotools we use bz2. It looks like there's no option to create bz2 archives. Is xz ok? Or should we unpack and repack it as bz2? -
Update the Transifex sync so it'll work with meson projects. I think I just found that over ininfra/transifex!2infra/transifex
, so I'll take a look at that in a bit. Looks like it doesn't actually domake foo.pot
to generate the potfile, and usesxgettext
directly, so I think all that needs to be done there is teach it that it can usexgettext
ifpo/meson.build
exists. - Update
xfce-test
when projects change over. It looks like it already has support for meson, but needs to be told which project uses what build system.