> > +(define-module (guix build-system mix)
> > + #:use-module (gnu packages base)
> > + #:use-module (gnu packages elixir)
> > + #:use-module (gnu packages elixir-xyz)
> > + #:use-module (gnu packages erlang)
> You probably want to resolve those imports rather than use-modules
> them.
You mean something like this?
#+begin_src scheme
(define-module (guix build-system mix)
#:use-module ((gnu packages base) #:select (glibc make-glibc-utf8-locales))
#:use-module ((gnu packages elixir) #:select (elixir elixir-hex))
#:use-module ((gnu packages erlang) #:select (rebar3))
#+end_src
I have moved `elixir-hex' to elixir.scm to avoid a circular dependency.
> > +(define (input=? input1 input2)
> > + "Tell whether inputs INPUT1 and INPUT2 are equal."
> > + (define pkg1 (match input1 ((_ pkg) pkg)))
> > + (define pkg2 (match input2 ((_ pkg) pkg)))
> > + (string=? (package-name pkg1) (package-name pkg2)))
> Again, checking for label equivalence is a bad idea.
OK, after reading a bit more about Guile, I understand that `equal?'
is what should be used here, right? The intent is to remove duplicated
inputs in the code below:
#+begin_src scheme
(define all-propagated-inputs
((compose
(cut delete-duplicates <> equal?) ;<-- Here
(cut filter erlang-or-elixir-input? <>)
(cut append-map package-transitive-propagated-inputs <>)
(cut map cadr <>))
(append inputs native-inputs)))
#+end_src
> > +(define (elixir-input? X.Y input)
> > + "Determines if the given INPUT is an Elixir input."
> > + (match input
> > + ((label . path)
> > + ;; XXX: The second condition may be enough.
> > + (and (elixir-name? label)
> > + (directory-exists? (path->elixir-lib path X.Y))))))
> Ahem, search-path-as-list.
> Also, leaking the version is kinda bad, API-wise.
Does this mean that build artifacts should be installed under
`$out/lib/elixir/$libname` instead of `$out/lib/elixir/X.Y/$libname`?
Cheers