Autoconf and Meson walk into a bar…

…and by the time Meson has finished its second drink, Autoconf realizes it’s missing its wallet.

Not a very well-crafted joke, but it serves to make a point.

Building with Autotools is slow.

Although Nautilus has recently gotten better (cutting forty-ish seconds off the configuration phase on my machine, all thanks to Mohammed Sadiq), it takes over a minute to even reach the point where we can begin building, anyway, which is obscene.

I started toying with the idea of switching to Meson in Nautilus completely in late September of 2016 (very convenient, since libgd would soon get a WIP Meson branch). Things were going smoothly, albeit slowly – barely anyone knew what I was doing and there was no pressure to finish it soon. I deemed the work ready in late January/early February (not as convenient, since Meson support would land in libgd master not long after, requiring a tweak on our side) and we were very excited to merge the work – the builds were really fast.

Switching to Meson completely was not going to happen at that point, since it was very late in the cycle and we didn’t want to surprise the packagers near the end. Before deciding that, we had to consider other developers/contributors – not all distributions currently ship the version of Meson we require (>= 0.37.0) – that would mean having to install the latest version through other means (most likely, pip), which might not be an option for some people for personal reasons (I also really like having only distribution packages installed).

With the switch out of the way, we really pushed for its inclusion – rigorous testing (ha) and peer-review happened until midnight, when Carlos ACKed the patch. I pushed it and went to sleep thinking happy thoughts. Things were pretty calm before the storm – issues started cropping up in Continuous. Some of them were things to be fixed in Meson[1][2] (the first thing to completely break the build was printing \u2026 in a message), some were things I had not considered and fixed (unconditional documentation generation!) and some were small mysteries (including the actual source of generated enum descriptions and seeing things build out of order due to very high parallelization).

One of the more subtle breakages, unrelated to Continuous, was projects that build Nautilus extensions. Due to an incompatibility in the generated pkg-config file, those projects would fail to find the version of nautilus-extension they require. The most notable of those being file-roller.

The dust seems to have settled by now and I hope to receive more feedback from developers and contributors as soon as we start defaulting to Meson, but despite all the hiccups along the way, I think we did a pretty good job and hope to see more modules receiving the same treatment. :)

If you’re interested, the rough timeline can be found here (I don’t envy Carlos when he has to review these things).