all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* [bug#39959] [PATCH] cargo-build-system: Accept a #:features argument
@ 2020-03-06 21:44 Jakub Kądziołka
  2020-03-23 22:28 ` bug#39959: Done: " Jakub Kądziołka
  0 siblings, 1 reply; 2+ messages in thread
From: Jakub Kądziołka @ 2020-03-06 21:44 UTC (permalink / raw)
  To: 39959

* guix/build/cargo-build-system.scm (build, install): Pass the features
  to cargo.
  (check): Remove indirection layer for consistency with build and
  install.
* guix/build-system/cargo.scm (cargo-build): New argument; pass it into
  the builder.
* gnu/packages/rust-apps.scm (ripgrep): Use the new argument instead of
  a custom phase.
---

I am looking into packaging rustup, which, like ripgrep, also needs to
pass a --features argument to cargo. This suggests that proper support
for it in the build system is warranted.

In #39445, Efraim suggested using cargo-build-flags as an argument to
"cargo install". Alas, the --release flag is not accepted by "cargo
install" at all, which makes a design like this necessary.

Unresolved question: can this be merged directly to master? There are
exactly 300 hits for cargo-build-system in
gnu/packages/{rust-apps,crates-io}.scm if we exclude all the libraries
with #:skip-build? #t.

 gnu/packages/rust-apps.scm        | 14 ++------------
 guix/build-system/cargo.scm       |  2 ++
 guix/build/cargo-build-system.scm | 12 ++++++++----
 3 files changed, 12 insertions(+), 16 deletions(-)

diff --git a/gnu/packages/rust-apps.scm b/gnu/packages/rust-apps.scm
index 72c982f23c..fa02ded8ec 100644
--- a/gnu/packages/rust-apps.scm
+++ b/gnu/packages/rust-apps.scm
@@ -243,18 +243,8 @@ provides defaults for 80% of the use cases.")
                 (install-file manpage (string-append
                                         (assoc-ref outputs "out")
                                         "/share/man/man1"))))
-             #t))
-         (replace 'install
-           ;; Adapted from (guix build cargo-build-system). The flags need to
-           ;; be passed to `cargo install' too, as otherwise it will build
-           ;; another binary, without the features.
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (mkdir-p out)
-               (setenv "CARGO_TARGET_DIR" "./target")
-               (invoke "cargo" "install" "--path" "." "--root" out
-                       "--features" "pcre2")))))
-       #:cargo-build-flags '("--release" "--features" "pcre2")))
+             #t)))
+       #:features '("pcre2")))
     (native-inputs
      `(("asciidoc" ,asciidoc)
        ("pcre2" ,pcre2)
diff --git a/guix/build-system/cargo.scm b/guix/build-system/cargo.scm
index 1e8b3a578e..2b5f301dc2 100644
--- a/guix/build-system/cargo.scm
+++ b/guix/build-system/cargo.scm
@@ -76,6 +76,7 @@ to NAME and VERSION."
                       (vendor-dir "guix-vendor")
                       (cargo-build-flags ''("--release"))
                       (cargo-test-flags ''("--release"))
+                      (features ''())
                       (skip-build? #f)
                       (phases '(@ (guix build cargo-build-system)
                                   %standard-phases))
@@ -104,6 +105,7 @@ to NAME and VERSION."
                     #:vendor-dir ,vendor-dir
                     #:cargo-build-flags ,cargo-build-flags
                     #:cargo-test-flags ,cargo-test-flags
+                    #:features ,features
                     #:skip-build? ,skip-build?
                     #:tests? ,(and tests? (not skip-build?))
                     #:phases ,phases
diff --git a/guix/build/cargo-build-system.scm b/guix/build/cargo-build-system.scm
index 0721989589..0e2faee3c1 100644
--- a/guix/build/cargo-build-system.scm
+++ b/guix/build/cargo-build-system.scm
@@ -140,11 +140,14 @@ directory = '" port)
 
 (define* (build #:key
                 skip-build?
+                features
                 (cargo-build-flags '("--release"))
                 #:allow-other-keys)
   "Build a given Cargo package."
   (or skip-build?
-      (apply invoke `("cargo" "build" ,@cargo-build-flags))))
+      (apply invoke "cargo" "build"
+             "--features" (string-join features)
+             cargo-build-flags)))
 
 (define* (check #:key
                 tests?
@@ -152,10 +155,10 @@ directory = '" port)
                 #:allow-other-keys)
   "Run tests for a given Cargo package."
   (if tests?
-      (apply invoke `("cargo" "test" ,@cargo-test-flags))
+      (apply invoke "cargo" "test" cargo-test-flags)
       #t))
 
-(define* (install #:key inputs outputs skip-build? #:allow-other-keys)
+(define* (install #:key inputs outputs skip-build? features #:allow-other-keys)
   "Install a given Cargo package."
   (let* ((out (assoc-ref outputs "out")))
     (mkdir-p out)
@@ -168,7 +171,8 @@ directory = '" port)
     ;; otherwise cargo will raise an error.
     (or skip-build?
         (not (has-executable-target?))
-        (invoke "cargo" "install" "--path" "." "--root" out))))
+        (invoke "cargo" "install" "--path" "." "--root" out
+                "--features" (string-join features)))))
 
 (define %standard-phases
   (modify-phases gnu:%standard-phases
-- 
2.25.1

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* bug#39959: Done: [PATCH] cargo-build-system: Accept a #:features argument
  2020-03-06 21:44 [bug#39959] [PATCH] cargo-build-system: Accept a #:features argument Jakub Kądziołka
@ 2020-03-23 22:28 ` Jakub Kądziołka
  0 siblings, 0 replies; 2+ messages in thread
From: Jakub Kądziołka @ 2020-03-23 22:28 UTC (permalink / raw)
  To: 39959-done

[-- Attachment #1: Type: text/plain, Size: 63 bytes --]

Pushed to staging as 927c2518465579d48315e8e6b5102097c146fece.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2020-03-23 22:29 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-06 21:44 [bug#39959] [PATCH] cargo-build-system: Accept a #:features argument Jakub Kądziołka
2020-03-23 22:28 ` bug#39959: Done: " Jakub Kądziołka

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.