Be more DRY with conditional cfgs in build.rs
This commit is contained in:
parent
83eeab3405
commit
29b012608c
35
build.rs
35
build.rs
@ -45,6 +45,18 @@ fn parse_mappings(mut mappings: &'static str) -> Vec<Mapping> {
|
|||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Cfg = Option<&'static str>;
|
||||||
|
type Date = &'static str;
|
||||||
|
/// A `ConditionalCfg` is basically a list of optional feature names
|
||||||
|
/// (`Cfg`s) separated by `Date`s. The dates specify ranges of compiler
|
||||||
|
/// versions for which to enable particular features.
|
||||||
|
type ConditionalCfg = (Cfg, &'static [(Date, Cfg)]);
|
||||||
|
const CONDITIONAL_CFGS: &'static [ConditionalCfg] = &[
|
||||||
|
(None, &[("2018-01-01", Some("core_memchr"))]),
|
||||||
|
(None, &[("2017-06-15", Some("no_collections"))]),
|
||||||
|
(Some("rustc_unicode"), &[("2016-12-15", Some("std_unicode")), ("2017-03-03", None)]),
|
||||||
|
];
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let ver=rustc_version::version_meta();
|
let ver=rustc_version::version_meta();
|
||||||
|
|
||||||
@ -59,18 +71,17 @@ fn main() {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if ver.commit_date.as_ref().map_or(false,|d| &**d>="2018-01-01") {
|
for &(mut curcfg, rest) in CONDITIONAL_CFGS {
|
||||||
println!("cargo:rustc-cfg=core_memchr");
|
for &(date, nextcfg) in rest {
|
||||||
}
|
// if no commit_date is provided, assume compiler is current
|
||||||
|
if ver.commit_date.as_ref().map_or(false,|d| &**d<date) {
|
||||||
if ver.commit_date.as_ref().map_or(false,|d| &**d>="2017-06-15") {
|
break;
|
||||||
println!("cargo:rustc-cfg=no_collections");
|
}
|
||||||
}
|
curcfg = nextcfg;
|
||||||
|
}
|
||||||
if ver.commit_date.as_ref().map_or(false,|d| &**d<"2016-12-15") {
|
if let Some(cfg) = curcfg {
|
||||||
println!("cargo:rustc-cfg=rustc_unicode");
|
println!("cargo:rustc-cfg={}", cfg);
|
||||||
} else if ver.commit_date.as_ref().map_or(false,|d| &**d<"2017-03-03") {
|
}
|
||||||
println!("cargo:rustc-cfg=std_unicode");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut dest_path=PathBuf::from(env::var_os("OUT_DIR").unwrap());
|
let mut dest_path=PathBuf::from(env::var_os("OUT_DIR").unwrap());
|
||||||
|
Loading…
Reference in New Issue
Block a user