toster 1.2.2

A simple-as-toast tester for C++ solutions to competitive programming exercises
#[cfg(all(target_os = "linux", target_arch = "x86_64"))]
use {
	std::{fs, process},
	std::fs::Permissions,
	std::os::unix::fs::PermissionsExt,
	directories::BaseDirs
};

#[cfg(all(target_os = "linux", target_arch = "x86_64"))]
fn main() {
	let base_dirs = BaseDirs::new().unwrap_or_else(|| {
		println!("cargo:warning=No valid home directory path could be retrieved from the operating system. Sio2jail was not installed");
		process::exit(0)
	});
	let executable_dir = base_dirs.executable_dir().unwrap_or_else(|| {
		println!("cargo:warning=Couldn't locate the user's executable directory. Sio2jail was not installed");
		process::exit(0);
	});
	let executable_dir_str = executable_dir.to_str().unwrap_or_else(|| {
		println!("cargo:warning=The user's executable directory is invalid. Sio2jail was not installed");
		process::exit(0);
	});

	fs::create_dir_all(executable_dir_str).unwrap_or_else(|_| {
		println!("cargo:warning=Couldn't create the {} directory. Sio2jail was not installed", executable_dir_str);
		process::exit(0);
	});
	fs::copy("sio2jail", format!("{}/sio2jail", executable_dir_str)).unwrap_or_else(|_| {
		println!("cargo:warning=Couldn't copy sio2jail to {}. Sio2jail was not installed", executable_dir_str);
		process::exit(0);
	});
	fs::set_permissions(format!("{}/sio2jail", executable_dir_str), Permissions::from_mode(0o755)).unwrap_or_else(|_| {
		println!("cargo:warning=Couldn't set execute permissions on sio2jail at {}. Sio2jail was not installed", format!("{}/sio2jail", executable_dir_str));
		process::exit(0);
	});
}

#[cfg(not(all(target_os = "linux", target_arch = "x86_64")))]
fn main() {}