mirror of
https://github.com/rust-lang/rust.git
synced 2024-12-12 16:45:37 +00:00
Rollup merge of #133041 - madsmtm:print-deployment-target-env-var, r=davidtwco
Print name of env var in `--print=deployment-target` The deployment target environment variable is OS-specific, and if you're in a place where you're asking `rustc` for the deployment target, you're likely to also wanna know the name of the environment variable. I myself wanted this for some code I'm working on in bootstrap, for example. Behaviour before this PR: ```console $ rustc --print=deployment-target --target=aarch64-apple-darwin deployment_target=11.0 $ rustc --print=deployment-target --target=aarch64-apple-visionos deployment_target=1.0 ``` Behaviour after this PR: ```console $ rustc --print=deployment-target --target=aarch64-apple-darwin MACOSX_DEPLOYMENT_TARGET=11.0 $ rustc --print=deployment-target --target=aarch64-apple-visionos XROS_DEPLOYMENT_TARGET=1.0 ``` My _belief_ is that this option is extremely rarely used in general, and a GitHub search for "rustc print deployment-target" seems to confirm this, it revealed only the following actual pieces of code using this: -b292ef6934/src/build_context.rs (L1199-L1220)
-daab9244b0/src/lib.rs (L3422-L3426)
`maturin` does `.split('=').last()`, so it will continue to work after this change, but `cc v1.0.84` did `.strip_prefix("deployment_target=")` since [this PR](https://github.com/rust-lang/cc-rs/pull/848), so it would break. That's _probably_ fine though, it was broken in a lot of scenarios anyway, and [got](https://github.com/rust-lang/cc-rs/pull/901) [reverted](https://github.com/rust-lang/cc-rs/pull/943) in `v1.0.85`. So while this is _technically_ a breaking change, I really doubt that anyone is going to observe it, so it's probably fine. ``@BlackHoleFox`` wdyt? ``@rustbot`` label O-apple r? compiler
This commit is contained in:
commit
3ec21070e2
@ -97,7 +97,7 @@ fn minimum_deployment_target(target: &Target) -> OSVersion {
|
||||
}
|
||||
|
||||
/// Name of the environment variable used to fetch the deployment target on the given OS.
|
||||
fn deployment_target_env_var(os: &str) -> &'static str {
|
||||
pub fn deployment_target_env_var(os: &str) -> &'static str {
|
||||
match os {
|
||||
"macos" => "MACOSX_DEPLOYMENT_TARGET",
|
||||
"ios" => "IPHONEOS_DEPLOYMENT_TARGET",
|
||||
|
@ -867,8 +867,9 @@ fn print_crate_info(
|
||||
DeploymentTarget => {
|
||||
if sess.target.is_like_osx {
|
||||
println_info!(
|
||||
"deployment_target={}",
|
||||
apple::pretty_version(apple::deployment_target(sess))
|
||||
"{}={}",
|
||||
apple::deployment_target_env_var(&sess.target.os),
|
||||
apple::pretty_version(apple::deployment_target(sess)),
|
||||
)
|
||||
} else {
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
|
@ -24,21 +24,31 @@ fn minos(file: &str, version: &str) {
|
||||
|
||||
fn main() {
|
||||
// These versions should generally be higher than the default versions
|
||||
let (env_var, example_version, higher_example_version) = match apple_os() {
|
||||
"macos" => ("MACOSX_DEPLOYMENT_TARGET", "12.0", "13.0"),
|
||||
let (example_version, higher_example_version) = match apple_os() {
|
||||
"macos" => ("12.0", "13.0"),
|
||||
// armv7s-apple-ios and i386-apple-ios only supports iOS 10.0
|
||||
"ios" if target() == "armv7s-apple-ios" || target() == "i386-apple-ios" => {
|
||||
("IPHONEOS_DEPLOYMENT_TARGET", "10.0", "10.0")
|
||||
}
|
||||
"ios" => ("IPHONEOS_DEPLOYMENT_TARGET", "15.0", "16.0"),
|
||||
"watchos" => ("WATCHOS_DEPLOYMENT_TARGET", "7.0", "9.0"),
|
||||
"tvos" => ("TVOS_DEPLOYMENT_TARGET", "14.0", "15.0"),
|
||||
"visionos" => ("XROS_DEPLOYMENT_TARGET", "1.1", "1.2"),
|
||||
"ios" if target() == "armv7s-apple-ios" || target() == "i386-apple-ios" => ("10.0", "10.0"),
|
||||
"ios" => ("15.0", "16.0"),
|
||||
"watchos" => ("7.0", "9.0"),
|
||||
"tvos" => ("14.0", "15.0"),
|
||||
"visionos" => ("1.1", "1.2"),
|
||||
_ => unreachable!(),
|
||||
};
|
||||
let default_version =
|
||||
rustc().target(target()).env_remove(env_var).print("deployment-target").run().stdout_utf8();
|
||||
let default_version = default_version.strip_prefix("deployment_target=").unwrap().trim();
|
||||
|
||||
// Remove env vars to get `rustc`'s default
|
||||
let output = rustc()
|
||||
.target(target())
|
||||
.env_remove("MACOSX_DEPLOYMENT_TARGET")
|
||||
.env_remove("IPHONEOS_DEPLOYMENT_TARGET")
|
||||
.env_remove("WATCHOS_DEPLOYMENT_TARGET")
|
||||
.env_remove("TVOS_DEPLOYMENT_TARGET")
|
||||
.env_remove("XROS_DEPLOYMENT_TARGET")
|
||||
.print("deployment-target")
|
||||
.run()
|
||||
.stdout_utf8();
|
||||
let (env_var, default_version) = output.split_once('=').unwrap();
|
||||
let env_var = env_var.trim();
|
||||
let default_version = default_version.trim();
|
||||
|
||||
// Test that version makes it to the object file.
|
||||
run_in_tmpdir(|| {
|
||||
|
@ -26,8 +26,7 @@ fn main() {
|
||||
// Fetch rustc's inferred deployment target.
|
||||
let current_deployment_target =
|
||||
rustc().target(target()).print("deployment-target").run().stdout_utf8();
|
||||
let current_deployment_target =
|
||||
current_deployment_target.strip_prefix("deployment_target=").unwrap().trim();
|
||||
let current_deployment_target = current_deployment_target.split('=').last().unwrap().trim();
|
||||
|
||||
// Fetch current SDK version via. xcrun.
|
||||
//
|
||||
|
@ -1,5 +1,6 @@
|
||||
//@ only-apple
|
||||
//@ compile-flags: --print deployment-target
|
||||
//@ normalize-stdout-test: "\w*_DEPLOYMENT_TARGET" -> "$$OS_DEPLOYMENT_TARGET"
|
||||
//@ normalize-stdout-test: "\d+\." -> "$$CURRENT_MAJOR_VERSION."
|
||||
//@ normalize-stdout-test: "\d+" -> "$$CURRENT_MINOR_VERSION"
|
||||
//@ check-pass
|
||||
|
@ -1 +1 @@
|
||||
deployment_target=$CURRENT_MAJOR_VERSION.$CURRENT_MINOR_VERSION
|
||||
$OS_DEPLOYMENT_TARGET=$CURRENT_MAJOR_VERSION.$CURRENT_MINOR_VERSION
|
||||
|
Loading…
Reference in New Issue
Block a user