Skip to content

Commit

Permalink
Move trybuild_no_target logic to where --target is set
Browse files Browse the repository at this point in the history
  • Loading branch information
dtolnay committed Aug 15, 2021
1 parent 09aba1f commit 0413c5c
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 19 deletions.
22 changes: 19 additions & 3 deletions src/cargo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -123,8 +123,24 @@ fn features(project: &Project) -> Vec<String> {
}

fn target() -> Vec<&'static str> {
match crate::TARGET {
Some(target) => vec!["--target", target],
None => vec![],
// When --target flag is passed, cargo does not pass RUSTFLAGS to rustc when
// building proc-macro and build script even if the host and target triples
// are the same. Therefore, if we always pass --target to cargo, tools such
// as coverage that require RUSTFLAGS do not work for tests run by trybuild.
//
// To avoid that problem, do not pass --target to cargo if we know that it
// has not been passed.
//
// Currently, cargo does not have a way to tell the build script whether
// --target has been passed or not, and there is no heuristic that can
// handle this well.
//
// Therefore, expose a cfg to always treat the target as host.
if cfg!(trybuild_no_target) {
vec![]
} else if let Some(target) = crate::TARGET {
vec!["--target", target]
} else {
vec![]
}
}
16 changes: 0 additions & 16 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -245,22 +245,6 @@ mod normalize;
mod run;
mod rustflags;

// When --target flag is passed, cargo does not pass RUSTFLAGS to rustc when
// building proc-macro and build script even if the host and target triples are
// the same. Therefore, if we always pass --target to cargo, tools such as
// coverage that require RUSTFLAGS do not work for tests run by trybuild.
//
// To avoid that problem, do not pass --target to cargo if we know that it has
// not been passed.
//
// Currently, cargo does not have a way to tell the build script whether
// --target has been passed or not, and there is no heuristic that can handle
// this well.
//
// Therefore, expose a cfg to always treat the target as host.
#[cfg(trybuild_no_target)]
const TARGET: Option<&str> = None;
#[cfg(not(trybuild_no_target))]
include!(concat!(env!("OUT_DIR"), "/target.rs"));

use std::cell::RefCell;
Expand Down

0 comments on commit 0413c5c

Please sign in to comment.