neutauri/neutauri_bundler/src/main.rs

42 lines
1.5 KiB
Rust

use std::{fs, io::Write};
mod data;
fn main() -> wry::Result<()> {
let arg = std::env::args().nth(1).unwrap_or_else(|| "neutauri.toml".to_string());
if arg == "--help" || arg == "-h" {
println!("Usage: neutauri_bundler [neutauri.toml]");
return Ok(());
}
let config_path = std::path::Path::new(&arg).canonicalize()?;
let config: data::Config = toml::from_str(fs::read_to_string(&config_path)?.as_str())
.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e))?;
let source = match config_path.parent() {
Some(path) => path.join(&config.source).canonicalize()?,
None => config.source.canonicalize()?,
};
let target = match config_path.parent() {
Some(path) => data::normalize_path(&path.join(&config.target)),
None => data::normalize_path(&config.target),
};
if target.extension() == Some(std::ffi::OsStr::new("neu")) {
data::pack(arg)?;
return Ok(());
}
let data = data::Data::build_from_dir(source, config.window_attr()?, config.webview_attr()?)?;
let mut option = fs::OpenOptions::new();
let option = option.write(true).create(true).truncate(true);
let option = if cfg!(unix) {
std::os::unix::prelude::OpenOptionsExt::mode(option, 0o755)
} else {
option
};
let mut f = option.open(&target)?;
let runtime_data = include_bytes!("../../target/release/neutauri_runtime");
f.write_all(runtime_data)?;
f.write_all(&data)?;
f.sync_all()?;
f.flush()?;
Ok(())
}