Partially unifying packages and inferior packages

  • Open
  • quality assurance status badge
Details
2 participants
  • Ludovic Courtès
  • Maxime Devos
Owner
unassigned
Submitted by
Maxime Devos
Severity
normal
M
M
Maxime Devos wrote on 4 Dec 2021 22:01
(address . bug-guix@gnu.org)
b1d6da8fe3d3afd8f04968a146cc47732eb0fa85.camel@telenet.be
X-Debbugs-CC: guix-devel@gnu.org

Hi guix,

There have been some bug reports with as root cause that inferior packages aren't
packages. I think that root cause is a bug. To resolve this, there was some talk on
using GOOP classes, or define-gexp-compiler-style polymorphism for package-native-inputs
etc., but these come with a complexity and time cost.

At the end of this e-mail, there is some untested code for turning an inferior
package into an equivalent package. If it's properly integrated into (guix inferior),
we could mostly do away with the inferior-package?/package? distinction,
by letting lookup-inferior-package and the like return ‘proper’ packages, albeit
with a weird build system and ignoring inheritance.

To be clear, I won't be working on this, but the idea seemed to nice to not send it.

Greetings,
Maxime

(define inferior-package-build-system
(build-system
(name 'inferior)
(description "Build things via an inferior")
(lower lower)))

(define* (lower name #:key inferior-package system target #:allow-other-keys)
(bag ;; TODO(?): package transformations using bags won't work!
(name name) ; ignored
(system system) ; ignored
(target target) ; ignored
(arguments '()) ; ignored
(build (lambda _
(inferior-package->derivation inferior-package system #:target target)))))

(define (inferior-inputs->inputs inferior-inputs)
(map (match-lamda
((label inf . rest)
`(,label ,(inferior-package->package inf) ,@rest)))
inferior-inputs))

(define (inferior-package->package inf)
;; TODO: somehow make sure no inheritance happens on this package
(package
(name (inferior-package-name inf))
(version (inferior-package-version inf))
(replacement (and=> (inferior-package-replacement inf) inferior-package->package))
(source #f) ; TODO
(build-system inferior-package-build-system)
(arguments `(#:inferior-package ,inf))
(synopsis (inferior-package-synopsis inf))
  (description (inferior-package-description inf))
(home-page (inferior-package-home-page inf))
(location (inferior-package-location inf))
(inputs (map inferior-inputs->inputs (inferior-package-inputs inf)))
(native-inputs (map inferior-inputs->inputs (inferior-package-native-inputs inf)))
(propagated-inputs (map inferior-inputs->inputs (inferior-package-propagated-inputs inf)))
(transitive-propagated-inputs (map inferior-inputs->inputs (inferior-package-transitive-propagated-inputs inf)))
(native-search-paths (propagated-package-native-search-paths inf))
(search-paths (propagated-package-search-paths inf))
(license #f)) ; TODO
L
L
Ludovic Courtès wrote on 6 Dec 2021 14:14
(name . Maxime Devos)(address . maximedevos@telenet.be)
87bl1tnadi.fsf@gnu.org
Hi,

Maxime Devos <maximedevos@telenet.be> skribis:

Toggle quote (21 lines)
> (define (inferior-package->package inf)
> ;; TODO: somehow make sure no inheritance happens on this package
> (package
> (name (inferior-package-name inf))
> (version (inferior-package-version inf))
> (replacement (and=> (inferior-package-replacement inf) inferior-package->package))
> (source #f) ; TODO
> (build-system inferior-package-build-system)
> (arguments `(#:inferior-package ,inf))
> (synopsis (inferior-package-synopsis inf))
>   (description (inferior-package-description inf))
> (home-page (inferior-package-home-page inf))
> (location (inferior-package-location inf))
> (inputs (map inferior-inputs->inputs (inferior-package-inputs inf)))
> (native-inputs (map inferior-inputs->inputs (inferior-package-native-inputs inf)))
> (propagated-inputs (map inferior-inputs->inputs (inferior-package-propagated-inputs inf)))
> (transitive-propagated-inputs (map inferior-inputs->inputs (inferior-package-transitive-propagated-inputs inf)))
> (native-search-paths (propagated-package-native-search-paths inf))
> (search-paths (propagated-package-search-paths inf))
> (license #f)) ; TODO

That’s a clever hack!

Longer-term, I think it would be nice(r) to use a type hierarchy somehow
so <inferior-package> instances can truly be used anywhere a <package>
is expected.

Thanks,
Ludo’.
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send an email to 52284@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 52284
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch