From 19f6e36d3473ddba1a211e7af9352a10febb7270 Mon Sep 17 00:00:00 2001 From: Luca Ceresoli Date: Fri, 1 May 2020 16:27:48 +0200 Subject: [PATCH] Makefile-Base: fix version.{h,sh} generation with parallel build When using parallel make (make -j) the build sometimes fails either during 'make' or during 'make install'. Error messages look either like: make[1]: Entering directory '/home/buildroot/autobuild/instance-2/output-1/build/exim-4.93.0.4' /bin/sh scripts/source_checks `Makefile' is up to date. make[2]: Entering directory '/home/buildroot/autobuild/instance-2/output-1/build/exim-4.93.0.4/build-br' /bin/sh ../scripts/Configure-os.c ../scripts/reversion: Your copy of Exim lacks any version information. Makefile:785: recipe for target 'version.sh' failed or like: DESTDIR=/home/buildroot/autobuild/instance-2/output-1/target INSTALL_ARG="-no_chown -no_symlink" build=br /usr/bin/make -j4 -C /home/buildroot/autobuild/instance-2/output-1/build/exim-4.93.0.4 CFLAGS="-std=c99 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os " install make[1]: Entering directory '/home/buildroot/autobuild/instance-2/output-1/build/exim-4.93.0.4' /bin/sh scripts/source_checks `Makefile' is up to date. make[2]: Entering directory '/home/buildroot/autobuild/instance-2/output-1/build/exim-4.93.0.4/build-br' /home/buildroot/autobuild/instance-2/output-1/host/bin/i586-linux-gcc version.c version.c: In function 'version_init': version.c:32:1: error: expected expression before ';' token ; ^ This is due to the rule: version.h version.sh:: @../scripts/reversion that executes reversion twice, once to satisfy the version.h target and once for version.sh. This is unnecessary because reversion generates both files anyway, but harmless without parallel build. When using parallel make however reversion is sporadically run in a time sequence such that the generated files are being used by other rules while they are being rewritten by the second reversion instance. Fix by making only one of the two targets run reversion, and the other one depend on it. Fixes builds found by the Buildroot autobuilders: http://autobuild.buildroot.net/results/ebf/ebfccad007e216564889645a07f5487747116331// http://autobuild.buildroot.net/results/56a/56a8457efcb32579ad6da99a769b6438dd0db267// http://autobuild.buildroot.net/results/6a1/6a1f8a352649baf767b094cb6bbe2a7397fa7fac// http://autobuild.buildroot.net/results/5ed/5ed1c42b3d33198f32d1267e5cc2b1fa1211495a// http://autobuild.buildroot.net/results/b30/b304569948fd481ce33ecd052a1036153c5d459e// http://autobuild.buildroot.net/results/d2c/d2c7abfe08672e53ff890127f787f8d2e84860f4// Signed-off-by: Luca Ceresoli Upstream-status: patch submitted (https://bugs.exim.org/show_bug.cgi?id=2566) --- OS/Makefile-Base | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/OS/Makefile-Base b/OS/Makefile-Base index b66678bee4de..4966c25b5359 100644 --- a/OS/Makefile-Base +++ b/OS/Makefile-Base @@ -664,9 +664,11 @@ PHDRS = ../config.h \ # Update Exim's version information and build the version object. -version.h version.sh:: +version.sh:: @../scripts/reversion +version.h: version.sh + cnumber.h: version.h version.o: $(HDRS) cnumber.h version.h version.c -- 2.26.2