From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp10.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 aHydAJraoWQ2TQAASxT56A (envelope-from ) for ; Sun, 02 Jul 2023 22:14:18 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp10.migadu.com with LMTPS id cHJuO5naoWRxewAAG6o9tA (envelope-from ) for ; Sun, 02 Jul 2023 22:14:17 +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 8B653950A for ; Sun, 2 Jul 2023 22:14:17 +0200 (CEST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qG3S3-0005Ah-Dw; Sun, 02 Jul 2023 16:13:43 -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 1qG2XH-0004gf-6P for guix-patches@gnu.org; Sun, 02 Jul 2023 15:15:03 -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 1qG2XG-0000C8-SJ for guix-patches@gnu.org; Sun, 02 Jul 2023 15:15:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1qG2XG-0004SS-2Q for guix-patches@gnu.org; Sun, 02 Jul 2023 15:15: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:15:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 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.168832524417012 (code B ref -1); Sun, 02 Jul 2023 19:15:01 +0000 Received: (at submit) by debbugs.gnu.org; 2 Jul 2023 19:14:04 +0000 Received: from localhost ([127.0.0.1]:32801 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qG2WI-0004QI-Gb for submit@debbugs.gnu.org; Sun, 02 Jul 2023 15:14:04 -0400 Received: from lists.gnu.org ([209.51.188.17]:52842) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qG2WD-0004Pj-NV for submit@debbugs.gnu.org; Sun, 02 Jul 2023 15:14:01 -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 1qG2WD-0003b5-ET for guix-patches@gnu.org; Sun, 02 Jul 2023 15:13:57 -0400 Received: from smtp.umanwizard.com ([54.203.248.109]) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qG2WA-0008TP-NR for guix-patches@gnu.org; Sun, 02 Jul 2023 15:13:57 -0400 Received: from [192.168.1.173] ([70.18.6.196]) by smtp.umanwizard.com ; 2 Jul 2023 19:13:51 +0000 X-Fes-Received-For: guix-patches@gnu.org X-Fes-Received-From: Message-ID: Date: Sun, 2 Jul 2023 15:13:47 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 From: Brennan Vincent Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit 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: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, 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-Seal: i=1; s=key1; d=yhetil.org; t=1688328857; a=rsa-sha256; cv=none; b=dnz9ACvP2p22Sw0LYg/PuqNHa5qO/8g3+Hk43JEZ0M//xBgpT+I1LfRcSTci9NRwsQUwNr fu9F9ssFWzNQsAcywtmCIMKChV6e+cRKc86UwT8LPTn9FIfdPqzo+h7l/V+9eZOhijHDO3 ZiZPV9RZK+B1RhuKghXu4W2TMC6YxXDh+USZ/k91PJM1kvq+VBuSGmGbTEi0ZPKS002Nnz S0XXJH8bO9qw7e72/WnCEvluAa0nJDnVmP7HB65XinY/9xpts0x/+mxvkSNZXZl5tG/c7J z5kzdJOALArAAtBWPuIZBeOuwpTi0PGlikC2Qe5EMRomEHU+X2EQq8ZpGCb6cg== 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-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1688328857; 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: content-transfer-encoding:content-transfer-encoding:resent-cc: resent-from:resent-sender:resent-message-id:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=OwD/QVa4KJ2rjMV2571jD3pUHNGNwC6kow+SIVvzjUc=; b=jLgE18tjxv6Oj32xFVwDoQVDU5onZgblEL2ESasIQdTaJpPY5g2SzZ/opQZEpkJBPOfhc3 vFeME6dDBFOAoo/Dm2FXyQgCB9FHUdZV//dUOq0rr/JReE2Z6t8Z7Kyoto6Mo/lGamAocB Q5l3AqYzWP2jjKXkrsS6gSDXCWLxWynk0g4a/IfmICyhahsqoW06/NkGsH6SHKSvKB6lds ZobayEXG8mdAXmoI5SL/aYDaC4V/f2DgVoX14jXmfF0y30G5er8NOlnUHIn/hJh6C4rmyv PMQKOzstIcxH3KNE9LEXj6uVaZHRJgJueAtBbW7yisC1MCJ+6lRkS2CoZlrQHQ== 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-Scanner: scn0.migadu.com X-Migadu-Spam-Score: -5.06 X-Spam-Score: -5.06 X-Migadu-Queue-Id: 8B653950A X-TUID: JktGf9Sa5mAf 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