1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
use failure::{bail, Error};
use std::env;
use std::fs::File;
use std::io;
use std::io::{Read, Write};
use std::path::PathBuf;
use std::process::{Command, Stdio};
pub fn sync_libs(lib_path: &PathBuf) {
let status = Command::new("sh")
.arg("synclibs.sh")
.current_dir(&lib_path)
.stderr(Stdio::inherit())
.stdout(Stdio::inherit())
.status()
.expect("synclibs failed");
assert!(status.success(), "synclibs failed");
}
pub fn build_lib(lib_path: PathBuf, shared: bool) -> PathBuf {
let target = lib_path.join("dist");
let status = Command::new("sh")
.arg("autogen.sh")
.current_dir(&lib_path)
.stderr(Stdio::inherit())
.stdout(Stdio::inherit())
.status()
.expect("autogen failed");
assert!(status.success(), "autogen failed");
let mut configure_cmd = Command::new("sh");
configure_cmd
.arg("configure")
.arg(format!("--prefix={}", target.display()))
.current_dir(&lib_path)
.stderr(Stdio::inherit())
.stdout(Stdio::inherit());
if !shared {
configure_cmd.arg("--enable-shared=no");
}
let status = configure_cmd.status().expect("configure failed");
assert!(status.success(), "configure failed");
let status = Command::new("make")
.current_dir(&lib_path)
.stderr(Stdio::inherit())
.stdout(Stdio::inherit())
.status()
.expect("make failed");
assert!(status.success(), "make failed");
let status = Command::new("make")
.arg("install")
.current_dir(&lib_path)
.stderr(Stdio::inherit())
.stdout(Stdio::inherit())
.status()
.expect("make install failed");
assert!(status.success(), "make install failed");
assert!(
target.join("lib").exists(),
"Expected {} to exist",
target.join("lib").display()
);
println!(
"cargo:rustc-link-search=native={}",
target.join("lib").canonicalize().unwrap().to_string_lossy()
);
target.join("include")
}