Package: guix-patches;
Reported by: Brennan Vincent <brennan <at> umanwizard.com>
Date: Sun, 2 Jul 2023 19:15:01 UTC
Severity: normal
Tags: patch
Done: Efraim Flashner <efraim <at> flashner.co.il>
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 64426 in the body.
You can then email your comments to 64426 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
guix-patches <at> gnu.org
:bug#64426
; Package guix-patches
.
(Sun, 02 Jul 2023 19:15:02 GMT) Full text and rfc822 format available.Brennan Vincent <brennan <at> umanwizard.com>
:guix-patches <at> gnu.org
.
(Sun, 02 Jul 2023 19:15:02 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Brennan Vincent <brennan <at> umanwizard.com> To: guix-patches <at> gnu.org Subject: [PATCH] * gnu: rust: Introduce rust-next package and various intermediates. Date: Sun, 2 Jul 2023 15:13:47 -0400
This change introduces intermediate bootstrapping packages rust-1.69 and rust-1.70. It also refactors the code that raises the intermediate bootstrapping rust-1.67 package into the public "rust" package into a reusable function so that we can make more such packages. It then uses that function to create three more packages: rust-next-1.68, rust-next-1.69, and rust-next (which is version 1.70). The only one of these that this change exposes publicly is rust-next (i.e., rust 1.70). This will allow developers who require recent Rust versions to use Guix to manage their development environment. --- gnu/packages/rust.scm | 450 ++++++++++++++++++++++++++---------------- 1 file changed, 281 insertions(+), 169 deletions(-) diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm index 8e106a9927..9145d4bc10 100644 --- a/gnu/packages/rust.scm +++ b/gnu/packages/rust.scm @@ -702,183 +702,295 @@ (define rust-1.67 (replace "llvm" llvm-15)))))) (define rust-1.68 - (rust-bootstrapped-package - rust-1.67 "1.68.2" "15ifyd5jj8rd979dkakp887hgmhndr68pqaqvd2hqkfdywirqcwk")) + (let ((base-rust (rust-bootstrapped-package + rust-1.67 "1.68.2" "15ifyd5jj8rd979dkakp887hgmhndr68pqaqvd2hqkfdywirqcwk"))) + (package + (inherit base-rust) + (arguments + (substitute-keyword-arguments (package-arguments base-rust) + ((#:validate-runpath? _) #f)))))) -;;; Note: Only the latest versions of Rust are supported and tested. The -;;; intermediate rusts are built for bootstrapping purposes and should not -;;; be relied upon. This is to ease maintenance and reduce the time -;;; required to build the full Rust bootstrap chain. -;;; -;;; Here we take the latest included Rust, make it public, and re-enable tests -;;; and extra components such as rustfmt. -(define-public rust - (let ((base-rust rust-1.67)) +(define rust-1.69 + (let ((base-rust (rust-bootstrapped-package + rust-1.68 "1.69.0" "03zn7kx5bi5mdfsqfccj4h8gd6abm7spj0kjsfxwlv5dcwc9f1gv"))) + (package + (inherit base-rust) + (source + (origin + (inherit (package-source base-rust)) + (snippet + '(begin + (for-each delete-file-recursively + '("src/llvm-project" + "vendor/tikv-jemalloc-sys/jemalloc")) + ;; find . -not -type d -executable -exec file {} \+ | grep ELF + ;; returns nothing. + + ;; Also remove the bundled (mostly Windows) libraries. + (for-each delete-file + (find-files "vendor" ".*\\.(a|dll|exe|lib)$"))))))))) + +(define rust-1.70 + (let ((base-rust (rust-bootstrapped-package + rust-1.69 "1.70.0" "0z6j7d0ni0rmfznv0w3mrf882m11kyh51g2bxkj40l3s1c0axgxj"))) (package (inherit base-rust) - (outputs (cons "rustfmt" (package-outputs base-rust))) (arguments (substitute-keyword-arguments (package-arguments base-rust) - ((#:tests? _ #f) - (not (%current-target-system))) ((#: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 'patch-cargo-env-shebang - (lambda _ - (substitute* '("src/tools/cargo/tests/testsuite/build.rs" - "src/tools/cargo/tests/testsuite/fix.rs") - ;; The cargo *_wrapper tests set RUSTC.*WRAPPER environment - ;; variable which points to /usr/bin/env. Since it's not a - ;; shebang, it needs to be manually patched. - (("/usr/bin/env") - (which "env"))))) - (add-after 'unpack 'disable-tests-requiring-git - (lambda _ - (substitute* "src/tools/cargo/tests/testsuite/new.rs" - (("fn author_prefers_cargo") - "#[ignore]\nfn author_prefers_cargo") - (("fn finds_author_git") - "#[ignore]\nfn finds_author_git") - (("fn finds_local_author_git") - "#[ignore]\nfn finds_local_author_git")))) - (add-after 'unpack 'disable-tests-requiring-mercurial + ;; Rustix ships with some bundled assembly-language + ;; libraries. We strip the pre-assembled versions from + ;; the sources, so regenerate them here. + (add-after 'configure 'assemble-rustix-outline-asm (lambda _ - (substitute* - "src/tools/cargo/tests/testsuite/init/simple_hg_ignore_exists/mod.rs" - (("fn simple_hg_ignore_exists") - "#[ignore]\nfn simple_hg_ignore_exists")) - (substitute* - "src/tools/cargo/tests/testsuite/init/mercurial_autodetect/mod.rs" - (("fn mercurial_autodetect") - "#[ignore]\nfn mercurial_autodetect")))) - (add-after 'unpack 'disable-tests-broken-on-aarch64 - (lambda _ - (with-directory-excursion "src/tools/cargo/tests/testsuite/" - (substitute* "build_script_extra_link_arg.rs" - (("^fn build_script_extra_link_arg_bin_single" m) - (string-append "#[ignore]\n" m))) - (substitute* "build_script.rs" - (("^fn env_test" m) - (string-append "#[ignore]\n" m))) - (substitute* "collisions.rs" - (("^fn collision_doc_profile_split" m) - (string-append "#[ignore]\n" m))) - (substitute* "concurrent.rs" - (("^fn no_deadlock_with_git_dependencies" m) - (string-append "#[ignore]\n" m))) - (substitute* "features2.rs" - (("^fn dep_with_optional_host_deps_activated" m) - (string-append "#[ignore]\n" m)))))) - (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* (match (find-files "." "^command-exec.rs$") - ((file) file)) - (("Command::new\\(\"echo\"\\)") - (format #f "Command::new(~s)" (which "echo")))))) - (add-after 'unpack 'patch-command-uid-gid-test - (lambda _ - (substitute* (match (find-files "." "^command-uid-gid.rs$") - ((file) file)) - (("/bin/sh") - (which "sh"))))) - (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 "src/test/ui/parser/shebang/sneaky-attrib.rs"))) - (add-after 'unpack 'patch-process-tests - (lambda* (#:key inputs #:allow-other-keys) - (let ((bash (assoc-ref inputs "bash"))) - (substitute* "library/std/src/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* "library/std/src/sys/unix/process/process_common/tests.rs" - (("target_arch = \"arm\",") "target_os = \"linux\","))))) - (add-after 'unpack 'disable-interrupt-tests - (lambda _ - ;; This test hangs in the build container; disable it. - (substitute* (match (find-files "." "^freshness.rs$") - ((file) file)) - (("fn linking_interrupted") - "#[ignore]\nfn linking_interrupted")) - ;; Likewise for the ctrl_c_kills_everyone test. - (substitute* (match (find-files "." "^death.rs$") - ((file) file)) - (("fn ctrl_c_kills_everyone") - "#[ignore]\nfn ctrl_c_kills_everyone")))) - (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 rustfmt. - (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/rustfmt")))) - (replace 'check - ;; Phase overridden to also test rustfmt. - (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/rustfmt"))))) - (replace 'install - ;; Phase overridden to also install rustfmt. - (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 'rustfmt' output. - (("prefix = \"[^\"]*\"") - (format #f "prefix = ~s" (assoc-ref outputs "rustfmt")))) - (invoke "./x.py" "install" "rustfmt"))))))) - ;; Add test inputs. - (native-inputs (cons* `("gdb" ,gdb/pinned) - `("procps" ,procps) - (package-native-inputs base-rust)))))) + (let* ((system (or ,(%current-target-system) + ,(%current-system))) + (arch + (match system + ("x86_64-linux" "x86_64") + ("i686-linux" "x86") + ("armhf-linux" "arm") + ("aarch64-linux" "aarch64") + ("mips64el-linux" "mips64") + ("riscv64-linux" "riscv64") + (_ (let ((dash (string-index system #\-))) + (substring system 0 dash)))))) + (for-each + (lambda (dir) + (with-directory-excursion dir + (invoke "gcc" "-c" (format #f "~a.s" arch)) + (invoke "ar" "r" + (format #f "debug/librustix_outline_~a.a" arch) + (format #f "~a.o" arch)) + (invoke "ar" "r" + (format #f "release/librustix_outline_~a.a" arch) + (format #f "~a.o" arch)))) + '("vendor/rustix-0.36.5/src/backend/linux_raw/arch/outline/" + "vendor/rustix/src/backend/linux_raw/arch/outline/")))))))))))) + +(define public-rust-1.67-phase-mods + '((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 'patch-cargo-env-shebang + (lambda _ + (substitute* '("src/tools/cargo/tests/testsuite/build.rs" + "src/tools/cargo/tests/testsuite/fix.rs") + ;; The cargo *_wrapper tests set RUSTC.*WRAPPER environment + ;; variable which points to /usr/bin/env. Since it's not a + ;; shebang, it needs to be manually patched. + (("/usr/bin/env") + (which "env"))))) + (add-after 'unpack 'disable-tests-requiring-git + (lambda _ + (substitute* "src/tools/cargo/tests/testsuite/new.rs" + (("fn author_prefers_cargo") + "#[ignore]\nfn author_prefers_cargo") + (("fn finds_author_git") + "#[ignore]\nfn finds_author_git") + (("fn finds_local_author_git") + "#[ignore]\nfn finds_local_author_git")))) + (add-after 'unpack 'disable-tests-requiring-mercurial + (lambda _ + (substitute* + "src/tools/cargo/tests/testsuite/init/simple_hg_ignore_exists/mod.rs" + (("fn simple_hg_ignore_exists") + "#[ignore]\nfn simple_hg_ignore_exists")) + (substitute* + "src/tools/cargo/tests/testsuite/init/mercurial_autodetect/mod.rs" + (("fn mercurial_autodetect") + "#[ignore]\nfn mercurial_autodetect")))) + (add-after 'unpack 'disable-tests-broken-on-aarch64 + (lambda _ + (with-directory-excursion "src/tools/cargo/tests/testsuite/" + (substitute* "build_script_extra_link_arg.rs" + (("^fn build_script_extra_link_arg_bin_single" m) + (string-append "#[ignore]\n" m))) + (substitute* "build_script.rs" + (("^fn env_test" m) + (string-append "#[ignore]\n" m))) + (substitute* "collisions.rs" + (("^fn collision_doc_profile_split" m) + (string-append "#[ignore]\n" m))) + (substitute* "concurrent.rs" + (("^fn no_deadlock_with_git_dependencies" m) + (string-append "#[ignore]\n" m))) + (substitute* "features2.rs" + (("^fn dep_with_optional_host_deps_activated" m) + (string-append "#[ignore]\n" m)))))) + (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* (match (find-files "." "^command-exec.rs$") + ((file) file)) + (("Command::new\\(\"echo\"\\)") + (format #f "Command::new(~s)" (which "echo")))))) + (add-after 'unpack 'patch-command-uid-gid-test + (lambda _ + (substitute* (match (find-files "." "^command-uid-gid.rs$") + ((file) file)) + (("/bin/sh") + (which "sh"))))) + (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 "src/test/ui/parser/shebang/sneaky-attrib.rs"))) + (add-after 'unpack 'patch-process-tests + (lambda* (#:key inputs #:allow-other-keys) + (let ((bash (assoc-ref inputs "bash"))) + (substitute* "library/std/src/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* "library/std/src/sys/unix/process/process_common/tests.rs" + (("target_arch = \"arm\",") "target_os = \"linux\","))))) + (add-after 'unpack 'disable-interrupt-tests + (lambda _ + ;; This test hangs in the build container; disable it. + (substitute* (match (find-files "." "^freshness.rs$") + ((file) file)) + (("fn linking_interrupted") + "#[ignore]\nfn linking_interrupted")) + ;; Likewise for the ctrl_c_kills_everyone test. + (substitute* (match (find-files "." "^death.rs$") + ((file) file)) + (("fn ctrl_c_kills_everyone") + "#[ignore]\nfn ctrl_c_kills_everyone")))) + (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 rustfmt. + (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/rustfmt")))) + (replace 'check + ;; Phase overridden to also test rustfmt. + (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/rustfmt"))))) + (replace 'install + ;; Phase overridden to also install rustfmt. + (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 'rustfmt' output. + (("prefix = \"[^\"]*\"") + (format #f "prefix = ~s" (assoc-ref outputs "rustfmt")))) + (invoke "./x.py" "install" "rustfmt"))))) + +;;; Here we take a given version of Rust and re-enable tests +;;; and extra components such as rustfmt. +;;; +;;; This function was designed for Rust 1.67. Future versions of Rust may require +;;; further overriding and customization. +(define* (mk-public-rust + base-rust + #:optional (phase-mods public-rust-1.67-phase-mods)) + (package + (inherit base-rust) + (outputs (cons "rustfmt" (package-outputs base-rust))) + (arguments + (substitute-keyword-arguments (package-arguments base-rust) + ((#:tests? _ #f) + (not (%current-target-system))) + ((#:phases phases) + `(modify-phases ,phases + ,@phase-mods)))) + ;; Add test inputs. + (native-inputs (cons* `("gdb" ,gdb/pinned) + `("procps" ,procps) + (package-native-inputs base-rust))))) + +;;; Note: Only the version 1.67 of Rust is supported and tested. The +;;; intermediate rusts are built for bootstrapping purposes and should not +;;; be relied upon. This is to ease maintenance and reduce the time +;;; required to build the full Rust bootstrap chain. +(define-public rust + (mk-public-rust rust-1.67)) + +(define public-rust-1.68-phase-mods + (append public-rust-1.67-phase-mods + '((replace 'skip-shebang-tests + (lambda _ + (delete-file "tests/ui/parser/shebang/sneaky-attrib.rs")))))) + +(define rust-next-1.68 + (mk-public-rust rust-1.68 public-rust-1.68-phase-mods)) + +(define public-rust-1.69-phase-mods + (append public-rust-1.68-phase-mods + '((replace 'disable-tests-requiring-mercurial + (lambda _ + (substitute* + "src/tools/cargo/tests/testsuite/init/simple_hg_ignore_exists/mod.rs" + (("fn case") + "#[ignore]\nfn case")) + (substitute* + "src/tools/cargo/tests/testsuite/init/mercurial_autodetect/mod.rs" + (("fn case") + "#[ignore]\nfn case"))))))) + +(define rust-next-1.69 + (mk-public-rust rust-1.69 public-rust-1.69-phase-mods)) + +(define public-rust-1.70-phase-mods + (append public-rust-1.69-phase-mods + '((add-after 'disable-tests-requiring-git 'disable-more-tests-requiring-git + (lambda _ + (substitute* "src/tools/cargo/tests/testsuite/git.rs" + (("fn fetch_downloads_with_git2_first_then_with_gitoxide_and_vice_versa") + "#[ignore]\nfn fetch_downloads_with_git2_first_then_with_gitoxide_and_vice_versa"))))))) + +(define-public rust-next + (let ((base-rust (mk-public-rust rust-1.70 public-rust-1.70-phase-mods))) + (package + (inherit base-rust) + (name "rust-next")))) (define-public rust-src (hidden-package base-commit: b24a05830d11e3011eee4bc5f60a41e26188cde1 -- 2.40.1
guix-patches <at> gnu.org
:bug#64426
; Package guix-patches
.
(Sun, 02 Jul 2023 19:53:01 GMT) Full text and rfc822 format available.Message #8 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Brennan Vincent <brennan <at> umanwizard.com> To: guix-patches <at> gnu.org Subject: Re: [PATCH] * gnu: rust: Introduce rust-next package and various intermediates. Date: Sun, 2 Jul 2023 15:52:30 -0400
[Message part 1 (text/plain, inline)]
My apologies. git imap-send seems to have mangled the patch somehow. Please use the one attached to this message instead. On 7/2/23 15:13, Brennan Vincent wrote: > This change introduces intermediate bootstrapping packages rust-1.69 and > rust-1.70. It also refactors the code that raises the intermediate > bootstrapping rust-1.67 package into the public "rust" package into a reusable > function so that we can make more such packages. It then uses that function to > create three more packages: rust-next-1.68, rust-next-1.69, and > rust-next (which is version 1.70). > > The only one of these that this change exposes publicly is rust-next (i.e., > rust 1.70). This will allow developers who require recent Rust versions to use > Guix to manage their development environment. > --- > gnu/packages/rust.scm | 450 ++++++++++++++++++++++++++---------------- > 1 file changed, 281 insertions(+), 169 deletions(-) > > diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm > index 8e106a9927..9145d4bc10 100644 > --- a/gnu/packages/rust.scm > +++ b/gnu/packages/rust.scm > @@ -702,183 +702,295 @@ (define rust-1.67 > (replace "llvm" llvm-15)))))) > (define rust-1.68 > - (rust-bootstrapped-package > - rust-1.67 "1.68.2" "15ifyd5jj8rd979dkakp887hgmhndr68pqaqvd2hqkfdywirqcwk")) > + (let ((base-rust (rust-bootstrapped-package > + rust-1.67 "1.68.2" "15ifyd5jj8rd979dkakp887hgmhndr68pqaqvd2hqkfdywirqcwk"))) > + (package > + (inherit base-rust) > + (arguments > + (substitute-keyword-arguments (package-arguments base-rust) > + ((#:validate-runpath? _) #f)))))) > -;;; Note: Only the latest versions of Rust are supported and tested. The > -;;; intermediate rusts are built for bootstrapping purposes and should not > -;;; be relied upon. This is to ease maintenance and reduce the time > -;;; required to build the full Rust bootstrap chain. > -;;; > -;;; Here we take the latest included Rust, make it public, and re-enable tests > -;;; and extra components such as rustfmt. > -(define-public rust > - (let ((base-rust rust-1.67)) > +(define rust-1.69 > + (let ((base-rust (rust-bootstrapped-package > + rust-1.68 "1.69.0" "03zn7kx5bi5mdfsqfccj4h8gd6abm7spj0kjsfxwlv5dcwc9f1gv"))) > + (package > + (inherit base-rust) > + (source > + (origin > + (inherit (package-source base-rust)) > + (snippet > + '(begin > + (for-each delete-file-recursively > + '("src/llvm-project" > + "vendor/tikv-jemalloc-sys/jemalloc")) > + ;; find . -not -type d -executable -exec file {} \+ | grep ELF > + ;; returns nothing. > + > + ;; Also remove the bundled (mostly Windows) libraries. > + (for-each delete-file > + (find-files "vendor" ".*\\.(a|dll|exe|lib)$"))))))))) > + > +(define rust-1.70 > + (let ((base-rust (rust-bootstrapped-package > + rust-1.69 "1.70.0" "0z6j7d0ni0rmfznv0w3mrf882m11kyh51g2bxkj40l3s1c0axgxj"))) > (package > (inherit base-rust) > - (outputs (cons "rustfmt" (package-outputs base-rust))) > (arguments > (substitute-keyword-arguments (package-arguments base-rust) > - ((#:tests? _ #f) > - (not (%current-target-system))) > ((#: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 'patch-cargo-env-shebang > - (lambda _ > - (substitute* '("src/tools/cargo/tests/testsuite/build.rs" > - "src/tools/cargo/tests/testsuite/fix.rs") > - ;; The cargo *_wrapper tests set RUSTC.*WRAPPER environment > - ;; variable which points to /usr/bin/env. Since it's not a > - ;; shebang, it needs to be manually patched. > - (("/usr/bin/env") > - (which "env"))))) > - (add-after 'unpack 'disable-tests-requiring-git > - (lambda _ > - (substitute* "src/tools/cargo/tests/testsuite/new.rs" > - (("fn author_prefers_cargo") > - "#[ignore]\nfn author_prefers_cargo") > - (("fn finds_author_git") > - "#[ignore]\nfn finds_author_git") > - (("fn finds_local_author_git") > - "#[ignore]\nfn finds_local_author_git")))) > - (add-after 'unpack 'disable-tests-requiring-mercurial > + ;; Rustix ships with some bundled assembly-language > + ;; libraries. We strip the pre-assembled versions from > + ;; the sources, so regenerate them here. > + (add-after 'configure 'assemble-rustix-outline-asm > (lambda _ > - (substitute* > - "src/tools/cargo/tests/testsuite/init/simple_hg_ignore_exists/mod.rs" > - (("fn simple_hg_ignore_exists") > - "#[ignore]\nfn simple_hg_ignore_exists")) > - (substitute* > - "src/tools/cargo/tests/testsuite/init/mercurial_autodetect/mod.rs" > - (("fn mercurial_autodetect") > - "#[ignore]\nfn mercurial_autodetect")))) > - (add-after 'unpack 'disable-tests-broken-on-aarch64 > - (lambda _ > - (with-directory-excursion "src/tools/cargo/tests/testsuite/" > - (substitute* "build_script_extra_link_arg.rs" > - (("^fn build_script_extra_link_arg_bin_single" m) > - (string-append "#[ignore]\n" m))) > - (substitute* "build_script.rs" > - (("^fn env_test" m) > - (string-append "#[ignore]\n" m))) > - (substitute* "collisions.rs" > - (("^fn collision_doc_profile_split" m) > - (string-append "#[ignore]\n" m))) > - (substitute* "concurrent.rs" > - (("^fn no_deadlock_with_git_dependencies" m) > - (string-append "#[ignore]\n" m))) > - (substitute* "features2.rs" > - (("^fn dep_with_optional_host_deps_activated" m) > - (string-append "#[ignore]\n" m)))))) > - (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* (match (find-files "." "^command-exec.rs$") > - ((file) file)) > - (("Command::new\\(\"echo\"\\)") > - (format #f "Command::new(~s)" (which "echo")))))) > - (add-after 'unpack 'patch-command-uid-gid-test > - (lambda _ > - (substitute* (match (find-files "." "^command-uid-gid.rs$") > - ((file) file)) > - (("/bin/sh") > - (which "sh"))))) > - (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 "src/test/ui/parser/shebang/sneaky-attrib.rs"))) > - (add-after 'unpack 'patch-process-tests > - (lambda* (#:key inputs #:allow-other-keys) > - (let ((bash (assoc-ref inputs "bash"))) > - (substitute* "library/std/src/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* "library/std/src/sys/unix/process/process_common/tests.rs" > - (("target_arch = \"arm\",") "target_os = \"linux\","))))) > - (add-after 'unpack 'disable-interrupt-tests > - (lambda _ > - ;; This test hangs in the build container; disable it. > - (substitute* (match (find-files "." "^freshness.rs$") > - ((file) file)) > - (("fn linking_interrupted") > - "#[ignore]\nfn linking_interrupted")) > - ;; Likewise for the ctrl_c_kills_everyone test. > - (substitute* (match (find-files "." "^death.rs$") > - ((file) file)) > - (("fn ctrl_c_kills_everyone") > - "#[ignore]\nfn ctrl_c_kills_everyone")))) > - (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 rustfmt. > - (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/rustfmt")))) > - (replace 'check > - ;; Phase overridden to also test rustfmt. > - (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/rustfmt"))))) > - (replace 'install > - ;; Phase overridden to also install rustfmt. > - (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 'rustfmt' output. > - (("prefix = \"[^\"]*\"") > - (format #f "prefix = ~s" (assoc-ref outputs "rustfmt")))) > - (invoke "./x.py" "install" "rustfmt"))))))) > - ;; Add test inputs. > - (native-inputs (cons* `("gdb" ,gdb/pinned) > - `("procps" ,procps) > - (package-native-inputs base-rust)))))) > + (let* ((system (or ,(%current-target-system) > + ,(%current-system))) > + (arch > + (match system > + ("x86_64-linux" "x86_64") > + ("i686-linux" "x86") > + ("armhf-linux" "arm") > + ("aarch64-linux" "aarch64") > + ("mips64el-linux" "mips64") > + ("riscv64-linux" "riscv64") > + (_ (let ((dash (string-index system #\-))) > + (substring system 0 dash)))))) > + (for-each > + (lambda (dir) > + (with-directory-excursion dir > + (invoke "gcc" "-c" (format #f "~a.s" arch)) > + (invoke "ar" "r" > + (format #f "debug/librustix_outline_~a.a" arch) > + (format #f "~a.o" arch)) > + (invoke "ar" "r" > + (format #f "release/librustix_outline_~a.a" arch) > + (format #f "~a.o" arch)))) > + '("vendor/rustix-0.36.5/src/backend/linux_raw/arch/outline/" > + "vendor/rustix/src/backend/linux_raw/arch/outline/")))))))))))) > + > +(define public-rust-1.67-phase-mods > + '((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 'patch-cargo-env-shebang > + (lambda _ > + (substitute* '("src/tools/cargo/tests/testsuite/build.rs" > + "src/tools/cargo/tests/testsuite/fix.rs") > + ;; The cargo *_wrapper tests set RUSTC.*WRAPPER environment > + ;; variable which points to /usr/bin/env. Since it's not a > + ;; shebang, it needs to be manually patched. > + (("/usr/bin/env") > + (which "env"))))) > + (add-after 'unpack 'disable-tests-requiring-git > + (lambda _ > + (substitute* "src/tools/cargo/tests/testsuite/new.rs" > + (("fn author_prefers_cargo") > + "#[ignore]\nfn author_prefers_cargo") > + (("fn finds_author_git") > + "#[ignore]\nfn finds_author_git") > + (("fn finds_local_author_git") > + "#[ignore]\nfn finds_local_author_git")))) > + (add-after 'unpack 'disable-tests-requiring-mercurial > + (lambda _ > + (substitute* > + "src/tools/cargo/tests/testsuite/init/simple_hg_ignore_exists/mod.rs" > + (("fn simple_hg_ignore_exists") > + "#[ignore]\nfn simple_hg_ignore_exists")) > + (substitute* > + "src/tools/cargo/tests/testsuite/init/mercurial_autodetect/mod.rs" > + (("fn mercurial_autodetect") > + "#[ignore]\nfn mercurial_autodetect")))) > + (add-after 'unpack 'disable-tests-broken-on-aarch64 > + (lambda _ > + (with-directory-excursion "src/tools/cargo/tests/testsuite/" > + (substitute* "build_script_extra_link_arg.rs" > + (("^fn build_script_extra_link_arg_bin_single" m) > + (string-append "#[ignore]\n" m))) > + (substitute* "build_script.rs" > + (("^fn env_test" m) > + (string-append "#[ignore]\n" m))) > + (substitute* "collisions.rs" > + (("^fn collision_doc_profile_split" m) > + (string-append "#[ignore]\n" m))) > + (substitute* "concurrent.rs" > + (("^fn no_deadlock_with_git_dependencies" m) > + (string-append "#[ignore]\n" m))) > + (substitute* "features2.rs" > + (("^fn dep_with_optional_host_deps_activated" m) > + (string-append "#[ignore]\n" m)))))) > + (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* (match (find-files "." "^command-exec.rs$") > + ((file) file)) > + (("Command::new\\(\"echo\"\\)") > + (format #f "Command::new(~s)" (which "echo")))))) > + (add-after 'unpack 'patch-command-uid-gid-test > + (lambda _ > + (substitute* (match (find-files "." "^command-uid-gid.rs$") > + ((file) file)) > + (("/bin/sh") > + (which "sh"))))) > + (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 "src/test/ui/parser/shebang/sneaky-attrib.rs"))) > + (add-after 'unpack 'patch-process-tests > + (lambda* (#:key inputs #:allow-other-keys) > + (let ((bash (assoc-ref inputs "bash"))) > + (substitute* "library/std/src/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* "library/std/src/sys/unix/process/process_common/tests.rs" > + (("target_arch = \"arm\",") "target_os = \"linux\","))))) > + (add-after 'unpack 'disable-interrupt-tests > + (lambda _ > + ;; This test hangs in the build container; disable it. > + (substitute* (match (find-files "." "^freshness.rs$") > + ((file) file)) > + (("fn linking_interrupted") > + "#[ignore]\nfn linking_interrupted")) > + ;; Likewise for the ctrl_c_kills_everyone test. > + (substitute* (match (find-files "." "^death.rs$") > + ((file) file)) > + (("fn ctrl_c_kills_everyone") > + "#[ignore]\nfn ctrl_c_kills_everyone")))) > + (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 rustfmt. > + (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/rustfmt")))) > + (replace 'check > + ;; Phase overridden to also test rustfmt. > + (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/rustfmt"))))) > + (replace 'install > + ;; Phase overridden to also install rustfmt. > + (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 'rustfmt' output. > + (("prefix = \"[^\"]*\"") > + (format #f "prefix = ~s" (assoc-ref outputs "rustfmt")))) > + (invoke "./x.py" "install" "rustfmt"))))) > + > +;;; Here we take a given version of Rust and re-enable tests > +;;; and extra components such as rustfmt. > +;;; > +;;; This function was designed for Rust 1.67. Future versions of Rust may require > +;;; further overriding and customization. > +(define* (mk-public-rust > + base-rust > + #:optional (phase-mods public-rust-1.67-phase-mods)) > + (package > + (inherit base-rust) > + (outputs (cons "rustfmt" (package-outputs base-rust))) > + (arguments > + (substitute-keyword-arguments (package-arguments base-rust) > + ((#:tests? _ #f) > + (not (%current-target-system))) > + ((#:phases phases) > + `(modify-phases ,phases > + ,@phase-mods)))) > + ;; Add test inputs. > + (native-inputs (cons* `("gdb" ,gdb/pinned) > + `("procps" ,procps) > + (package-native-inputs base-rust))))) > + > +;;; Note: Only the version 1.67 of Rust is supported and tested. The > +;;; intermediate rusts are built for bootstrapping purposes and should not > +;;; be relied upon. This is to ease maintenance and reduce the time > +;;; required to build the full Rust bootstrap chain. > +(define-public rust > + (mk-public-rust rust-1.67)) > + > +(define public-rust-1.68-phase-mods > + (append public-rust-1.67-phase-mods > + '((replace 'skip-shebang-tests > + (lambda _ > + (delete-file "tests/ui/parser/shebang/sneaky-attrib.rs")))))) > + > +(define rust-next-1.68 > + (mk-public-rust rust-1.68 public-rust-1.68-phase-mods)) > + > +(define public-rust-1.69-phase-mods > + (append public-rust-1.68-phase-mods > + '((replace 'disable-tests-requiring-mercurial > + (lambda _ > + (substitute* > + "src/tools/cargo/tests/testsuite/init/simple_hg_ignore_exists/mod.rs" > + (("fn case") > + "#[ignore]\nfn case")) > + (substitute* > + "src/tools/cargo/tests/testsuite/init/mercurial_autodetect/mod.rs" > + (("fn case") > + "#[ignore]\nfn case"))))))) > + > +(define rust-next-1.69 > + (mk-public-rust rust-1.69 public-rust-1.69-phase-mods)) > + > +(define public-rust-1.70-phase-mods > + (append public-rust-1.69-phase-mods > + '((add-after 'disable-tests-requiring-git 'disable-more-tests-requiring-git > + (lambda _ + (substitute* "src/tools/cargo/tests/testsuite/git.rs" > + (("fn fetch_downloads_with_git2_first_then_with_gitoxide_and_vice_versa") > + "#[ignore]\nfn fetch_downloads_with_git2_first_then_with_gitoxide_and_vice_versa"))))))) > + > +(define-public rust-next > + (let ((base-rust (mk-public-rust rust-1.70 public-rust-1.70-phase-mods))) > + (package > + (inherit base-rust) > + (name "rust-next")))) > (define-public rust-src > (hidden-package > > base-commit: b24a05830d11e3011eee4bc5f60a41e26188cde1
[patch.eml (message/rfc822, attachment)]
Efraim Flashner <efraim <at> flashner.co.il>
:Brennan Vincent <brennan <at> umanwizard.com>
:Message #13 received at 64426-done <at> debbugs.gnu.org (full text, mbox):
From: Efraim Flashner <efraim <at> flashner.co.il> To: 64426-done <at> debbugs.gnu.org Subject: Re: [bug#64426] [PATCH] * gnu: rust: Introduce rust-next package and various intermediates. Date: Thu, 19 Dec 2024 19:24:44 +0200
[Message part 1 (text/plain, inline)]
This patch has been superseded by later versions of rust already. -- Efraim Flashner <efraim <at> flashner.co.il> אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted
[signature.asc (application/pgp-signature, inline)]
Debbugs Internal Request <help-debbugs <at> gnu.org>
to internal_control <at> debbugs.gnu.org
.
(Fri, 17 Jan 2025 12:24:06 GMT) Full text and rfc822 format available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.