| 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 |
| |