-
Notifications
You must be signed in to change notification settings - Fork 35
/
Copy pathbuild.rs
34 lines (31 loc) · 1.18 KB
/
build.rs
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
use std::env;
use std::fs;
use std::path::{Path, PathBuf};
use std::io;
fn main() {
let res_dir_source = Path::new(&env::var("CARGO_MANIFEST_DIR").unwrap()).join("resources/");
let res_dir_target = Path::new(&env::var("OUT_DIR").unwrap()).join("../../../resources/");
// Copies all resource files to "target/NAME/resources". Prints out any errors if failed.
if let Err(io_error) = add_resources(&res_dir_source, &res_dir_target) {
println!("OS Error: {}", io_error);
}
}
// Recursively copy all files in dir given by source_path to dir given by target path
// WARNING! Overwrites files with same name
fn add_resources(source_path: &PathBuf, target_path: &PathBuf) -> io::Result<()> {
match fs::read_dir(source_path) {
Ok(entry_iter) => {
fs::create_dir_all(target_path)?;
for entry in entry_iter {
let entry = entry?;
let source_path = entry.path();
let target_path = target_path.join(entry.file_name());
add_resources(&source_path, &target_path)?;
}
}
Err(_) => {
fs::copy(&source_path, &target_path)?;
}
}
Ok(())
}