[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#66801] ['PATCH v2' 01/14] build-system: Add mix-build-system.
From: |
Pierre-Henry Fröhring |
Subject: |
[bug#66801] ['PATCH v2' 01/14] build-system: Add mix-build-system. |
Date: |
Wed, 15 Nov 2023 10:57:35 +0100 |
> No. Look at all the other build systems. None of them use submodules of (gnu
> packages), for a good reason.
Ok, I see. It would introduce circular dependencies. By "resolve," you
mean something like: ~(resolve-interface '(gnu packages yyy))~. So, in
our case it means:
#+begin_src scheme
(define (default-glibc-utf8-locales)
(let* ((base (resolve-interface '(gnu packages base)))
(glibc (module-ref base 'glibc))
(make-glibc-utf8-locales (module-ref base 'make-glibc-utf8-locales)))
(make-glibc-utf8-locales glibc #:locales (list "en_US"))))
(define (default-elixir-hex)
(let ((elixir (resolve-interface '(gnu packages elixir))))
(module-ref elixir 'elixir-hex)))
(define (default-rebar3)
(let ((erlang (resolve-interface '(gnu packages erlang))))
(module-ref erlang 'rebar3)))
#+end_src
Then:
#+begin_src scheme
(define* (lower name
#:key
(elixir (default-elixir))
(elixir-hex (default-elixir-hex))
(glibc-utf8-locales (default-glibc-utf8-locales))
(rebar3 (default-rebar3))
…
#:allow-other-keys #:rest arguments)
…)
#+end_src
Is this correct?
> Not necessarily, but you want a different way of building $out/lib/elixir/X.Y/
> that doesn't leak through the function signature.
Following ~python-build-system.scm~, it means something like:
#+begin_src scheme
(define (elixir-version elixir)
(let* ((version (last (string-split elixir #\-)))
(components (string-split version #\.))
(major+minor (take components 2)))
(string-join major+minor ".")))
(define (install-dir inputs outputs)
"Return the path of the current output's Elixir library."
(let ((out (assoc-ref outputs "out"))
(elixir (assoc-ref inputs "elixir")))
(string-append out "/lib/elixir/" (elixir-version elixir) "/site-packages")))
#+end_src
Is this correct?
> Btw. I think that you're resolving transitive inputs twice; once on the build
> system code and once by fattening the outputs. You probably only need either
> of those, not both.
Ah. Propagated inputs are propagated. Who would have thought? So, this is not necessary:
#+begin_src scheme
(define* (lower …)
…
(define all-propagated-inputs
((compose
(cut delete-duplicates <> equal?)
(cut filter erlang-or-elixir-input? <>)
(cut append-map package-transitive-propagated-inputs <>)
(cut map cadr <>))
(append inputs native-inputs)))
(define build-inputs
`(…
,@all-propagated-inputs
,@inputs
,@native-inputs))
(bag …
(build-inputs build-inputs)
…))
#+end_src
I've just removed ~all-propagated-inputs~ and all packages build just fine.
Is this what you meant?
> Yep, that would work. Note that delete-duplicates is O(n^2), though. We have
> a little bit of code where it's done in (I assume) O(n*log(n)) with vhashes.
If ~all-propagated-inputs~ is removed, then the discussion of this comment is
closed.
- [bug#66801] ['PATCH v2' 01/14] build-system: Add mix-build-system., Pierre-Henry Fröhring, 2023/11/13
- [bug#66801] ['PATCH v2' 01/14] build-system: Add mix-build-system., Liliana Marie Prikler, 2023/11/13
- [bug#66801] ['PATCH v2' 01/14] build-system: Add mix-build-system., Pierre-Henry Fröhring, 2023/11/14
- [bug#66801] ['PATCH v2' 01/14] build-system: Add mix-build-system., Liliana Marie Prikler, 2023/11/14
- [bug#66801] ['PATCH v2' 01/14] build-system: Add mix-build-system.,
Pierre-Henry Fröhring <=
- [bug#66801] Fwd: ['PATCH v2' 01/14] build-system: Add mix-build-system., Pierre-Henry Fröhring, 2023/11/15
- [bug#66801] ['PATCH v2' 01/14] build-system: Add mix-build-system., Pierre-Henry Fröhring, 2023/11/15
- [bug#66801] ['PATCH v2' 01/14] build-system: Add mix-build-system., Liliana Marie Prikler, 2023/11/15
- [bug#66801] ['PATCH v2' 01/14] build-system: Add mix-build-system., Pierre-Henry Fröhring, 2023/11/15