1
1
use std:: env;
2
- use std:: path:: PathBuf ;
2
+ use std:: fs;
3
+ use std:: path:: * ;
3
4
use std:: process:: Command ;
4
5
5
6
use cc:: Build ;
@@ -8,8 +9,8 @@ fn main() {
8
9
let project = PathBuf :: from ( env:: var ( "CARGO_MANIFEST_DIR" ) . unwrap ( ) ) . canonicalize ( ) . unwrap ( ) ;
9
10
let liburing = project. join ( "liburing" ) ;
10
11
11
- // configure script
12
- Command :: new ( "./ configure" ) . current_dir ( & liburing) . output ( ) . expect ( "configure script failed" ) ;
12
+ // Run the configure script in OUT_DIR to get `compat.h`
13
+ let configured_include = configure ( & liburing) ;
13
14
14
15
let src = liburing. join ( "src" ) ;
15
16
@@ -19,10 +20,21 @@ fn main() {
19
20
. file ( src. join ( "syscall.c" ) )
20
21
. file ( src. join ( "register.c" ) )
21
22
. include ( src. join ( "include" ) )
23
+ . include ( & configured_include)
22
24
. extra_warnings ( false )
23
25
. compile ( "uring" ) ;
24
26
25
27
// (our additional, linkable C bindings)
26
- Build :: new ( ) . file ( project. join ( "rusturing.c" ) ) . include ( src. join ( "include" ) )
28
+ Build :: new ( ) . file ( project. join ( "rusturing.c" ) )
29
+ . include ( src. join ( "include" ) )
30
+ . include ( & configured_include)
27
31
. compile ( "rusturing" ) ;
28
32
}
33
+
34
+ fn configure ( liburing : & Path ) -> PathBuf {
35
+ let out_dir = PathBuf :: from ( env:: var ( "OUT_DIR" ) . unwrap ( ) ) . canonicalize ( ) . unwrap ( ) ;
36
+ fs:: copy ( liburing. join ( "configure" ) , out_dir. join ( "configure" ) ) . unwrap ( ) ;
37
+ fs:: create_dir_all ( out_dir. join ( "src/include/liburing" ) ) . unwrap ( ) ;
38
+ Command :: new ( "./configure" ) . current_dir ( & out_dir) . output ( ) . expect ( "configure script failed" ) ;
39
+ out_dir. join ( "src/include" )
40
+ }
0 commit comments