perl: run builds from a pristine source tree

Running builds from a previously used directory relies on correctness of
'make clean' or incremental 'make', and sadly perl (or perl-cross) does not have either.

The particularly nasty problem, currently occurring, is that sometimes, when reusing
a previous build, we arrive at a combination of timestamps in the tree,
where make becomes very confused, gets lost in its own rules and enters an infinite loop,
never figuring out what needs to be rebuild in what order. Worse, there is no reliable
trigger for this that was found, and any attempts to 'isolate the issue' haven't produced one.

Let's simply add a clean S/B separation for builds, and always run a build from a reproducible
set of files.

[YOCTO #14902]

(From OE-Core rev: 0919f5ec214594380eb5190b4878eadb30e3a471)

Signed-off-by: Alexander Kanavin <alex@linutronix.de>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Alexander Kanavin 2022-08-31 11:19:06 +02:00 committed by Richard Purdie
parent f7423a2f9f
commit 7b22dc7091
4 changed files with 5 additions and 57 deletions

View File

@ -1,24 +0,0 @@
From 7b8d819e012c24df228a313beb86e1942611c904 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex@linutronix.de>
Date: Sat, 4 Jun 2022 13:00:12 +0200
Subject: [PATCH] Makefile: correctly list modules when cleaning them
Upstream-Status: Submitted [https://github.com/arsv/perl-cross/pull/133]
Signed-off-by: Alexander Kanavin <alex@linutronix.de>
---
Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index 6b35fb0..9ef9324 100644
--- a/Makefile
+++ b/Makefile
@@ -462,7 +462,7 @@ clean-subdirs:
# assuming modules w/o Makefiles were never built and need no cleaning
clean-modules: config.h
- @for i in $(modules disabled); do \
+ @for i in $(modules) $(disabled); do \
test -f $$i/Makefile && \
touch $$i/Makefile && \
$(MAKE) -C $$i clean \

View File

@ -1,28 +0,0 @@
From ade4a70308d3b9d79cc3db841c0f60385780fe1a Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex@linutronix.de>
Date: Sat, 4 Jun 2022 13:45:20 +0200
Subject: [PATCH] Makefile: do not clean config.h/xconfig.h
These are generated by ./configure and not by make.
Upstream-Status: Submitted [https://github.com/arsv/perl-cross/pull/134]
Signed-off-by: Alexander Kanavin <alex@linutronix.de>
---
Makefile | 1 -
1 file changed, 1 deletion(-)
diff --git a/Makefile b/Makefile
index 9ef9324..3de2c2e 100644
--- a/Makefile
+++ b/Makefile
@@ -473,7 +473,6 @@ clean-generated-files:
-rm -f uudmap.h opmini.c generate_uudmap$X bitcount.h $(CONFIGPM)
-rm -f git_version.h lib/re.pm lib/Config_git.pl
-rm -f perlmini.c perlmain.c
- -rm -f config.h xconfig.h
-rm -f pod/perlmodlib.pod
-rm -f ext.libs static.list
-rm -f $(patsubst %,%/ppport.h,$(mkppport_lst))
--
2.30.2

View File

@ -15,8 +15,6 @@ SRC_URI = "https://github.com/arsv/perl-cross/releases/download/${PV}/perl-cross
file://0001-perl-cross-add-LDFLAGS-when-linking-libperl.patch \
file://determinism.patch \
file://0001-Makefile-check-the-file-if-patched-or-not.patch \
file://0001-Makefile-correctly-list-modules-when-cleaning-them.patch \
file://0001-Makefile-do-not-clean-config.h-xconfig.h.patch \
file://0001-configure_func.sh-Add-_GNU_SOURCE-define-and-functio.patch \
"
UPSTREAM_CHECK_URI = "https://github.com/arsv/perl-cross/releases/"

View File

@ -28,7 +28,7 @@ SRC_URI:append:class-target = " \
SRC_URI[perl.sha256sum] = "e26085af8ac396f62add8a533c3a0ea8c8497d836f0689347ac5abd7b7a4e00a"
S = "${WORKDIR}/perl-${PV}"
B = "${WORKDIR}/perl-${PV}-build"
inherit upstream-version-is-even update-alternatives
@ -48,7 +48,10 @@ export ENC2XS_NO_COMMENTS = "1"
CFLAGS += "-D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
do_configure:prepend() {
cp -rfp ${STAGING_DATADIR_NATIVE}/perl-cross/* ${S}
rm -rf ${B}
cp -rfp ${S} ${B}
cp -rfp ${STAGING_DATADIR_NATIVE}/perl-cross/* ${B}
cd ${B}
}
do_configure:class-target() {
@ -116,7 +119,6 @@ print(datetime.fromtimestamp($SOURCE_DATE_EPOCH, timezone.utc).strftime('%a %b %
")"
echo "#define PERL_BUILD_DATE \"$PERL_BUILD_DATE\"" >> config.h
fi
oe_runmake clean
}
do_compile() {