mirror of
https://codeberg.org/guix/guix.git
synced 2025-10-02 02:15:12 +00:00
build-system: cargo: Support packaging Cargo workspace.
* guix/build-system/cargo.scm (cargo-build, cargo-cross-build) [#:cargo-package-crates]: New argument. * guix/build/cargo-build-system.scm (package): Use it. * doc/guix.texi (Build Systems)[cargo-build-system]: Document it. Change-Id: I45ccd95e90827d47127015cb0bda2d41f792335b
This commit is contained in:
parent
5d294e2023
commit
878bdd7fb6
3 changed files with 30 additions and 2 deletions
|
@ -9576,6 +9576,13 @@ to create a source crate for future use. The @code{install} phase installs
|
||||||
the binaries defined by the crate. Unless @code{install-source? #f} is
|
the binaries defined by the crate. Unless @code{install-source? #f} is
|
||||||
defined it will also install a source crate repository of itself and unpacked
|
defined it will also install a source crate repository of itself and unpacked
|
||||||
sources, to ease in future hacking on rust packages.
|
sources, to ease in future hacking on rust packages.
|
||||||
|
|
||||||
|
This build system supports cargo workspaces. Parameter
|
||||||
|
@code{#:cargo-package-crates} (default: @code{''()}) allows specifying names of
|
||||||
|
library crates to package in the @code{package} phase. Specified crates are
|
||||||
|
packaged from left to right, in case there's dependency among them. For
|
||||||
|
example, specifying @code{''("pcre2-sys" "pcre2")} will package
|
||||||
|
@code{"pcre2-sys"} first and then @code{"pcre2"}.
|
||||||
@end defvar
|
@end defvar
|
||||||
|
|
||||||
@defvar chicken-build-system
|
@defvar chicken-build-system
|
||||||
|
|
|
@ -98,6 +98,7 @@ to NAME and VERSION."
|
||||||
(vendor-dir "guix-vendor")
|
(vendor-dir "guix-vendor")
|
||||||
(cargo-build-flags ''("--release"))
|
(cargo-build-flags ''("--release"))
|
||||||
(cargo-test-flags ''())
|
(cargo-test-flags ''())
|
||||||
|
(cargo-package-crates ''())
|
||||||
(cargo-package-flags ''("--no-metadata" "--no-verify"))
|
(cargo-package-flags ''("--no-metadata" "--no-verify"))
|
||||||
(features ''())
|
(features ''())
|
||||||
(skip-build? #f)
|
(skip-build? #f)
|
||||||
|
@ -126,6 +127,7 @@ to NAME and VERSION."
|
||||||
#:vendor-dir #$vendor-dir
|
#:vendor-dir #$vendor-dir
|
||||||
#:cargo-build-flags #$(sexp->gexp cargo-build-flags)
|
#:cargo-build-flags #$(sexp->gexp cargo-build-flags)
|
||||||
#:cargo-test-flags #$(sexp->gexp cargo-test-flags)
|
#:cargo-test-flags #$(sexp->gexp cargo-test-flags)
|
||||||
|
#:cargo-package-crates #$(sexp->gexp cargo-package-crates)
|
||||||
#:cargo-package-flags #$(sexp->gexp cargo-package-flags)
|
#:cargo-package-flags #$(sexp->gexp cargo-package-flags)
|
||||||
#:cargo-target #$(cargo-triplet system)
|
#:cargo-target #$(cargo-triplet system)
|
||||||
#:features #$(sexp->gexp features)
|
#:features #$(sexp->gexp features)
|
||||||
|
@ -158,6 +160,7 @@ to NAME and VERSION."
|
||||||
(vendor-dir "guix-vendor")
|
(vendor-dir "guix-vendor")
|
||||||
(cargo-build-flags ''("--release"))
|
(cargo-build-flags ''("--release"))
|
||||||
(cargo-test-flags ''())
|
(cargo-test-flags ''())
|
||||||
|
(cargo-package-crates ''())
|
||||||
(cargo-package-flags ''("--no-metadata" "--no-verify"))
|
(cargo-package-flags ''("--no-metadata" "--no-verify"))
|
||||||
(cargo-target (cargo-triplet (or target system)))
|
(cargo-target (cargo-triplet (or target system)))
|
||||||
(features ''())
|
(features ''())
|
||||||
|
@ -189,6 +192,7 @@ to NAME and VERSION."
|
||||||
#:vendor-dir #$vendor-dir
|
#:vendor-dir #$vendor-dir
|
||||||
#:cargo-build-flags #$(sexp->gexp cargo-build-flags)
|
#:cargo-build-flags #$(sexp->gexp cargo-build-flags)
|
||||||
#:cargo-test-flags #$(sexp->gexp cargo-test-flags)
|
#:cargo-test-flags #$(sexp->gexp cargo-test-flags)
|
||||||
|
#:cargo-package-crates #$(sexp->gexp cargo-package-crates)
|
||||||
#:cargo-package-flags #$(sexp->gexp cargo-package-flags)
|
#:cargo-package-flags #$(sexp->gexp cargo-package-flags)
|
||||||
#:cargo-target #$(cargo-triplet (or target system))
|
#:cargo-target #$(cargo-triplet (or target system))
|
||||||
#:features #$(sexp->gexp features)
|
#:features #$(sexp->gexp features)
|
||||||
|
|
|
@ -302,11 +302,16 @@ directory = '" vendor-dir "'") port)
|
||||||
source
|
source
|
||||||
skip-build?
|
skip-build?
|
||||||
install-source?
|
install-source?
|
||||||
|
(cargo-package-crates '())
|
||||||
(cargo-package-flags '("--no-metadata" "--no-verify"))
|
(cargo-package-flags '("--no-metadata" "--no-verify"))
|
||||||
|
(vendor-dir "guix-vendor")
|
||||||
#:allow-other-keys)
|
#:allow-other-keys)
|
||||||
"Run 'cargo-package' for a given Cargo package."
|
"Run 'cargo-package' for a given Cargo package."
|
||||||
(if install-source?
|
(if install-source?
|
||||||
(if skip-build?
|
;; NOTE: Cargo workspace packaging support:
|
||||||
|
;; #:install-source? #t + #:cargo-package-crates.
|
||||||
|
(if (and (null? cargo-package-crates)
|
||||||
|
skip-build?)
|
||||||
(begin
|
(begin
|
||||||
(install-file source "target/package")
|
(install-file source "target/package")
|
||||||
(with-directory-excursion "target/package"
|
(with-directory-excursion "target/package"
|
||||||
|
@ -324,7 +329,19 @@ directory = '" vendor-dir "'") port)
|
||||||
;;error: invalid inclusion of reserved file name Cargo.toml.orig in package source
|
;;error: invalid inclusion of reserved file name Cargo.toml.orig in package source
|
||||||
(when (file-exists? "Cargo.toml.orig")
|
(when (file-exists? "Cargo.toml.orig")
|
||||||
(delete-file "Cargo.toml.orig"))
|
(delete-file "Cargo.toml.orig"))
|
||||||
|
|
||||||
|
(if (null? cargo-package-crates)
|
||||||
(apply invoke `("cargo" "package" "--offline" ,@cargo-package-flags))
|
(apply invoke `("cargo" "package" "--offline" ,@cargo-package-flags))
|
||||||
|
(for-each
|
||||||
|
(lambda (pkg)
|
||||||
|
(apply invoke "cargo" "package" "--offline" "--package" pkg
|
||||||
|
cargo-package-flags)
|
||||||
|
(for-each
|
||||||
|
(lambda (crate)
|
||||||
|
(invoke "tar" "xzf" crate "-C" vendor-dir))
|
||||||
|
(find-files "target/package" "\\.crate$"))
|
||||||
|
(patch-cargo-checksums #:vendor-dir vendor-dir))
|
||||||
|
cargo-package-crates))
|
||||||
|
|
||||||
;; Then unpack the crate, reset the timestamp of all contained files, and
|
;; Then unpack the crate, reset the timestamp of all contained files, and
|
||||||
;; repack them. This is necessary to ensure that they are reproducible.
|
;; repack them. This is necessary to ensure that they are reproducible.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue