@@ -12,13 +12,11 @@ extern crate pkg_config;
12
12
#[ cfg( feature = "build_capstone_cmake" ) ]
13
13
extern crate cmake;
14
14
15
- #[ cfg( feature = "use_bindgen" ) ]
16
15
use std:: fs:: copy;
17
16
use std:: path:: PathBuf ;
18
17
use std:: process:: Command ;
19
18
use std:: env;
20
19
21
- #[ cfg( feature = "use_bindgen" ) ]
22
20
include ! ( "common.rs" ) ;
23
21
24
22
const CAPSTONE_DIR : & ' static str = "capstone" ;
@@ -52,13 +50,17 @@ fn find_capstone_header(header_search_paths: &Vec<PathBuf>, name: &str) -> Optio
52
50
53
51
/// Gets environment variable value. Panics if variable is not set.
54
52
fn env_var ( var : & str ) -> String {
55
- env:: var ( var)
56
- . expect ( & format ! ( "Environment variable {} is not set" , var) )
53
+ env:: var ( var) . expect ( & format ! ( "Environment variable {} is not set" , var) )
57
54
}
58
55
59
56
/// Create bindings using bindgen
60
57
#[ cfg( feature = "use_bindgen" ) ]
61
- fn write_bindgen_bindings ( header_search_paths : & Vec < PathBuf > , update_pregenerated_bindings : bool ) {
58
+ fn write_bindgen_bindings (
59
+ header_search_paths : & Vec < PathBuf > ,
60
+ update_pregenerated_bindings : bool ,
61
+ pregenerated_bindgen_header : PathBuf ,
62
+ out_path : PathBuf ,
63
+ ) {
62
64
let mut builder = bindgen:: Builder :: default ( )
63
65
. rust_target ( bindgen:: RustTarget :: Stable_1_19 )
64
66
. header (
@@ -88,19 +90,12 @@ fn write_bindgen_bindings(header_search_paths: &Vec<PathBuf>, update_pregenerate
88
90
let bindings = builder. generate ( ) . expect ( "Unable to generate bindings" ) ;
89
91
90
92
// Write bindings to $OUT_DIR/bindings.rs
91
- let out_path = PathBuf :: from ( env_var ( "OUT_DIR" ) ) . join ( BINDINGS_FILE ) ;
92
- bindings
93
- . write_to_file ( out_path. clone ( ) )
94
- . expect ( "Unable to write bindings" ) ;
93
+ bindings. write_to_file ( out_path. clone ( ) ) . expect (
94
+ "Unable to write bindings" ,
95
+ ) ;
95
96
96
97
if update_pregenerated_bindings {
97
- let stored_bindgen_header: PathBuf = [
98
- env_var ( "CARGO_MANIFEST_DIR" ) ,
99
- "pre_generated" . into ( ) ,
100
- BINDINGS_FILE . into ( ) ,
101
- ] . iter ( )
102
- . collect ( ) ;
103
- copy ( out_path, stored_bindgen_header) . expect ( "Unable to update capstone bindings" ) ;
98
+ copy ( out_path, pregenerated_bindgen_header) . expect ( "Unable to update capstone bindings" ) ;
104
99
}
105
100
}
106
101
@@ -133,8 +128,7 @@ fn main() {
133
128
}
134
129
} else {
135
130
if cfg ! ( feature = "build_capstone_cmake" ) {
136
- #[ cfg( feature = "build_capstone_cmake" ) ]
137
- cmake ( ) ;
131
+ #[ cfg( feature = "build_capstone_cmake" ) ] cmake ( ) ;
138
132
} else {
139
133
// TODO: need to add this argument for windows 64-bit, msvc, dunno, read
140
134
// COMPILE_MSVC.txt file cygwin-mingw64
@@ -186,7 +180,24 @@ fn main() {
186
180
) ;
187
181
}
188
182
183
+ let pregenerated_bindgen_header: PathBuf = [
184
+ env_var ( "CARGO_MANIFEST_DIR" ) ,
185
+ "pre_generated" . into ( ) ,
186
+ BINDINGS_FILE . into ( ) ,
187
+ ] . iter ( )
188
+ . collect ( ) ;
189
+ let out_path = PathBuf :: from ( env_var ( "OUT_DIR" ) ) . join ( BINDINGS_FILE ) ;
190
+
189
191
// Only run bindgen if we are *not* using the bundled capstone bindings
190
192
#[ cfg( feature = "use_bindgen" ) ]
191
- write_bindgen_bindings ( & header_search_paths, update_pregenerated_bindings) ;
193
+ write_bindgen_bindings (
194
+ & header_search_paths,
195
+ update_pregenerated_bindings,
196
+ pregenerated_bindgen_header,
197
+ out_path,
198
+ ) ;
199
+
200
+ // Otherwise, copy the pregenerated bindings
201
+ #[ cfg( not( feature = "use_bindgen" ) ) ]
202
+ copy ( & pregenerated_bindgen_header, & out_path) . expect ( "Unable to update capstone bindings" ) ;
192
203
}
0 commit comments