Compare commits
2 commits
ed26c60ceb
...
eb675928a7
Author | SHA1 | Date | |
---|---|---|---|
eb675928a7 | |||
72d6902136 |
6 changed files with 24 additions and 26 deletions
|
@ -10,6 +10,7 @@
|
|||
.Op Fl -find Ar root
|
||||
.Op Fl -pc Ar flags
|
||||
.Ar target
|
||||
.Op Fl -or Ar alt
|
||||
.Op Ar --\ args
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
|
@ -29,6 +30,8 @@ The resulting script will locate the target binary in the given directory using
|
|||
.Xr find 1 .
|
||||
.It Fl h , Fl -help
|
||||
Print a short help message.
|
||||
.It Fl -or Ar fallback
|
||||
The resulting script will fall back to the provided argument if the target is not executable.
|
||||
.It Fl -pc Ar flags
|
||||
The resulting script will pass the arguments converted with
|
||||
.Xr path-convert 1 . path-convert will be invoked with the provided flags forwarded (use 'x' to forward no flags).
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "mkwin"
|
||||
version = "0.1.1"
|
||||
version = "0.2.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
|
|
|
@ -3,13 +3,13 @@
|
|||
use std::process::exit;
|
||||
|
||||
/// no argument for target; code 1
|
||||
pub fn missing_target() {
|
||||
pub fn missing_target() -> ! {
|
||||
eprintln!("mkwin: missing target");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/// failed to canonicalize target path; code 2
|
||||
pub fn canonicalize_fail(target: String) {
|
||||
pub fn canonicalize_fail(target: String) -> ! {
|
||||
eprintln!("mkwin: failed to canonicalze '{target}'--does the file exist?");
|
||||
exit(2);
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ pub const HELP: [&str;2] = ["-h", "--help"];
|
|||
pub const EMPTY: [&str;2] = ["-e", "--empty"];
|
||||
pub const ENV_SHARE: [&str;2] = ["-E", "--env-share"];
|
||||
pub const FIND_BIN: &str = "--find";
|
||||
pub const OR: &str = "--or";
|
||||
pub const PATH_CONVERT: &str = "--pc";
|
||||
pub const QUIET: [&str;2] = ["-q", "--quiet"];
|
||||
|
||||
|
|
|
@ -66,29 +66,30 @@ pub fn main() {
|
|||
// get target executable
|
||||
let target: String;
|
||||
if let Ok(Some(arg)) = args.subcommand() {
|
||||
if let Some(root) = find_bin { // handle find binary flag
|
||||
target = format!("target=`find {root} -name '{arg}'`\n\"$target\"");
|
||||
if let Some(root) = &find_bin { // handle find binary flag
|
||||
target = format!("`find {root} -name '{arg}'`");
|
||||
} 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::canonicalize_fail(arg); }
|
||||
}
|
||||
} else {
|
||||
error::missing_target();
|
||||
return;
|
||||
}
|
||||
} else { error::missing_target(); }
|
||||
|
||||
let exec =
|
||||
if let Ok(alt) = args.value_from_str::<&str, String>(flag::OR) {
|
||||
format!("target={target}\nif [ ! -x \"$target\" ]; then\n\ttarget='{alt}'\nfi\n\n\"$target\"")
|
||||
} else if find_bin.is_some() {
|
||||
format!("\"{target}\"")
|
||||
} else { target };
|
||||
|
||||
// construct output
|
||||
println!("#!/usr/bin/bash\n# generated with: mkwin{arg_string}\n");
|
||||
|
||||
if env_share { println!("env-share 2> /dev/null\n"); }
|
||||
|
||||
print!("{target}");
|
||||
print!("{exec}");
|
||||
|
||||
// handle forwarded arguments
|
||||
if !forwarded.is_empty() {
|
||||
|
|
|
@ -1,18 +1,11 @@
|
|||
#!/usr/bin/bash
|
||||
# generated with: mkwin /mnt/c/Program Files/PowerShell/7/pwsh.exe -E --or /mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe
|
||||
|
||||
env-share 2> /dev/null
|
||||
|
||||
# try to use system-wide version first.
|
||||
PWSH='/mnt/c/Program Files/PowerShell/7/pwsh.exe'
|
||||
if [ ! -x "$PWSH" ]; then
|
||||
unset PWSH
|
||||
target='/mnt/c/Program Files/PowerShell/7/pwsh.exe'
|
||||
if [ ! -x "$target" ]; then
|
||||
target='/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe'
|
||||
fi
|
||||
|
||||
# fall back to System32
|
||||
if [ -z ${PWSH+x} ]; then
|
||||
PWSH='/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe'
|
||||
fi
|
||||
|
||||
# run target
|
||||
"$PWSH" $@
|
||||
|
||||
"$target" $@
|
||||
|
|
Loading…
Reference in a new issue