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. 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. > > (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 ...) ...). 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")) Greetings, Maxime.