-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild.rs
More file actions
59 lines (50 loc) · 1.65 KB
/
build.rs
File metadata and controls
59 lines (50 loc) · 1.65 KB
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
use std::fs;
use std::path::Path;
fn copy_dir(src: &Path, dst: &Path) {
fs::create_dir_all(dst).unwrap();
for entry in fs::read_dir(src).unwrap() {
let entry = entry.unwrap();
let path = entry.path();
let dest = dst.join(entry.file_name());
if path.is_dir() {
copy_dir(&path, &dest);
} else {
fs::copy(&path, &dest).unwrap();
}
}
}
fn main() {
let out_dir = std::env::var("OUT_DIR").unwrap();
// OUT_DIR = target/release/build/hale-xxxx/out
let target_dir = Path::new(&out_dir)
.ancestors()
.nth(4)
.unwrap();
let release_dir = target_dir.join("release");
// ---- install wrapper ----
let wrapper_src = Path::new("scripts/hale_wrapper.sh");
let wrapper_dst = release_dir.join("hale");
fs::copy(wrapper_src, &wrapper_dst).unwrap();
// ---- install scripts/ ----
let scripts_src = Path::new("scripts");
let scripts_dst = release_dir.join("scripts");
copy_dir(scripts_src, &scripts_dst);
// ---- chmod +x ----
#[cfg(unix)]
{
use std::os::unix::fs::PermissionsExt;
// wrapper
let mut perms = fs::metadata(&wrapper_dst).unwrap().permissions();
perms.set_mode(0o755);
fs::set_permissions(&wrapper_dst, perms).unwrap();
// scripts
for entry in fs::read_dir(&scripts_dst).unwrap() {
let path = entry.unwrap().path();
if path.is_file() {
let mut perms = fs::metadata(&path).unwrap().permissions();
perms.set_mode(0o755);
fs::set_permissions(&path, perms).unwrap();
}
}
}
}