Subject: [PATCH rust-team 1/2] build-system: cargo: Add add-dependencies procedure.

From: Herman Rimm <[email-masked]>
Date: Fri, 3 Jan 2025 20:40:58 +0100

* guix/build-system/cargo.scm (add-dependencies): Add procedure.

Change-Id: I5385d136697bb6d41a5bd4f6120150f841369a04
---
 guix/build-system/cargo.scm | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/guix/build-system/cargo.scm b/guix/build-system/cargo.scm
index 452f7f78d01..b22b9247a1c 100644
--- a/guix/build-system/cargo.scm
+++ b/guix/build-system/cargo.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2019 Ivan Petkov <[email-masked]>
 ;;; Copyright © 2020 Jakub Kądziołka <[email-masked]>
 ;;; Copyright © 2021, 2024 Efraim Flashner <[email-masked]>
-;;; Copyright © 2024 Herman Rimm <[email-masked]>
+;;; Copyright © 2024-2025 Herman Rimm <[email-masked]>
 ;;; Copyright © 2024 Maxim Cournoyer <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -38,7 +38,8 @@ (define-module (guix build-system cargo)
   #:use-module (ice-9 vlist)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
-  #:export (%cargo-build-system-modules
+  #:export (add-dependencies
+            %cargo-build-system-modules
             %cargo-utils-modules
             cargo-build-system
             %crate-base-url
@@ -46,6 +47,18 @@ (define-module (guix build-system cargo)
             crate-url?
             crate-uri))
 
+;; TODO: Move to (guix build cargo-utils).
+(define* (add-dependencies dependencies)
+  "DEPENDENCIES is a list of (crate version features).  It is formatted
+and appendended to Cargo.toml."
+  #~(let ((port (open-file "Cargo.toml" "a")))
+      (format port "
+~:{[dev-dependencies.~a]
+version = ~s
+~@[features = [~{~s~^,~}]~]~%~}"
+              '#$dependencies)
+      (close port)))
+
 (define %crate-base-url
   (make-parameter "https://crates.io"))
 (define crate-url
-- 
2.45.2