TL;DR
While we’re still 30s behind hand-written make, I totally would use any of the two over hand-written Makefiles.
As you might have noticed, meson is the new kid on the block. Step by step I am currently converting some projects to it, spearheading Shotwell. Since Shotwell only “recently” became an autotools project, you may ask why. Shotwell had a hand-written makefile system. This made some tasks that would have been incredibly easy with autotools, such as mallard documentation handling, more complicated than it should be. Since autotools provides all the nice features that you want for your GNOME environment, it made sense to leverage that.
Number games
Here are some numbers from the various transition phases. All taken on my i5 X201 laptop.
Conditions:
- We build from a fresh git checkout (or git clean -dxf)
- All builds are generated on the same machine with
make -j $(($(nproc) + 2))
- In the case of Meson, the ccache cache was emptied before
Shotwell 0.22
Configure:
real 0m0,011s
user 0m0,004s
sys 0m0,004s
Compile:
real 5m15,892s
user 17m30,392s
sys 1m10,984s
Shotwell 0.23.0
Shotwell’s makefile had a subtle rule issue that caused the plugins to be compiled several times over with valac. Also it was calling pkg-config with each compiler call, so after fixing that, we get these numbers for the compile step:
real 2m1,760s
user 6m31,788s
sys 0m26,788s
Shotwell master
Autotools
autogen.sh (including configure run):
real 0m32,315s
user 0m26,900s
sys 0m0,984s
Compiling:
real 2m25,164s
user 7m47,380s
sys 0m29,028s
Meson
mkdir build && meson build
real 0m1,529s
user 0m1,056s
sys 0m0,304s
ninja -C build
real 2m9,369s
user 7m17,276s
sys 0m33,660s