mkwin: initial commit
This commit is contained in:
parent
d5e81e285f
commit
3ea61d1954
5 changed files with 120 additions and 0 deletions
2
mkwin/.gitignore
vendored
Normal file
2
mkwin/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
/target
|
||||
Cargo.lock
|
16
mkwin/Cargo.toml
Normal file
16
mkwin/Cargo.toml
Normal file
|
@ -0,0 +1,16 @@
|
|||
[package]
|
||||
name = "mkwin"
|
||||
version = "0.0.1"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
pico-args = { version = "0.5.0", features = [ "eq-separator" ] }
|
||||
|
||||
[profile.release]
|
||||
opt-level = 's'
|
||||
codegen-units = 1
|
||||
debug = false
|
||||
lto = true
|
||||
panic = "abort"
|
||||
strip = "symbols"
|
||||
|
11
mkwin/src/error.rs
Normal file
11
mkwin/src/error.rs
Normal file
|
@ -0,0 +1,11 @@
|
|||
//! error handling code
|
||||
|
||||
use std::process::exit;
|
||||
|
||||
/// no argument for target; code 1
|
||||
pub fn missing_target() {
|
||||
println!("mkwin: missing target");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
6
mkwin/src/flag.rs
Normal file
6
mkwin/src/flag.rs
Normal file
|
@ -0,0 +1,6 @@
|
|||
//! constants for flag arguments
|
||||
|
||||
pub const HELP: [&str;2] = ["-h", "--help"];
|
||||
pub const PATH_CONVERT: [&str;2] = [ "--pc", "--path-convert" ];
|
||||
pub const QUIET: [&str;2] = ["-q", "--quiet"];
|
||||
|
85
mkwin/src/main.rs
Normal file
85
mkwin/src/main.rs
Normal file
|
@ -0,0 +1,85 @@
|
|||
|
||||
use pico_args::Arguments;
|
||||
|
||||
mod error;
|
||||
mod flag;
|
||||
|
||||
pub fn main() {
|
||||
let mut args = Arguments::from_env();
|
||||
|
||||
// build reference string
|
||||
let mut arg_string = String::new();
|
||||
for arg in args.clone().finish() {
|
||||
arg_string += &format!(" {}", arg.to_str().unwrap());
|
||||
}
|
||||
|
||||
// consume breaking flags
|
||||
if args.contains(flag::HELP) {
|
||||
help_text();
|
||||
return;
|
||||
}
|
||||
|
||||
// consume path convert flag
|
||||
let path_convert: bool;
|
||||
let path_convert_flags: Option<String>;
|
||||
match args.value_from_str(flag::PATH_CONVERT) {
|
||||
Ok(flags) => {
|
||||
path_convert = true;
|
||||
path_convert_flags = if flags != "x" { Some(flags) } else { None };
|
||||
},
|
||||
Err(pico_args::Error::OptionWithoutAValue(_)) => {
|
||||
path_convert = true;
|
||||
path_convert_flags = None;
|
||||
},
|
||||
_ => {
|
||||
path_convert = false;
|
||||
path_convert_flags = None;
|
||||
}
|
||||
}
|
||||
|
||||
// consume simple flags
|
||||
let quiet = args.contains(flag::QUIET);
|
||||
|
||||
// get target executable
|
||||
let i_target = args.subcommand().unwrap();
|
||||
if i_target.is_none() {
|
||||
error::missing_target();
|
||||
}
|
||||
let target = i_target.unwrap();
|
||||
|
||||
// construct output
|
||||
print!("#!/usr/bin/bash\n# generated with: mkwin{arg_string}\n\n'{target}' ");
|
||||
|
||||
if path_convert {
|
||||
let flags = if let Some(i) = path_convert_flags { format!("-{i}") } else { String::new() };
|
||||
print!("`path-convert {flags} $@`");
|
||||
} else {
|
||||
print!("$@");
|
||||
}
|
||||
|
||||
if quiet {
|
||||
print!(" > /dev/null 2>&1 &");
|
||||
}
|
||||
}
|
||||
|
||||
pub fn help_text() {
|
||||
println!("mkwin v{}
|
||||
Valerie Wolfe <sleeplessval@gmail.com>
|
||||
Quickly make bash scripts to run windows programs in WSL.
|
||||
|
||||
usage: mkwin [flags] <target>
|
||||
|
||||
args:
|
||||
<target> The target program the resulting script will run.
|
||||
|
||||
flags:
|
||||
-h, --help Shows this help text.
|
||||
--pc=<flags>, The resulting script will use the 'path-convert'
|
||||
--path-convert=<flags> to convert arguments from UNIX to DOS, with the
|
||||
provided set of flags ('x' for no flags).
|
||||
|
||||
-q, --quiet The resulting script will run the target program
|
||||
in the background and with its outputs redirected
|
||||
to '/dev/null'.",
|
||||
env!("CARGO_PKG_VERSION"));}
|
||||
|
Loading…
Reference in a new issue