From 4a33614dd90720e409090f3a7fa97b53a14acbb2 Mon Sep 17 00:00:00 2001 From: Nicolas Graves Date: Tue, 8 Jul 2025 03:26:23 +0200 Subject: [PATCH] build-system: Introduce @* macro for lazy module resolution. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 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 --- guix/build-system.scm | 8 +++- guix/build-system/agda.scm | 3 +- guix/build-system/android-ndk.scm | 9 ++--- guix/build-system/ant.scm | 19 ++++----- guix/build-system/cargo.scm | 6 +-- guix/build-system/chicken.scm | 4 +- guix/build-system/composer.scm | 15 +++---- guix/build-system/dub.scm | 20 +++------- guix/build-system/elm.scm | 16 ++------ guix/build-system/emacs.scm | 6 +-- guix/build-system/glib-or-gtk.scm | 6 +-- guix/build-system/go.scm | 10 ++--- guix/build-system/haskell.scm | 6 +-- guix/build-system/julia.scm | 6 +-- guix/build-system/linux-module.scm | 7 +--- guix/build-system/luanti.scm | 25 +++--------- guix/build-system/maven.scm | 63 ++++++------------------------ guix/build-system/meson.scm | 12 ++---- guix/build-system/minify.scm | 6 +-- guix/build-system/mix.scm | 9 ++--- guix/build-system/node.scm | 6 +-- guix/build-system/ocaml.scm | 48 +++++++---------------- guix/build-system/perl.scm | 7 +--- guix/build-system/pyproject.scm | 16 ++++---- guix/build-system/qt.scm | 7 +--- guix/build-system/r.scm | 6 +-- guix/build-system/rakudo.scm | 15 +++---- guix/build-system/rebar.scm | 12 ++---- guix/build-system/renpy.scm | 6 +-- guix/build-system/ruby.scm | 6 +-- guix/build-system/scons.scm | 6 +-- guix/build-system/texlive.scm | 12 ++---- guix/build-system/tree-sitter.scm | 12 ++---- guix/build-system/vim.scm | 11 ++---- guix/build-system/zig.scm | 6 +-- 35 files changed, 134 insertions(+), 298 deletions(-) diff --git a/guix/build-system.scm b/guix/build-system.scm index 76d670995ce..0a6d51d718a 100644 --- a/guix/build-system.scm +++ b/guix/build-system.scm @@ -20,7 +20,9 @@ #:use-module (guix records) #:use-module (srfi srfi-1) #:use-module (ice-9 match) - #:export (build-system + #:export (@* + + build-system build-system? build-system-name build-system-description @@ -42,6 +44,10 @@ 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 make-build-system build-system? (name build-system-name) ; symbol diff --git a/guix/build-system/agda.scm b/guix/build-system/agda.scm index ec6ad860e08..ee27ef051bd 100644 --- a/guix/build-system/agda.scm +++ b/guix/build-system/agda.scm @@ -33,8 +33,7 @@ (define (default-agda) ;; Lazily resolve the binding to avoid a circular dependency. - (let ((agda (resolve-interface '(gnu packages agda)))) - (module-ref agda 'agda))) + (@* (gnu packages agda) agda)) (define %agda-build-system-modules `((guix build agda-build-system) diff --git a/guix/build-system/android-ndk.scm b/guix/build-system/android-ndk.scm index c4e7063db24..5d5f11d3a60 100644 --- a/guix/build-system/android-ndk.scm +++ b/guix/build-system/android-ndk.scm @@ -35,15 +35,12 @@ `((guix build android-ndk-build-system) ,@%default-gnu-imported-modules)) +;; Lazily resolve bindings to avoid circular dependencies. (define (default-android-build) - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((android (resolve-interface '(gnu packages android)))) - (module-ref android 'android-make-stub))) + (@* (gnu packages android) android-make-stub)) (define (default-android-googletest) - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((android (resolve-interface '(gnu packages android)))) - (module-ref android 'android-googletest))) + (@* (gnu packages android) android-googletest)) (define* (android-ndk-build name inputs #:key diff --git a/guix/build-system/ant.scm b/guix/build-system/ant.scm index 9816cc061c9..b5302d09d03 100644 --- a/guix/build-system/ant.scm +++ b/guix/build-system/ant.scm @@ -45,23 +45,18 @@ (guix build java-utils) ,@%default-gnu-imported-modules)) +;; Lazily resolve bindings to avoid a circular dependencies. (define (default-jdk) - "Return the default JDK package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((jdk-mod (resolve-interface '(gnu packages java)))) - (module-ref jdk-mod 'icedtea))) + "Return the default JDK package, resolved lazily." + (@* (gnu packages java) icedtea)) (define (default-ant) - "Return the default Ant package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((jdk-mod (resolve-interface '(gnu packages java)))) - (module-ref jdk-mod 'ant))) + "Return the default Ant package, resolved lazily." + (@* (gnu packages java) ant)) (define (default-zip) - "Return the default ZIP package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((zip-mod (resolve-interface '(gnu packages compression)))) - (module-ref zip-mod 'zip))) + "Return the default ZIP package, resolved lazily." + (@* (gnu packages compression) zip)) (define* (lower name #:key source inputs native-inputs outputs system target diff --git a/guix/build-system/cargo.scm b/guix/build-system/cargo.scm index 1c40aa709c1..eefda79ec7c 100644 --- a/guix/build-system/cargo.scm +++ b/guix/build-system/cargo.scm @@ -108,10 +108,8 @@ unavailable." '())))) (define (default-rust target) - "Return the default Rust package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((rust (resolve-interface '(gnu packages rust)))) - (module-ref rust 'rust))) + "Return the default Rust package, resolved lazily." + (@* (gnu packages rust) rust)) (define (default-rust-sysroot target) "Return the default Rust sysroot for ." diff --git a/guix/build-system/chicken.scm b/guix/build-system/chicken.scm index e6fcfa7ee30..6b4e970b007 100644 --- a/guix/build-system/chicken.scm +++ b/guix/build-system/chicken.scm @@ -46,9 +46,7 @@ EXTENSION is the file name extension, such as '.tar.gz'." (define (default-chicken) ;; Lazily resolve the binding to avoid a circular dependency. - ;; TODO is this actually needed in every build system? - (let ((chicken (resolve-interface '(gnu packages chicken)))) - (module-ref chicken 'chicken))) + (@* (gnu packages chicken) chicken)) (define* (lower name #:key source inputs native-inputs outputs system target diff --git a/guix/build-system/composer.scm b/guix/build-system/composer.scm index 48ad90f253e..8000b855595 100644 --- a/guix/build-system/composer.scm +++ b/guix/build-system/composer.scm @@ -40,23 +40,18 @@ ;; ;; Code: +;; Lazily resolve bindings to avoid circular dependencies. (define (default-php) - "Return the default PHP package." - - ;; Do not use `@' to avoid introducing circular dependencies. - (let ((module (resolve-interface '(gnu packages php)))) - (module-ref module 'php))) + "Return the default PHP package, resolved lazily." + (@* (gnu packages php) php)) (define (default-findclass) "Return the default findclass script." (search-auxiliary-file "findclass.php")) (define (default-composer-classloader) - "Return the default composer-classloader package." - - ;; Do not use `@' to avoid introducing circular dependencies. - (let ((module (resolve-interface '(gnu packages php-xyz)))) - (module-ref module 'composer-classloader))) + "Return the default composer-classloader package, resolved lazily." + (@* (gnu packages php-xyz) composer-classloader)) (define %composer-build-system-modules ;; Build-side modules imported by default. diff --git a/guix/build-system/dub.scm b/guix/build-system/dub.scm index 831a34af0d1..3da70946db5 100644 --- a/guix/build-system/dub.scm +++ b/guix/build-system/dub.scm @@ -31,30 +31,20 @@ #:use-module (guix build-system gnu) #:export (dub-build-system)) +;; Lazily resolve bindings to avoid a circular dependencies. (define (default-ldc) - "Return the default ldc package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((ldc (resolve-interface '(gnu packages dlang)))) - (module-ref ldc 'ldc))) + (@* (gnu packages dlang) ldc)) (define (default-dub) - "Return the default dub package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((ldc (resolve-interface '(gnu packages dlang)))) - (module-ref ldc 'dub))) + (@* (gnu packages dlang) dub)) (define (default-pkg-config) - "Return the default pkg-config package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((pkg-config (resolve-interface '(gnu packages pkg-config)))) - (module-ref pkg-config 'pkg-config))) + (@* (gnu packages pkg-config) pkg-config)) (define (default-ld-gold-wrapper) - "Return the default ld-gold-wrapper package." ;; LDC doesn't work with Guix's default (BFD) linker. ;; Lazily resolve the binding to avoid a circular dependency. - (let ((commencement (resolve-interface '(gnu packages commencement)))) - (module-ref commencement 'ld-gold-wrapper))) + (@* (gnu packages commencement) ld-gold-wrapper)) (define %dub-build-system-modules ;; Build-side modules imported by default. diff --git a/guix/build-system/elm.scm b/guix/build-system/elm.scm index 7405db3d985..e5c74a5bb64 100644 --- a/guix/build-system/elm.scm +++ b/guix/build-system/elm.scm @@ -97,23 +97,15 @@ given VERSION with sha256 checksum HASH." (guix build json) (guix build union))) +;; Lazily resolve bindings to avoid circular dependencies. (define (default-elm) - "Return the default Elm package for builds." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((elm (resolve-interface '(gnu packages elm)))) - (module-ref elm 'elm-sans-reactor))) + (@* (gnu packages elm) elm-sans-reactor)) (define (default-elm-core) - "Return the default elm-core package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((elm (resolve-interface '(gnu packages elm)))) - (module-ref elm 'elm-core))) + (@* (gnu packages elm) elm-core)) (define (default-elm-json) - "Return the default elm-json package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((elm (resolve-interface '(gnu packages elm)))) - (module-ref elm 'elm-json))) + (@* (gnu packages elm) elm-json)) (define* (lower name #:key source inputs native-inputs outputs system target diff --git a/guix/build-system/emacs.scm b/guix/build-system/emacs.scm index 61b9c171b44..df38ef4db01 100644 --- a/guix/build-system/emacs.scm +++ b/guix/build-system/emacs.scm @@ -49,10 +49,8 @@ ,@%default-gnu-imported-modules)) (define (default-emacs) - "Return the default Emacs package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((emacs-mod (resolve-interface '(gnu packages emacs)))) - (module-ref emacs-mod 'emacs-minimal))) + "Return the default Emacs package, resolved lazily." + (@* (gnu packages emacs) emacs-minimal)) (define* (lower name #:key source inputs native-inputs outputs system target diff --git a/guix/build-system/glib-or-gtk.scm b/guix/build-system/glib-or-gtk.scm index c912adab4aa..c6acde81b0f 100644 --- a/guix/build-system/glib-or-gtk.scm +++ b/guix/build-system/glib-or-gtk.scm @@ -77,10 +77,8 @@ (define (default-glib) "Return the default glib package from which we use -\"glib-compile-schemas\"." - ;; Do not use `@' to avoid introducing circular dependencies. - (let ((module (resolve-interface '(gnu packages glib)))) - (module-ref module 'glib))) +\"glib-compile-schemas\", resolved lazily." + (@* (gnu packages glib) glib)) (define* (lower name #:key source inputs native-inputs outputs system target diff --git a/guix/build-system/go.scm b/guix/build-system/go.scm index 90e63640c1a..8b01c5d0b51 100644 --- a/guix/build-system/go.scm +++ b/guix/build-system/go.scm @@ -130,17 +130,13 @@ commit hash and its date rather than a proper release tag." ,@%default-gnu-imported-modules)) (define (default-go) - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((go (resolve-interface '(gnu packages golang)))) - (module-ref go 'go))) + (@* (gnu packages golang) go)) (define (default-gccgo) - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((gcc (resolve-interface '(gnu packages gcc)))) - (module-ref gcc 'gccgo-12))) + (@* (gnu packages gcc) gccgo-12)) (define (make-go-std) - (module-ref (resolve-interface '(gnu packages golang)) 'make-go-std)) + (@* (gnu packages golang) make-go-std)) (define* (lower name #:key source inputs native-inputs outputs system target diff --git a/guix/build-system/haskell.scm b/guix/build-system/haskell.scm index b0019dd0144..ee026fa1171 100644 --- a/guix/build-system/haskell.scm +++ b/guix/build-system/haskell.scm @@ -58,10 +58,8 @@ to NAME and VERSION." ,@%default-gnu-imported-modules)) (define (default-haskell) - "Return the default Haskell package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((haskell (resolve-interface '(gnu packages haskell)))) - (module-ref haskell 'ghc))) + "Return the default Haskell package, resolved lazily." + (@* (gnu packages haskell) ghc)) (define (source-url->revision-url url revision) "Convert URL (a Hackage source URL) to the URL for the Cabal file at diff --git a/guix/build-system/julia.scm b/guix/build-system/julia.scm index e0987496838..c611daf3a27 100644 --- a/guix/build-system/julia.scm +++ b/guix/build-system/julia.scm @@ -45,10 +45,8 @@ ,@%default-gnu-imported-modules)) (define (default-julia) - "Return the default Julia package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((julia-mod (resolve-interface '(gnu packages julia)))) - (module-ref julia-mod 'julia))) + "Return the default Julia package, resolved lazily." + (@* (gnu packages julia) julia)) (define* (lower name #:key source inputs native-inputs outputs system target diff --git a/guix/build-system/linux-module.scm b/guix/build-system/linux-module.scm index d8ebef60d0c..8b2fbcdfc6a 100644 --- a/guix/build-system/linux-module.scm +++ b/guix/build-system/linux-module.scm @@ -45,11 +45,8 @@ ,@%default-gnu-imported-modules)) (define (default-linux) - "Return the default Linux package." - - ;; Do not use `@' to avoid introducing circular dependencies. - (let ((module (resolve-interface '(gnu packages linux)))) - (module-ref module 'linux-libre))) + "Return the default Linux package, resolved lazily." + (@* (gnu packages linux) linux-libre)) (define (system->arch system) (platform-linux-architecture (lookup-platform-by-target-or-system system))) diff --git a/guix/build-system/luanti.scm b/guix/build-system/luanti.scm index 89469162da5..ae1896801a4 100644 --- a/guix/build-system/luanti.scm +++ b/guix/build-system/luanti.scm @@ -30,20 +30,6 @@ ;; ;; 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 ;; Build-side modules imported by default. `((guix build luanti-build-system) @@ -57,11 +43,12 @@ (define (standard-luanti-packages) "Return the list of (NAME PACKAGE OUTPUT) or (NAME PACKAGE) tuples of -standard packages used as implicit inputs of the Luanti build system." - `(("xvfb-run" ,(default-xvfb-run)) - ("optipng" ,(default-optipng)) - ("luanti" ,(default-luanti)) - ("luanti-game" ,(default-luanti-game)) +standard packages used as implicit inputs of the Luanti build system, +resolved lazily." + `(("xvfb-run" ,(@* (gnu packages xorg) xvfb-run)) + ("optipng" ,(@* (gnu packages image) optipng)) + ("luanti" ,(@* (gnu packages luanti) luanti)) + ("luanti-game" ,(@* (gnu packages luanti) minetest-game)) ,@(filter (lambda (input) (member (car input) '("libc" "tar" "gzip" "bzip2" "xz" "locales"))) diff --git a/guix/build-system/maven.scm b/guix/build-system/maven.scm index 03e4e96b892..e2b71165013 100644 --- a/guix/build-system/maven.scm +++ b/guix/build-system/maven.scm @@ -49,61 +49,22 @@ ,@%default-gnu-imported-modules)) (define (default-maven) - "Return the default maven package." - - ;; 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))) + "Return the default maven package, resolved lazily." + (@* (gnu packages maven) maven)) (define (default-jdk) - "Return the default JDK package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((jdk-mod (resolve-interface '(gnu packages java)))) - (module-ref jdk-mod 'icedtea))) + "Return the default JDK package, resolved lazily." + (@* (gnu packages java) icedtea)) (define (default-maven-plugins) - `(("maven-compiler-plugin" ,(default-maven-compiler-plugin)) - ("maven-jar-plugin" ,(default-maven-jar-plugin)) - ("maven-resources-plugin" ,(default-maven-resources-plugin)) - ("maven-surefire-plugin" ,(default-maven-surefire-plugin)) - ("java-surefire-junit4" ,(default-java-surefire-junit4)) - ("maven-install-plugin" ,(default-maven-install-plugin)))) + "Return the default maven plugins, resolved lazily." + `(("maven-compiler-plugin" ,(@* (gnu packages maven) maven-compiler-plugin)) + ("maven-jar-plugin" ,(@* (gnu packages maven) maven-jar-plugin)) + ("maven-surefire-plugin" ,(@* (gnu packages maven) maven-surefire-plugin)) + ("java-surefire-junit4" ,(@* (gnu packages maven) java-surefire-junit4)) + ("maven-install-plugin" ,(@* (gnu packages maven) maven-install-plugin)) + ("maven-resources-plugin" + ,(@* (gnu packages maven) maven-resources-plugin)))) (define %default-exclude `(("org.apache.maven.plugins" . diff --git a/guix/build-system/meson.scm b/guix/build-system/meson.scm index 612e148fb64..6e6eae2cae5 100644 --- a/guix/build-system/meson.scm +++ b/guix/build-system/meson.scm @@ -134,16 +134,12 @@ TRIPLET." ,@%glib-or-gtk-build-system-modules)) (define (default-ninja) - "Return the default ninja package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((module (resolve-interface '(gnu packages ninja)))) - (module-ref module 'ninja/pinned))) + "Return the default ninja package, resolved lazily." + (@* (gnu packages ninja) ninja/pinned)) (define (default-meson) - "Return the default meson package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((module (resolve-interface '(gnu packages build-tools)))) - (module-ref module 'meson))) + "Return the default meson package, resolved lazily." + (@* (gnu packages build-tools) meson)) (define* (lower name #:key source inputs native-inputs outputs system target diff --git a/guix/build-system/minify.scm b/guix/build-system/minify.scm index 98c6e75980d..a9613088b6a 100644 --- a/guix/build-system/minify.scm +++ b/guix/build-system/minify.scm @@ -43,9 +43,7 @@ (define (default-esbuild) "Return the default package to minify JavaScript source files." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((mod (resolve-interface '(gnu packages web)))) - (module-ref mod 'esbuild))) + (@* (gnu packages web) esbuild)) (define* (lower name #:key source inputs native-inputs outputs system @@ -54,7 +52,7 @@ #:rest arguments) "Return a bag for NAME." (define private-keywords - '(#:target #:inputs #:native-inputs)) + '(#:target #:inputs #:native-inputs #:esbuild)) (bag (name name) diff --git a/guix/build-system/mix.scm b/guix/build-system/mix.scm index 4a3ba9fb604..f6de26adac1 100644 --- a/guix/build-system/mix.scm +++ b/guix/build-system/mix.scm @@ -39,16 +39,13 @@ #:export (mix-build-system hexpm-uri)) (define (default-elixir-hex) - (let ((elixir (resolve-interface '(gnu packages elixir)))) - (module-ref elixir 'elixir-hex))) + (@* (gnu packages elixir) elixir-hex)) (define (default-rebar3) - (let ((erlang (resolve-interface '(gnu packages erlang)))) - (module-ref erlang 'rebar3))) + (@* (gnu packages erlang) rebar3)) (define (default-elixir) - (let ((elixir (resolve-interface '(gnu packages elixir)))) - (module-ref elixir 'elixir))) + (@* (gnu packages elixir) elixir)) (define* (strip-prefix name #:optional (prefix "elixir-")) "Return NAME without the prefix PREFIX." diff --git a/guix/build-system/node.scm b/guix/build-system/node.scm index cde0ccb60e5..afc7e0b0cfa 100644 --- a/guix/build-system/node.scm +++ b/guix/build-system/node.scm @@ -44,10 +44,8 @@ ,@%default-gnu-imported-modules)) (define (default-node) - "Return the default Node package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((node (resolve-interface '(gnu packages node)))) - (module-ref node 'node-lts))) + "Return the default Node package, resolved lazily." + (@* (gnu packages node) node-lts)) (define* (lower name #:key source inputs native-inputs outputs system target diff --git a/guix/build-system/ocaml.scm b/guix/build-system/ocaml.scm index 2f2e6dd62e0..d7c40752089 100644 --- a/guix/build-system/ocaml.scm +++ b/guix/build-system/ocaml.scm @@ -68,61 +68,43 @@ ,@%default-gnu-imported-modules)) (define (default-ocaml) - "Return the default OCaml package." - - ;; Do not use `@' to avoid introducing circular dependencies. - (let ((module (resolve-interface '(gnu packages ocaml)))) - (module-ref module 'ocaml))) + "Return the default OCaml package, resolved lazily." + (@* (gnu packages ocaml) ocaml)) (define (default-findlib) - "Return the default OCaml-findlib package." - - ;; Do not use `@' to avoid introducing circular dependencies. - (let ((module (resolve-interface '(gnu packages ocaml)))) - (module-ref module 'ocaml-findlib))) + "Return the default OCaml-findlib package, resolved lazily." + (@* (gnu packages ocaml) ocaml-findlib)) (define (default-dune-build-system) - "Return the 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))) + "Return the dune-build-system, resolved lazily." + (@* (guix build-system dune) dune-build-system)) (define (default-ocaml4.07) - (let ((ocaml (resolve-interface '(gnu packages ocaml)))) - (module-ref ocaml 'ocaml-4.07))) + (@* (gnu packages ocaml) ocaml-4.07)) (define (default-ocaml4.07-findlib) - (let ((module (resolve-interface '(gnu packages ocaml)))) - (module-ref module 'ocaml4.07-findlib))) + (@* (gnu packages ocaml) ocaml4.07-findlib)) (define (default-ocaml4.07-dune) - (let ((module (resolve-interface '(gnu packages ocaml)))) - (module-ref module 'ocaml4.07-dune))) + (@* (gnu packages ocaml) ocaml4.07-dune)) (define (default-ocaml4.09) - (let ((ocaml (resolve-interface '(gnu packages ocaml)))) - (module-ref ocaml 'ocaml-4.09))) + (@* (gnu packages ocaml) ocaml-4.09)) (define (default-ocaml4.09-findlib) - (let ((module (resolve-interface '(gnu packages ocaml)))) - (module-ref module 'ocaml4.09-findlib))) + (@* (gnu packages ocaml) ocaml4.09-findlib)) (define (default-ocaml4.09-dune) - (let ((module (resolve-interface '(gnu packages ocaml)))) - (module-ref module 'ocaml4.09-dune))) + (@* (gnu packages ocaml) ocaml4.09-dune)) (define (default-ocaml5.0) - (let ((ocaml (resolve-interface '(gnu packages ocaml)))) - (module-ref ocaml 'ocaml-5.0))) + (@* (gnu packages ocaml) ocaml-5.0)) (define (default-ocaml5.0-findlib) - (let ((module (resolve-interface '(gnu packages ocaml)))) - (module-ref module 'ocaml5.0-findlib))) + (@* (gnu packages ocaml) ocaml5.0-findlib)) (define (default-ocaml5.0-dune) - (let ((module (resolve-interface '(gnu packages ocaml)))) - (module-ref module 'ocaml5.0-dune))) + (@* (gnu packages ocaml) ocaml5.0-dune)) (define* (package-with-explicit-ocaml ocaml findlib dune old-prefix new-prefix #:key variant-property) diff --git a/guix/build-system/perl.scm b/guix/build-system/perl.scm index 98d48fec7c0..ae2fb87f8e2 100644 --- a/guix/build-system/perl.scm +++ b/guix/build-system/perl.scm @@ -48,11 +48,8 @@ ,@%default-gnu-imported-modules)) (define (default-perl) - "Return the default Perl package." - - ;; Do not use `@' to avoid introducing circular dependencies. - (let ((module (resolve-interface '(gnu packages perl)))) - (module-ref module 'perl))) + "Return the default Perl package, resolved lazily." + (@* (gnu packages perl) perl)) (define* (lower name #:key source inputs native-inputs outputs diff --git a/guix/build-system/pyproject.scm b/guix/build-system/pyproject.scm index 4ad4dc79a1e..03f3cb85444 100644 --- a/guix/build-system/pyproject.scm +++ b/guix/build-system/pyproject.scm @@ -51,15 +51,13 @@ ,@%python-build-system-modules)) (define (default-python) - "Return the default Python package." - ;; 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 - ;; setuptools. This allows us to skip the dependency on setuptools for - ;; packages which don’t need it. And it allows us to more easily swap - ;; out setuptools if a different version is required. - ;; Using python-toolchain here might cause dependency cycles. - (module-ref python 'python-sans-pip-wrapper))) + "Return the default Python package, resolved lazily." + ;; We are using python-sans-pip-wrapper, because it does not contain + ;; setuptools. This allows us to skip the dependency on setuptools for + ;; packages which don’t need it. And it allows us to more easily swap + ;; out setuptools if a different version is required. + ;; Using python-toolchain here might cause dependency cycles. + (@* (gnu packages python) python-sans-pip-wrapper)) ;; TODO: On the next iteration of python-team, migrate the sanity-check to ;; importlib_metadata instead of setuptools. diff --git a/guix/build-system/qt.scm b/guix/build-system/qt.scm index 84e008bfe79..11447e252ff 100644 --- a/guix/build-system/qt.scm +++ b/guix/build-system/qt.scm @@ -62,11 +62,8 @@ ,@%cmake-build-system-modules)) (define (default-qtbase) - "Return the default qtbase package." - - ;; Do not use `@' to avoid introducing circular dependencies. - (let ((module (resolve-interface '(gnu packages qt)))) - (module-ref module 'qtbase-5))) + "Return the default qtbase package, resolved lazily." + (@* (gnu packages qt) qtbase-5)) ;; This barely is a copy from (guix build-system cmake), only adjusted to use ;; the variables defined here. diff --git a/guix/build-system/r.scm b/guix/build-system/r.scm index 4b4b3bf0c9a..d8a41ab6864 100644 --- a/guix/build-system/r.scm +++ b/guix/build-system/r.scm @@ -71,10 +71,8 @@ release corresponding to NAME and VERSION." ,@%default-gnu-imported-modules)) (define (default-r) - "Return the default R package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((r-mod (resolve-interface '(gnu packages statistics)))) - (module-ref r-mod 'r-minimal))) + "Return the default R package, resolved lazily." + (@* (gnu packages statistics) r-minimal)) (define* (lower name #:key source inputs native-inputs outputs system target diff --git a/guix/build-system/rakudo.scm b/guix/build-system/rakudo.scm index 0850d858dea..059903b8a1c 100644 --- a/guix/build-system/rakudo.scm +++ b/guix/build-system/rakudo.scm @@ -44,21 +44,16 @@ ,@%default-gnu-imported-modules)) (define (default-rakudo) - "Return the default Rakudo package." - - ;; Do not use `@' to avoid introducing circular dependencies. - (let ((module (resolve-interface '(gnu packages perl6)))) - (module-ref module 'rakudo))) + "Return the default Rakudo package, resolved lazily." + (@* (gnu packages perl6) rakudo)) (define (default-prove6) - "Return the default perl6-tap-harness package for tests." - (let ((module (resolve-interface '(gnu packages perl6)))) - (module-ref module 'perl6-tap-harness))) + "Return the default perl6-tap-harness package for tests, resolved lazily." + (@* (gnu packages perl6) perl6-tap-harness)) (define (default-zef) "Return the default perl6-zef package." - (let ((module (resolve-interface '(gnu packages perl6)))) - (module-ref module 'perl6-zef))) + (@* (gnu packages perl6) perl6-zef)) (define* (lower name #:key source inputs native-inputs outputs diff --git a/guix/build-system/rebar.scm b/guix/build-system/rebar.scm index 7c7cc5870f8..a17f2d69fc3 100644 --- a/guix/build-system/rebar.scm +++ b/guix/build-system/rebar.scm @@ -59,16 +59,12 @@ and VERSION." ,@%default-gnu-imported-modules)) (define (default-rebar3) - "Return the default Rebar3 package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((erlang-mod (resolve-interface '(gnu packages erlang)))) - (module-ref erlang-mod 'rebar3))) + "Return the default Rebar3 package, resolved lazily." + (@* (gnu packages erlang) rebar3)) (define (default-erlang) - "Return the default Erlang package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((erlang-mod (resolve-interface '(gnu packages erlang)))) - (module-ref erlang-mod 'erlang))) + "Return the default Erlang package, resolved lazily." + (@* (gnu packages erlang) erlang)) (define* (lower name #:key source inputs native-inputs outputs system target diff --git a/guix/build-system/renpy.scm b/guix/build-system/renpy.scm index 015dd7c2104..9500b2722ad 100644 --- a/guix/build-system/renpy.scm +++ b/guix/build-system/renpy.scm @@ -34,10 +34,8 @@ renpy-build-system)) (define (default-renpy) - "Return the default Ren'py package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((module (resolve-interface '(gnu packages game-development)))) - (module-ref module 'renpy))) + "Return the default Ren'py package, resolved lazily." + (@* (gnu packages game-development) renpy)) (define %renpy-build-system-modules ;; Build-side modules imported by default. diff --git a/guix/build-system/ruby.scm b/guix/build-system/ruby.scm index f258ade6e75..571b61b3b80 100644 --- a/guix/build-system/ruby.scm +++ b/guix/build-system/ruby.scm @@ -43,10 +43,8 @@ NAME and VERSION." ,@%default-gnu-imported-modules)) (define (default-ruby) - "Return the default Ruby package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((ruby (resolve-interface '(gnu packages ruby)))) - (module-ref ruby 'ruby))) + "Return the default Ruby package, resolved lazily." + (@* (gnu packages ruby) ruby)) (define* (lower name #:key source inputs native-inputs outputs system target diff --git a/guix/build-system/scons.scm b/guix/build-system/scons.scm index e76c419b1e4..485f172e8a7 100644 --- a/guix/build-system/scons.scm +++ b/guix/build-system/scons.scm @@ -42,10 +42,8 @@ ,@%default-gnu-imported-modules)) (define (default-scons) - "Return the default SCons package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((build-tools (resolve-interface '(gnu packages build-tools)))) - (module-ref build-tools 'scons))) + "Return the default SCons package, resolved lazily." + (@* (gnu packages build-tools) scons)) (define* (lower name #:key source inputs native-inputs outputs system target diff --git a/guix/build-system/texlive.scm b/guix/build-system/texlive.scm index 35587b50fc0..861f035e3c8 100644 --- a/guix/build-system/texlive.scm +++ b/guix/build-system/texlive.scm @@ -54,16 +54,12 @@ ,@%default-gnu-imported-modules)) (define (default-texlive-bin) - "Return the default texlive-bin package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((tex-mod (resolve-interface '(gnu packages tex)))) - (module-ref tex-mod 'texlive-bin))) + "Return the default texlive-bin package, resolved lazily." + (@* (gnu packages tex) texlive-bin)) (define (texlive-latex-bin) - "Return the default texlive-latex-bin package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((tex-mod (resolve-interface '(gnu packages tex)))) - (module-ref tex-mod 'texlive-latex-bin))) + "Return the default texlive-latex-bin package, resolved lazily." + (@* (gnu packages tex) texlive-latex-bin)) (define* (lower name #:key diff --git a/guix/build-system/tree-sitter.scm b/guix/build-system/tree-sitter.scm index 769294dedd1..d17c9a9ea7a 100644 --- a/guix/build-system/tree-sitter.scm +++ b/guix/build-system/tree-sitter.scm @@ -41,20 +41,16 @@ ;; Lazily resolve the bindings to avoid circular dependencies. (define (default-guile-json) - (let ((mod (resolve-interface '(gnu packages guile)))) - (module-ref mod 'guile-json-4))) + (@* (gnu packages guile) guile-json-4)) (define (default-node) - (let ((mod (resolve-interface '(gnu packages node)))) - (module-ref mod 'node-lts))) + (@* (gnu packages node) node-lts)) (define (default-tree-sitter) - (let ((mod (resolve-interface '(gnu packages tree-sitter)))) - (module-ref mod 'tree-sitter))) + (@* (gnu packages tree-sitter) tree-sitter)) (define (default-tree-sitter-cli) - (let ((mod (resolve-interface '(gnu packages tree-sitter)))) - (module-ref mod 'tree-sitter-cli))) + (@* (gnu packages tree-sitter) tree-sitter-cli)) (define* (lower name #:key source inputs native-inputs outputs system target diff --git a/guix/build-system/vim.scm b/guix/build-system/vim.scm index dddf7ea14b2..f97fb6d9259 100644 --- a/guix/build-system/vim.scm +++ b/guix/build-system/vim.scm @@ -45,15 +45,12 @@ ,@%copy-build-system-modules)) (define (default-vim) - "Return the default Vim package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((vim (resolve-interface '(gnu packages vim)))) - (module-ref vim 'vim))) + "Return the default Vim package, resolved lazily." + (@* (gnu packages vim) vim)) (define (default-neovim) - "Return the default Neovim package." - (let ((vim (resolve-interface '(gnu packages vim)))) - (module-ref vim 'neovim))) + "Return the default Neovim package, resolved lazily." + (@* (gnu packages vim) neovim)) (define* (lower name #:key source diff --git a/guix/build-system/zig.scm b/guix/build-system/zig.scm index 5d95e0bec49..6326a000135 100644 --- a/guix/build-system/zig.scm +++ b/guix/build-system/zig.scm @@ -32,10 +32,8 @@ (define (default-zig) - "Return the default zig package." - ;; Lazily resolve the binding to avoid a circular dependency. - (let ((zig (resolve-interface '(gnu packages zig)))) - (module-ref zig 'zig))) + "Return the default zig package, resolved lazily." + (@* (gnu packages zig) zig)) (define %zig-build-system-modules ;; Build-side modules imported by default.