use std::path::Path;
use std::process::Command;
use cargo_newcpp::command_helper::dump_command;
use cli::BuildContext;
mod cli;
fn main() {
let cfg = cli::parse_args();
let (target_dir, build_type) = match cfg.context{
BuildContext::Debug(d) => (d, "Debug"),
BuildContext::Release(r) => (r,"Release"),
};
if !Path::new("./CMakeLists.txt").exists(){
let curr_dir = std::env::current_dir().unwrap().to_string_lossy().to_string();
println!("error: could not find `CMakeLists.txt` in `{}/CMakeLists.txt` or any parent directory",curr_dir);
}
run_cmake(&target_dir, build_type);
run_ninja(&target_dir);
}
fn run_cmake(target_dir: &str, build_type: &str){
let mut cmd = Command::new("cmake");
println!("INFO: creating build tree with default generator (ninja):");
println!(" cmake -B {target_dir} -S . -G Ninja -D CMAKE_BUILD_TYPE={build_type}");
cmd.arg("-B")
.arg(target_dir)
.arg("-S")
.arg(".")
.arg("-GNinja")
.arg(format!("-DCMAKE_BUILD_TYPE={}",build_type));
dump_command(&mut cmd);
}
fn run_ninja(target_dir: &str){
println!("INFO: executing command:");
println!(" cmake --build {target_dir}");
let mut cmd = Command::new("cmake");
cmd.arg("--build")
.arg(target_dir);
dump_command(&mut cmd);
}
#[allow(dead_code)]
fn run_make(target_dir: &str){
let mut cmd = Command::new("cmake");
cmd.arg("--build");
cmd.arg("-j`nproc`");
cmd.current_dir(target_dir);
dump_command(&mut cmd);
}