From dc67984bb04a0eb1a21be4ad2aabc5088a988ca3 Mon Sep 17 00:00:00 2001 From: Matthew Thompson Date: Fri, 17 Jul 2026 09:26:16 -0400 Subject: [PATCH 1/3] rust: honor CARGO_HOME for offline dependent builds Rust currently overwrites CARGO_HOME for dependent builds with a package-stage directory. This prevents users from using a prepopulated Cargo cache when CARGO_NET_OFFLINE=true, since Cargo instead searches the empty stage-local cache. Honor an explicitly configured CARGO_HOME only for offline builds. Retain Spack's isolated per-package Cargo cache for the normal online case. --- repos/spack_repo/builtin/packages/rust/package.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/repos/spack_repo/builtin/packages/rust/package.py b/repos/spack_repo/builtin/packages/rust/package.py index 42b1f089408..51274505c5b 100644 --- a/repos/spack_repo/builtin/packages/rust/package.py +++ b/repos/spack_repo/builtin/packages/rust/package.py @@ -204,7 +204,14 @@ def get_test_path(p): def setup_dependent_build_environment( self, env: EnvironmentModifications, dependent_spec: Spec ) -> None: - env.set("CARGO_HOME", join_path(dependent_spec.package.stage.path, "cargo")) + # Respect an explicitly configured Cargo cache for offline builds. + # Otherwise retain Spack's isolated per-package cache. + cargo_home = os.environ.get("CARGO_HOME") + cargo_offline = os.environ.get("CARGO_NET_OFFLINE", "").lower() == "true" + if cargo_home and cargo_offline: + env.set("CARGO_HOME", cargo_home) + else: + env.set("CARGO_HOME", join_path(dependent_spec.package.stage.path, "cargo")) # Until we get a little more integration with cargo or offload solving to spack # (how to do this is TBD), we need it to fall back to older package versions From 93e1aa4033b73b32c6e18e3a95ea7b2210b2deb1 Mon Sep 17 00:00:00 2001 From: Matt Thompson Date: Fri, 17 Jul 2026 13:39:53 -0400 Subject: [PATCH 2/3] Update repos/spack_repo/builtin/packages/rust/package.py Co-authored-by: Alec Scott --- repos/spack_repo/builtin/packages/rust/package.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/repos/spack_repo/builtin/packages/rust/package.py b/repos/spack_repo/builtin/packages/rust/package.py index 51274505c5b..0d04b8c1b2b 100644 --- a/repos/spack_repo/builtin/packages/rust/package.py +++ b/repos/spack_repo/builtin/packages/rust/package.py @@ -208,9 +208,7 @@ def setup_dependent_build_environment( # Otherwise retain Spack's isolated per-package cache. cargo_home = os.environ.get("CARGO_HOME") cargo_offline = os.environ.get("CARGO_NET_OFFLINE", "").lower() == "true" - if cargo_home and cargo_offline: - env.set("CARGO_HOME", cargo_home) - else: + if not (cargo_home and cargo_offline): env.set("CARGO_HOME", join_path(dependent_spec.package.stage.path, "cargo")) # Until we get a little more integration with cargo or offload solving to spack From ca37a603f6d1cd094a4cad1e4bf8d0735768c207 Mon Sep 17 00:00:00 2001 From: Matt Thompson Date: Sun, 19 Jul 2026 13:45:05 -0400 Subject: [PATCH 3/3] Update repos/spack_repo/builtin/packages/rust/package.py Co-authored-by: Matthew Mehrtens <12023414+mcmehrtens@users.noreply.github.com> --- repos/spack_repo/builtin/packages/rust/package.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/spack_repo/builtin/packages/rust/package.py b/repos/spack_repo/builtin/packages/rust/package.py index 0d04b8c1b2b..7555c00f523 100644 --- a/repos/spack_repo/builtin/packages/rust/package.py +++ b/repos/spack_repo/builtin/packages/rust/package.py @@ -207,7 +207,7 @@ def setup_dependent_build_environment( # Respect an explicitly configured Cargo cache for offline builds. # Otherwise retain Spack's isolated per-package cache. cargo_home = os.environ.get("CARGO_HOME") - cargo_offline = os.environ.get("CARGO_NET_OFFLINE", "").lower() == "true" + cargo_offline = os.environ.get("CARGO_NET_OFFLINE", "") == "true" if not (cargo_home and cargo_offline): env.set("CARGO_HOME", join_path(dependent_spec.package.stage.path, "cargo"))