GNU bug report logs - #72553
[PATCH rust-team 0/4] Several patches removed from core-updates

Previous Next

Package: guix-patches;

Reported by: Christopher Baines <mail <at> cbaines.net>

Date: Sat, 10 Aug 2024 07:11:01 UTC

Severity: normal

Tags: patch

Done: Andreas Enge <andreas <at> enge.fr>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 72553 in the body.
You can then email your comments to 72553 AT debbugs.gnu.org in the normal way.

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#72553; Package guix-patches. (Sat, 10 Aug 2024 07:11:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Christopher Baines <mail <at> cbaines.net>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Sat, 10 Aug 2024 07:11:02 GMT) Full text and rfc822 format available.

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

From: Christopher Baines <mail <at> cbaines.net>
To: guix-patches <at> gnu.org
Subject: [PATCH rust-team 0/4] Several patches removed from core-updates
Date: Sat, 10 Aug 2024 08:09:41 +0100
[Message part 1 (text/plain, inline)]
These patches were on core-updates, but they no longer applied when
rebasing the branch, I'm guessing due to changes pushed to master as
part of the recent rust-team branch merge.

I'm not sure if any of these changes need to go on core-updates, at
least rust seems to build for me without these changes so I've removed
them for now. Maybe some changes will be needed on core-updates, but if
not, maybe they can go to rust-team or master as appropriate.


Efraim Flashner (1):
  gnu: rust: Fix building.

Maxim Cournoyer (2):
  gnu: rust: Use gexps; fix enable-profiling phase.
  gnu: rust: Disable token_not_logged test.

Milkey Mouse (1):
  gnu: rust: Add profiling support.

 gnu/packages/rust.scm | 463 ++++++++++++++++++++++--------------------
 1 file changed, 242 insertions(+), 221 deletions(-)
[signature.asc (application/pgp-signature, inline)]

Information forwarded to efraim <at> flashner.co.il, guix-patches <at> gnu.org:
bug#72553; Package guix-patches. (Sat, 10 Aug 2024 07:13:01 GMT) Full text and rfc822 format available.

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

From: Christopher Baines <mail <at> cbaines.net>
To: 72553 <at> debbugs.gnu.org
Subject: [PATCH 2/4] gnu: rust: Fix building.
Date: Sat, 10 Aug 2024 08:11:45 +0100
From: Efraim Flashner <efraim <at> flashner.co.il>

* gnu/packages/rust.scm (rust)[arguments]: Adjust 'unpack-compiler-rt
phase to correctly copy the sources into the target directory.  Adjust
'enable-profiling phase to come after an existing phase.
[native-inputs]: Add clang-runtime-source.

Change-Id: I2e05fa86c4eaf8c2f5f3562d9f7939cd881cde3f
---
 gnu/packages/rust.scm | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index 4a3ad99e88..fe503b0d5f 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -1223,13 +1223,14 @@ (define-public rust
                                      out "/lib\");\n"))))))
              (add-after 'unpack 'unpack-profiler-rt
                ;; Copy compiler-rt sources to where libprofiler_builtins looks
-               ;; for its vendored copy.  Keep the clang-runtime version in
-               ;; sync with the LLVM version used to build Rust.
+               ;; for its vendored copy.
                (lambda* (#:key inputs #:allow-other-keys)
                  (mkdir-p "src/llvm-project/compiler-rt")
-                 (invoke "tar" "-xf" #$(package-source clang-runtime-15)
-                   "-C" "src/llvm-project/compiler-rt" "--strip-components=1")))
-             (add-after 'enable-codegen-tests 'enable-profiling
+                 (copy-recursively
+                   (string-append (assoc-ref inputs "clang-source")
+                                  "/compiler-rt")
+                   "src/llvm-project/compiler-rt")))
+             (add-after 'configure 'enable-profiling
                (lambda _
                  (substitute* "config.toml"
                    (("^profiler =.*$") "")
@@ -1315,10 +1316,13 @@ (define-public rust
       (inputs
        (modify-inputs (package-inputs base-rust)
                       (prepend curl libffi `(,nghttp2 "lib") zlib)))
-      ;; Add test inputs.
-      (native-inputs (cons* `("gdb" ,gdb/pinned)
-                            `("procps" ,procps)
-                            (package-native-inputs base-rust))))))
+      (native-inputs (cons*
+                      ;; Keep in sync with the llvm used to build rust.
+                      `("clang-source" ,(package-source clang-runtime-15))
+                      ;; Add test inputs.
+                      `("gdb" ,gdb/pinned)
+                      `("procps" ,procps)
+                      (package-native-inputs base-rust))))))
 
 (define*-public (make-rust-sysroot target)
   (make-rust-sysroot/implementation target rust))
-- 
2.45.2





Information forwarded to efraim <at> flashner.co.il, guix-patches <at> gnu.org:
bug#72553; Package guix-patches. (Sat, 10 Aug 2024 07:13:02 GMT) Full text and rfc822 format available.

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

From: Christopher Baines <mail <at> cbaines.net>
To: 72553 <at> debbugs.gnu.org
Subject: [PATCH 1/4] gnu: rust: Add profiling support.
Date: Sat, 10 Aug 2024 08:11:44 +0100
From: Milkey Mouse <milkeymouse <at> meme.institute>

* gnu/packages/rust.scm (rust-1.52)
[phases] <unpack-profiler-rt, enable-profiling>: New phases.

Change-Id: Iecb4aef518e52f71ff7f539778bf0341288a3458
---
 gnu/packages/rust.scm | 25 +++++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)

diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index 12529d2420..4a3ad99e88 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -1216,11 +1216,24 @@ (define-public rust
                (lambda* (#:key outputs #:allow-other-keys)
                  (let ((out (assoc-ref outputs "out")))
                    (substitute* "src/bootstrap/src/core/builder.rs"
-                      ((" = rpath.*" all)
-                       (string-append all
-                                      "                "
-                                      "rustflags.arg(\"-Clink-args=-Wl,-rpath="
-                                      out "/lib\");\n"))))))
+                     ((" = rpath.*" all)
+                      (string-append all
+                                     "                "
+                                     "rustflags.arg(\"-Clink-args=-Wl,-rpath="
+                                     out "/lib\");\n"))))))
+             (add-after 'unpack 'unpack-profiler-rt
+               ;; Copy compiler-rt sources to where libprofiler_builtins looks
+               ;; for its vendored copy.  Keep the clang-runtime version in
+               ;; sync with the LLVM version used to build Rust.
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (mkdir-p "src/llvm-project/compiler-rt")
+                 (invoke "tar" "-xf" #$(package-source clang-runtime-15)
+                   "-C" "src/llvm-project/compiler-rt" "--strip-components=1")))
+             (add-after 'enable-codegen-tests 'enable-profiling
+               (lambda _
+                 (substitute* "config.toml"
+                   (("^profiler =.*$") "")
+                   (("\\[build\\]") "\n[build]\nprofiler = true\n"))))
              (add-after 'configure 'add-gdb-to-config
                (lambda* (#:key inputs #:allow-other-keys)
                  (let ((gdb (assoc-ref inputs "gdb")))
@@ -1236,7 +1249,7 @@ (define-public rust
                                            (number->string (parallel-job-count))
                                            "1"))))
                    (invoke "./x.py" job-spec "build"
-                           "library/std"    ;rustc
+                           "library/std" ;rustc
                            "src/tools/cargo"
                            "src/tools/clippy"
                            "src/tools/rust-analyzer"

base-commit: ce055b806eaff8fec329c30ae0deb82c50a86240
-- 
2.45.2





Information forwarded to efraim <at> flashner.co.il, guix-patches <at> gnu.org:
bug#72553; Package guix-patches. (Sat, 10 Aug 2024 07:13:03 GMT) Full text and rfc822 format available.

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

From: Christopher Baines <mail <at> cbaines.net>
To: 72553 <at> debbugs.gnu.org
Subject: [PATCH 4/4] gnu: rust: Disable token_not_logged test.
Date: Sat, 10 Aug 2024 08:11:47 +0100
From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>

* gnu/packages/rust.scm (rust) [arguments]: Disable an extra test in the
disable-tests-using-cargo-publish phase.

Change-Id: I7d5d9603cfeeffd95f565b5bda455e28022fa745
---
 gnu/packages/rust.scm | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index 13e57cd3f5..1d89cd212c 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -1100,11 +1100,16 @@ (define-public rust
                       #$@(make-ignore-test-list
                           '("fn case"))))))
               (add-after 'unpack 'disable-tests-using-cargo-publish
+                ;; The publish procedure doesn't work in the build environment
+                ;; (see: https://github.com/rust-lang/rust/issues/120340).
                 (lambda _
                   (with-directory-excursion "src/tools/cargo/tests/testsuite"
                     (substitute* "alt_registry.rs"
                       #$@(make-ignore-test-list
                           '("fn warn_for_unused_fields")))
+                    (substitute* "registry_auth.rs"
+                      #$@(make-ignore-test-list
+                          '("fn token_not_logged")))
                     (substitute* '("cargo_add/locked_unchanged/mod.rs"
                                    "cargo_add/lockfile_updated/mod.rs"
                                    "cargo_remove/update_lock_file/mod.rs")
-- 
2.45.2





Information forwarded to efraim <at> flashner.co.il, guix-patches <at> gnu.org:
bug#72553; Package guix-patches. (Sat, 10 Aug 2024 07:13:03 GMT) Full text and rfc822 format available.

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

From: Christopher Baines <mail <at> cbaines.net>
To: 72553 <at> debbugs.gnu.org
Subject: [PATCH 3/4] gnu: rust: Use gexps; fix enable-profiling phase.
Date: Sat, 10 Aug 2024 08:11:46 +0100
From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>

This is a follow up commit to 8219ab0443129c71eef83ee4bd3aae0a0a12b6f9, which
had a few problems.

* gnu/packages/rust.scm (rust) [arguments]: Use gexps.  Replace
unpack-profiler-rt phase with copy-compiler-rt-source.  Rename
the enable-profiling phase to enable-profiler; streamline substitute
regexp/replacement.

Change-Id: I058de60f25c6a96cf4bbcd3a7dd4a682341e2ac5
---
 gnu/packages/rust.scm | 493 +++++++++++++++++++++---------------------
 1 file changed, 246 insertions(+), 247 deletions(-)

diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index fe503b0d5f..13e57cd3f5 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -11,7 +11,7 @@
 ;;; Copyright © 2020, 2021 Jakub Kądziołka <kuba <at> kadziolka.net>
 ;;; Copyright © 2020 Pierre Langlois <pierre.langlois <at> gmx.com>
 ;;; Copyright © 2020 Matthew James Kraai <kraai <at> ftbfs.org>
-;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
+;;; Copyright © 2021, 2024 Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
 ;;; Copyright © 2021 (unmatched parenthesis <paren <at> disroot.org>
 ;;; Copyright © 2022 Zheng Junjie <873216071 <at> qq.com>
 ;;; Copyright © 2022 Jim Newsome <jnewsome <at> torproject.org>
@@ -1072,257 +1072,256 @@ (define-public rust
          (strip-keyword-arguments '(#:tests?)
            (package-arguments base-rust))
          ((#:phases phases)
-          `(modify-phases ,phases
-             (add-after 'unpack 'relax-gdb-auto-load-safe-path
-               ;; Allow GDB to load binaries from any location, otherwise the
-               ;; gdbinfo tests fail.  This is only useful when testing with a
-               ;; GDB version newer than 8.2.
-               (lambda _
-                 (setenv "HOME" (getcwd))
-                 (with-output-to-file (string-append (getenv "HOME") "/.gdbinit")
-                   (lambda _
-                     (format #t "set auto-load safe-path /~%")))
-                 ;; Do not launch gdb with '-nx' which causes it to not execute
-                 ;; any init file.
-                 (substitute* "src/tools/compiletest/src/runtest.rs"
-                   (("\"-nx\".as_ref\\(\\), ")
-                    ""))))
-             (add-after 'unpack 'disable-tests-requiring-git
-               (lambda _
-                 (substitute* "src/tools/cargo/tests/testsuite/git.rs"
-                   ,@(make-ignore-test-list
-                      '("fn fetch_downloads_with_git2_first_")))))
-             (add-after 'unpack 'disable-tests-requiring-mercurial
-               (lambda _
-                 (with-directory-excursion "src/tools/cargo/tests/testsuite/cargo_init"
-                   (substitute* '("mercurial_autodetect/mod.rs"
-                                  "simple_hg_ignore_exists/mod.rs")
-                     ,@(make-ignore-test-list
-                        '("fn case"))))))
-             (add-after 'unpack 'disable-tests-using-cargo-publish
-               (lambda _
-                 (with-directory-excursion "src/tools/cargo/tests/testsuite"
-                   (substitute* "alt_registry.rs"
-                     ,@(make-ignore-test-list
-                        '("fn warn_for_unused_fields")))
-                   (substitute* '("cargo_add/locked_unchanged/mod.rs"
-                                  "cargo_add/lockfile_updated/mod.rs"
-                                  "cargo_remove/update_lock_file/mod.rs")
-                     ,@(make-ignore-test-list
-                        '("fn case")))
-                   (substitute* "git_shallow.rs"
-                     ,@(make-ignore-test-list
-                        '("fn gitoxide_clones_git_dependency_with_shallow_protocol_and_git2_is_used_for_followup_fetches"
-                          "fn gitoxide_clones_registry_with_shallow_protocol_and_aborts_and_updates_again"
-                          "fn gitoxide_clones_registry_with_shallow_protocol_and_follow_up_fetch_maintains_shallowness"
-                          "fn gitoxide_clones_registry_with_shallow_protocol_and_follow_up_with_git2_fetch"
-                          "fn gitoxide_clones_registry_without_shallow_protocol_and_follow_up_fetch_uses_shallowness"
-                          "fn gitoxide_shallow_clone_followed_by_non_shallow_update"
-                          "fn gitoxide_clones_shallow_two_revs_same_deps"
-                          "fn gitoxide_git_dependencies_switch_from_branch_to_rev"
-                          "fn shallow_deps_work_with_revisions_and_branches_mixed_on_same_dependency")))
-                   (substitute* "install.rs"
-                     ,@(make-ignore-test-list
-                        '("fn failed_install_retains_temp_directory")))
-                   (substitute* "offline.rs"
-                     ,@(make-ignore-test-list
-                        '("fn gitoxide_cargo_compile_offline_with_cached_git_dep_shallow_dep")))
-                   (substitute* "patch.rs"
-                     ,@(make-ignore-test-list
-                        '("fn gitoxide_clones_shallow_old_git_patch"))))))
-             ,@(if (target-riscv64?)
-                   ;; Keep this phase separate so it can be adjusted without needing
-                   ;; to adjust the skipped tests on other architectures.
-                   `((add-after 'unpack 'disable-tests-broken-on-riscv64
-                       (lambda _
-                         (with-directory-excursion "src/tools/cargo/tests/testsuite"
-                           (substitute* "build.rs"
-                             ,@(make-ignore-test-list
-                                 '("fn uplift_dwp_of_bin_on_linux")))
-                           (substitute* "cache_lock.rs"
-                             ,@(make-ignore-test-list
-                                 '("fn multiple_download")))))))
-                   `())
-             (add-after 'unpack 'disable-tests-broken-on-aarch64
-               (lambda _
-                 (with-directory-excursion "src/tools/cargo/tests/testsuite/"
-                   (substitute* "build_script_extra_link_arg.rs"
-                     ,@(make-ignore-test-list
-                        '("fn build_script_extra_link_arg_bin_single")))
-                   (substitute* "build_script.rs"
-                     ,@(make-ignore-test-list
-                        '("fn env_test")))
-                   (substitute* "collisions.rs"
-                     ,@(make-ignore-test-list
-                        '("fn collision_doc_profile_split")))
-                   (substitute* "concurrent.rs"
-                     ,@(make-ignore-test-list
-                        '("fn no_deadlock_with_git_dependencies")))
-                   (substitute* "features2.rs"
-                     ,@(make-ignore-test-list
-                        '("fn dep_with_optional_host_deps_activated"))))))
-             (add-after 'unpack 'patch-command-exec-tests
-               ;; This test suite includes some tests that the stdlib's
-               ;; `Command` execution properly handles in situations where
-               ;; the environment or PATH variable are empty, but this fails
-               ;; since we don't have `echo` available at its usual FHS
-               ;; location.
-               (lambda _
-                 (substitute* "tests/ui/command/command-exec.rs"
-                   (("Command::new\\(\"echo\"\\)")
-                    (format #f "Command::new(~s)" (which "echo"))))))
-             (add-after 'unpack 'patch-command-uid-gid-test
-               (lambda _
-                 (substitute* "tests/ui/command/command-uid-gid.rs"
-                   (("/bin/sh") (which "sh"))
-                   (("/bin/ls") (which "ls")))))
-             (add-after 'unpack 'skip-shebang-tests
-               ;; This test make sure that the parser behaves properly when a
-               ;; source file starts with a shebang. Unfortunately, the
-               ;; patch-shebangs phase changes the meaning of these edge-cases.
-               ;; We skip the test since it's drastically unlikely Guix's
-               ;; packaging will introduce a bug here.
-               (lambda _
-                 (delete-file "tests/ui/parser/shebang/sneaky-attrib.rs")))
-             (add-after 'unpack 'patch-process-tests
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((bash (assoc-ref inputs "bash")))
-                   (with-directory-excursion "library/std/src"
-                     (substitute* "process/tests.rs"
-                       (("\"/bin/sh\"")
-                        (string-append "\"" bash "/bin/sh\"")))
-                     ;; The three tests which are known to fail upstream on QEMU
-                     ;; emulation on aarch64 and riscv64 also fail on x86_64 in
-                     ;; Guix's build system.  Skip them on all builds.
-                     (substitute* "sys/unix/process/process_common/tests.rs"
-                       ;; We can't use make-ignore-test-list because we will get
-                       ;; build errors due to the double [ignore] block.
-                       (("target_arch = \"arm\"" arm)
-                        (string-append "target_os = \"linux\",\n"
-                                       "        " arm)))))))
-             (add-after 'unpack 'disable-interrupt-tests
-               (lambda _
-                 ;; This test hangs in the build container; disable it.
-                 (substitute* "src/tools/cargo/tests/testsuite/freshness.rs"
-                   ,@(make-ignore-test-list
-                      '("fn linking_interrupted")))
-                 ;; Likewise for the ctrl_c_kills_everyone test.
-                 (substitute* "src/tools/cargo/tests/testsuite/death.rs"
-                   ,@(make-ignore-test-list
-                      '("fn ctrl_c_kills_everyone")))))
-             (add-after 'unpack 'adjust-rpath-values
-               ;; This adds %output:out to rpath, allowing us to install utilities in
-               ;; different outputs while reusing the shared libraries.
-               (lambda* (#:key outputs #:allow-other-keys)
-                 (let ((out (assoc-ref outputs "out")))
-                   (substitute* "src/bootstrap/src/core/builder.rs"
-                     ((" = rpath.*" all)
-                      (string-append all
-                                     "                "
-                                     "rustflags.arg(\"-Clink-args=-Wl,-rpath="
-                                     out "/lib\");\n"))))))
-             (add-after 'unpack 'unpack-profiler-rt
-               ;; Copy compiler-rt sources to where libprofiler_builtins looks
-               ;; for its vendored copy.
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (mkdir-p "src/llvm-project/compiler-rt")
-                 (copy-recursively
-                   (string-append (assoc-ref inputs "clang-source")
-                                  "/compiler-rt")
-                   "src/llvm-project/compiler-rt")))
-             (add-after 'configure 'enable-profiling
-               (lambda _
-                 (substitute* "config.toml"
-                   (("^profiler =.*$") "")
-                   (("\\[build\\]") "\n[build]\nprofiler = true\n"))))
-             (add-after 'configure 'add-gdb-to-config
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((gdb (assoc-ref inputs "gdb")))
-                   (substitute* "config.toml"
-                     (("^python =.*" all)
-                      (string-append all
-                                     "gdb = \"" gdb "/bin/gdb\"\n"))))))
-             (replace 'build
-               ;; Phase overridden to also build more tools.
-               (lambda* (#:key parallel-build? #:allow-other-keys)
-                 (let ((job-spec (string-append
-                                  "-j" (if parallel-build?
-                                           (number->string (parallel-job-count))
-                                           "1"))))
-                   (invoke "./x.py" job-spec "build"
-                           "library/std" ;rustc
-                           "src/tools/cargo"
-                           "src/tools/clippy"
-                           "src/tools/rust-analyzer"
-                           "src/tools/rustfmt"))))
-             (replace 'check
-               ;; Phase overridden to also test more tools.
-               (lambda* (#:key tests? parallel-build? #:allow-other-keys)
-                 (when tests?
-                   (let ((job-spec (string-append
-                                    "-j" (if parallel-build?
-                                             (number->string (parallel-job-count))
-                                             "1"))))
-                     (invoke "./x.py" job-spec "test" "-vv"
-                             "library/std"
-                             "src/tools/cargo"
-                             "src/tools/clippy"
-                             "src/tools/rust-analyzer"
-                             "src/tools/rustfmt")))))
-             (replace 'install
-               ;; Phase overridden to also install more tools.
-               (lambda* (#:key outputs #:allow-other-keys)
-                 (invoke "./x.py" "install")
-                 (substitute* "config.toml"
-                   ;; Adjust the prefix to the 'cargo' output.
-                   (("prefix = \"[^\"]*\"")
-                    (format #f "prefix = ~s" (assoc-ref outputs "cargo"))))
-                 (invoke "./x.py" "install" "cargo")
-                 (substitute* "config.toml"
-                   ;; Adjust the prefix to the 'tools' output.
-                   (("prefix = \"[^\"]*\"")
-                    (format #f "prefix = ~s" (assoc-ref outputs "tools"))))
-                 (invoke "./x.py" "install" "clippy")
-                 (invoke "./x.py" "install" "rust-analyzer")
-                 (invoke "./x.py" "install" "rustfmt")))
-             (add-after 'install 'install-rust-src
-               (lambda* (#:key outputs #:allow-other-keys)
-                 (let ((out (assoc-ref outputs "rust-src"))
-                       (dest "/lib/rustlib/src/rust"))
-                   (mkdir-p (string-append out dest))
-                   (copy-recursively "library" (string-append out dest "/library"))
-                   (copy-recursively "src" (string-append out dest "/src")))))
-             (add-after 'install 'remove-uninstall-script
-               (lambda* (#:key outputs #:allow-other-keys)
-                 ;; This script has no use on Guix
-                 ;; and it retains a reference to the host's bash.
-                 (delete-file (string-append (assoc-ref outputs "out")
-                                             "/lib/rustlib/uninstall.sh"))))
-             (add-after 'install-rust-src 'wrap-rust-analyzer
-               (lambda* (#:key outputs #:allow-other-keys)
-                 (let ((bin (string-append (assoc-ref outputs "tools") "/bin")))
-                   (rename-file (string-append bin "/rust-analyzer")
-                                (string-append bin "/.rust-analyzer-real"))
-                   (call-with-output-file (string-append bin "/rust-analyzer")
-                     (lambda (port)
-                       (format port "#!~a
+          #~(modify-phases #$phases
+              (add-after 'unpack 'relax-gdb-auto-load-safe-path
+                ;; Allow GDB to load binaries from any location, otherwise the
+                ;; gdbinfo tests fail.  This is only useful when testing with a
+                ;; GDB version newer than 8.2.
+                (lambda _
+                  (setenv "HOME" (getcwd))
+                  (with-output-to-file (string-append (getenv "HOME") "/.gdbinit")
+                    (lambda _
+                      (format #t "set auto-load safe-path /~%")))
+                  ;; Do not launch gdb with '-nx' which causes it to not execute
+                  ;; any init file.
+                  (substitute* "src/tools/compiletest/src/runtest.rs"
+                    (("\"-nx\".as_ref\\(\\), ")
+                     ""))))
+              (add-after 'unpack 'disable-tests-requiring-git
+                (lambda _
+                  (substitute* "src/tools/cargo/tests/testsuite/git.rs"
+                    #$@(make-ignore-test-list
+                        '("fn fetch_downloads_with_git2_first_")))))
+              (add-after 'unpack 'disable-tests-requiring-mercurial
+                (lambda _
+                  (with-directory-excursion "src/tools/cargo/tests/testsuite/cargo_init"
+                    (substitute* '("mercurial_autodetect/mod.rs"
+                                   "simple_hg_ignore_exists/mod.rs")
+                      #$@(make-ignore-test-list
+                          '("fn case"))))))
+              (add-after 'unpack 'disable-tests-using-cargo-publish
+                (lambda _
+                  (with-directory-excursion "src/tools/cargo/tests/testsuite"
+                    (substitute* "alt_registry.rs"
+                      #$@(make-ignore-test-list
+                          '("fn warn_for_unused_fields")))
+                    (substitute* '("cargo_add/locked_unchanged/mod.rs"
+                                   "cargo_add/lockfile_updated/mod.rs"
+                                   "cargo_remove/update_lock_file/mod.rs")
+                      #$@(make-ignore-test-list
+                          '("fn case")))
+                    (substitute* "git_shallow.rs"
+                      #$@(make-ignore-test-list
+                          '("fn gitoxide_clones_git_dependency_with_shallow_protocol_and_git2_is_used_for_followup_fetches"
+                            "fn gitoxide_clones_registry_with_shallow_protocol_and_aborts_and_updates_again"
+                            "fn gitoxide_clones_registry_with_shallow_protocol_and_follow_up_fetch_maintains_shallowness"
+                            "fn gitoxide_clones_registry_with_shallow_protocol_and_follow_up_with_git2_fetch"
+                            "fn gitoxide_clones_registry_without_shallow_protocol_and_follow_up_fetch_uses_shallowness"
+                            "fn gitoxide_shallow_clone_followed_by_non_shallow_update"
+                            "fn gitoxide_clones_shallow_two_revs_same_deps"
+                            "fn gitoxide_git_dependencies_switch_from_branch_to_rev"
+                            "fn shallow_deps_work_with_revisions_and_branches_mixed_on_same_dependency")))
+                    (substitute* "install.rs"
+                      #$@(make-ignore-test-list
+                          '("fn failed_install_retains_temp_directory")))
+                    (substitute* "offline.rs"
+                      #$@(make-ignore-test-list
+                          '("fn gitoxide_cargo_compile_offline_with_cached_git_dep_shallow_dep")))
+                    (substitute* "patch.rs"
+                      #$@(make-ignore-test-list
+                          '("fn gitoxide_clones_shallow_old_git_patch"))))))
+              #$@(if (target-riscv64?)
+                     ;; Keep this phase separate so it can be adjusted without needing
+                     ;; to adjust the skipped tests on other architectures.
+                     #~((add-after 'unpack 'disable-tests-broken-on-riscv64
+                          (lambda _
+                            (with-directory-excursion "src/tools/cargo/tests/testsuite"
+                              (substitute* "build.rs"
+                                #$@(make-ignore-test-list
+                                    '("fn uplift_dwp_of_bin_on_linux")))
+                              (substitute* "cache_lock.rs"
+                                #$@(make-ignore-test-list
+                                    '("fn multiple_download")))))))
+                     #~())
+              (add-after 'unpack 'disable-tests-broken-on-aarch64
+                (lambda _
+                  (with-directory-excursion "src/tools/cargo/tests/testsuite/"
+                    (substitute* "build_script_extra_link_arg.rs"
+                      #$@(make-ignore-test-list
+                          '("fn build_script_extra_link_arg_bin_single")))
+                    (substitute* "build_script.rs"
+                      #$@(make-ignore-test-list
+                          '("fn env_test")))
+                    (substitute* "collisions.rs"
+                      #$@(make-ignore-test-list
+                          '("fn collision_doc_profile_split")))
+                    (substitute* "concurrent.rs"
+                      #$@(make-ignore-test-list
+                          '("fn no_deadlock_with_git_dependencies")))
+                    (substitute* "features2.rs"
+                      #$@(make-ignore-test-list
+                          '("fn dep_with_optional_host_deps_activated"))))))
+              (add-after 'unpack 'patch-command-exec-tests
+                ;; This test suite includes some tests that the stdlib's
+                ;; `Command` execution properly handles in situations where
+                ;; the environment or PATH variable are empty, but this fails
+                ;; since we don't have `echo` available at its usual FHS
+                ;; location.
+                (lambda _
+                  (substitute* "tests/ui/command/command-exec.rs"
+                    (("Command::new\\(\"echo\"\\)")
+                     (format #f "Command::new(~s)" (which "echo"))))))
+              (add-after 'unpack 'patch-command-uid-gid-test
+                (lambda _
+                  (substitute* "tests/ui/command/command-uid-gid.rs"
+                    (("/bin/sh") (which "sh"))
+                    (("/bin/ls") (which "ls")))))
+              (add-after 'unpack 'skip-shebang-tests
+                ;; This test make sure that the parser behaves properly when a
+                ;; source file starts with a shebang. Unfortunately, the
+                ;; patch-shebangs phase changes the meaning of these edge-cases.
+                ;; We skip the test since it's drastically unlikely Guix's
+                ;; packaging will introduce a bug here.
+                (lambda _
+                  (delete-file "tests/ui/parser/shebang/sneaky-attrib.rs")))
+              (add-after 'unpack 'patch-process-tests
+                (lambda* (#:key inputs #:allow-other-keys)
+                  (let ((bash (assoc-ref inputs "bash")))
+                    (with-directory-excursion "library/std/src"
+                      (substitute* "process/tests.rs"
+                        (("\"/bin/sh\"")
+                         (string-append "\"" bash "/bin/sh\"")))
+                      ;; The three tests which are known to fail upstream on QEMU
+                      ;; emulation on aarch64 and riscv64 also fail on x86_64 in
+                      ;; Guix's build system.  Skip them on all builds.
+                      (substitute* "sys/unix/process/process_common/tests.rs"
+                        ;; We can't use make-ignore-test-list because we will get
+                        ;; build errors due to the double [ignore] block.
+                        (("target_arch = \"arm\"" arm)
+                         (string-append "target_os = \"linux\",\n"
+                                        "        " arm)))))))
+              (add-after 'unpack 'disable-interrupt-tests
+                (lambda _
+                  ;; This test hangs in the build container; disable it.
+                  (substitute* "src/tools/cargo/tests/testsuite/freshness.rs"
+                    #$@(make-ignore-test-list
+                        '("fn linking_interrupted")))
+                  ;; Likewise for the ctrl_c_kills_everyone test.
+                  (substitute* "src/tools/cargo/tests/testsuite/death.rs"
+                    #$@(make-ignore-test-list
+                        '("fn ctrl_c_kills_everyone")))))
+              (add-after 'unpack 'adjust-rpath-values
+                ;; This adds %output:out to rpath, allowing us to install utilities in
+                ;; different outputs while reusing the shared libraries.
+                (lambda* (#:key outputs #:allow-other-keys)
+                  (let ((out (assoc-ref outputs "out")))
+                    (substitute* "src/bootstrap/src/core/builder.rs"
+                      ((" = rpath.*" all)
+                       (string-append all
+                                      "                "
+                                      "rustflags.arg(\"-Clink-args=-Wl,-rpath="
+                                      out "/lib\");\n"))))))
+              (add-after 'unpack 'copy-compiler-rt-source
+                ;; Note: Keep the clang-runtime version in sync with the LLVM
+                ;; version used to build Rust.
+                (lambda _
+                  (let ((compiler-rt "src/llvm-project/compiler-rt"))
+                    (mkdir-p compiler-rt)
+                    (copy-recursively
+                     (string-append #$(package-source clang-runtime-15)
+                                    "/compiler-rt")
+                     compiler-rt))))
+              (add-after 'configure 'enable-profiler
+                (lambda _
+                  (substitute* "config.toml"
+                    (("^profiler =.*") "")
+                    (("\\[build]")
+                     "[build]\nprofiler = true\n"))))
+              (add-after 'configure 'add-gdb-to-config
+                (lambda* (#:key inputs #:allow-other-keys)
+                  (let ((gdb (assoc-ref inputs "gdb")))
+                    (substitute* "config.toml"
+                      (("^python =.*" all)
+                       (string-append all
+                                      "gdb = \"" gdb "/bin/gdb\"\n"))))))
+              (replace 'build
+                ;; Phase overridden to also build more tools.
+                (lambda* (#:key parallel-build? #:allow-other-keys)
+                  (let ((job-spec (string-append
+                                   "-j" (if parallel-build?
+                                            (number->string (parallel-job-count))
+                                            "1"))))
+                    (invoke "./x.py" job-spec "build"
+                            "library/std" ;rustc
+                            "src/tools/cargo"
+                            "src/tools/clippy"
+                            "src/tools/rust-analyzer"
+                            "src/tools/rustfmt"))))
+              (replace 'check
+                ;; Phase overridden to also test more tools.
+                (lambda* (#:key tests? parallel-build? #:allow-other-keys)
+                  (when tests?
+                    (let ((job-spec (string-append
+                                     "-j" (if parallel-build?
+                                              (number->string (parallel-job-count))
+                                              "1"))))
+                      (invoke "./x.py" job-spec "test" "-vv"
+                              "library/std"
+                              "src/tools/cargo"
+                              "src/tools/clippy"
+                              "src/tools/rust-analyzer"
+                              "src/tools/rustfmt")))))
+              (replace 'install
+                ;; Phase overridden to also install more tools.
+                (lambda* (#:key outputs #:allow-other-keys)
+                  (invoke "./x.py" "install")
+                  (substitute* "config.toml"
+                    ;; Adjust the prefix to the 'cargo' output.
+                    (("prefix = \"[^\"]*\"")
+                     (format #f "prefix = ~s" (assoc-ref outputs "cargo"))))
+                  (invoke "./x.py" "install" "cargo")
+                  (substitute* "config.toml"
+                    ;; Adjust the prefix to the 'tools' output.
+                    (("prefix = \"[^\"]*\"")
+                     (format #f "prefix = ~s" (assoc-ref outputs "tools"))))
+                  (invoke "./x.py" "install" "clippy")
+                  (invoke "./x.py" "install" "rust-analyzer")
+                  (invoke "./x.py" "install" "rustfmt")))
+              (add-after 'install 'install-rust-src
+                (lambda* (#:key outputs #:allow-other-keys)
+                  (let ((out (assoc-ref outputs "rust-src"))
+                        (dest "/lib/rustlib/src/rust"))
+                    (mkdir-p (string-append out dest))
+                    (copy-recursively "library" (string-append out dest "/library"))
+                    (copy-recursively "src" (string-append out dest "/src")))))
+              (add-after 'install 'remove-uninstall-script
+                (lambda* (#:key outputs #:allow-other-keys)
+                  ;; This script has no use on Guix
+                  ;; and it retains a reference to the host's bash.
+                  (delete-file (string-append (assoc-ref outputs "out")
+                                              "/lib/rustlib/uninstall.sh"))))
+              (add-after 'install-rust-src 'wrap-rust-analyzer
+                (lambda* (#:key outputs #:allow-other-keys)
+                  (let ((bin (string-append (assoc-ref outputs "tools") "/bin")))
+                    (rename-file (string-append bin "/rust-analyzer")
+                                 (string-append bin "/.rust-analyzer-real"))
+                    (call-with-output-file (string-append bin "/rust-analyzer")
+                      (lambda (port)
+                        (format port "#!~a
 if test -z \"${RUST_SRC_PATH}\";then export RUST_SRC_PATH=~S;fi;
 exec -a \"$0\" \"~a\" \"$@\""
-                               (which "bash")
-                               (string-append (assoc-ref outputs "rust-src")
-                                              "/lib/rustlib/src/rust/library")
-                               (string-append bin "/.rust-analyzer-real"))))
-                   (chmod (string-append bin "/rust-analyzer") #o755))))))))
+                                (which "bash")
+                                (string-append (assoc-ref outputs "rust-src")
+                                               "/lib/rustlib/src/rust/library")
+                                (string-append bin "/.rust-analyzer-real"))))
+                    (chmod (string-append bin "/rust-analyzer") #o755))))))))
       (inputs
        (modify-inputs (package-inputs base-rust)
                       (prepend curl libffi `(,nghttp2 "lib") zlib)))
-      (native-inputs (cons*
-                      ;; Keep in sync with the llvm used to build rust.
-                      `("clang-source" ,(package-source clang-runtime-15))
-                      ;; Add test inputs.
-                      `("gdb" ,gdb/pinned)
-                      `("procps" ,procps)
-                      (package-native-inputs base-rust))))))
+      ;; Add test inputs.
+      (native-inputs (cons* `("gdb" ,gdb/pinned)
+                            `("procps" ,procps)
+                            (package-native-inputs base-rust))))))
 
 (define*-public (make-rust-sysroot target)
   (make-rust-sysroot/implementation target rust))
-- 
2.45.2





Information forwarded to guix-patches <at> gnu.org:
bug#72553; Package guix-patches. (Tue, 01 Apr 2025 10:16:01 GMT) Full text and rfc822 format available.

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

From: Andreas Enge <andreas <at> enge.fr>
To: Christopher Baines <mail <at> cbaines.net>
Cc: 72553 <at> debbugs.gnu.org, steve <at> futurile.net, efraim <at> flashner.co.il,
 divya <at> subvertising.org, milkeymouse <at> meme.institute
Subject: Re: [PATCH 2/4] gnu: rust: Fix building.
Date: Tue, 1 Apr 2025 12:14:56 +0200
Hello,

these patches are quite old and maybe not relevant any more;
can this issue be closed?

Andreas





Reply sent to Andreas Enge <andreas <at> enge.fr>:
You have taken responsibility. (Thu, 01 May 2025 07:15:03 GMT) Full text and rfc822 format available.

Notification sent to Christopher Baines <mail <at> cbaines.net>:
bug acknowledged by developer. (Thu, 01 May 2025 07:15:03 GMT) Full text and rfc822 format available.

Message #25 received at 72553-done <at> debbugs.gnu.org (full text, mbox):

From: Andreas Enge <andreas <at> enge.fr>
To: Christopher Baines <mail <at> cbaines.net>
Cc: milkeymouse <at> meme.institute, steve <at> futurile.net, 72553-done <at> debbugs.gnu.org,
 divya <at> subvertising.org, efraim <at> flashner.co.il
Subject: Re: [PATCH 2/4] gnu: rust: Fix building.
Date: Thu, 1 May 2025 09:14:40 +0200
Closing.

Andreas





bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Thu, 29 May 2025 11:24:17 GMT) Full text and rfc822 format available.

This bug report was last modified 19 days ago.

Previous Next


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