GNU bug report logs - #73212
[PATCH] gnu: bcachefs-tools: Update to 1.11.0.

Previous Next

Package: guix-patches;

Reported by: Tobias Geerinckx-Rice <me <at> tobias.gr>

Date: Thu, 12 Sep 2024 21:35:02 UTC

Severity: normal

Tags: patch

To reply to this bug, email your comments to 73212 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#73212; Package guix-patches. (Thu, 12 Sep 2024 21:35:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Tobias Geerinckx-Rice <me <at> tobias.gr>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Thu, 12 Sep 2024 21:35:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Tobias Geerinckx-Rice <me <at> tobias.gr>
To: guix-patches <at> gnu.org
Subject: [PATCH] gnu: bcachefs-tools: Update to 1.11.0.
Date: Thu, 12 Sep 2024 23:33:57 +0200
* gnu/packages/crates-io.scm (rust-rustix-for-bcachefs-tools):
New public variable.
* gnu/packages/file-systems.scm (bcachefs-tools-rust-target)
(bcachefs-tools-target/release, bcachefs-tools-cargo-args)
(bcachefs-tools-make-flags, bcachefs-tools-make-install-flags):
New variables.
(bcachefs-tools): Update to 1.11.0.
[build-system]: Switch to Cargo.
[arguments]: Remove #:make-flags.  Add Cargo keywords.
Run the test suite with upstream defaults.
Delete 'promote-mount.bcachefs.sh phase.
[native-inputs]: Remove python, python-docutils, python-pytest,
and valgrind.
[inputs]: Remove bash-minimal, coreutils-minimal, gawk, and util-linux.
Add clang.
(bcachefs-tools/static): Modify #:phases instead of #:make-flags,
and adjust accordingly.

Change-Id: I872f5dea88b75f855f3cdcbffbbd9c70d7ebe8d6
---
 gnu/packages/crates-io.scm    |  16 ++-
 gnu/packages/file-systems.scm | 190 +++++++++++++++++++++-------------
 2 files changed, 134 insertions(+), 72 deletions(-)

diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm
index 0cdb071ea0..c08ccd29fd 100644
--- a/gnu/packages/crates-io.scm
+++ b/gnu/packages/crates-io.scm
@@ -66141,7 +66141,7 @@ (define-public rust-rusticata-macros-4
 (define-public rust-rustix-0.38
   (package
     (name "rust-rustix")
-    (version "0.38.31")
+    (version "0.38.31") ;XXX drop rust-rustix-for-bcachefs-tools when updating
     (source
      (origin
        (method url-fetch)
@@ -66195,6 +66195,20 @@ (define-public rust-rustix-0.38
     ;; Apache 2.0, Apache 2.0 with LLVM exception, or Expat.
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-rustix-for-bcachefs-tools
+  ;; The package above is too old; too many dependents to update it directly.
+  (package
+    (inherit rust-rustix-0.38)
+    (name (package-name rust-rustix-0.38))
+    (version "0.38.34")
+    (source
+     (origin
+       (inherit (package-source rust-rustix-0.38))
+       (uri (crate-uri "rustix" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "03vkqa2ism7q56rkifyy8mns0wwqrk70f4i4fd53r97p8b05xp3h"))))))
+
 (define-public rust-rustix-0.37
   (package
     (inherit rust-rustix-0.38)
diff --git a/gnu/packages/file-systems.scm b/gnu/packages/file-systems.scm
index c6a49a6bc0..a5020e1f87 100644
--- a/gnu/packages/file-systems.scm
+++ b/gnu/packages/file-systems.scm
@@ -34,8 +34,10 @@ (define-module (gnu packages file-systems)
   #:use-module (guix gexp)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
+  #:use-module (guix platform)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix build-system cargo)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
@@ -58,6 +60,7 @@ (define-module (gnu packages file-systems)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cpp)
+  #:use-module (gnu packages crates-io)
   #:use-module (gnu packages crypto)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages cyrus-sasl)
@@ -85,6 +88,7 @@ (define-module (gnu packages file-systems)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages libunwind)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages llvm)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages man)
   #:use-module (gnu packages m4)
@@ -589,10 +593,39 @@ (define-public gphotofs
     (home-page "http://www.gphoto.org/proj/gphotofs/")
     (license license:gpl2+)))
 
+(define bcachefs-tools-rust-target
+  (platform-rust-target (lookup-platform-by-target-or-system
+                         (or (%current-target-system)
+                             (%current-system)))))
+
+(define bcachefs-tools-target/release
+  (string-append "target/" bcachefs-tools-rust-target "/release"))
+
+(define bcachefs-tools-cargo-args
+  ;; Distinct from -MAKE-FLAGS for use with ‘cargo test’ in 'check.
+  #~(list "--release"
+          (string-append "--target=" #$bcachefs-tools-rust-target)))
+
+;; XXX We want to share common make flags across different packages & phases,
+;; but the cargo-build-system doesn't allow #:make-flags.
+(define bcachefs-tools-make-flags
+  ;; These result of these flags should be as minimal as possible.
+  ;; Enable any optional features in the bcachefs-tools package instead.
+  #~(list (string-append "CARGO_BUILD_ARGS="
+                         (string-join #$bcachefs-tools-cargo-args " "))
+          (string-append "CC=" #$(cc-for-target))
+          (string-append "PKG_CONFIG=" #$(pkg-config-for-target))))
+
+(define bcachefs-tools-make-install-flags
+  #~(cons* (string-append "PREFIX=" #$output)
+           "INITRAMFS_DIR=$(PREFIX)/share/initramfs-tools"
+           "PKGCONFIG_UDEVRULESDIR=$(PREFIX)/lib/udev/rules.d"
+           #$bcachefs-tools-make-flags))
+
 (define-public bcachefs-tools
   (package
     (name "bcachefs-tools")
-    (version "1.4.1")
+    (version "1.11.0")
     (source
      (origin
        (method git-fetch)
@@ -601,84 +634,74 @@ (define-public bcachefs-tools
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0axwbckqrw1v3v50nzhpkvpyjbjwy3rq5bv23db84x3xia497apq"))))
-    (build-system gnu-build-system)
+        (base32 "0m6z8z1cv78ay9yspypgr0kv70ck4wpln5n44f6n57i7sihqhrrg"))))
+    (build-system cargo-build-system)
     (arguments
-     (list #:make-flags
-           #~(list (string-append "VERSION=" #$version) ; ‘v…-nogit’ otherwise
-                   (string-append "PREFIX=" #$output)
-                   "INITRAMFS_DIR=$(PREFIX)/share/initramfs-tools"
-                   "PKGCONFIG_UDEVRULESDIR=$(PREFIX)/lib/udev/rules.d"
-                   (string-append "CC=" #$(cc-for-target))
-                   (string-append "PKG_CONFIG=" #$(pkg-config-for-target))
-                   ;; ‘This will be less of an option in the future, as more
-                   ;; code gets rewritten in Rust.’
-                   "NO_RUST=better")
-           #:phases
-           #~(modify-phases %standard-phases
-               (delete 'configure)    ; no configure script
-               (replace 'check
-                 ;; The test suite is moribund upstream (‘never been useful’),
-                 ;; but let's keep running it as a sanity check until then.
-                 (lambda* (#:key tests? make-flags #:allow-other-keys)
-                   (when tests?
-                     ;; We must manually build the test_helper first.
-                     (apply invoke "make" "tests" make-flags)
-                     (invoke (string-append
-                              #$(this-package-native-input "python-pytest")
-                              "/bin/pytest") "-k"
-                              ;; These fail (‘invalid argument’) on kernels
-                              ;; with a previous bcachefs version.
-                              (string-append "not test_format and "
-                                             "not test_fsck and "
-                                             "not test_list and "
-                                             "not test_list_inodes and "
-                                             "not test_list_dirent")))))
-               (add-after 'install 'promote-mount.bcachefs.sh
-                 ;; The (optional) ‘mount.bcachefs’ requires rust:cargo.
-                 ;; This shell alternative does the job well enough for now.
-                 (lambda* (#:key inputs #:allow-other-keys)
-                   (define (whence file)
-                     (dirname (search-input-file inputs file)))
-                   (let ((mount (string-append #$output
-                                               "/sbin/mount.bcachefs")))
-                     (delete-file mount) ; symlink to ‘bcachefs’
-                     (copy-file "mount.bcachefs.sh" mount)
-                     ;; WRAP-SCRIPT causes bogus ‘Insufficient arguments’ errors.
-                     (wrap-program mount
-                       `("PATH" ":" prefix
-                         ,(list (getcwd)
-                                (whence "bin/tail")
-                                (whence "bin/awk")
-                                (whence "bin/mount"))))))))))
+     (list
+      #:install-source? #f
+      ;; The Makefile CCs *every* C file anywhere beneath the build directory,
+      ;; even in Rust crates, creating ludicrous and totally bogus dependencies
+      ;; such as the Android SDK.  Put our crates elsewhere.
+      #:vendor-dir "../guix-vendor"
+      #:cargo-inputs
+      `(("rust-aho-corasick" ,rust-aho-corasick-1)
+        ("rust-anstream" ,rust-anstream-0.6)
+        ("rust-anstyle" ,rust-anstyle-1)
+        ("rust-anstyle-parse" ,rust-anstyle-parse-0.2)
+        ("rust-anyhow" ,rust-anyhow-1)
+        ("rust-autocfg" ,rust-autocfg-1)
+        ("rust-bitfield" ,rust-bitfield-0.14)
+        ("rust-clap" ,rust-clap-4)
+        ("rust-clap-complete" ,rust-clap-complete-4)
+        ("rust-either" ,rust-either-1)
+        ("rust-errno" ,rust-errno-0.2)
+        ("rust-env-logger" ,rust-env-logger-0.10)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-memoffset" ,rust-memoffset-0.8)
+        ("rust-owo-colors" ,rust-owo-colors-4)
+        ("rust-rustix" ,rust-rustix-for-bcachefs-tools)
+        ("rust-strum" ,rust-strum-0.26)
+        ("rust-strum-macros" ,rust-strum-macros-0.26)
+        ("rust-udev" ,rust-udev-0.7)
+        ("rust-uuid" ,rust-uuid-1)
+        ("rust-zeroize" ,rust-zeroize-1))
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'build
+            (lambda* (#:key parallel-build? #:allow-other-keys)
+              (apply invoke "make"
+                     "-j" (if parallel-build?
+                              (number->string (parallel-job-count))
+                              "1")
+                     (string-append "VERSION=" #$version)
+                     #$bcachefs-tools-make-flags)))
+          (add-before 'install 'patch-install
+            ;; ‘make install’ hard-codes target/release/bcachefs, which is
+            ;; incorrect when passing --target, as required to cross-compile or
+            ;; even just link statically.  We always pass it, so always patch.
+            (lambda _
+              (substitute* "Makefile"
+                (("target/release")
+                 #$bcachefs-tools-target/release))))
+          (replace 'install
+            (lambda _
+              (apply invoke "make" "install"
+                     #$bcachefs-tools-make-install-flags))))))
     (native-inputs
-     (cons* pkg-config
-            ;; For generating documentation with rst2man.
-            python
-            python-docutils
-            ;; For tests.
-            python-pytest
-            (if (member (%current-system) (package-supported-systems valgrind))
-                (list valgrind)
-                '())))
+     (list pkg-config))
     (inputs
-     (list bash-minimal
+     (list clang
            eudev
            keyutils
            libaio
            libscrypt
            libsodium
            liburcu
-           `(,util-linux "lib")
+           `(,util-linux "lib")         ;libblkid
            lz4
            zlib
-           `(,zstd "lib")
-
-           ;; Only for mount.bcachefs.sh.
-           bash-minimal
-           coreutils-minimal
-           gawk
-           util-linux))
+           `(,zstd "lib")))
     (home-page "https://bcachefs.org/")
     (synopsis "Tools to create and manage bcachefs file systems")
     (description
@@ -701,9 +724,34 @@ (define-public bcachefs-tools/static
     (name "bcachefs-tools-static")
     (arguments
      (substitute-keyword-arguments (package-arguments bcachefs-tools)
-       ((#:make-flags make-flags)
-        #~(append #$make-flags
-                  (list "LDFLAGS=-static")))))
+       ((#:phases phases #~%standard-phases)
+        #~(modify-phases #$phases
+            (add-after 'configure 'set-rust-flags
+              (lambda _
+                (setenv "RUSTFLAGS" (string-join
+                                     '("-C" "link-arg=-z"
+                                       "-C" "link-arg=muldefs"
+                                       "-C" "target-feature=+crt-static"
+                                       "-C" "relocation-model=static")
+                                     " "))))
+            (replace 'build
+              (lambda* (#:key parallel-build? #:allow-other-keys)
+                (apply invoke "make"
+                       "-j" (if parallel-build?
+                                (number->string (parallel-job-count))
+                                "1")
+                       (string-append "VERSION="
+                                      #$(package-version this-package))
+                       #$bcachefs-tools-make-flags)))
+            (replace 'check
+              (lambda* (#:key tests? #:allow-other-keys)
+                (when tests?
+                  (apply invoke "cargo" "test" #$bcachefs-tools-cargo-args))))
+            (replace 'install
+              (lambda _
+                (apply invoke "make" "install"
+                       (string-append "PREFIX=" #$output)
+                       #$bcachefs-tools-make-install-flags)))))))
     (inputs (modify-inputs (package-inputs bcachefs-tools)
               (prepend `(,eudev "static")
                        `(,keyutils "static")

base-commit: 191e0f9e5214783f8261ef9b6325abfff834ecbc
prerequisite-patch-id: 5e305d35139259ba5f9f91c562c22b926bf9e801
prerequisite-patch-id: 2aa756ea2c34fed8b4cb5dcde72fa558a396d3bd
prerequisite-patch-id: 5a5eb3c0f4ce59d4ce340a14bb697b3f1d189e71
prerequisite-patch-id: 241cb117acd301ac875feea5574544adb9e2abf4
prerequisite-patch-id: 5b7fb5afed6a45b653178002c3bc17c6d3015566
prerequisite-patch-id: 4fc8aac18afc1b417e3c9825015f6013a7d31209
-- 
2.46.0





This bug report was last modified 272 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.