[bug#54729] build: haskell-build-system: Support packages w. multiple libraries
Commit Message
Hi,
> > The following packages are broken because other packages they depend on are missing. These broken packages must be rebuilt before they can be used.
> > installed package attoparsec-0.14.4 is broken due to missing package scientific-0.3.7.0-9XG3zUjXOw970JFcruv0cZ
I can reproduce the problem on wip-haskell, which also uses
attoparsec-0.14.4 and GHC 9.2.5.
Further analysis suggests that this is a different issue, which is simply
exposed by attoparsec’s multiple libraries. I applied the attached
patch to wip-haskell, which fixes the issue for me.
Cheers,
Lars
From 272dc241677872a235e19135885599a18ef5f102 Mon Sep 17 00:00:00 2001
From: Lars-Dominik Braun <lars@6xq.net>
Date: Fri, 6 Jan 2023 12:46:26 +0100
Subject: [PATCH] build: haskell-build-system: Process all transitive
dependencies.
A bug caused install-transitive-deps to stop looping if a dependency
file already existed in the target directory. For Haskell packages
with multiple libraries (like attoparsec) this resulted in missing
dependencies and error messages like this:
The following packages are broken because other packages they depend
on are missing. These broken packages must be rebuilt before they
can be used.
installed package attoparsec-0.14.4 is broken due to missing package
scientific-0.3.7.0-9XG3zUjXOw970JFcruv0cZ
See <https://issues.guix.gnu.org/54729#11>.
* guix/build/haskell-build-system.scm (register): Unconditionally loop
over all tails.
---
guix/build/haskell-build-system.scm | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
Comments
Hi,
Lars-Dominik Braun <lars@6xq.net> writes:
> I can reproduce the problem on wip-haskell, which also uses
> attoparsec-0.14.4 and GHC 9.2.5.
thanks for checking!
> Further analysis suggests that this is a different issue, which is simply
> exposed by attoparsec’s multiple libraries. I applied the attached
> patch to wip-haskell, which fixes the issue for me.
Thanks for looking into it. I can confirm that the wip-haskell changes
combined with this patch fix the issue for me as well.
Best regards
itd
@@ -214,14 +214,16 @@ (define (install-transitive-deps conf-file src dest)
(() #t) ;done
((id . tail)
(if (not (vhash-assoc id seen))
- (let ((dep-conf (string-append src "/" id ".conf"))
- (dep-conf* (string-append dest "/" id ".conf")))
- (unless (file-exists? dep-conf*)
- (unless (file-exists? dep-conf)
+ (let* ((dep-conf (string-append src "/" id ".conf"))
+ (dep-conf* (string-append dest "/" id ".conf"))
+ (dep-conf-exists? (file-exists? dep-conf))
+ (dep-conf*-exists? (file-exists? dep-conf*))
+ (next-tail (append lst (if dep-conf-exists? (conf-depends dep-conf) '()))))
+ (unless dep-conf*-exists?
+ (unless dep-conf-exists?
(error (format #f "File ~a does not exist. This usually means the dependency ~a is missing. Was checking conf-file ~a." dep-conf id conf-file)))
- (copy-file dep-conf dep-conf*) ;XXX: maybe symlink instead?
- (loop (vhash-cons id #t seen)
- (append lst (conf-depends dep-conf)))))
+ (copy-file dep-conf dep-conf*)) ;XXX: maybe symlink instead?
+ (loop (vhash-cons id #t seen) next-tail))
(loop seen tail))))))
(define (install-config-file conf-file dest output:doc output:lib)