|
2 | 2 | //! Then ensure that the relevant Rust toolchain and components are installed. |
3 | 3 |
|
4 | 4 | use anyhow::Context as _; |
| 5 | +use semver::Version; |
| 6 | +use spirv_builder::query_rustc_version; |
5 | 7 | use std::io::Write as _; |
6 | 8 |
|
7 | 9 | /// `Cargo.lock` manifest version 4 became the default in Rust 1.83.0. Conflicting manifest |
8 | 10 | /// versions between the workspace and the shader crate, can cause problems. |
9 | | -const RUST_VERSION_THAT_USES_V4_CARGO_LOCKS: &str = "1.83.0"; |
| 11 | +const RUST_VERSION_THAT_USES_V4_CARGO_LOCKS: Version = Version::new(1, 83, 0); |
10 | 12 |
|
11 | 13 | /// Cargo dependency for `spirv-builder` and the rust toolchain channel. |
12 | 14 | #[derive(Debug, Clone)] |
@@ -58,12 +60,8 @@ impl LockfileMismatchHandler { |
58 | 60 | is_force_overwrite_lockfiles_v4_to_v3: bool, |
59 | 61 | ) -> anyhow::Result<Option<std::path::PathBuf>> { |
60 | 62 | log::debug!("Ensuring no v3/v4 `Cargo.lock` conflicts from workspace Rust..."); |
61 | | - let workspace_rust_version = |
62 | | - Self::get_rustc_version(None).context("reading rustc version")?; |
63 | | - if version_check::Version::at_least( |
64 | | - &workspace_rust_version, |
65 | | - RUST_VERSION_THAT_USES_V4_CARGO_LOCKS, |
66 | | - ) { |
| 63 | + let workspace_rust_version = query_rustc_version(None).context("reading rustc version")?; |
| 64 | + if workspace_rust_version >= RUST_VERSION_THAT_USES_V4_CARGO_LOCKS { |
67 | 65 | log::debug!( |
68 | 66 | "user's Rust is v{workspace_rust_version}, so no v3/v4 conflicts possible." |
69 | 67 | ); |
@@ -91,11 +89,8 @@ impl LockfileMismatchHandler { |
91 | 89 | ) -> anyhow::Result<Option<std::path::PathBuf>> { |
92 | 90 | log::debug!("Ensuring no v3/v4 `Cargo.lock` conflicts from shader's Rust..."); |
93 | 91 | let shader_rust_version = |
94 | | - Self::get_rustc_version(Some(channel)).context("getting rustc version")?; |
95 | | - if version_check::Version::at_least( |
96 | | - &shader_rust_version, |
97 | | - RUST_VERSION_THAT_USES_V4_CARGO_LOCKS, |
98 | | - ) { |
| 92 | + query_rustc_version(Some(channel)).context("getting rustc version")?; |
| 93 | + if shader_rust_version >= RUST_VERSION_THAT_USES_V4_CARGO_LOCKS { |
99 | 94 | log::debug!("shader's Rust is v{shader_rust_version}, so no v3/v4 conflicts possible."); |
100 | 95 | return Ok(None); |
101 | 96 | } |
@@ -266,25 +261,6 @@ impl LockfileMismatchHandler { |
266 | 261 | ); |
267 | 262 | std::process::exit(1); |
268 | 263 | } |
269 | | - |
270 | | - /// Get the version of `rustc`. |
271 | | - fn get_rustc_version(maybe_toolchain: Option<&str>) -> anyhow::Result<version_check::Version> { |
272 | | - let mut maybe_current_env_toolchain: Option<std::ffi::OsString> = None; |
273 | | - if let Some(toolchain) = maybe_toolchain { |
274 | | - maybe_current_env_toolchain = std::env::var_os("RUSTUP_TOOLCHAIN"); |
275 | | - std::env::set_var("RUSTUP_TOOLCHAIN", toolchain); |
276 | | - } |
277 | | - |
278 | | - let Some(version) = version_check::Version::read() else { |
279 | | - anyhow::bail!("Couldn't get `rustc --version`"); |
280 | | - }; |
281 | | - |
282 | | - if let Some(current_env_toolchain) = maybe_current_env_toolchain { |
283 | | - std::env::set_var("RUSTUP_TOOLCHAIN", current_env_toolchain); |
284 | | - } |
285 | | - |
286 | | - Ok(version) |
287 | | - } |
288 | 264 | } |
289 | 265 |
|
290 | 266 | impl Drop for LockfileMismatchHandler { |
|
0 commit comments