From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp12.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms9.migadu.com with LMTPS id NwJkIYraoWS3FAAASxT56A (envelope-from ) for ; Sun, 02 Jul 2023 22:14:02 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp12.migadu.com with LMTPS id 2Pf2H4raoWQyTwAAauVa8A (envelope-from ) for ; Sun, 02 Jul 2023 22:14:02 +0200 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 02CD7927C for ; Sun, 2 Jul 2023 22:14:02 +0200 (CEST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qG3S4-0005BQ-7J; Sun, 02 Jul 2023 16:13:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qG382-0002Uj-SS for guix-patches@gnu.org; Sun, 02 Jul 2023 15:53:02 -0400 Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qG382-0006Q2-Jx for guix-patches@gnu.org; Sun, 02 Jul 2023 15:53:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1qG382-0007vF-0I for guix-patches@gnu.org; Sun, 02 Jul 2023 15:53:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#64426] [PATCH] * gnu: rust: Introduce rust-next package and various intermediates. Resent-From: Brennan Vincent Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Sun, 02 Jul 2023 19:53:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 64426 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 64426@debbugs.gnu.org X-Debbugs-Original-To: guix-patches@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.168832757130436 (code B ref -1); Sun, 02 Jul 2023 19:53:01 +0000 Received: (at submit) by debbugs.gnu.org; 2 Jul 2023 19:52:51 +0000 Received: from localhost ([127.0.0.1]:32817 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qG37o-0007uo-NO for submit@debbugs.gnu.org; Sun, 02 Jul 2023 15:52:51 -0400 Received: from lists.gnu.org ([209.51.188.17]:47256) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qG37j-0007uc-05 for submit@debbugs.gnu.org; Sun, 02 Jul 2023 15:52:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qG37h-0002PS-Ui for guix-patches@gnu.org; Sun, 02 Jul 2023 15:52:42 -0400 Received: from smtp.umanwizard.com ([54.203.248.109]) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qG37c-0006OC-81 for guix-patches@gnu.org; Sun, 02 Jul 2023 15:52:41 -0400 Received: from [192.168.1.173] ([70.18.6.196]) by smtp.umanwizard.com ; 2 Jul 2023 19:52:34 +0000 X-Fes-Received-For: guix-patches@gnu.org X-Fes-Received-From: Content-Type: multipart/mixed; boundary="------------F09WyW1sjJAQTVmawwsetK1j" Message-ID: <91994f94-9046-dbe7-abd9-80786b4d306b@umanwizard.com> Date: Sun, 2 Jul 2023 15:52:30 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 Content-Language: en-US From: Brennan Vincent References: In-Reply-To: X-Fes-Encrypted: true X-Fes-Ehlo-Domain: [192.168.1.173] Received-SPF: none client-ip=54.203.248.109; envelope-from=brennan@umanwizard.com; helo=smtp.umanwizard.com X-Spam_score_int: -19 X-Spam_score: -2.0 X-Spam_bar: -- X-Spam_report: (-2.0 / 5.0 requ) BAYES_00=-1.9, NICE_REPLY_A=-0.09, SPF_HELO_PASS=-0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-Mailman-Approved-At: Sun, 02 Jul 2023 16:13:42 -0400 X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: guix-patches-bounces+larch=yhetil.org@gnu.org X-Migadu-Country: US X-Migadu-Flow: FLOW_IN ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1688328842; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type:resent-cc:resent-from:resent-sender: resent-message-id:in-reply-to:in-reply-to:references:references: list-id:list-help:list-unsubscribe:list-subscribe:list-post; bh=hLWwqcqmL434Xp4TxpLSuZF5XhdZAOoGa52Z8ctITvQ=; b=gF3QCM6hG0RnVEoO+Lq9tzpcZELEghKE9Qt8gVgBYwAfAm/x3SUligFFH05Lx01TAQjD2I J6hD0kZsTZRN4rn1VafL/Y/7WZsRzeNncUxkM0NqlSg6Dh38i7W8wbiN29oeMR7xKyVWrH RILPCH3h7jJKgQ4e4oPpz6xzFaEemCA+ESFO/el+CVLNA6u6CQ2sucYgx/7KZo9d6y5evu HeSEeb6ws2jpxDVId8qC8q7zVD6CrVBlFhmLQtoWYxJyCmyetA6/rKv53xr7+/D28vW9mw YiL/QO5UN+0lCLUKzjyVSDv02zp7wLW/cgfluS2MUjowrRvqNdY7gIdrxLM7Hw== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" ARC-Seal: i=1; s=key1; d=yhetil.org; t=1688328842; a=rsa-sha256; cv=none; b=iBmtPGbhmUz6EJmgIhlaz9oR0jmoVnbYlmW9UMwnqDDGz/PlpLBJPoz/yk97/c7TUGXYZC axtjgEWcuntaSwfcxn77+/7UxD2G8I5qoPseyrJc0v9k/rrKu284siKvgATQW71ZLP3HRz lXtEVh/4Ha2luCyGLeTy1vabmiDLk8HCJszVSBxMR2WhkJIX4m/p0/IEShNq4DPMSdzaFl TLtJ2HpZwIq8Z7pa1uUjvfaM6uBNGyekRpqquSaEDqeR6OwiGRnS00WHQ2YVlNnmnQSyEU jSiVh8faE9yLuiRHSRWiasE5Rv239AYvbR+uBZ8bI9crcsDb5gWcv9dVUu1p7w== X-Migadu-Scanner: scn1.migadu.com X-Migadu-Spam-Score: -3.46 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" X-Migadu-Queue-Id: 02CD7927C X-Spam-Score: -3.46 X-TUID: pLtHV0rPhdYC This is a multi-part message in MIME format. --------------F09WyW1sjJAQTVmawwsetK1j Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit 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 --------------F09WyW1sjJAQTVmawwsetK1j Content-Type: message/rfc822; name="patch.eml" Content-Disposition: attachment; filename="patch.eml" Content-Transfer-Encoding: 7bit Message-Id: <34f6743ffd662d07cbc1c5eb956c4befbc1b0ccc.1688327107.git.brennan@umanwizard.com> From: Brennan Vincent Date: Sun, 2 Jul 2023 15:06:19 -0400 Subject: [PATCH] * gnu: rust: Introduce rust-next package and various intermediates. 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 | 448 ++++++++++++++++++++++++++---------------- 1 file changed, 280 insertions(+), 168 deletions(-) diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm index 8e106a9927..c0413711a0 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 + (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 _ - ;; 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)))))) + (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 --------------F09WyW1sjJAQTVmawwsetK1j--