Skip to content

Commit 08624b8

Browse files
committed
Add GenericTarget with several override points
1 parent 987f826 commit 08624b8

File tree

1 file changed

+48
-8
lines changed

1 file changed

+48
-8
lines changed

src/lib.rs

Lines changed: 48 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,7 @@ impl Config {
315315
t
316316
}
317317
};
318+
let target = get_target(&target_triple);
318319
let host = self.host.clone().unwrap_or_else(|| getenv_unwrap("HOST"));
319320
let msvc = target_triple.contains("msvc");
320321
let ndk = self.uses_android_ndk();
@@ -481,6 +482,9 @@ impl Config {
481482
cmd.arg("-DCMAKE_SYSTEM_NAME=SunOS");
482483
}
483484
}
485+
486+
target.add_cmake_defines(&mut cmd, self);
487+
484488
if let Some(ref generator) = self.generator {
485489
cmd.arg("-G").arg(generator);
486490
}
@@ -581,17 +585,22 @@ impl Config {
581585
let mut set_compiler = |kind: &str, compiler: &cc::Tool, extra: &OsString| {
582586
let mut add_compiler_flags = |flag_var_name: &str| {
583587
if !self.defined(&flag_var_name) {
584-
let mut flagsflag = OsString::from("-D");
585-
flagsflag.push(&flag_var_name);
586-
flagsflag.push("=");
587-
flagsflag.push(extra);
588+
let mut compiler_flags = OsString::new();
589+
compiler_flags.push(extra);
588590
for arg in compiler.args() {
589591
if skip_arg(arg) {
590592
continue;
591593
}
592-
flagsflag.push(" ");
593-
flagsflag.push(arg);
594+
compiler_flags.push(" ");
595+
compiler_flags.push(arg);
594596
}
597+
target.filter_compiler_args(&mut compiler_flags);
598+
599+
let mut flagsflag = OsString::from("-D");
600+
flagsflag.push(flag_var_name);
601+
flagsflag.push("=");
602+
flagsflag.push(compiler_flags);
603+
595604
cmd.arg(flagsflag);
596605
}
597606
};
@@ -671,6 +680,9 @@ impl Config {
671680
}
672681

673682
for &(ref k, ref v) in c_compiler.env().iter().chain(&self.env) {
683+
if target.should_exclude_env_var(k, v) {
684+
continue;
685+
}
674686
cmd.env(k, v);
675687
}
676688

@@ -720,9 +732,12 @@ impl Config {
720732
}
721733

722734
// And build!
723-
let target = self.cmake_target.clone().unwrap_or("install".to_string());
735+
let cmake_target = self.cmake_target.clone().unwrap_or("install".to_string());
724736
let mut cmd = Command::new(&executable);
725737
for &(ref k, ref v) in c_compiler.env().iter().chain(&self.env) {
738+
if target.should_exclude_env_var(k, v) {
739+
continue;
740+
}
726741
cmd.env(k, v);
727742
}
728743

@@ -733,7 +748,7 @@ impl Config {
733748
cmd.arg("--build").arg(".");
734749

735750
if !self.no_build_target {
736-
cmd.arg("--target").arg(target);
751+
cmd.arg("--target").arg(cmake_target);
737752
}
738753

739754
cmd.arg("--config")
@@ -827,6 +842,31 @@ impl Config {
827842
}
828843
}
829844

845+
trait Target {
846+
fn add_cmake_defines(&self, _cmd: &mut Command, _config: &Config) {}
847+
848+
fn should_exclude_env_var(&self, _key: &OsStr, _value: &OsStr) -> bool {
849+
false
850+
}
851+
852+
fn filter_compiler_args(&self, _flags: &mut OsString) {}
853+
}
854+
855+
fn get_target(target_triple: &str) -> Box<dyn Target> {
856+
let target: Option<Box<dyn Target>>;
857+
target.unwrap_or_else(|| Box::new(GenericTarget::new(target_triple)))
858+
}
859+
860+
struct GenericTarget {}
861+
862+
impl GenericTarget {
863+
fn new(_target_triple: &str) -> GenericTarget {
864+
GenericTarget {}
865+
}
866+
}
867+
868+
impl Target for GenericTarget {}
869+
830870
fn run(cmd: &mut Command, program: &str) {
831871
println!("running: {:?}", cmd);
832872
let status = match cmd.status() {

0 commit comments

Comments
 (0)