config.incremental = flags.incremental;
config.dry_run = flags.dry_run;
config.keep_stage = flags.keep_stage;
- if let Some(value) = flags.warnings {
+ if let Some(value) = flags.deny_warnings {
config.deny_warnings = value;
}
config.rustc_default_linker = rust.default_linker.clone();
config.musl_root = rust.musl_root.clone().map(PathBuf::from);
config.save_toolstates = rust.save_toolstates.clone().map(PathBuf::from);
- set(&mut config.deny_warnings, rust.deny_warnings.or(flags.warnings));
+ set(&mut config.deny_warnings, flags.deny_warnings.or(rust.deny_warnings));
set(&mut config.backtrace_on_ice, rust.backtrace_on_ice);
set(&mut config.rust_verify_llvm_ir, rust.verify_llvm_ir);
set(&mut config.rust_remap_debuginfo, rust.remap_debuginfo);
pub rustc_error_format: Option<String>,
pub dry_run: bool,
- // true => deny
- pub warnings: Option<bool>,
+ // This overrides the deny-warnings configuation option,
+ // which passes -Dwarnings to the compiler invocations.
+ //
+ // true => deny, false => allow
+ pub deny_warnings: Option<bool>,
}
pub enum Subcommand {
.into_iter()
.map(|p| p.into())
.collect::<Vec<_>>(),
- warnings: matches.opt_str("warnings").map(|v| v == "deny"),
+ deny_warnings: parse_deny_warnings(&matches),
}
}
}
.map(|s| s.to_string())
.collect()
}
+
+fn parse_deny_warnings(matches: &getopts::Matches) -> Option<bool> {
+ match matches.opt_str("warnings").as_ref().map(|v| v.as_str()) {
+ Some("deny") => Some(true),
+ Some("allow") => Some(false),
+ Some(value) => {
+ eprintln!(
+ r#"invalid value for --warnings: {:?}, expected "allow" or "deny""#,
+ value,
+ );
+ process::exit(1);
+ },
+ None => None,
+ }
+}