diff --git a/mkwin/Cargo.toml b/mkwin/Cargo.toml index b54723d..0b1e5b4 100644 --- a/mkwin/Cargo.toml +++ b/mkwin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mkwin" -version = "0.0.3" +version = "0.0.4" edition = "2021" [dependencies] diff --git a/mkwin/src/flag.rs b/mkwin/src/flag.rs index 9b56f5b..cde5b51 100644 --- a/mkwin/src/flag.rs +++ b/mkwin/src/flag.rs @@ -1,7 +1,8 @@ //! constants for flag arguments pub const HELP: [&str;2] = ["-h", "--help"]; -pub const EMPTY: &str = "--empty"; +pub const EMPTY: [&str;2] = ["-e", "--empty"]; +pub const FIND_BIN: &str = "--find"; pub const PATH_CONVERT: &str = "--pc"; pub const QUIET: [&str;2] = ["-q", "--quiet"]; diff --git a/mkwin/src/main.rs b/mkwin/src/main.rs index b86fc50..9f96bae 100644 --- a/mkwin/src/main.rs +++ b/mkwin/src/main.rs @@ -51,6 +51,13 @@ pub fn main() { } } + // consume find binary flag + let find_bin: Option; + match args.value_from_str::<&str, String>(flag::FIND_BIN) { + Ok(inner) => find_bin = Some(inner), + _ => find_bin = None + } + // consume simple flags let empty = args.contains(flag::EMPTY); let quiet = args.contains(flag::QUIET); @@ -58,12 +65,17 @@ pub fn main() { // get target executable let target: String; if let Ok(Some(arg)) = args.subcommand() { - let path = Path::new(&arg); - if let Ok(path) = path.canonicalize() { - target = path.to_string_lossy().into(); - } else { - error::canonicalize_fail(arg); - return; + if let Some(root) = find_bin { // handle find binary flag + target = format!("target=`find {root} -name '{arg}'`\n\"$target\""); + } else { // handle normal path + let path = Path::new(&arg); + if let Ok(path) = path.canonicalize() { + let path: String = path.to_string_lossy().into(); + target = format!("'{path}'"); + } else { + error::canonicalize_fail(arg); + return; + } } } else { error::missing_target(); @@ -71,7 +83,7 @@ pub fn main() { } // construct output - print!("#!/usr/bin/bash\n# generated with: mkwin{arg_string}\n\n'{target}'"); + print!("#!/usr/bin/bash\n# generated with: mkwin{arg_string}\n\n{target}"); // handle forwarded arguments if !forwarded.is_empty() { @@ -115,6 +127,10 @@ flags: --empty The resulting script will not pass arguments. + --find= The resulting script will use the 'find' utility to locate + the target binary in the given directory. The value given by + root is passed verbatim to 'find', unexpanded. + --pc= The resulting script will use the 'path-convert' tool to convert arguments from UNIX to DOS, with the provided set of flags ('x' for no flags).