diff --git a/build.rs b/build.rs index 56d771f..8bbd19c 100644 --- a/build.rs +++ b/build.rs @@ -30,6 +30,10 @@ fn main() { fs::write(out_file, version) .unwrap_or_else(|e| panic!("failed to write {}: {}", out_file.display(), e)); + if assume_incomplete_release() { + println!("cargo:rustc-cfg=const_fn_assume_incomplete_release"); + } + // Mark as build script has been run successfully. println!("cargo:rustc-cfg=const_fn_has_build_script"); } @@ -100,3 +104,26 @@ impl Version { format!("Version {{ minor: {}, nightly: {} }}\n", self.minor, self.nightly) } } + +// https://github.com/rust-lang/rust/pull/81468 +// https://github.com/taiki-e/const_fn/issues/27 +fn assume_incomplete_release() -> bool { + // Recognized formats: + // + // -Z assume-incomplete-release + // + // -Zassume-incomplete-release + + if let Some(rustflags) = env::var_os("RUSTFLAGS") { + for mut flag in rustflags.to_string_lossy().split(' ') { + if flag.starts_with("-Z") { + flag = &flag["-Z".len()..]; + } + if flag == "assume-incomplete-release" { + return true; + } + } + } + + false +} diff --git a/src/lib.rs b/src/lib.rs index c023fb1..e8b0897 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -112,7 +112,9 @@ fn expand(arg: Arg, mut func: Func) -> TokenStream { tokens } Arg::Version(req) => { - if req.major > 1 || req.minor > VERSION.minor { + if req.major > 1 + || req.minor + (cfg!(const_fn_assume_incomplete_release) as u32) > VERSION.minor + { func.print_const = false; } func.to_token_stream()