File tree 2 files changed +22
-1
lines changed
2 files changed +22
-1
lines changed Original file line number Diff line number Diff line change @@ -36,7 +36,7 @@ fn main() {
36
36
} ;
37
37
38
38
let version = match rustc:: parse ( & string) {
39
- Some ( version) => format ! ( "{:#?} \n " , version) ,
39
+ Some ( version) => version,
40
40
None => {
41
41
eprintln ! (
42
42
"Error: unexpected output from `rustc --version`: {:?}\n \n \
@@ -47,6 +47,12 @@ fn main() {
47
47
}
48
48
} ;
49
49
50
+ if version. minor < 38 {
51
+ // Prior to 1.38, a #[proc_macro] is not allowed to be named `cfg`.
52
+ println ! ( "cargo:rustc-cfg=cfg_macro_not_allowed" ) ;
53
+ }
54
+
55
+ let version = format ! ( "{:#?}\n " , version) ;
50
56
let out_dir = env:: var_os ( "OUT_DIR" ) . expect ( "OUT_DIR not set" ) ;
51
57
let out_file = Path :: new ( & out_dir) . join ( "version.rs" ) ;
52
58
fs:: write ( out_file, version) . expect ( "failed to write version.rs" ) ;
Original file line number Diff line number Diff line change @@ -227,3 +227,18 @@ pub fn attr(args: TokenStream, input: TokenStream) -> TokenStream {
227
227
. and_then ( |args| expand:: try_attr ( args, input) )
228
228
. unwrap_or_else ( Error :: into_compile_error)
229
229
}
230
+
231
+ #[ cfg( not( cfg_macro_not_allowed) ) ]
232
+ #[ proc_macro]
233
+ pub fn cfg ( input : TokenStream ) -> TokenStream {
234
+ use proc_macro:: { Ident , Span , TokenTree } ;
235
+ ( || {
236
+ let ref mut args = iter:: new ( input) ;
237
+ let expr = expr:: parse ( args) ?;
238
+ token:: parse_end ( args) ?;
239
+ let boolean = expr. eval ( RUSTVERSION ) ;
240
+ let ident = Ident :: new ( & boolean. to_string ( ) , Span :: call_site ( ) ) ;
241
+ Ok ( TokenStream :: from ( TokenTree :: Ident ( ident) ) )
242
+ } ) ( )
243
+ . unwrap_or_else ( Error :: into_compile_error)
244
+ }
You can’t perform that action at this time.
0 commit comments