guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: cross-compiling in core-updates


From: Sergei Trofimovich
Subject: Re: cross-compiling in core-updates
Date: Tue, 2 May 2017 20:03:15 +0100

On Tue, 02 May 2017 09:14:21 +0200
Andy Wingo <address@hidden> wrote:

> On Fri 28 Apr 2017 21:04, Manolis Ragkousis <address@hidden> writes:
> 
> > The reason for the cascading errors is bash-minimal.
> >
> > Trying to build `./pre-inst-env guix build bash-minimal'
> > on core-updates ends up with :
> >
> > The following derivation will be built:
> >    /gnu/store/1r0fpfcik796g2b5v9ns163sgan1rkmz-bash-minimal-4.4.12.drv
> > @ build-started
> > /gnu/store/1r0fpfcik796g2b5v9ns163sgan1rkmz-bash-minimal-4.4.12.drv -
> > x86_64-linux
> > /usr/local/var/log/guix/drvs/1r//0fpfcik796g2b5v9ns163sgan1rkmz-bash-minimal-4.4.12.drv.bz2
> > ice-9/psyntax.scm:1534:32: In procedure expand-macro:
> > ice-9/psyntax.scm:1534:32: Syntax error:
> > /gnu/store/k84sww1zzh33a5hw8bcmsa5yp7w628a8-bash-minimal-4.4.12-guile-builder:1:2285:
> > source expression failed to match any pattern in form (%modify-phases
> > phases* (delete (quote move-development-files)))
> > builder for
> > `/gnu/store/1r0fpfcik796g2b5v9ns163sgan1rkmz-bash-minimal-4.4.12.drv'
> > failed with exit code 1
> > @ build-failed
> > /gnu/store/1r0fpfcik796g2b5v9ns163sgan1rkmz-bash-minimal-4.4.12.drv - 1
> > builder for
> > `/gnu/store/1r0fpfcik796g2b5v9ns163sgan1rkmz-bash-minimal-4.4.12.drv'
> > failed with exit code 1
> > guix build: error: build failed: build of
> > `/gnu/store/1r0fpfcik796g2b5v9ns163sgan1rkmz-bash-minimal-4.4.12.drv' failed
> >
> > It's the same issue Sergei reported and commit 78dea6f1d4a did not fix it.  
> 
> Hi!
> 
> I suspect I know what this is.  First, the package in question:
> 
>   (define-public bash-minimal
>     ;; A stripped-down Bash for non-interactive use.
>     (package (inherit bash)
>       (name "bash-minimal")
>       (inputs '())                                ; no readline, no curses
> 
>       ;; No "include" output because there's no support for loadable modules.
>       (outputs (delete "include" (package-outputs bash)))
> 
>       (arguments
>        (let ((args `(#:modules ((guix build gnu-build-system)
>                                 (guix build utils)
>                                 (srfi srfi-1)
>                                 (srfi srfi-26))
>                      ,@(package-arguments bash))))
>          (substitute-keyword-arguments args
>            ((#:configure-flags flags)
>             `(list "--without-bash-malloc"
>                    "--disable-readline"
>                    "--disable-history"
>                    "--disable-help-builtin"
>                    "--disable-progcomp"
>                    "--disable-net-redirections"
>                    "--disable-nls"
> 
>                    ;; Pretend 'dlopen' is missing so we don't build loadable
>                    ;; modules and related code.
>                    "ac_cv_func_dlopen=no"
> 
>                    ,@(if (%current-target-system)
>                          '("bash_cv_job_control_missing=no"
>                            "bash_cv_getcwd_malloc=yes")
>                          '())))
>            ((#:phases phases)
>             `(modify-phases ,phases
>                ;; No loadable modules.
>                (delete 'move-development-files))))))))
> 
> So you are aware of the change in Guile regarding "keyword" matching in
> macros.  In this case the "delete" in the modify-phases macro is a
> keyword.  Whereas before in Guile, they were only matched by name, now
> they are matched by binding.  If the keyword was bound where the macro
> was defined, then it will only be matched to identifiers bound to the
> same variable when the macro is used.  Otherwise if the keyword was
> unbound when the macro was defined, then it will match by name, but only
> if the name is also unbound at the macro use.
> 
> In (guix build utils), `delete' is bound to "delete" from (srfi srfi-1).
> In the bash package definition, I am not sure what the scope is because
> it's staged.  However let's assume that the #:modules bit intends to
> make it so that srfi-1 is present also in the bash-minimal module.  That
> should work, right?  Except I think because the bash package *also*
> defines a #:modules argument, that will result in:
> 
>   #:modules the-bash-minimal-modules ... #:modules the-bash-modules
> 
> and the last keyword wins.  So, perhaps try putting the
> ,@(package-arguments bash) first in this list?
> 
>                     (#:modules ((guix build gnu-build-system)
>                                 (guix build utils)
>                                 (srfi srfi-1)
>                                 (srfi srfi-26))
>                      ,@(package-arguments bash))

Yay! The following patch makes bash-minimal compile fine!

diff --git a/gnu/packages/bash.scm b/gnu/packages/bash.scm
index ef22728a9..38aa1786e 100644
--- a/gnu/packages/bash.scm
+++ b/gnu/packages/bash.scm
@@ -213,7 +213,7 @@ without modification.")
     (arguments
-     (let ((args `(#:modules ((guix build gnu-build-system)
+     (let ((args `(,@(package-arguments bash)
+                   #:modules ((guix build gnu-build-system)
                               (guix build utils)
                               (srfi srfi-1)
-                              (srfi srfi-26))
-                   ,@(package-arguments bash))))
+                              (srfi srfi-26)))))
        (substitute-keyword-arguments args

I'm afraid I understood almost nothing about your comments of 
visibility. The only thing I've got is that keyword argument order
matters :)

Would the similar ordering change have the no-op effect in master
branch or does it mean core-updates should do this reordering while
master should not?

Thank you!

-- 

  Sergei

Attachment: pgpe873cEe1tK.pgp
Description: Цифровая подпись OpenPGP


reply via email to

[Prev in Thread] Current Thread [Next in Thread]