all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* [bug#57717] [DRAFT PATCH core-updates] build-systems: Pass #:allowed-references and #:disallowed-references to builders.
@ 2022-09-10 15:26 Marius Bakke
  2022-09-10 16:27 ` Maxime Devos
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Marius Bakke @ 2022-09-10 15:26 UTC (permalink / raw)
  To: 57717; +Cc: Ludovic Courtès

* guix/build-system/gnu.scm (gnu-build, gnu-cross-build)[builder]: Pass
along #:allowed-references and #:disallowed-references.
* guix/build-system/meson.scm (meson-build, meson-cross-build)[builder]: Likewise.
---
Hello Guix,

This is an untested patch that makes #:allowed-references
and #:disallowed-references available to build-side code.

The intention is to make it easier to use these properties directly when
e.g. wrapping.  Consider the following:

--8<---------------cut here---------------start------------->8---
(arguments
 (list
  #:disallowed-references (list (gexp-input glib "bin")
                                (gexp-input inkscape/stable))
  #:phases
  #~(modify-phases %standard-phases
     (replace 'glib-or-gtk-wrap
       (let ((wrap (assoc-ref %standard-phases 'glib-or-gtk-wrap)))
         (lambda* (#:key inputs outputs disallowed-references
                   #:allow-other-keys)
                 (wrap #:inputs (filter (match-lambda
                                          ((label . output)
                                           (not (member output
                                                        disallowed-references))))
                                        inputs)
                       #:outputs outputs)))))))
--8<---------------cut here---------------end--------------->8---

This way we don't have to build the list of disallowed references twice,
which is difficult without labels in the case of e.g. `(,glib "bin").

Note: I implemented a variant of this approach using a let-binding in
f0114656876dcf2e09874e4ea0c00cacf31f1bb2, perhaps that is "good enough"
as this approach is unlikely to be much used.

WDYT?  I'll implement this for the remaining build systems if this is at
all sane.
---


diff --git a/guix/build-system/gnu.scm b/guix/build-system/gnu.scm
index 8eea1cd4c2..f85a172153 100644
--- a/guix/build-system/gnu.scm
+++ b/guix/build-system/gnu.scm
@@ -393,6 +393,8 @@ (define builder
                            #:build #$build
                            #:outputs %outputs
                            #:inputs %build-inputs
+                           #:allowed-references #$allowed-references
+                           #:disallowed-references #$disallowed-references
                            #:search-paths '#$(sexp->gexp
                                               (map search-path-specification->sexp
                                                    search-paths))
@@ -531,6 +533,8 @@ (define %outputs
                    #:target #$target
                    #:outputs %outputs
                    #:inputs %build-target-inputs
+                   #:allowed-references #$allowed-references
+                   #:disallowed-references #$disallowed-references
                    #:native-inputs %build-host-inputs
                    #:search-paths '#$(sexp->gexp
                                       (map search-path-specification->sexp
diff --git a/guix/build-system/meson.scm b/guix/build-system/meson.scm
index 9fee6c4570..1bef07230f 100644
--- a/guix/build-system/meson.scm
+++ b/guix/build-system/meson.scm
@@ -210,6 +210,8 @@ (define build-phases
           #$(with-build-variables inputs outputs
               #~(meson-build #:source #+source
                              #:system #$system
+                             #:allowed-references #$allowed-references
+                             #:disallowed-references #$disallowed-references
                              #:outputs %outputs
                              #:inputs %build-inputs
                              #:search-paths '#$(sexp->gexp
@@ -318,6 +320,8 @@ (define build-phases
                        #:system #$system
                        #:build #$(nix-system->gnu-triplet system)
                        #:target #$target
+                       #:allowed-references #$allowed-references
+                       #:disallowed-references #$disallowed-references
                        #:outputs #$(outputs->gexp outputs)
                        #:inputs #$inputs
                        #:native-inputs #+(input-tuples->gexp build-inputs)
-- 
2.37.3





^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [bug#57717] [DRAFT PATCH core-updates] build-systems: Pass #:allowed-references and #:disallowed-references to builders.
  2022-09-10 15:26 [bug#57717] [DRAFT PATCH core-updates] build-systems: Pass #:allowed-references and #:disallowed-references to builders Marius Bakke
@ 2022-09-10 16:27 ` Maxime Devos
  2022-09-10 16:32 ` Maxime Devos
  2022-09-11 14:12 ` Ludovic Courtès
  2 siblings, 0 replies; 5+ messages in thread
From: Maxime Devos @ 2022-09-10 16:27 UTC (permalink / raw)
  To: Marius Bakke, 57717; +Cc: Ludovic Courtès


[-- Attachment #1.1.1: Type: text/plain, Size: 1363 bytes --]



On 10-09-2022 17:26, Marius Bakke wrote:
> This way we don't have to build the list of disallowed references twice,
> which is difficult without labels in the case of e.g. `(,glib "bin").
> 
> Note: I implemented a variant of this approach using a let-binding in
> f0114656876dcf2e09874e4ea0c00cacf31f1bb2, perhaps that is "good enough"
> as this approach is unlikely to be much used.
> 
> WDYT?  I'll implement this for the remaining build systems if this is at
> all sane.

A caveat with using #:disallowed-references this way -- AFAIK, it is 
undocumented whether #:disallowed-references goes for a native build or 
a cross-build.  The intention is to stop the (natively-)compiled 
python-some-testing-library from appearing in the wrappers, stopping a 
cross-compiled python-some-testing-library.

Depending on what, exactly, the behaviour of #:disallowed-references is, 
it may be necessary to ‘override’ whether to disallow the native- or the 
cross-version.

To do so, I used 'gexp-input' with #:native? #true in (gnu packages 
glib) (maybe that was unnecessary, but I was thinking better be explicit 
than implicit here ...).

An alternative solution could be to split #:disallowed-reference in two, 
e.g. #:disallowed-references/system and #:disallowed-references/target, 
to prevent accidents.

Greetings,
Maxime.

[-- Attachment #1.1.2: OpenPGP public key --]
[-- Type: application/pgp-keys, Size: 929 bytes --]

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 236 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [bug#57717] [DRAFT PATCH core-updates] build-systems: Pass #:allowed-references and #:disallowed-references to builders.
  2022-09-10 15:26 [bug#57717] [DRAFT PATCH core-updates] build-systems: Pass #:allowed-references and #:disallowed-references to builders Marius Bakke
  2022-09-10 16:27 ` Maxime Devos
@ 2022-09-10 16:32 ` Maxime Devos
  2022-09-10 16:34   ` Maxime Devos
  2022-09-11 14:12 ` Ludovic Courtès
  2 siblings, 1 reply; 5+ messages in thread
From: Maxime Devos @ 2022-09-10 16:32 UTC (permalink / raw)
  To: Marius Bakke, 57717; +Cc: Ludovic Courtès


[-- Attachment #1.1.1: Type: text/plain, Size: 497 bytes --]



On 10-09-2022 17:26, Marius Bakke wrote:
> +                           #:allowed-references #$allowed-references
> +                           #:disallowed-references #$disallowed-references

Unless I'm mistaken (I haven't tested this), this will become 
#:allowed-references ("/gnu/store/..." ...) -- it tries to use a string 
as a procedure.  Proposal:

#:allowed-references (list #$allowed-references)
#:disallowed-references (list #$disallowed-references)

Greetings,
Maxime.

[-- Attachment #1.1.2: OpenPGP public key --]
[-- Type: application/pgp-keys, Size: 929 bytes --]

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 236 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [bug#57717] [DRAFT PATCH core-updates] build-systems: Pass #:allowed-references and #:disallowed-references to builders.
  2022-09-10 16:32 ` Maxime Devos
@ 2022-09-10 16:34   ` Maxime Devos
  0 siblings, 0 replies; 5+ messages in thread
From: Maxime Devos @ 2022-09-10 16:34 UTC (permalink / raw)
  To: Marius Bakke, 57717; +Cc: Ludovic Courtès


[-- Attachment #1.1.1: Type: text/plain, Size: 839 bytes --]



On 10-09-2022 18:32, Maxime Devos wrote:
> 
> 
> On 10-09-2022 17:26, Marius Bakke wrote:
>> +                           #:allowed-references #$allowed-references
>> +                           #:disallowed-references 
>> #$disallowed-references
> 
> Unless I'm mistaken (I haven't tested this), this will become 
> #:allowed-references ("/gnu/store/..." ...) -- it tries to use a string 
> as a procedure.  Proposal:
> 
> #:allowed-references (list #$allowed-references)
> #:disallowed-references (list #$disallowed-references)

Correction:

#:allowed-references
#$(and=> allowed-references (lambda (x) #~(list #$@x)))
#:disallowed-references
(list #$@disallowed-references)

(splicing, and allowed-reference is by default #false)

> Greetings,
> Maxime.

[-- Attachment #1.1.2: OpenPGP public key --]
[-- Type: application/pgp-keys, Size: 929 bytes --]

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 236 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [bug#57717] [DRAFT PATCH core-updates] build-systems: Pass #:allowed-references and #:disallowed-references to builders.
  2022-09-10 15:26 [bug#57717] [DRAFT PATCH core-updates] build-systems: Pass #:allowed-references and #:disallowed-references to builders Marius Bakke
  2022-09-10 16:27 ` Maxime Devos
  2022-09-10 16:32 ` Maxime Devos
@ 2022-09-11 14:12 ` Ludovic Courtès
  2 siblings, 0 replies; 5+ messages in thread
From: Ludovic Courtès @ 2022-09-11 14:12 UTC (permalink / raw)
  To: Marius Bakke; +Cc: 57717

Hi,

Marius Bakke <marius@gnu.org> skribis:

> * guix/build-system/gnu.scm (gnu-build, gnu-cross-build)[builder]: Pass
> along #:allowed-references and #:disallowed-references.
> * guix/build-system/meson.scm (meson-build, meson-cross-build)[builder]: Likewise.
> ---
> Hello Guix,
>
> This is an untested patch that makes #:allowed-references
> and #:disallowed-references available to build-side code.
>
> The intention is to make it easier to use these properties directly when
> e.g. wrapping.  Consider the following:
>
> (arguments
>  (list
>   #:disallowed-references (list (gexp-input glib "bin")
>                                 (gexp-input inkscape/stable))
>   #:phases
>   #~(modify-phases %standard-phases
>      (replace 'glib-or-gtk-wrap
>        (let ((wrap (assoc-ref %standard-phases 'glib-or-gtk-wrap)))
>          (lambda* (#:key inputs outputs disallowed-references
>                    #:allow-other-keys)
>                  (wrap #:inputs (filter (match-lambda
>                                           ((label . output)
>                                            (not (member output
>                                                         disallowed-references))))
>                                         inputs)
>                        #:outputs outputs)))))))
>
>
> This way we don't have to build the list of disallowed references twice,
> which is difficult without labels in the case of e.g. `(,glib "bin").

Why not.

The only possible drawback I can think of is that it could hide errors:
since things listed in #:disallowed-references are automatically removed
from wrappers, you could end up successfully building a wrapper that
lacks items without noticing.  But yeah, maybe that’s a questionable
scenario.

> +                           #:allowed-references #$allowed-references
> +                           #:disallowed-references #$disallowed-references

Maxime raised a good point on this one, but I think you can write:

  #:disallowed-references '#$disallowed-references

This will work whether ‘disallowed-references’ is #f or a list.

Thanks!

Ludo’.




^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-09-11 14:13 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-09-10 15:26 [bug#57717] [DRAFT PATCH core-updates] build-systems: Pass #:allowed-references and #:disallowed-references to builders Marius Bakke
2022-09-10 16:27 ` Maxime Devos
2022-09-10 16:32 ` Maxime Devos
2022-09-10 16:34   ` Maxime Devos
2022-09-11 14:12 ` Ludovic Courtès

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.