Guake / guake

Drop-down terminal for GNOME
https://guake.github.io
GNU General Public License v2.0
4.46k stars 579 forks source link

Makefile: race condition between install-schemas and compile-schemas #2219

Closed jayaddison closed 2 months ago

jayaddison commented 10 months ago

Describe the bug

The Makefile contains an install-system target that depends on both install-schemas and compile-shemas (sic).

Hoever: the compile-shemas target reads files from paths that are created by the install-schemas target, and they can both run in parallel when make's parallelism is enabled (-j).

Expected behavior

The .gschema.xml files required for the compile-shemas target should always exist before the compile-shemas target is run.

Actual behavior

When make parallelism is enabled a gschemas.compiled file may or may not be created, depending on the runtime behaviour of the race condition.

To Reproduce

The sample below uses make -j12 install-system to approximate the behaviour:

$ PREFIX=/.../bugreport/ make -j12 install-system
install -dm755                                       "//.../bugreport//share/applications"
if [ 1 = 1 ]; then glib-compile-schemas //.../bugreport//share/glib-2.0/schemas; fi
for f in $(find po -iname "*.mo"); do \
        l="${f%%.*}"; \
        lb=$(basename $l); \
        install -Dm644 "$f" "//.../bugreport//share/locale/$lb/LC_MESSAGES/guake.mo"; \
done;
install -Dm644 "/.../guake/data/guake.desktop"       "//.../bugreport//share/applications/"
# you probably want to execute this target with sudo:
Error opening directory “//.../bugreport//share/glib-2.0/schemas”: No such file or directory
make: *** [Makefile:147: compile-shemas] Error 1

Note: sometimes the output differs, due to the race condition; for example if the directory has been created but does not yet contain .gschema.xml files then a message No schema files found: doing nothing. appears instead.