build-system: Introduce @* macro for lazy module resolution.

* guix/build-system.scm (@*): New macro for runtime module resolution.
* guix/build-system/agda.scm (default-agda): Use @* instead of
resolve-interface and module-ref.
* guix/build-system/android-ndk.scm (default-android-build,
default-android-googletest): Likewise.
* guix/build-system/ant.scm (default-jdk, default-ant, default-zip):
Likewise.
* guix/build-system/cargo.scm (default-rust): Likewise.
* guix/build-system/chicken.scm (default-chicken): Likewise.
* guix/build-system/composer.scm (default-php,
default-composer-classloader): Likewise.
* guix/build-system/dub.scm (default-ldc, default-dub,
default-pkg-config, default-ld-gold-wrapper): Likewise.
* guix/build-system/elm.scm (default-elm, default-elm-core,
default-elm-json): Likewise.
* guix/build-system/emacs.scm (default-emacs): Likewise.
* guix/build-system/glib-or-gtk.scm (default-glib): Likewise.
* guix/build-system/go.scm (default-go, default-gccgo, make-go-std):
Likewise.
* guix/build-system/haskell.scm (default-haskell): Likewise.
* guix/build-system/julia.scm (default-julia): Likewise.
* guix/build-system/linux-module.scm (default-linux): Likewise.
* guix/build-system/luanti.scm (default-optipng, default-luanti,
default-luanti-game, default-xvfb-run): Likewise. Remove otherwise
unused individual plugin accessor functions.
* guix/build-system/maven.scm (default-maven, default-jdk,
default-maven-plugins): Likewise. Remove otherwise unused individual
plugin accessor functions.
* guix/build-system/meson.scm (default-ninja, default-meson):
Likewise.
* guix/build-system/minify.scm (default-esbuild): Use @* instead of
resolve-interface and module-ref.
* guix/build-system/mix.scm (default-elixir-hex,
default-rebar3, default-elixir): Likewise.
* guix/build-system/node.scm (default-node): Likewise.
* guix/build-system/ocaml.scm (default-ocaml, default-findlib,
default-dune-build-system, default-ocaml4.07,
default-ocaml4.07-findlib ,default-ocaml4.07-dune, default-ocaml4.09,
default-ocaml4.09-findlib, default-ocaml4.09-dune, default-ocaml5.0,
default-ocaml5.0-findlib, default-ocaml5.0-dune): Likewise.
* guix/build-system/perl.scm (default-perl): Likewise.
* guix/build-system/pyproject.scm (default-python): Likewise.
* guix/build-system/qt.scm (default-qtbase): Likewise.
* guix/build-system/r.scm (default-r): Likewise.
* guix/build-system/rakudo.scm (default-rakudo, default-prove6,
default-zef): Likewise.
* guix/build-system/rebar.scm (default-rebar3, default-erlang):
Likewise.
* guix/build-system/renpy.scm (default-renpy): Likewise.
* guix/build-system/ruby.scm (default-ruby): Likewise.
* guix/build-system/scons.scm (default-scons): Likewise.
* guix/build-system/texlive.scm (default-texlive-bin,
texlive-latex-bin): Likewise.
* guix/build-system/tree-sitter.scm (default-guile-json,
default-node, default-tree-sitter, default-tree-sitter-cli): Likewise.
* guix/build-system/vim.scm (default-vim, default-neovim): Likewise.
* guix/build-system/zig.scm (default-zig): Likewise.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
Nicolas Graves 2025-07-08 03:26:23 +02:00 committed by Ludovic Courtès
parent 97f6cc4389
commit 4a33614dd9
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
35 changed files with 134 additions and 298 deletions

View file

@ -20,7 +20,9 @@
#:use-module (guix records) #:use-module (guix records)
#:use-module (srfi srfi-1) #:use-module (srfi srfi-1)
#:use-module (ice-9 match) #:use-module (ice-9 match)
#:export (build-system #:export (@*
build-system
build-system? build-system?
build-system-name build-system-name
build-system-description build-system-description
@ -42,6 +44,10 @@
build-system-with-c-toolchain)) build-system-with-c-toolchain))
(define-syntax-rule (@* module name)
"Like (@ MODULE NAME), but resolves at run time."
(module-ref (resolve-interface 'module) 'name))
(define-record-type* <build-system> build-system make-build-system (define-record-type* <build-system> build-system make-build-system
build-system? build-system?
(name build-system-name) ; symbol (name build-system-name) ; symbol

View file

@ -33,8 +33,7 @@
(define (default-agda) (define (default-agda)
;; Lazily resolve the binding to avoid a circular dependency. ;; Lazily resolve the binding to avoid a circular dependency.
(let ((agda (resolve-interface '(gnu packages agda)))) (@* (gnu packages agda) agda))
(module-ref agda 'agda)))
(define %agda-build-system-modules (define %agda-build-system-modules
`((guix build agda-build-system) `((guix build agda-build-system)

View file

@ -35,15 +35,12 @@
`((guix build android-ndk-build-system) `((guix build android-ndk-build-system)
,@%default-gnu-imported-modules)) ,@%default-gnu-imported-modules))
;; Lazily resolve bindings to avoid circular dependencies.
(define (default-android-build) (define (default-android-build)
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages android) android-make-stub))
(let ((android (resolve-interface '(gnu packages android))))
(module-ref android 'android-make-stub)))
(define (default-android-googletest) (define (default-android-googletest)
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages android) android-googletest))
(let ((android (resolve-interface '(gnu packages android))))
(module-ref android 'android-googletest)))
(define* (android-ndk-build name inputs (define* (android-ndk-build name inputs
#:key #:key

View file

@ -45,23 +45,18 @@
(guix build java-utils) (guix build java-utils)
,@%default-gnu-imported-modules)) ,@%default-gnu-imported-modules))
;; Lazily resolve bindings to avoid a circular dependencies.
(define (default-jdk) (define (default-jdk)
"Return the default JDK package." "Return the default JDK package, resolved lazily."
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages java) icedtea))
(let ((jdk-mod (resolve-interface '(gnu packages java))))
(module-ref jdk-mod 'icedtea)))
(define (default-ant) (define (default-ant)
"Return the default Ant package." "Return the default Ant package, resolved lazily."
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages java) ant))
(let ((jdk-mod (resolve-interface '(gnu packages java))))
(module-ref jdk-mod 'ant)))
(define (default-zip) (define (default-zip)
"Return the default ZIP package." "Return the default ZIP package, resolved lazily."
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages compression) zip))
(let ((zip-mod (resolve-interface '(gnu packages compression))))
(module-ref zip-mod 'zip)))
(define* (lower name (define* (lower name
#:key source inputs native-inputs outputs system target #:key source inputs native-inputs outputs system target

View file

@ -108,10 +108,8 @@ unavailable."
'())))) '()))))
(define (default-rust target) (define (default-rust target)
"Return the default Rust package." "Return the default Rust package, resolved lazily."
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages rust) rust))
(let ((rust (resolve-interface '(gnu packages rust))))
(module-ref rust 'rust)))
(define (default-rust-sysroot target) (define (default-rust-sysroot target)
"Return the default Rust sysroot for <target>." "Return the default Rust sysroot for <target>."

View file

@ -46,9 +46,7 @@ EXTENSION is the file name extension, such as '.tar.gz'."
(define (default-chicken) (define (default-chicken)
;; Lazily resolve the binding to avoid a circular dependency. ;; Lazily resolve the binding to avoid a circular dependency.
;; TODO is this actually needed in every build system? (@* (gnu packages chicken) chicken))
(let ((chicken (resolve-interface '(gnu packages chicken))))
(module-ref chicken 'chicken)))
(define* (lower name (define* (lower name
#:key source inputs native-inputs outputs system target #:key source inputs native-inputs outputs system target

View file

@ -40,23 +40,18 @@
;; ;;
;; Code: ;; Code:
;; Lazily resolve bindings to avoid circular dependencies.
(define (default-php) (define (default-php)
"Return the default PHP package." "Return the default PHP package, resolved lazily."
(@* (gnu packages php) php))
;; Do not use `@' to avoid introducing circular dependencies.
(let ((module (resolve-interface '(gnu packages php))))
(module-ref module 'php)))
(define (default-findclass) (define (default-findclass)
"Return the default findclass script." "Return the default findclass script."
(search-auxiliary-file "findclass.php")) (search-auxiliary-file "findclass.php"))
(define (default-composer-classloader) (define (default-composer-classloader)
"Return the default composer-classloader package." "Return the default composer-classloader package, resolved lazily."
(@* (gnu packages php-xyz) composer-classloader))
;; Do not use `@' to avoid introducing circular dependencies.
(let ((module (resolve-interface '(gnu packages php-xyz))))
(module-ref module 'composer-classloader)))
(define %composer-build-system-modules (define %composer-build-system-modules
;; Build-side modules imported by default. ;; Build-side modules imported by default.

View file

@ -31,30 +31,20 @@
#:use-module (guix build-system gnu) #:use-module (guix build-system gnu)
#:export (dub-build-system)) #:export (dub-build-system))
;; Lazily resolve bindings to avoid a circular dependencies.
(define (default-ldc) (define (default-ldc)
"Return the default ldc package." (@* (gnu packages dlang) ldc))
;; Lazily resolve the binding to avoid a circular dependency.
(let ((ldc (resolve-interface '(gnu packages dlang))))
(module-ref ldc 'ldc)))
(define (default-dub) (define (default-dub)
"Return the default dub package." (@* (gnu packages dlang) dub))
;; Lazily resolve the binding to avoid a circular dependency.
(let ((ldc (resolve-interface '(gnu packages dlang))))
(module-ref ldc 'dub)))
(define (default-pkg-config) (define (default-pkg-config)
"Return the default pkg-config package." (@* (gnu packages pkg-config) pkg-config))
;; Lazily resolve the binding to avoid a circular dependency.
(let ((pkg-config (resolve-interface '(gnu packages pkg-config))))
(module-ref pkg-config 'pkg-config)))
(define (default-ld-gold-wrapper) (define (default-ld-gold-wrapper)
"Return the default ld-gold-wrapper package."
;; LDC doesn't work with Guix's default (BFD) linker. ;; LDC doesn't work with Guix's default (BFD) linker.
;; Lazily resolve the binding to avoid a circular dependency. ;; Lazily resolve the binding to avoid a circular dependency.
(let ((commencement (resolve-interface '(gnu packages commencement)))) (@* (gnu packages commencement) ld-gold-wrapper))
(module-ref commencement 'ld-gold-wrapper)))
(define %dub-build-system-modules (define %dub-build-system-modules
;; Build-side modules imported by default. ;; Build-side modules imported by default.

View file

@ -97,23 +97,15 @@ given VERSION with sha256 checksum HASH."
(guix build json) (guix build json)
(guix build union))) (guix build union)))
;; Lazily resolve bindings to avoid circular dependencies.
(define (default-elm) (define (default-elm)
"Return the default Elm package for builds." (@* (gnu packages elm) elm-sans-reactor))
;; Lazily resolve the binding to avoid a circular dependency.
(let ((elm (resolve-interface '(gnu packages elm))))
(module-ref elm 'elm-sans-reactor)))
(define (default-elm-core) (define (default-elm-core)
"Return the default elm-core package." (@* (gnu packages elm) elm-core))
;; Lazily resolve the binding to avoid a circular dependency.
(let ((elm (resolve-interface '(gnu packages elm))))
(module-ref elm 'elm-core)))
(define (default-elm-json) (define (default-elm-json)
"Return the default elm-json package." (@* (gnu packages elm) elm-json))
;; Lazily resolve the binding to avoid a circular dependency.
(let ((elm (resolve-interface '(gnu packages elm))))
(module-ref elm 'elm-json)))
(define* (lower name (define* (lower name
#:key source inputs native-inputs outputs system target #:key source inputs native-inputs outputs system target

View file

@ -49,10 +49,8 @@
,@%default-gnu-imported-modules)) ,@%default-gnu-imported-modules))
(define (default-emacs) (define (default-emacs)
"Return the default Emacs package." "Return the default Emacs package, resolved lazily."
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages emacs) emacs-minimal))
(let ((emacs-mod (resolve-interface '(gnu packages emacs))))
(module-ref emacs-mod 'emacs-minimal)))
(define* (lower name (define* (lower name
#:key source inputs native-inputs outputs system target #:key source inputs native-inputs outputs system target

View file

@ -77,10 +77,8 @@
(define (default-glib) (define (default-glib)
"Return the default glib package from which we use "Return the default glib package from which we use
\"glib-compile-schemas\"." \"glib-compile-schemas\", resolved lazily."
;; Do not use `@' to avoid introducing circular dependencies. (@* (gnu packages glib) glib))
(let ((module (resolve-interface '(gnu packages glib))))
(module-ref module 'glib)))
(define* (lower name (define* (lower name
#:key source inputs native-inputs outputs system target #:key source inputs native-inputs outputs system target

View file

@ -130,17 +130,13 @@ commit hash and its date rather than a proper release tag."
,@%default-gnu-imported-modules)) ,@%default-gnu-imported-modules))
(define (default-go) (define (default-go)
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages golang) go))
(let ((go (resolve-interface '(gnu packages golang))))
(module-ref go 'go)))
(define (default-gccgo) (define (default-gccgo)
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages gcc) gccgo-12))
(let ((gcc (resolve-interface '(gnu packages gcc))))
(module-ref gcc 'gccgo-12)))
(define (make-go-std) (define (make-go-std)
(module-ref (resolve-interface '(gnu packages golang)) 'make-go-std)) (@* (gnu packages golang) make-go-std))
(define* (lower name (define* (lower name
#:key source inputs native-inputs outputs system target #:key source inputs native-inputs outputs system target

View file

@ -58,10 +58,8 @@ to NAME and VERSION."
,@%default-gnu-imported-modules)) ,@%default-gnu-imported-modules))
(define (default-haskell) (define (default-haskell)
"Return the default Haskell package." "Return the default Haskell package, resolved lazily."
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages haskell) ghc))
(let ((haskell (resolve-interface '(gnu packages haskell))))
(module-ref haskell 'ghc)))
(define (source-url->revision-url url revision) (define (source-url->revision-url url revision)
"Convert URL (a Hackage source URL) to the URL for the Cabal file at "Convert URL (a Hackage source URL) to the URL for the Cabal file at

View file

@ -45,10 +45,8 @@
,@%default-gnu-imported-modules)) ,@%default-gnu-imported-modules))
(define (default-julia) (define (default-julia)
"Return the default Julia package." "Return the default Julia package, resolved lazily."
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages julia) julia))
(let ((julia-mod (resolve-interface '(gnu packages julia))))
(module-ref julia-mod 'julia)))
(define* (lower name (define* (lower name
#:key source inputs native-inputs outputs system target #:key source inputs native-inputs outputs system target

View file

@ -45,11 +45,8 @@
,@%default-gnu-imported-modules)) ,@%default-gnu-imported-modules))
(define (default-linux) (define (default-linux)
"Return the default Linux package." "Return the default Linux package, resolved lazily."
(@* (gnu packages linux) linux-libre))
;; Do not use `@' to avoid introducing circular dependencies.
(let ((module (resolve-interface '(gnu packages linux))))
(module-ref module 'linux-libre)))
(define (system->arch system) (define (system->arch system)
(platform-linux-architecture (lookup-platform-by-target-or-system system))) (platform-linux-architecture (lookup-platform-by-target-or-system system)))

View file

@ -30,20 +30,6 @@
;; ;;
;; Code: ;; Code:
;; Lazily resolve the bindings to avoid circular dependencies.
(define (default-optipng)
;; Lazily resolve the binding to avoid a circular dependency.
(module-ref (resolve-interface '(gnu packages image)) 'optipng))
(define (default-luanti)
(module-ref (resolve-interface '(gnu packages luanti)) 'luanti))
(define (default-luanti-game)
(module-ref (resolve-interface '(gnu packages luanti)) 'minetest-game))
(define (default-xvfb-run)
(module-ref (resolve-interface '(gnu packages xorg)) 'xvfb-run))
(define %luanti-build-system-modules (define %luanti-build-system-modules
;; Build-side modules imported by default. ;; Build-side modules imported by default.
`((guix build luanti-build-system) `((guix build luanti-build-system)
@ -57,11 +43,12 @@
(define (standard-luanti-packages) (define (standard-luanti-packages)
"Return the list of (NAME PACKAGE OUTPUT) or (NAME PACKAGE) tuples of "Return the list of (NAME PACKAGE OUTPUT) or (NAME PACKAGE) tuples of
standard packages used as implicit inputs of the Luanti build system." standard packages used as implicit inputs of the Luanti build system,
`(("xvfb-run" ,(default-xvfb-run)) resolved lazily."
("optipng" ,(default-optipng)) `(("xvfb-run" ,(@* (gnu packages xorg) xvfb-run))
("luanti" ,(default-luanti)) ("optipng" ,(@* (gnu packages image) optipng))
("luanti-game" ,(default-luanti-game)) ("luanti" ,(@* (gnu packages luanti) luanti))
("luanti-game" ,(@* (gnu packages luanti) minetest-game))
,@(filter (lambda (input) ,@(filter (lambda (input)
(member (car input) (member (car input)
'("libc" "tar" "gzip" "bzip2" "xz" "locales"))) '("libc" "tar" "gzip" "bzip2" "xz" "locales")))

View file

@ -49,61 +49,22 @@
,@%default-gnu-imported-modules)) ,@%default-gnu-imported-modules))
(define (default-maven) (define (default-maven)
"Return the default maven package." "Return the default maven package, resolved lazily."
(@* (gnu packages maven) maven))
;; Do not use `@' to avoid introducing circular dependencies.
(let ((module (resolve-interface '(gnu packages maven))))
(module-ref module 'maven)))
(define (default-maven-compiler-plugin)
"Return the default maven compiler plugin package."
;; Do not use `@' to avoid introducing circular dependencies.
(let ((module (resolve-interface '(gnu packages maven))))
(module-ref module 'maven-compiler-plugin)))
(define (default-maven-jar-plugin)
"Return the default maven jar plugin package."
;; Do not use `@' to avoid introducing circular dependencies.
(let ((module (resolve-interface '(gnu packages maven))))
(module-ref module 'maven-jar-plugin)))
(define (default-maven-resources-plugin)
"Return the default maven resources plugin package."
;; Do not use `@' to avoid introducing circular dependencies.
(let ((module (resolve-interface '(gnu packages maven))))
(module-ref module 'maven-resources-plugin)))
(define (default-maven-surefire-plugin)
"Return the default maven surefire plugin package."
;; Do not use `@' to avoid introducing circular dependencies.
(let ((module (resolve-interface '(gnu packages maven))))
(module-ref module 'maven-surefire-plugin)))
(define (default-java-surefire-junit4)
"Return the default surefire junit4 provider package."
;; Do not use `@' to avoid introducing circular dependencies.
(let ((module (resolve-interface '(gnu packages maven))))
(module-ref module 'java-surefire-junit4)))
(define (default-maven-install-plugin)
"Return the default maven install plugin package."
;; Do not use `@' to avoid introducing circular dependencies.
(let ((module (resolve-interface '(gnu packages maven))))
(module-ref module 'maven-install-plugin)))
(define (default-jdk) (define (default-jdk)
"Return the default JDK package." "Return the default JDK package, resolved lazily."
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages java) icedtea))
(let ((jdk-mod (resolve-interface '(gnu packages java))))
(module-ref jdk-mod 'icedtea)))
(define (default-maven-plugins) (define (default-maven-plugins)
`(("maven-compiler-plugin" ,(default-maven-compiler-plugin)) "Return the default maven plugins, resolved lazily."
("maven-jar-plugin" ,(default-maven-jar-plugin)) `(("maven-compiler-plugin" ,(@* (gnu packages maven) maven-compiler-plugin))
("maven-resources-plugin" ,(default-maven-resources-plugin)) ("maven-jar-plugin" ,(@* (gnu packages maven) maven-jar-plugin))
("maven-surefire-plugin" ,(default-maven-surefire-plugin)) ("maven-surefire-plugin" ,(@* (gnu packages maven) maven-surefire-plugin))
("java-surefire-junit4" ,(default-java-surefire-junit4)) ("java-surefire-junit4" ,(@* (gnu packages maven) java-surefire-junit4))
("maven-install-plugin" ,(default-maven-install-plugin)))) ("maven-install-plugin" ,(@* (gnu packages maven) maven-install-plugin))
("maven-resources-plugin"
,(@* (gnu packages maven) maven-resources-plugin))))
(define %default-exclude (define %default-exclude
`(("org.apache.maven.plugins" . `(("org.apache.maven.plugins" .

View file

@ -134,16 +134,12 @@ TRIPLET."
,@%glib-or-gtk-build-system-modules)) ,@%glib-or-gtk-build-system-modules))
(define (default-ninja) (define (default-ninja)
"Return the default ninja package." "Return the default ninja package, resolved lazily."
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages ninja) ninja/pinned))
(let ((module (resolve-interface '(gnu packages ninja))))
(module-ref module 'ninja/pinned)))
(define (default-meson) (define (default-meson)
"Return the default meson package." "Return the default meson package, resolved lazily."
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages build-tools) meson))
(let ((module (resolve-interface '(gnu packages build-tools))))
(module-ref module 'meson)))
(define* (lower name (define* (lower name
#:key source inputs native-inputs outputs system target #:key source inputs native-inputs outputs system target

View file

@ -43,9 +43,7 @@
(define (default-esbuild) (define (default-esbuild)
"Return the default package to minify JavaScript source files." "Return the default package to minify JavaScript source files."
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages web) esbuild))
(let ((mod (resolve-interface '(gnu packages web))))
(module-ref mod 'esbuild)))
(define* (lower name (define* (lower name
#:key source inputs native-inputs outputs system #:key source inputs native-inputs outputs system
@ -54,7 +52,7 @@
#:rest arguments) #:rest arguments)
"Return a bag for NAME." "Return a bag for NAME."
(define private-keywords (define private-keywords
'(#:target #:inputs #:native-inputs)) '(#:target #:inputs #:native-inputs #:esbuild))
(bag (bag
(name name) (name name)

View file

@ -39,16 +39,13 @@
#:export (mix-build-system hexpm-uri)) #:export (mix-build-system hexpm-uri))
(define (default-elixir-hex) (define (default-elixir-hex)
(let ((elixir (resolve-interface '(gnu packages elixir)))) (@* (gnu packages elixir) elixir-hex))
(module-ref elixir 'elixir-hex)))
(define (default-rebar3) (define (default-rebar3)
(let ((erlang (resolve-interface '(gnu packages erlang)))) (@* (gnu packages erlang) rebar3))
(module-ref erlang 'rebar3)))
(define (default-elixir) (define (default-elixir)
(let ((elixir (resolve-interface '(gnu packages elixir)))) (@* (gnu packages elixir) elixir))
(module-ref elixir 'elixir)))
(define* (strip-prefix name #:optional (prefix "elixir-")) (define* (strip-prefix name #:optional (prefix "elixir-"))
"Return NAME without the prefix PREFIX." "Return NAME without the prefix PREFIX."

View file

@ -44,10 +44,8 @@
,@%default-gnu-imported-modules)) ,@%default-gnu-imported-modules))
(define (default-node) (define (default-node)
"Return the default Node package." "Return the default Node package, resolved lazily."
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages node) node-lts))
(let ((node (resolve-interface '(gnu packages node))))
(module-ref node 'node-lts)))
(define* (lower name (define* (lower name
#:key source inputs native-inputs outputs system target #:key source inputs native-inputs outputs system target

View file

@ -68,61 +68,43 @@
,@%default-gnu-imported-modules)) ,@%default-gnu-imported-modules))
(define (default-ocaml) (define (default-ocaml)
"Return the default OCaml package." "Return the default OCaml package, resolved lazily."
(@* (gnu packages ocaml) ocaml))
;; Do not use `@' to avoid introducing circular dependencies.
(let ((module (resolve-interface '(gnu packages ocaml))))
(module-ref module 'ocaml)))
(define (default-findlib) (define (default-findlib)
"Return the default OCaml-findlib package." "Return the default OCaml-findlib package, resolved lazily."
(@* (gnu packages ocaml) ocaml-findlib))
;; Do not use `@' to avoid introducing circular dependencies.
(let ((module (resolve-interface '(gnu packages ocaml))))
(module-ref module 'ocaml-findlib)))
(define (default-dune-build-system) (define (default-dune-build-system)
"Return the dune-build-system." "Return the dune-build-system, resolved lazily."
(@* (guix build-system dune) dune-build-system))
;; Do not use `@' to avoid introducing circular dependencies.
(let ((module (resolve-interface '(guix build-system dune))))
(module-ref module 'dune-build-system)))
(define (default-ocaml4.07) (define (default-ocaml4.07)
(let ((ocaml (resolve-interface '(gnu packages ocaml)))) (@* (gnu packages ocaml) ocaml-4.07))
(module-ref ocaml 'ocaml-4.07)))
(define (default-ocaml4.07-findlib) (define (default-ocaml4.07-findlib)
(let ((module (resolve-interface '(gnu packages ocaml)))) (@* (gnu packages ocaml) ocaml4.07-findlib))
(module-ref module 'ocaml4.07-findlib)))
(define (default-ocaml4.07-dune) (define (default-ocaml4.07-dune)
(let ((module (resolve-interface '(gnu packages ocaml)))) (@* (gnu packages ocaml) ocaml4.07-dune))
(module-ref module 'ocaml4.07-dune)))
(define (default-ocaml4.09) (define (default-ocaml4.09)
(let ((ocaml (resolve-interface '(gnu packages ocaml)))) (@* (gnu packages ocaml) ocaml-4.09))
(module-ref ocaml 'ocaml-4.09)))
(define (default-ocaml4.09-findlib) (define (default-ocaml4.09-findlib)
(let ((module (resolve-interface '(gnu packages ocaml)))) (@* (gnu packages ocaml) ocaml4.09-findlib))
(module-ref module 'ocaml4.09-findlib)))
(define (default-ocaml4.09-dune) (define (default-ocaml4.09-dune)
(let ((module (resolve-interface '(gnu packages ocaml)))) (@* (gnu packages ocaml) ocaml4.09-dune))
(module-ref module 'ocaml4.09-dune)))
(define (default-ocaml5.0) (define (default-ocaml5.0)
(let ((ocaml (resolve-interface '(gnu packages ocaml)))) (@* (gnu packages ocaml) ocaml-5.0))
(module-ref ocaml 'ocaml-5.0)))
(define (default-ocaml5.0-findlib) (define (default-ocaml5.0-findlib)
(let ((module (resolve-interface '(gnu packages ocaml)))) (@* (gnu packages ocaml) ocaml5.0-findlib))
(module-ref module 'ocaml5.0-findlib)))
(define (default-ocaml5.0-dune) (define (default-ocaml5.0-dune)
(let ((module (resolve-interface '(gnu packages ocaml)))) (@* (gnu packages ocaml) ocaml5.0-dune))
(module-ref module 'ocaml5.0-dune)))
(define* (package-with-explicit-ocaml ocaml findlib dune old-prefix new-prefix (define* (package-with-explicit-ocaml ocaml findlib dune old-prefix new-prefix
#:key variant-property) #:key variant-property)

View file

@ -48,11 +48,8 @@
,@%default-gnu-imported-modules)) ,@%default-gnu-imported-modules))
(define (default-perl) (define (default-perl)
"Return the default Perl package." "Return the default Perl package, resolved lazily."
(@* (gnu packages perl) perl))
;; Do not use `@' to avoid introducing circular dependencies.
(let ((module (resolve-interface '(gnu packages perl))))
(module-ref module 'perl)))
(define* (lower name (define* (lower name
#:key source inputs native-inputs outputs #:key source inputs native-inputs outputs

View file

@ -51,15 +51,13 @@
,@%python-build-system-modules)) ,@%python-build-system-modules))
(define (default-python) (define (default-python)
"Return the default Python package." "Return the default Python package, resolved lazily."
;; Lazily resolve the binding to avoid a circular dependency.
(let ((python (resolve-interface '(gnu packages python))))
;; We are using python-sans-pip-wrapper, because it does not contain ;; We are using python-sans-pip-wrapper, because it does not contain
;; setuptools. This allows us to skip the dependency on setuptools for ;; setuptools. This allows us to skip the dependency on setuptools for
;; packages which dont need it. And it allows us to more easily swap ;; packages which dont need it. And it allows us to more easily swap
;; out setuptools if a different version is required. ;; out setuptools if a different version is required.
;; Using python-toolchain here might cause dependency cycles. ;; Using python-toolchain here might cause dependency cycles.
(module-ref python 'python-sans-pip-wrapper))) (@* (gnu packages python) python-sans-pip-wrapper))
;; TODO: On the next iteration of python-team, migrate the sanity-check to ;; TODO: On the next iteration of python-team, migrate the sanity-check to
;; importlib_metadata instead of setuptools. ;; importlib_metadata instead of setuptools.

View file

@ -62,11 +62,8 @@
,@%cmake-build-system-modules)) ,@%cmake-build-system-modules))
(define (default-qtbase) (define (default-qtbase)
"Return the default qtbase package." "Return the default qtbase package, resolved lazily."
(@* (gnu packages qt) qtbase-5))
;; Do not use `@' to avoid introducing circular dependencies.
(let ((module (resolve-interface '(gnu packages qt))))
(module-ref module 'qtbase-5)))
;; This barely is a copy from (guix build-system cmake), only adjusted to use ;; This barely is a copy from (guix build-system cmake), only adjusted to use
;; the variables defined here. ;; the variables defined here.

View file

@ -71,10 +71,8 @@ release corresponding to NAME and VERSION."
,@%default-gnu-imported-modules)) ,@%default-gnu-imported-modules))
(define (default-r) (define (default-r)
"Return the default R package." "Return the default R package, resolved lazily."
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages statistics) r-minimal))
(let ((r-mod (resolve-interface '(gnu packages statistics))))
(module-ref r-mod 'r-minimal)))
(define* (lower name (define* (lower name
#:key source inputs native-inputs outputs system target #:key source inputs native-inputs outputs system target

View file

@ -44,21 +44,16 @@
,@%default-gnu-imported-modules)) ,@%default-gnu-imported-modules))
(define (default-rakudo) (define (default-rakudo)
"Return the default Rakudo package." "Return the default Rakudo package, resolved lazily."
(@* (gnu packages perl6) rakudo))
;; Do not use `@' to avoid introducing circular dependencies.
(let ((module (resolve-interface '(gnu packages perl6))))
(module-ref module 'rakudo)))
(define (default-prove6) (define (default-prove6)
"Return the default perl6-tap-harness package for tests." "Return the default perl6-tap-harness package for tests, resolved lazily."
(let ((module (resolve-interface '(gnu packages perl6)))) (@* (gnu packages perl6) perl6-tap-harness))
(module-ref module 'perl6-tap-harness)))
(define (default-zef) (define (default-zef)
"Return the default perl6-zef package." "Return the default perl6-zef package."
(let ((module (resolve-interface '(gnu packages perl6)))) (@* (gnu packages perl6) perl6-zef))
(module-ref module 'perl6-zef)))
(define* (lower name (define* (lower name
#:key source inputs native-inputs outputs #:key source inputs native-inputs outputs

View file

@ -59,16 +59,12 @@ and VERSION."
,@%default-gnu-imported-modules)) ,@%default-gnu-imported-modules))
(define (default-rebar3) (define (default-rebar3)
"Return the default Rebar3 package." "Return the default Rebar3 package, resolved lazily."
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages erlang) rebar3))
(let ((erlang-mod (resolve-interface '(gnu packages erlang))))
(module-ref erlang-mod 'rebar3)))
(define (default-erlang) (define (default-erlang)
"Return the default Erlang package." "Return the default Erlang package, resolved lazily."
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages erlang) erlang))
(let ((erlang-mod (resolve-interface '(gnu packages erlang))))
(module-ref erlang-mod 'erlang)))
(define* (lower name (define* (lower name
#:key source inputs native-inputs outputs system target #:key source inputs native-inputs outputs system target

View file

@ -34,10 +34,8 @@
renpy-build-system)) renpy-build-system))
(define (default-renpy) (define (default-renpy)
"Return the default Ren'py package." "Return the default Ren'py package, resolved lazily."
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages game-development) renpy))
(let ((module (resolve-interface '(gnu packages game-development))))
(module-ref module 'renpy)))
(define %renpy-build-system-modules (define %renpy-build-system-modules
;; Build-side modules imported by default. ;; Build-side modules imported by default.

View file

@ -43,10 +43,8 @@ NAME and VERSION."
,@%default-gnu-imported-modules)) ,@%default-gnu-imported-modules))
(define (default-ruby) (define (default-ruby)
"Return the default Ruby package." "Return the default Ruby package, resolved lazily."
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages ruby) ruby))
(let ((ruby (resolve-interface '(gnu packages ruby))))
(module-ref ruby 'ruby)))
(define* (lower name (define* (lower name
#:key source inputs native-inputs outputs system target #:key source inputs native-inputs outputs system target

View file

@ -42,10 +42,8 @@
,@%default-gnu-imported-modules)) ,@%default-gnu-imported-modules))
(define (default-scons) (define (default-scons)
"Return the default SCons package." "Return the default SCons package, resolved lazily."
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages build-tools) scons))
(let ((build-tools (resolve-interface '(gnu packages build-tools))))
(module-ref build-tools 'scons)))
(define* (lower name (define* (lower name
#:key source inputs native-inputs outputs system target #:key source inputs native-inputs outputs system target

View file

@ -54,16 +54,12 @@
,@%default-gnu-imported-modules)) ,@%default-gnu-imported-modules))
(define (default-texlive-bin) (define (default-texlive-bin)
"Return the default texlive-bin package." "Return the default texlive-bin package, resolved lazily."
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages tex) texlive-bin))
(let ((tex-mod (resolve-interface '(gnu packages tex))))
(module-ref tex-mod 'texlive-bin)))
(define (texlive-latex-bin) (define (texlive-latex-bin)
"Return the default texlive-latex-bin package." "Return the default texlive-latex-bin package, resolved lazily."
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages tex) texlive-latex-bin))
(let ((tex-mod (resolve-interface '(gnu packages tex))))
(module-ref tex-mod 'texlive-latex-bin)))
(define* (lower name (define* (lower name
#:key #:key

View file

@ -41,20 +41,16 @@
;; Lazily resolve the bindings to avoid circular dependencies. ;; Lazily resolve the bindings to avoid circular dependencies.
(define (default-guile-json) (define (default-guile-json)
(let ((mod (resolve-interface '(gnu packages guile)))) (@* (gnu packages guile) guile-json-4))
(module-ref mod 'guile-json-4)))
(define (default-node) (define (default-node)
(let ((mod (resolve-interface '(gnu packages node)))) (@* (gnu packages node) node-lts))
(module-ref mod 'node-lts)))
(define (default-tree-sitter) (define (default-tree-sitter)
(let ((mod (resolve-interface '(gnu packages tree-sitter)))) (@* (gnu packages tree-sitter) tree-sitter))
(module-ref mod 'tree-sitter)))
(define (default-tree-sitter-cli) (define (default-tree-sitter-cli)
(let ((mod (resolve-interface '(gnu packages tree-sitter)))) (@* (gnu packages tree-sitter) tree-sitter-cli))
(module-ref mod 'tree-sitter-cli)))
(define* (lower name (define* (lower name
#:key source inputs native-inputs outputs system target #:key source inputs native-inputs outputs system target

View file

@ -45,15 +45,12 @@
,@%copy-build-system-modules)) ,@%copy-build-system-modules))
(define (default-vim) (define (default-vim)
"Return the default Vim package." "Return the default Vim package, resolved lazily."
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages vim) vim))
(let ((vim (resolve-interface '(gnu packages vim))))
(module-ref vim 'vim)))
(define (default-neovim) (define (default-neovim)
"Return the default Neovim package." "Return the default Neovim package, resolved lazily."
(let ((vim (resolve-interface '(gnu packages vim)))) (@* (gnu packages vim) neovim))
(module-ref vim 'neovim)))
(define* (lower name (define* (lower name
#:key source #:key source

View file

@ -32,10 +32,8 @@
(define (default-zig) (define (default-zig)
"Return the default zig package." "Return the default zig package, resolved lazily."
;; Lazily resolve the binding to avoid a circular dependency. (@* (gnu packages zig) zig))
(let ((zig (resolve-interface '(gnu packages zig))))
(module-ref zig 'zig)))
(define %zig-build-system-modules (define %zig-build-system-modules
;; Build-side modules imported by default. ;; Build-side modules imported by default.