mirror of
https://git.busybox.net/buildroot.git
synced 2024-12-13 07:13:32 +08:00
8c75f95e0a
exim does build in parallel correctly, but has a concurrency bug in generating version info files which happens either in the build step or in the install step. Add a patch to fix the bug. Fixes: 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 <luca@lucaceresoli.net> Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
85 lines
3.3 KiB
Diff
85 lines
3.3 KiB
Diff
From 19f6e36d3473ddba1a211e7af9352a10febb7270 Mon Sep 17 00:00:00 2001
|
|
From: Luca Ceresoli <luca@lucaceresoli.net>
|
|
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<N>) 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 <luca@lucaceresoli.net>
|
|
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
|
|
|