From b186b25aea14d470b8e5b146547da13133b25f0f Mon Sep 17 00:00:00 2001 From: Efraim Flashner Date: Thu, 11 Sep 2025 14:55:49 +0300 Subject: [PATCH] build-system: cargo: Migrate to (json). Fixes guix/guix#2620. * guix/build-system/cargo.scm (%cargo-build-system-modules): Remove (guix build json). (cargo-guile-json): New procedure. (cargo-build, cargo-cross-build): Add guile-json extension. * guix/build/cargo-build-system.scm (manifest-targets): Adjust to using (json). Change-Id: I832a5555e63520241d3a4c4ccd2dcf860573dbab Change-Id: I545f72b00f17e88ad19fe33870785367cac63ac4 Signed-off-by: Sharlatan Hellseher --- guix/build-system/cargo.scm | 16 ++++++++++++---- guix/build/cargo-build-system.scm | 4 ++-- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/guix/build-system/cargo.scm b/guix/build-system/cargo.scm index e37da8d8730d6fdf299409a03d82cd7169172e62..42bd495c307d5e0eaab922a488bad1859885fbac 100644 --- a/guix/build-system/cargo.scm +++ b/guix/build-system/cargo.scm @@ -5,7 +5,7 @@ ;;; Copyright © 2016 David Craven ;;; Copyright © 2019 Ivan Petkov ;;; Copyright © 2020 Jakub Kądziołka -;;; Copyright © 2021, 2024 Efraim Flashner +;;; Copyright © 2021, 2024, 2025 Efraim Flashner ;;; Copyright © 2024 Herman Rimm ;;; Copyright © 2024 Maxim Cournoyer ;;; @@ -44,6 +44,7 @@ #:export (%cargo-build-system-modules %cargo-utils-modules cargo-build-system + cargo-guile-json %crate-base-url crate-url crate-url? @@ -117,6 +118,10 @@ unavailable." (let ((module (resolve-interface '(gnu packages rust)))) (module-ref module 'make-rust-sysroot))) +(define (cargo-guile-json) + "Return the default guile-json package, resolved lazily." + (@* (gnu packages guile) guile-json-4)) + (define* (cargo-triplet #:optional (target (or (%current-target-system) (%current-system)))) @@ -132,7 +137,6 @@ unavailable." (define %cargo-build-system-modules ;; Build-side modules imported by default. `((guix build cargo-build-system) - (guix build json) ,@%cargo-utils-modules)) (define* (cargo-build name inputs @@ -156,12 +160,14 @@ unavailable." (search-paths '()) (system (%current-system)) (guile #f) + (guile-json (cargo-guile-json)) (imported-modules %cargo-build-system-modules) (modules '((guix build cargo-build-system) (guix build utils)))) "Build SOURCE using CARGO, and with INPUTS." (define builder + (with-extensions (list guile-json) (with-imported-modules imported-modules #~(begin (use-modules #$@(sexp->gexp modules)) @@ -190,7 +196,7 @@ unavailable." #:inputs #$(input-tuples->gexp inputs) #:search-paths '#$(sexp->gexp (map search-path-specification->sexp - search-paths)))))) + search-paths))))))) (gexp->derivation name builder #:system system @@ -222,12 +228,14 @@ unavailable." (native-search-paths '()) (system (%current-system)) (guile #f) + (guile-json (default-guile-json)) (imported-modules %cargo-build-system-modules) (modules '((guix build cargo-build-system) (guix build utils)))) "Cross-build SOURCE using CARGO, and with INPUTS." (define builder + (with-extensions (list guile-json) (with-imported-modules imported-modules #~(begin (use-modules #$@(sexp->gexp modules)) @@ -263,7 +271,7 @@ unavailable." search-paths)) #:native-search-paths '#$(sexp->gexp (map search-path-specification->sexp - native-search-paths)))))) + native-search-paths))))))) (gexp->derivation name builder #:system system diff --git a/guix/build/cargo-build-system.scm b/guix/build/cargo-build-system.scm index 2c321ec2125be3d470053ec525b76aafad378f9f..1c0531b41f658e7417e0a2188fc444ba0a0efcc4 100644 --- a/guix/build/cargo-build-system.scm +++ b/guix/build/cargo-build-system.scm @@ -25,7 +25,6 @@ (define-module (guix build cargo-build-system) #:use-module ((guix build gnu-build-system) #:prefix gnu:) - #:use-module (guix build json) #:use-module ((guix build utils) #:hide (delete)) #:use-module (ice-9 binary-ports) #:use-module (ice-9 popen) @@ -38,6 +37,7 @@ #:use-module (ice-9 threads) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) + #:use-module (json) #:export (%standard-phases cargo-build)) @@ -50,7 +50,7 @@ (define (manifest-targets) "Extract all targets from the Cargo.toml manifest" (let* ((port (open-input-pipe "cargo read-manifest")) - (data (read-json port)) + (data (json->scm port)) (targets (or (assoc-ref data "targets") '()))) (close-port port) targets))