Hello all,
Recently I discovered some build issues in a project that I create a snap package for: when make
was used as the cmake
backend, there were race conditions that caused the build to fail.
Switching to the ninja backend (i.e. cmake -GNinja
), as supplied by the ninja-build
deb package, solved the race conditions, but required some workarounds: I had to create a custom override-build
script that completely excluded the regular snapcraftctl build
. The solution I came up with is here:
ā¦ but in short amounts to,
cmake ../src [OTHER_OPTIONS]
ninja
DESTDIR=../install ninja install
The reason this is necessary is because the cmake
plugin hardcodes the assumption of a make
backend; in fact, it explicitly derives from the make
plugin:
ā¦ and invokes that pluginās make
method to actually build:
This seems worth submitting a feature request on launchpad for (the cmake plugin should probably support multiple backends, probably by using composition with a plugin for that backend rather than inheritance) but I thought Iād raise the concern here first in case anyone has any interesting/relevant comments. Alternatively it might be possible to use more generic cmake commands (cmake --build
for example) which invoke the backend under the hood.
Iād also be interested in peopleās thoughts on my custom solution and whether it can be improved.
Thanks & best wishes,
-- Joe