use failure::{bail, Error};
use libyal_rs_common_build::{build_lib, generate_bindings, sync_libs, get_lib_and_copy_to_out_dir};
use std::env;
use std::fs::File;
use std::io::{Write, Read};
use std::path::PathBuf;
fn build_and_link_static(lib_path: PathBuf) -> PathBuf {
if cfg!(target_os = "windows") {
println!("cargo:rustc-link-lib=static=libfsntfs");
let deps = [
"libbfio",
"libcdata",
"libcerror",
"libcfile",
"libclocale",
"libcnotify",
"libcpath",
"libcsplit",
"libcthreads",
"libfcache",
"libfdata",
"libfdatetime",
"libfguid",
"libfusn",
"libfwnt",
"libuna",
];
for dep in deps.iter() {
println!("cargo:rustc-link-lib=static={}", dep);
}
} else {
println!("cargo:rustc-link-lib=static=fsntfs");
}
build_lib(lib_path, false)
}
fn build_and_link_dynamic(lib_path: PathBuf) -> PathBuf {
if cfg!(target_os = "windows") {
println!("cargo:rustc-link-lib=dylib=libfsntfs");
} else {
println!("cargo:rustc-link-lib=dylib=fsntfs");
}
build_lib(lib_path, true)
}
fn main() {
let lib_path = get_lib_and_copy_to_out_dir("libfsntfs");
sync_libs(&lib_path);
let patched_file_path = lib_path.join("libfcache").join("libfcache_cache_value.c");
let mut org_file_content = String::new();
File::open(&patched_file_path)
.unwrap()
.read_to_string(&mut org_file_content)
.unwrap();
let patched_file_lines: Vec<&str> = org_file_content.lines().enumerate()
.filter(|(line_idx, _line)| (line_idx + 1 < 477) || (489 < line_idx +1) )
.map(|(_line_idx, line)| line)
.collect();
let patched_file_content = patched_file_lines.join("\n");
File::create(&patched_file_path)
.unwrap()
.write_all(&patched_file_content.as_bytes())
.unwrap();
let include_folder_path = if cfg!(feature = "dynamic_link") {
build_and_link_dynamic(lib_path)
} else {
build_and_link_static(lib_path)
};
generate_bindings(&include_folder_path, "wrapper.h");
}