32 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
			
		
		
	
	
			32 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
| use std::env;
 | |
| use std::process::Command;
 | |
| use std::str;
 | |
| 
 | |
| // The rustc-cfg strings below are *not* public API. Please let us know by
 | |
| // opening a GitHub issue if your build environment requires some way to enable
 | |
| // these cfgs other than by executing our build script.
 | |
| fn main() {
 | |
|     let minor = match rustc_minor_version() {
 | |
|         Some(minor) => minor,
 | |
|         None => return,
 | |
|     };
 | |
| 
 | |
|     // Function-like procedural macros in expressions, patterns, and statements
 | |
|     // stabilized in Rust 1.45:
 | |
|     // https://blog.rust-lang.org/2020/07/16/Rust-1.45.0.html#stabilizing-function-like-procedural-macros-in-expressions-patterns-and-statements
 | |
|     if minor < 45 {
 | |
|         println!("cargo:rustc-cfg=need_proc_macro_hack");
 | |
|     }
 | |
| }
 | |
| 
 | |
| fn rustc_minor_version() -> Option<u32> {
 | |
|     let rustc = env::var_os("RUSTC")?;
 | |
|     let output = Command::new(rustc).arg("--version").output().ok()?;
 | |
|     let version = str::from_utf8(&output.stdout).ok()?;
 | |
|     let mut pieces = version.split('.');
 | |
|     if pieces.next() != Some("rustc 1") {
 | |
|         return None;
 | |
|     }
 | |
|     pieces.next()?.parse().ok()
 | |
| }
 |