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