From deb5723c5f5c08bfc9182cf8eeb2b7ff9c68f1f4 Mon Sep 17 00:00:00 2001 From: four0000four Date: Thu, 21 May 2020 22:37:10 +1000 Subject: [PATCH] Use clap to generate shell completions --- Cargo.toml | 6 ++++++ build.rs | 31 +++++++++++++++++++++++++++++++ ci/before_deploy.bash | 10 ++++++++++ 3 files changed, 47 insertions(+) create mode 100644 build.rs diff --git a/Cargo.toml b/Cargo.toml index f0cdd0f..bbaba17 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,7 @@ readme = "README.md" repository = "https://github.com/sharkdp/hyperfine" version = "1.9.0" edition = "2018" +build = "build.rs" [dependencies] colored = "1.9" @@ -35,5 +36,10 @@ features = ["suggestions", "color", "wrap_help"] [dev-dependencies] approx = "0.3" +[build-dependencies] +clap = "2" +version_check = "0.9" +atty = "0.2" + [profile.release] lto = true diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..9b83e35 --- /dev/null +++ b/build.rs @@ -0,0 +1,31 @@ +use std::fs; + +use clap::Shell; + +include!("src/hyperfine/app.rs"); + +fn main() { + let min_version = "1.39"; + + match version_check::is_min_version(min_version) { + Some(true) => {} + // rustc version too small or can't figure it out + _ => { + eprintln!("'hyperfine' requires rustc >= {}", min_version); + std::process::exit(1); + } + } + + let var = std::env::var_os("SHELL_COMPLETIONS_DIR").or(std::env::var_os("OUT_DIR")); + let outdir = match var { + None => return, + Some(outdir) => outdir, + }; + fs::create_dir_all(&outdir).unwrap(); + + let mut app = build_app(); + app.gen_completions("hyperfine", Shell::Bash, &outdir); + app.gen_completions("hyperfine", Shell::Fish, &outdir); + app.gen_completions("hyperfine", Shell::Zsh, &outdir); + app.gen_completions("hyperfine", Shell::PowerShell, &outdir); +} diff --git a/ci/before_deploy.bash b/ci/before_deploy.bash index e9eb031..9c46326 100755 --- a/ci/before_deploy.bash +++ b/ci/before_deploy.bash @@ -29,6 +29,11 @@ pack() { cp LICENSE-MIT "$tempdir/$package_name" cp LICENSE-APACHE "$tempdir/$package_name" + # various autocomplete + cp target/"$TARGET"/release/build/"$PROJECT_NAME"-*/out/"$PROJECT_NAME".bash "$tempdir/$package_name/autocomplete/${PROJECT_NAME}.bash-completion" + cp target/"$TARGET"/release/build/"$PROJECT_NAME"-*/out/"$PROJECT_NAME".fish "$tempdir/$package_name/autocomplete" + cp target/"$TARGET"/release/build/"$PROJECT_NAME"-*/out/_"$PROJECT_NAME" "$tempdir/$package_name/autocomplete" + # archiving pushd "$tempdir" tar czf "$out_dir/$package_name.tar.gz" "$package_name"/* @@ -79,6 +84,11 @@ make_deb() { install -Dm644 LICENSE-MIT "$tempdir/usr/share/doc/$PROJECT_NAME/LICENSE-MIT" install -Dm644 LICENSE-APACHE "$tempdir/usr/share/doc/$PROJECT_NAME/LICENSE-APACHE" + # completions + install -Dm644 target/$TARGET/release/build/$PROJECT_NAME-*/out/$PROJECT_NAME.bash "$tempdir/usr/share/bash-completion/completions/${PROJECT_NAME}" + install -Dm644 target/$TARGET/release/build/$PROJECT_NAME-*/out/$PROJECT_NAME.fish "$tempdir/usr/share/fish/completions/$PROJECT_NAME.fish" + install -Dm644 target/$TARGET/release/build/$PROJECT_NAME-*/out/_$PROJECT_NAME "$tempdir/usr/share/zsh/vendor-completions/_$PROJECT_NAME" + # Control file mkdir "$tempdir/DEBIAN" cat > "$tempdir/DEBIAN/control" <