| //! Test that linking works under an environment similar to what Xcode sets up. | |
| //! | |
| //! Regression test for https://github.com/rust-lang/rust/issues/80817. | |
| //@ only-apple | |
| use run_make_support::{cmd, rustc, target}; | |
| fn main() { | |
| // Fetch toolchain `/usr/bin` directory. Usually: | |
| // /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin | |
| let clang_bin = cmd("xcrun").arg("--find").arg("clang").run().stdout_utf8(); | |
| let toolchain_bin = clang_bin.trim().strip_suffix("/clang").unwrap(); | |
| // Put toolchain directory at the front of PATH. | |
| let path = format!("{}:{}", toolchain_bin, std::env::var("PATH").unwrap()); | |
| // Check that compiling and linking still works. | |
| // | |
| // Removing `SDKROOT` is necessary for the test to excercise what we want, since bootstrap runs | |
| // under `/usr/bin/python3`, which will set SDKROOT for us. | |
| rustc().target(target()).env_remove("SDKROOT").env("PATH", &path).input("foo.rs").run(); | |
| // Also check linking directly with the system linker. | |
| rustc() | |
| .target(target()) | |
| .env_remove("SDKROOT") | |
| .env("PATH", &path) | |
| .input("foo.rs") | |
| .arg("-Clinker-flavor=ld") | |
| .run(); | |
| } |