summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2020-04-11 00:12:09 +0200
committerLudovic Courtès <ludo@gnu.org>2020-04-11 00:32:41 +0200
commite85d4cecbe253e59a8a2a42b6ce427d96ff10534 (patch)
treeaec7d7d28b272c1d2ab7c02036139ed27383a985 /tests
parentbdb90df764661c11b37c988ea129c8e7a01b1889 (diff)
downloadguix-e85d4cecbe253e59a8a2a42b6ce427d96ff10534.tar.gz
gnu: commencement: Memoize packages as a function of the system.
Previous, things like 'ld-wrapper-boot0' would be memoized with
(mlambda () …).  However, the definition of 'ld-wrapper-boot0' depends
on the result of (%boot0-inputs), which is itself a function
of (%current-system).  Thus, if one first calls:

  (parameterize ((%current-system "x86_64-linux"))
    (ld-wrapper-boot0))

then, in all subsequent calls to 'ld-wrapper-boot0', the value
of (%current-system) would be ignored because the result is already
memoized.  Concretely, 'ld-wrapper-boot0' would always have the
dependencies it has on x86_64-linux, even though they are different than
those on armhf-linux, say ("bash-mesboot" vs. "bootstrap-binaries").

Fixes <https://bugs.gnu.org/40482>.
Reported by Marius Bakke <mbakke@fastmail.com>.

* gnu/packages/commencement.scm (define/system-dependent): New macro.
(linux-libre-headers-boot0, hurd-core-headers-boot0, ld-wrapper-boot0)
(gcc-boot0-intermediate-wrapped, gcc-boot0-wrapped, ld-wrapper-boot3):
Define using 'define/system-dependent' instead of 'define' + 'mlambda'.
Adjust users so they no longer look like procedure calls.
* tests/guix-build.sh: Add test.
Diffstat (limited to 'tests')
-rw-r--r--tests/guix-build.sh6
1 files changed, 6 insertions, 0 deletions
diff --git a/tests/guix-build.sh b/tests/guix-build.sh
index 1a997de487..6c08857358 100644
--- a/tests/guix-build.sh
+++ b/tests/guix-build.sh
@@ -65,6 +65,12 @@ test `guix build sed -s x86_64-linux -d | wc -l` = 1
 all_systems="-s x86_64-linux -s i686-linux -s armhf-linux -s aarch64-linux"
 test `guix build sed $all_systems -d | sort -u | wc -l` = 4
 
+# Check there's no weird memoization effect leading to erroneous results.
+# See <https://bugs.gnu.org/40482>.
+drv1="`guix build sed -s x86_64-linux -s armhf-linux -d | sort`"
+drv2="`guix build sed -s armhf-linux -s x86_64-linux -d | sort`"
+test "$drv1" = "$drv2"
+
 # Check --sources option with its arguments
 module_dir="t-guix-build-$$"
 mkdir "$module_dir"