Meson/Ninja comparison with make

Tuesday, March 27, 2018

(Collection of stuff over a couple of days)

Does not start well for Meson:

ddd@turbo[meson] common> meson build

The Meson build system Version: 0.44.1 Source dir: /home/ddd/Work/spice-meson/libs/common Build dir: /home/ddd/Work/spice-meson/libs/common/build Build type: native build

Meson encountered an error in file meson_options.txt, line 1, column 0: Invalid kwargs for option "alignment-checks": "yield"

Removing yield from the meson_options.txt file leads to:

ddd@turbo[meson] common> meson build

The Meson build system Version: 0.44.1 Source dir: /home/ddd/Work/spice-meson/libs/common Build dir: /home/ddd/Work/spice-meson/libs/common/build Build type: native build

Meson encountered an error in file meson.build, line 4, column 0: Meson version is 0.44.1 but project requires >= 0.45.0.

A full log can be found at /home/ddd/Work/spice-meson/libs/common/build/meson-logs/meson-log.txt

The log is not that helpful:

Build started at 2018-03-27T14:58:09.633207

Main binary: /usr/bin/python3 Python system: Linux The Meson build system Version: 0.44.1 Source dir: /home/ddd/Work/spice-meson/libs/common Build dir: /home/ddd/Work/spice-meson/libs/common/build Build type: native build

But the error is actually shown in the command output above: the version is incorrect.

Udpate manually to meson 0.45.1. Then the error is:

Dependency python3 found: NO

I have python3 installed, however:

ddd@turbo[meson] common> python3 --version

Python 3.6.4

What is missing is probably python3-devel. Indeed:

ddd@turbo[meson] common> meson build

The Meson build system Version: 0.45.1 Source dir: /home/ddd/Work/spice-meson/libs/common Build dir: /home/ddd/Work/spice-meson/libs/common/build Build type: native build Project name: spice-common Native C compiler: cc (gcc 7.3.1 "cc (GCC) 7.3.1 20180130 (Red Hat 7.3.1-2)") Build machine cpu family: x86_64 Build machine cpu: x86_64 Has header "alloca.h": YES Has header "arpa/inet.h": YES Has header "dlfcn.h": YES Has header "inttypes.h": YES Has header "malloc.h": YES Has header "memory.h": YES Has header "netinet/in.h": YES Has header "stddef.h": YES Has header "stdint.h": YES Has header "stdlib.h": YES Has header "strings.h": YES Has header "string.h": YES Has header "sys/socket.h": YES Has header "sys/stat.h": YES Has header "sys/types.h": YES Has header "unistd.h": YES Has header "vfork.h": NO Checking for function "alloca": YES Checking for function "dup2": YES Checking for function "floor": YES Checking for function "fork": YES Checking for function "inet_ntoa": YES Checking for function "memmove": YES Checking for function "memset": YES Checking for function "pow": YES Checking for function "sqrt": YES Checking for function "vfork": YES Found pkg-config: /usr/bin/pkg-config (1.3.12) Native dependency spice-protocol found: YES 0.12.14 Native dependency glib-2.0 found: YES 2.54.3 Native dependency gio-2.0 found: YES 2.54.3 Native dependency gthread-2.0 found: YES 2.54.3 Native dependency pixman-1 found: YES 0.34.0 Native dependency openssl found: YES 1.1.0g Native dependency opus found: YES 1.2.1 Native dependency celt051 found: YES 0.5.1.3 Native dependency python3 found: YES 3.6 Native dependency libcacard found: YES 2.5.3 meson.build:157: WARNING: This project is only intended to be used as a subproject! Program asciidoc found: YES (/usr/bin/asciidoc) Configuring config.h using configuration Build targets in project: 17 Found ninja-1.8.2 at /usr/bin/ninja

Timing comparisons

Building the SPICE server on Turbo, 5 builds to get an idea of the variation.

Tools Clean reds.c log.h Description size Description language Build commands
Today's autotools 56.0-57.3s 2.98-3.28s 22.6-23.2s 13 files, 1149 lines, 31.7K autoconf (m4+shell) + automake (make-like) autoreconf -vfi && ./configure && make -j24
Meson/Ninja 7.65-7.85s 2.98-3.19s 5.51-5.60s 8 files, 553 lines, 16.4K meson (custom syntax, Python-like) meson build && ninja -C build
Pure make (debug) 4.29-4.55s 0.62-0.94s 1.48-1.68s 7 files, 372 lines, 10.0K Pure make make -j24
Pure make (opt) 19.21-19.42s 1.19-1.44s 2.96-3.05s 7 files, 372 lines, 10.0K Pure make make -j24