all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: "Ludovic Courtès" <ludo@gnu.org>
To: Maxime Devos <maximedevos@telenet.be>
Cc: 49597@debbugs.gnu.org
Subject: [bug#49597] [PATCH core-updates 00/15] Ajust packages to label-less input style
Date: Tue, 20 Jul 2021 23:14:50 +0200	[thread overview]
Message-ID: <87wnpkit6d.fsf_-_@gnu.org> (raw)
In-Reply-To: <f33a9e6421b987886f47bed218c64e4759e51f67.camel@telenet.be> (Maxime Devos's message of "Mon, 19 Jul 2021 18:47:54 +0200")

Hi,

Maxime Devos <maximedevos@telenet.be> skribis:

> Ludovic Courtès schreef op ma 19-07-2021 om 16:50 [+0200]:
>> [...]
>> 
>> > In the example you gave, both search-input-file and the original 'string-append'
>> > and 'assoc-ref' look convenient to me, though the latter more so than the other,
>> > and a third variant could be
>> > 
>> >   #$(file-append (this-package-native-input "openmpi") "/lib/libmpi.so")
>> > 
>> > which avoids 'string-append' and 'assoc-ref'.
>> 
>> Yes, but you’re still relying on the name, “openmpi”.
>> 
>> If I do:
>> 
>>   (package
>>     (inherit thing)
>>     (inputs `(("mpich" ,mpich)
>>               ,@(delete "openmpi" (package-inputs thing)))))
>> 
>> … then you have a problem: ‘this-package-input’ won’t find “openmpi”.
>> It’s a real, common use case.  That’s why we need to be careful about
>> the idioms we promote.
>> 
>> WDYT?
>
> Then you could do:
>
>   (package
>      (inherit thing)
>      (inputs `(("openmpi" ,mpich) ; use "openmpi" label
>                ,@(delete "openmpi" (package-inputs thing)))))
>
> or just use "mpi" in the original and new package as input label,
> but that doesn't mesh well with eventually removing input labels.

Yes, but the goal is to remove input labels.  :-)

> Myself, I don't mind input labels much. They look like arguments to
> a procedure to me, albeit with an unusual syntax for referring to
> them.

Well, we can deal with labels, but removing them lowers the barrier to
entry and reduces boilerplate, which most of us enjoy.

>> > (I prefer explicitely writing in the package definition in which input a file
>> > will be found, as a kind of documentation, though in this case it probably
>> > doesn't really matter.)
>> 
>> Yeah, I like that too.  OTOH, ‘search-input-file’ has the advantage that
>> it errors out if the file is not found, whereas
>> 
>>   (string-append (assoc-ref inputs "foo") "bar")
>> 
>> always “works” and problems occur possibly much later, at run time.
>
> I'd suggest using #+/#$(file-append (this-package-[native]-input "foo") "/bar"
> instead of (string-append (assoc-ref ...) ...).

That’s what I had in mind initially, but that means you’re still relying
on labels or package names¹.  Sometimes that’s OK, sometimes not.

> I think I have a method for explicitely choosing which input to use,
> using package names instead of labels, that still works nicely with
> "--with-input":
>
> (define* (lookup-libmpi-library package)
>   ;; open-coding could be avoided by adding a 'is-mpi-library?'
>   ;; package property and using that instead of hard-coding a list
>   ;; of package names 
>   (file-append (or (lookup-package-input package "openmpi")
>                    (lookup-package-input package "mpich")
>                    ...)
>                "/lib/libmpi.so"))

Yes, an ‘mpi-library?’ property could do the job, together with a
variant of ‘lookup-package-input’ that accepts a predicate rather than a
name.

Yet, that would only work for cases that packagers have explicitly
prepared.  For example, the example above won’t work with:

  --with-input=emacs=emacs-next

unless you actually to the same kind of enumeration or property.  This
approach just doesn’t scale.


But look, in the majority of cases, we don’t do (assoc-ref inputs …) at
all; we just use things that happen to be in $PATH, $PYTHONPATH, and so
on.

In a sense, this whole ‘search-input-file’ strategy follows that
approach.  ‘search-input-file’ is just a generalized version of ‘which’,
as you know.

WDYT?

Ludo’.

¹ Nix doesn’t have this particular problem: “packages” are actually
  functions, so one can refer to their inputs by value, as in:

    { stdenv, openmpi, … }: {     # <- formal parameters of the function
      configureFlags = [ "--with-mpi=${openmpi}" ];
      # …
    }

  I thought about using advanced macrology so that, say, ‘openmpi’ is
  the lexical scope of ‘arguments’ would be bound to the same ‘openmpi’
  referred to in ‘inputs’, such that you could write:

    (package
      ;; …
      (arguments
       (list #:configure-flags
             #~(list (string-append "--with-mpi=" #$openmpi))))
      (inputs (list openmpi)))

  I couldn’t think of a reliable way to do that, though.

  I also think it’s a good idea, performance-wise, to move as much as
  possible from the host side to the build side for packages.




  reply	other threads:[~2021-07-20 21:16 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-16 15:50 [bug#49597] [PATCH core-updates 00/15] Ajust packages to label-less input style Ludovic Courtès
2021-07-16 15:54 ` [bug#49597] [PATCH core-updates 01/15] gnu: commencement: Use gexps and 'local-file' to refer to patches Ludovic Courtès
2021-07-16 15:54   ` [bug#49597] [PATCH core-updates 02/15] gnu: tzdata: Remove input labels Ludovic Courtès
2021-07-16 15:54   ` [bug#49597] [PATCH core-updates 03/15] gnu: Simplify "Xvbf" invocation in pre-check phases Ludovic Courtès
2021-07-16 15:54   ` [bug#49597] [PATCH core-updates 04/15] gnu: Use 'search-input-directory' when looking for tzdata Ludovic Courtès
2021-07-16 15:54   ` [bug#49597] [PATCH core-updates 05/15] gnu: Use 'search-input-directory' for the SDL header directory Ludovic Courtès
2021-07-16 15:54   ` [bug#49597] [PATCH core-updates 06/15] gnu: Use 'search-input-directory' for the OpenEXR " Ludovic Courtès
2021-07-16 15:54   ` [bug#49597] [PATCH core-updates 07/15] gnu: Use 'search-input-file' when searching for Automake files Ludovic Courtès
2021-07-16 15:54   ` [bug#49597] [PATCH core-updates 08/15] gnu: Use 'search-input-directory' for the Eigen header directory Ludovic Courtès
2021-07-16 15:54   ` [bug#49597] [PATCH core-updates 09/15] gnu: Use 'search-input-directory' for glibc locale data Ludovic Courtès
2021-07-16 15:54   ` [bug#49597] [PATCH core-updates 10/15] gnu: Use 'search-input-directory' when looking for C/C++ library headers Ludovic Courtès
2021-07-16 15:54   ` [bug#49597] [PATCH core-updates 11/15] gnu: Use 'search-input-file' when looking for *.so and *.a Ludovic Courtès
2021-07-16 15:54   ` [bug#49597] [PATCH core-updates 12/15] gnu: Use 'search-input-file' when looking for executables Ludovic Courtès
2021-07-16 15:54   ` [bug#49597] [PATCH core-updates 13/15] gnu: mozjs: Use 'which' where appropriate Ludovic Courtès
2021-07-16 15:54   ` [bug#49597] [PATCH core-updates 14/15] gnu: Use 'search-input-file' when looking for .jar files Ludovic Courtès
2021-07-18 15:56     ` Maxime Devos
2021-07-19 14:52       ` [bug#49597] [PATCH core-updates 00/15] Ajust packages to label-less input style Ludovic Courtès
2021-07-16 15:54   ` [bug#49597] [PATCH core-updates 15/15] gnu: Use 'search-input-directory' and 'search-input-file' where appropriate Ludovic Courtès
2021-07-17 15:06 ` [bug#49597] [PATCH core-updates 00/15] Ajust packages to label-less input style Mathieu Othacehe
2021-07-18 15:44 ` Maxime Devos
2021-07-19 14:50   ` Ludovic Courtès
2021-07-19 16:47     ` Maxime Devos
2021-07-20 21:14       ` Ludovic Courtès [this message]
2021-07-24 14:29 ` bug#49597: " Ludovic Courtès
2021-07-25  9:54   ` [bug#49597] " Mathieu Othacehe
2021-07-25 15:13     ` Maxime Devos
2021-07-25 17:17       ` Mathieu Othacehe
2021-07-25 17:05     ` Ludovic Courtès
2021-07-25 17:18       ` Mathieu Othacehe

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=87wnpkit6d.fsf_-_@gnu.org \
    --to=ludo@gnu.org \
    --cc=49597@debbugs.gnu.org \
    --cc=maximedevos@telenet.be \
    /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.