.env("RUSTDOC", &*cx.config.rustdoc()?)
.inherit_jobserver(&cx.jobserver);
- if cx.build_config.target.linker.is_some() {
- cmd.env("RUSTC_LINKER", &cx.build_config.target.linker.as_ref().unwrap());
+ if let Some(ref linker) = cx.build_config.target.linker {
+ cmd.env("RUSTC_LINKER", linker);
}
if let Some(links) = unit.pkg.manifest().links() {
use std::path::PathBuf;
use cargotest::{rustc_host, sleep_ms};
-use cargotest::support::{execs, project};
+use cargotest::support::{cross_compile, execs, project};
use cargotest::support::paths::CargoPathExt;
use cargotest::support::registry::Package;
use hamcrest::{assert_that, existing_dir, existing_file};
let rustdoc = env::var("RUSTDOC").unwrap();
assert_eq!(rustdoc, "rustdoc");
+
+ assert!(env::var("RUSTC_LINKER").is_err());
}}
"#,
p.root()
p.cargo("build").arg("--features").arg("bar_feat"),
execs().with_status(0),
);
+
+ // Test passing linker from .cargo/config to env var
+ if cross_compile::disabled() { return; }
+ let target = cross_compile::alternate();
+ let p = project("foo")
+ .file("Cargo.toml",
+ r#"
+ [project]
+ name = "foo"
+ version = "0.0.1"
+ "#
+ )
+ .file(
+ ".cargo/config",
+ &format!(
+ r#"
+ [target.{}]
+ linker = "/path/to/linker"
+ "#,
+ target
+ )
+ )
+ .file(
+ "build.rs",
+ r#"
+ use std::env;
+
+ fn main() {
+ assert_eq!(env::var("RUSTC_LINKER"), "/path/to/linker");
+ }
+ "#)
+ .file("src/lib.rs", "")
+ .build();
+
+ // no crate type set => linker never called => build succeeds if and
+ // only if build.rs succeeds, despite linker binary not existing.
+ assert_that(
+ p.cargo("build").arg("--target").arg(&target).arg("-v"),
+ execs().with_status(0),
+ );
}
#[test]