Subject: [bug#36477] [PATCH 25/31] gnu: libarchive: Fix cross-compilation.

From: Marius Bakke <[email-masked]>
Date: Mon, 08 Jul 2019 20:25:22 +0200

Mathieu Othacehe <[email-masked]> writes:

> * gnu/packages/backup.scm (libarchive)[arguments]: Do not build and run tests
> when cross-compiling.

[...]

> @@ -226,17 +227,25 @@ backups (called chunks) to allow easy burning to CD/DVD.")
>                 (("/bin/pwd") (which "pwd")))
>               #t))
>           (replace 'check
> -           (lambda _
> -             ;; XXX: The test_owner_parse, test_read_disk, and
> -             ;; test_write_disk_lookup tests expect user 'root' to exist, but
> -             ;; the chroot's /etc/passwd doesn't have it.  Turn off those tests.
> -             ;;
> -             ;; The tests allow one to disable tests matching a globbing pattern.
> -             (invoke "make" "libarchive_test" "bsdcpio_test" "bsdtar_test")
> -             ;; XXX: This glob disables too much.
> -             (invoke "./libarchive_test" "^test_*_disk*")
> -             (invoke "./bsdcpio_test" "^test_owner_parse")
> -             (invoke "./bsdtar_test")))
> +           ,@(if (%current-target-system)
> +                 '((lambda _
> +                     #t))

When I think about it, gnu-build-system already sets #:tests? #f when
cross-compiling.  So this and similar changes can be rewritten to simply
check the tests? variable:

(replace 'check
  (lambda* (#:key (tests? #t) #:allow-other-keys)
    (if tests?
       ...
       (format #t "test suite not run~%"))))

(obviously, you should check that this works instead of taking my word
for it.  But it looks cleaner this way.  LGTM anyway.)