* bug#26987: guix pull without guile-ssh. @ 2017-05-18 19:53 Mathieu Othacehe 2017-05-19 7:56 ` bug#26987: [PATCH 0/2] Fix compilation list construction Mathieu Othacehe 0 siblings, 1 reply; 12+ messages in thread From: Mathieu Othacehe @ 2017-05-18 19:53 UTC (permalink / raw) To: 26987 Hi, If Guile-SSH is not detected, depends-on-guile-ssh? will be called here: --8<---------------cut here---------------start------------->8--- (guix build pull) (let* ((files (remove (if (false-if-exception (resolve-interface '(ssh session))) (const #f) depends-on-guile-ssh?) (all-scheme-files out))) --8<---------------cut here---------------end--------------->8--- Thus, source-module-closure is called with a file. However, source-module-closure is expecting a module list like '((guix ...)). This result in the following error while running guix pull: --8<---------------cut here---------------start------------->8--- In ./guix/modules.scm: 118:4 0 (module-closure _ #:select? _ #:dependencies _) ./guix/modules.scm:118:4: In procedure module-closure: ./guix/modules.scm:118:4: Throw to key `match-error' with args `("match" "no matching pattern" "/gnu/store/0slxknjvjwhp31qryv42419vqwjrjifb-guix-latest/guix.scm")'. builder for `/gnu/store/lq6ga13k75ljrdnqam9jm1q92cv4g0pm-guix-latest.drv' failed with exit code 1 --8<---------------cut here---------------end--------------->8--- I'm not sure how to fix it. Thanks, Mathieu ^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#26987: [PATCH 0/2] Fix compilation list construction. 2017-05-18 19:53 bug#26987: guix pull without guile-ssh Mathieu Othacehe @ 2017-05-19 7:56 ` Mathieu Othacehe 2017-05-19 7:56 ` bug#26987: [PATCH 1/2] guix: modules: Export module-name->file-name Mathieu Othacehe 2017-05-19 7:56 ` bug#26987: [PATCH 2/2] build: pull: Fix compilation list construction Mathieu Othacehe 0 siblings, 2 replies; 12+ messages in thread From: Mathieu Othacehe @ 2017-05-19 7:56 UTC (permalink / raw) To: 26987 Hi, Here are two patches to fix compilation list construction. It seems to work but I'm higly unsure this is the right thing to do. Plus, while testing I could not add #:use-modules (guix discovery) and had to write that instead : ((@@ (guix discovery) scheme-modules) directory) Thanks, Mathieu Mathieu Othacehe (2): build: pull: Fix compilation list construction. guix: modules: Export module-name->file-name. guix/build/pull.scm | 31 ++++++++----------------------- guix/modules.scm | 1 + 2 files changed, 9 insertions(+), 23 deletions(-) -- 2.13.0 ^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#26987: [PATCH 1/2] guix: modules: Export module-name->file-name. 2017-05-19 7:56 ` bug#26987: [PATCH 0/2] Fix compilation list construction Mathieu Othacehe @ 2017-05-19 7:56 ` Mathieu Othacehe 2017-05-19 8:18 ` Ludovic Courtès 2017-05-19 7:56 ` bug#26987: [PATCH 2/2] build: pull: Fix compilation list construction Mathieu Othacehe 1 sibling, 1 reply; 12+ messages in thread From: Mathieu Othacehe @ 2017-05-19 7:56 UTC (permalink / raw) To: 26987 * guix/modules.scm (module-name->file-name): Export it. --- guix/modules.scm | 1 + 1 file changed, 1 insertion(+) diff --git a/guix/modules.scm b/guix/modules.scm index 8c63f21a9..26c38e8d2 100644 --- a/guix/modules.scm +++ b/guix/modules.scm @@ -23,6 +23,7 @@ #:use-module (ice-9 match) #:export (source-module-closure live-module-closure + module-name->file-name guix-module-name?)) ;;; Commentary: -- 2.13.0 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* bug#26987: [PATCH 1/2] guix: modules: Export module-name->file-name. 2017-05-19 7:56 ` bug#26987: [PATCH 1/2] guix: modules: Export module-name->file-name Mathieu Othacehe @ 2017-05-19 8:18 ` Ludovic Courtès 0 siblings, 0 replies; 12+ messages in thread From: Ludovic Courtès @ 2017-05-19 8:18 UTC (permalink / raw) To: Mathieu Othacehe; +Cc: 26987 Mathieu Othacehe <m.othacehe@gmail.com> skribis: > * guix/modules.scm (module-name->file-name): Export it. OK! ^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#26987: [PATCH 2/2] build: pull: Fix compilation list construction. 2017-05-19 7:56 ` bug#26987: [PATCH 0/2] Fix compilation list construction Mathieu Othacehe 2017-05-19 7:56 ` bug#26987: [PATCH 1/2] guix: modules: Export module-name->file-name Mathieu Othacehe @ 2017-05-19 7:56 ` Mathieu Othacehe 2017-05-19 12:58 ` Ludovic Courtès 1 sibling, 1 reply; 12+ messages in thread From: Mathieu Othacehe @ 2017-05-19 7:56 UTC (permalink / raw) To: 26987 * guix/build/pull.scm (depends-on-guile-ssh?): Remove. (all-scheme-files): Use "scheme-modules" to detect all loadable modules in given directory and rebuild a file list from those modules. --- guix/build/pull.scm | 31 ++++++++----------------------- 1 file changed, 8 insertions(+), 23 deletions(-) diff --git a/guix/build/pull.scm b/guix/build/pull.scm index d2e0404b1..e6ec71a54 100644 --- a/guix/build/pull.scm +++ b/guix/build/pull.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013, 2014, 2016, 2017 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com> +;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -36,26 +37,14 @@ ;;; ;;; Code: -(define (depends-on-guile-ssh? file) - "Return true if FILE is a Scheme source file that depends, directly or -indirectly, on Guile-SSH." - (find (match-lambda - (('ssh _ ...) #t) - (_ #f)) - (source-module-closure file #:select? (const #t)))) - (define (all-scheme-files directory) "Return a sorted list of Scheme files found in DIRECTORY." - ;; Load guix/ modules before gnu/ modules to get somewhat steadier - ;; progress reporting. - (sort (filter (cut string-suffix? ".scm" <>) - (find-files directory "\\.scm")) - (let ((guix (string-append directory "/guix")) - (gnu (string-append directory "/gnu"))) - (lambda (a b) - (or (and (string-prefix? guix a) - (string-prefix? gnu b)) - (string<? a b)))))) + (let ((modules (map module-name + ((@@ (guix discovery) scheme-modules) directory)))) + (map (lambda (module) + (string-append directory "/" + (module-name->file-name module))) + modules))) (cond-expand (guile-2.2 (use-modules (language tree-il optimize) @@ -145,11 +134,7 @@ containing the source code. Write any debugging output to DEBUG-PORT." ;; Compile the .scm files. Load all the files before compiling them to ;; work around <http://bugs.gnu.org/15602> (FIXME). ;; Filter out files depending on Guile-SSH when Guile-SSH is missing. - (let* ((files (remove (if (false-if-exception - (resolve-interface '(ssh session))) - (const #f) - depends-on-guile-ssh?) - (all-scheme-files out))) + (let* ((files (all-scheme-files out)) (total (length files))) (let loop ((files files) (completed 0)) -- 2.13.0 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* bug#26987: [PATCH 2/2] build: pull: Fix compilation list construction. 2017-05-19 7:56 ` bug#26987: [PATCH 2/2] build: pull: Fix compilation list construction Mathieu Othacehe @ 2017-05-19 12:58 ` Ludovic Courtès 2017-05-19 13:55 ` Mathieu Othacehe 0 siblings, 1 reply; 12+ messages in thread From: Ludovic Courtès @ 2017-05-19 12:58 UTC (permalink / raw) To: Mathieu Othacehe; +Cc: 26987 [-- Attachment #1: Type: text/plain, Size: 2993 bytes --] Mathieu Othacehe <m.othacehe@gmail.com> skribis: > * guix/build/pull.scm (depends-on-guile-ssh?): Remove. > (all-scheme-files): Use "scheme-modules" to detect all loadable > modules in given directory and rebuild a file list from those modules. > --- > guix/build/pull.scm | 31 ++++++++----------------------- > 1 file changed, 8 insertions(+), 23 deletions(-) > > diff --git a/guix/build/pull.scm b/guix/build/pull.scm > index d2e0404b1..e6ec71a54 100644 > --- a/guix/build/pull.scm > +++ b/guix/build/pull.scm > @@ -1,6 +1,7 @@ > ;;; GNU Guix --- Functional package management for GNU > ;;; Copyright © 2013, 2014, 2016, 2017 Ludovic Courtès <ludo@gnu.org> > ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com> > +;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com> > ;;; > ;;; This file is part of GNU Guix. > ;;; > @@ -36,26 +37,14 @@ > ;;; > ;;; Code: > > -(define (depends-on-guile-ssh? file) > - "Return true if FILE is a Scheme source file that depends, directly or > -indirectly, on Guile-SSH." > - (find (match-lambda > - (('ssh _ ...) #t) > - (_ #f)) > - (source-module-closure file #:select? (const #t)))) > - > (define (all-scheme-files directory) > "Return a sorted list of Scheme files found in DIRECTORY." > - ;; Load guix/ modules before gnu/ modules to get somewhat steadier > - ;; progress reporting. > - (sort (filter (cut string-suffix? ".scm" <>) > - (find-files directory "\\.scm")) > - (let ((guix (string-append directory "/guix")) > - (gnu (string-append directory "/gnu"))) > - (lambda (a b) > - (or (and (string-prefix? guix a) > - (string-prefix? gnu b)) > - (string<? a b)))))) > + (let ((modules (map module-name > + ((@@ (guix discovery) scheme-modules) directory)))) > + (map (lambda (module) > + (string-append directory "/" > + (module-name->file-name module))) > + modules))) > > (cond-expand > (guile-2.2 (use-modules (language tree-il optimize) > @@ -145,11 +134,7 @@ containing the source code. Write any debugging output to DEBUG-PORT." > ;; Compile the .scm files. Load all the files before compiling them to > ;; work around <http://bugs.gnu.org/15602> (FIXME). > ;; Filter out files depending on Guile-SSH when Guile-SSH is missing. > - (let* ((files (remove (if (false-if-exception > - (resolve-interface '(ssh session))) > - (const #f) > - depends-on-guile-ssh?) > - (all-scheme-files out))) > + (let* ((files (all-scheme-files out)) > (total (length files))) I think this patch does to thing: (1) fixing the bug at hand, and (2) using (guix discovery). For (1), I think this should work: [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: Type: text/x-patch, Size: 812 bytes --] diff --git a/guix/build/pull.scm b/guix/build/pull.scm index d2e0404b1..84629f6b0 100644 --- a/guix/build/pull.scm +++ b/guix/build/pull.scm @@ -39,10 +39,15 @@ (define (depends-on-guile-ssh? file) "Return true if FILE is a Scheme source file that depends, directly or indirectly, on Guile-SSH." + (let ((module (call-with-input-file file + (lambda (port) + (match (read port) + (('define-module name _ ...) + name)))))) (find (match-lambda (('ssh _ ...) #t) (_ #f)) - (source-module-closure file #:select? (const #t)))) + (source-module-closure module #:select? (const #t))))) (define (all-scheme-files directory) "Return a sorted list of Scheme files found in DIRECTORY." [-- Attachment #3: Type: text/plain, Size: 21 bytes --] WDYT? Ludo’. ^ permalink raw reply related [flat|nested] 12+ messages in thread
* bug#26987: [PATCH 2/2] build: pull: Fix compilation list construction. 2017-05-19 12:58 ` Ludovic Courtès @ 2017-05-19 13:55 ` Mathieu Othacehe 2017-05-19 14:26 ` Mathieu Othacehe 0 siblings, 1 reply; 12+ messages in thread From: Mathieu Othacehe @ 2017-05-19 13:55 UTC (permalink / raw) To: Ludovic Courtès; +Cc: 26987 Hi Ludo, It seems better but I can't get it to work neither : > (find (match-lambda > (('ssh _ ...) #t) > (_ #f)) > - (source-module-closure file #:select? (const #t)))) > + (source-module-closure module #:select? (const #t))))) ^ we need a list here. > > (define (all-scheme-files directory) > "Return a sorted list of Scheme files found in DIRECTORY." > > WDYT? So with --8<---------------cut here---------------start------------->8--- (define (depends-on-guile-ssh? file) "Return true if FILE is a Scheme source file that depends, directly or indirectly, on Guile-SSH." (let ((module (call-with-input-file file (lambda (port) (match (read port) (('define-module name _ ...) name)))))) (find (match-lambda (('ssh _ ...) #t) (_ #f)) (source-module-closure (list module) #:select? (const #t))))) --8<---------------cut here---------------end--------------->8--- I get, --8<---------------cut here---------------start------------->8--- ((@@ (guix build pull) depends-on-guile-ssh?) "/home/mathieu/guix/guix/ssh.scm") ERROR: In procedure open-file: ERROR: Wrong type (expecting string): #f --8<---------------cut here---------------end--------------->8--- I'm having a hard time tring to understand ,trace output. Mathieu ^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#26987: [PATCH 2/2] build: pull: Fix compilation list construction. 2017-05-19 13:55 ` Mathieu Othacehe @ 2017-05-19 14:26 ` Mathieu Othacehe 2017-05-19 15:41 ` Ludovic Courtès 2017-05-25 12:33 ` Ludovic Courtès 0 siblings, 2 replies; 12+ messages in thread From: Mathieu Othacehe @ 2017-05-19 14:26 UTC (permalink / raw) To: Ludovic Courtès; +Cc: 26987 > I'm having a hard time tring to understand ,trace output. I get why, it's because guile-ssh is not in my %load-path. So loading "ssh/session.scm" fails in "source-module-dependencies". It's a bit of a vicious circle here : if resolve-interface '(ssh session) fails, depends-on-guile-ssh? will fail too. I'm note sure we can depend on source-module-closure to do the job here. Mathieu ^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#26987: [PATCH 2/2] build: pull: Fix compilation list construction. 2017-05-19 14:26 ` Mathieu Othacehe @ 2017-05-19 15:41 ` Ludovic Courtès 2017-05-25 12:33 ` Ludovic Courtès 1 sibling, 0 replies; 12+ messages in thread From: Ludovic Courtès @ 2017-05-19 15:41 UTC (permalink / raw) To: Mathieu Othacehe; +Cc: 26987 Mathieu Othacehe <m.othacehe@gmail.com> skribis: >> I'm having a hard time tring to understand ,trace output. > > I get why, it's because guile-ssh is not in my %load-path. So loading > "ssh/session.scm" fails in "source-module-dependencies". > > It's a bit of a vicious circle here : if resolve-interface '(ssh > session) fails, depends-on-guile-ssh? will fail too. > > I'm note sure we can depend on source-module-closure to do the job here. Oh, got it. Hmm, needs more thought. Ludo’. ^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#26987: [PATCH 2/2] build: pull: Fix compilation list construction. 2017-05-19 14:26 ` Mathieu Othacehe 2017-05-19 15:41 ` Ludovic Courtès @ 2017-05-25 12:33 ` Ludovic Courtès 2017-06-02 9:16 ` Mathieu Othacehe 1 sibling, 1 reply; 12+ messages in thread From: Ludovic Courtès @ 2017-05-25 12:33 UTC (permalink / raw) To: Mathieu Othacehe; +Cc: 26987-done Mathieu Othacehe <m.othacehe@gmail.com> skribis: >> I'm having a hard time tring to understand ,trace output. > > I get why, it's because guile-ssh is not in my %load-path. So loading > "ssh/session.scm" fails in "source-module-dependencies". > > It's a bit of a vicious circle here : if resolve-interface '(ssh > session) fails, depends-on-guile-ssh? will fail too. > > I'm note sure we can depend on source-module-closure to do the job here. I believe this is fixed by commit 20ed093977cc80ba1729c38e05ae7955a38069a6, which follows a modification to the ‘source-module-closure’ so that callers can catch missing-dependency errors. Please let me know what you think! After that, you should be able to reinstate the (guix git) commit, provided build-aux/build-self.scm does: (define guile-git (package-for-current-guile "guile-git" "guile2.2-git" "guile2.0-git")) and passes that down to ‘build-guix’. Thanks, Ludo’. ^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#26987: [PATCH 2/2] build: pull: Fix compilation list construction. 2017-05-25 12:33 ` Ludovic Courtès @ 2017-06-02 9:16 ` Mathieu Othacehe 2017-06-02 15:09 ` Ludovic Courtès 0 siblings, 1 reply; 12+ messages in thread From: Mathieu Othacehe @ 2017-06-02 9:16 UTC (permalink / raw) To: Ludovic Courtès, Amirouche; +Cc: 26987-done Hi Ludo, > I believe this is fixed by commit > 20ed093977cc80ba1729c38e05ae7955a38069a6, which follows a modification > to the ‘source-module-closure’ so that callers can catch > missing-dependency errors. > > Please let me know what you think! It seems ok, thanks for fixing it ! > > After that, you should be able to reinstate the (guix git) commit, > provided build-aux/build-self.scm does: > > (define guile-git > (package-for-current-guile "guile-git" > "guile2.2-git" > "guile2.0-git")) ^ for guile2.0-git, we need to define guile2.0-bytestructures, so I tried to package it, and I get the following error : --8<---------------cut here---------------start------------->8--- ice-9/boot-9.scm:109:20: In procedure #<procedure 9dbe40 at ice-9/boot-9.scm:100:6 (thrown-k . ice-9/boot-9.scm:109:20: re-exporting local variable: cstring-pointer --8<---------------cut here---------------end--------------->8--- It is something introduced in bytestructures commit 91d042e, that works on 2.2 but not on 2.0, I have no idea why ! Amirouche any idea ? Thanks, Mathieu ^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#26987: [PATCH 2/2] build: pull: Fix compilation list construction. 2017-06-02 9:16 ` Mathieu Othacehe @ 2017-06-02 15:09 ` Ludovic Courtès 0 siblings, 0 replies; 12+ messages in thread From: Ludovic Courtès @ 2017-06-02 15:09 UTC (permalink / raw) To: Mathieu Othacehe; +Cc: 26987-done, Amirouche Hi Mathieu, Mathieu Othacehe <m.othacehe@gmail.com> skribis: >> I believe this is fixed by commit >> 20ed093977cc80ba1729c38e05ae7955a38069a6, which follows a modification >> to the ‘source-module-closure’ so that callers can catch >> missing-dependency errors. >> >> Please let me know what you think! > > It seems ok, thanks for fixing it ! > >> >> After that, you should be able to reinstate the (guix git) commit, >> provided build-aux/build-self.scm does: >> >> (define guile-git >> (package-for-current-guile "guile-git" >> "guile2.2-git" >> "guile2.0-git")) > ^ > for guile2.0-git, > we need to define guile2.0-bytestructures, so I tried to package it, > and I get the following error : > > ice-9/boot-9.scm:109:20: In procedure #<procedure 9dbe40 at ice-9/boot-9.scm:100:6 (thrown-k . > ice-9/boot-9.scm:109:20: re-exporting local variable: cstring-pointer > > It is something introduced in bytestructures commit 91d042e, that works > on 2.2 but not on 2.0, I have no idea why ! It would be nice to have guile2.0-git, but note that it does not *have* to exist: ‘package-for-current-guile’ returns #f if none of the packages exists, and (guix build pull) skips modules that lack their dependencies. So I would first suggest to re-add (guix git), and later see with Amirouche et al. what could be done to get Guile-Git on 2.0. Does that make sense? Thanks, Ludo’. ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2017-06-02 15:10 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-05-18 19:53 bug#26987: guix pull without guile-ssh Mathieu Othacehe 2017-05-19 7:56 ` bug#26987: [PATCH 0/2] Fix compilation list construction Mathieu Othacehe 2017-05-19 7:56 ` bug#26987: [PATCH 1/2] guix: modules: Export module-name->file-name Mathieu Othacehe 2017-05-19 8:18 ` Ludovic Courtès 2017-05-19 7:56 ` bug#26987: [PATCH 2/2] build: pull: Fix compilation list construction Mathieu Othacehe 2017-05-19 12:58 ` Ludovic Courtès 2017-05-19 13:55 ` Mathieu Othacehe 2017-05-19 14:26 ` Mathieu Othacehe 2017-05-19 15:41 ` Ludovic Courtès 2017-05-25 12:33 ` Ludovic Courtès 2017-06-02 9:16 ` Mathieu Othacehe 2017-06-02 15:09 ` Ludovic Courtès
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/guix.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).