From: Julien Lepiller <julien@lepiller.eu>
To: 22138@debbugs.gnu.org
Subject: bug#22138: Search paths of dependencies are not honored
Date: Thu, 1 Aug 2019 22:12:06 +0200 [thread overview]
Message-ID: <20190801221206.17965136@sybil.lepiller.eu> (raw)
In-Reply-To: <87bn9yk5mf.fsf@gnu.org>
[-- Attachment #1: Type: text/plain, Size: 103 bytes --]
Hi, I've been looking at our current code and would like to propose the
attached patch for that issue.
[-- Attachment #2: 0001-guix-Recursively-honor-search-paths-of-dependencies.patch --]
[-- Type: text/x-patch, Size: 4878 bytes --]
From cfd2c229087166ab4cc0a9e2bdb72c8b393bcdd5 Mon Sep 17 00:00:00 2001
From: Julien Lepiller <julien@lepiller.eu>
Date: Thu, 1 Aug 2019 22:09:38 +0200
Subject: [PATCH] guix: Recursively honor search paths of dependencies.
* guix/packages.scm (all-transitive-inputs)
(package-all-transitive-inputs)
(package-all-transitive-native-search-paths): New procedures.
* guix/profiles.scm (package->manifest-entry): Use
package-all-transitive-native-search-paths to generate manifest search
paths.
---
guix/packages.scm | 53 +++++++++++++++++++++++++++++++++++++++++++++++
guix/profiles.scm | 2 +-
2 files changed, 54 insertions(+), 1 deletion(-)
diff --git a/guix/packages.scm b/guix/packages.scm
index c94a651f27..f9095759f1 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -101,6 +101,7 @@
package-transitive-propagated-inputs
package-transitive-native-search-paths
package-transitive-supported-systems
+ package-all-transitive-native-search-paths
package-mapping
package-input-rewriting
package-input-rewriting/spec
@@ -686,6 +687,42 @@ preserved, and only duplicate propagated inputs are removed."
((input rest ...)
(loop rest (cons input result) propagated first? seen)))))
+(define (all-transitive-inputs inputs)
+ "Return the closure of INPUTS when considering the 'propagated-inputs',
+'inputs' and 'native-inputs' edges. Omit duplicate inputs, except for
+those already present in INPUTS itself.
+
+This is implemented as a breadth-first traversal such that INPUTS is
+preserved, and only duplicate propagated inputs are removed."
+ (define (seen? seen item outputs)
+ ;; FIXME: We're using pointer identity here, which is extremely sensitive
+ ;; to memoization in package-producing procedures; see
+ ;; <https://bugs.gnu.org/30155>.
+ (match (vhash-assq item seen)
+ ((_ . o) (equal? o outputs))
+ (_ #f)))
+
+ (let loop ((inputs inputs)
+ (result '())
+ (transitive '())
+ (first? #t)
+ (seen vlist-null))
+ (match inputs
+ (()
+ (if (null? transitive)
+ (reverse result)
+ (loop (reverse (concatenate transitive)) result '() #f seen)))
+ (((and input (label (? package? package) outputs ...)) rest ...)
+ (if (and (not first?) (seen? seen package outputs))
+ (loop rest result transitive first? seen)
+ (loop rest
+ (cons input result)
+ (cons (package-direct-inputs package) transitive)
+ first?
+ (vhash-consq package outputs seen))))
+ ((input rest ...)
+ (loop rest (cons input result) transitive first? seen)))))
+
(define (package-direct-sources package)
"Return all source origins associated with PACKAGE; including origins in
PACKAGE's inputs."
@@ -720,6 +757,11 @@ with their propagated inputs."
with their propagated inputs, recursively."
(transitive-inputs (package-direct-inputs package)))
+(define (package-all-transitive-inputs package)
+ "Return the transitive inputs of PACKAGE---i.e., its direct inputs along
+with their propagated inputs, recursively."
+ (all-transitive-inputs (package-direct-inputs package)))
+
(define (package-transitive-target-inputs package)
"Return the transitive target inputs of PACKAGE---i.e., its direct inputs
along with their propagated inputs, recursively. This only includes inputs
@@ -749,6 +791,17 @@ recursively."
'()))
(package-transitive-propagated-inputs package))))
+(define (package-all-transitive-native-search-paths package)
+ "Return the list of search paths for PACKAGE and its propagated inputs,
+recursively."
+ (append (package-native-search-paths package)
+ (append-map (match-lambda
+ ((label (? package? p) _ ...)
+ (package-native-search-paths p))
+ (_
+ '()))
+ (package-all-transitive-inputs package))))
+
(define (transitive-input-references alist inputs)
"Return a list of (assoc-ref ALIST <label>) for each (<label> <package> . _)
in INPUTS and their transitive propagated inputs."
diff --git a/guix/profiles.scm b/guix/profiles.scm
index f5c863945c..dd6a31562f 100644
--- a/guix/profiles.scm
+++ b/guix/profiles.scm
@@ -318,7 +318,7 @@ file name."
(item package)
(dependencies (delete-duplicates deps))
(search-paths
- (package-transitive-native-search-paths package))
+ (package-all-transitive-native-search-paths package))
(parent parent)
(properties properties))))
entry))
--
2.22.0
next prev parent reply other threads:[~2019-08-01 20:13 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-10 9:36 bug#22138: Search paths of dependencies are not honored Ludovic Courtès
2019-08-01 20:12 ` Julien Lepiller [this message]
2019-08-05 16:23 ` Mark H Weaver
2019-08-05 16:31 ` Julien Lepiller
2019-08-23 14:42 ` Ludovic Courtès
2019-08-24 13:52 ` Ludovic Courtès
2019-11-26 12:00 ` Julien Lepiller
2022-01-14 19:48 ` bug#22138: Should search paths of dependencies be honored automatically? Maxime Devos
2022-01-22 21:27 ` bug#22138: Search paths of dependencies are not honored Maxime Devos
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190801221206.17965136@sybil.lepiller.eu \
--to=julien@lepiller.eu \
--cc=22138@debbugs.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.