diff --git a/src/lib.rs b/src/lib.rs index 99c2fd9c8..062d59e60 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -601,26 +601,14 @@ impl Build { /// `known_flag_support` field. If `is_flag_supported(flag)` /// is called again, the result will be read from the hash table. pub fn is_flag_supported(&self, flag: &str) -> Result { - let target = self.get_target()?; + self.is_flag_supported_inner(flag, self.get_base_compiler()?.path()) + } - let mut compiler = { - let mut cfg = Build::new(); - cfg.flag(flag) - .cargo_metadata(self.cargo_output.metadata) - .target(&target) - .opt_level(0) - .host(&self.get_host()?) - .debug(false) - .cpp(self.cpp) - .cuda(self.cuda); - if let Some(ref c) = self.compiler { - cfg.compiler(c.clone()); - } - cfg.try_get_compiler()? - }; + fn is_flag_supported_inner(&self, flag: &str, compiler_path: &Path) -> Result { + let target = self.get_target()?; let compiler_flag = CompilerFlag { - compiler: compiler.path.clone().into(), + compiler: compiler_path.into(), flag: flag.into(), }; @@ -638,6 +626,20 @@ impl Build { let src = self.ensure_check_file()?; let obj = out_dir.join("flag_check"); + let mut compiler = { + let mut cfg = Build::new(); + cfg.flag(flag) + .compiler(compiler_path) + .cargo_metadata(self.cargo_output.metadata) + .target(&target) + .opt_level(0) + .host(&self.get_host()?) + .debug(false) + .cpp(self.cpp) + .cuda(self.cuda); + cfg.try_get_compiler()? + }; + // Clang uses stderr for verbose output, which yields a false positive // result if the CFLAGS/CXXFLAGS include -v to aid in debugging. if compiler.family.verbose_stderr() { @@ -1805,7 +1807,10 @@ impl Build { } for flag in self.flags_supported.iter() { - if self.is_flag_supported(flag).unwrap_or(false) { + if self + .is_flag_supported_inner(flag, &cmd.path) + .unwrap_or(false) + { cmd.push_cc_arg((**flag).into()); } }