summaryrefslogtreecommitdiffstats
path: root/build.rs
diff options
context:
space:
mode:
authorClement Tsang <34804052+ClementTsang@users.noreply.github.com>2022-03-11 06:45:05 -0500
committerGitHub <noreply@github.com>2022-03-11 06:45:05 -0500
commitf2b8b4e8427996407b484c4a4ed9432519c9d3a5 (patch)
tree02dc3866ce71afeab52fe268459d9af5531779e3 /build.rs
parent8087f0b636b94ff5763a3a5637dea9a343784bd7 (diff)
other: add manpage file to cargo deb config, move back to build script (#693)
Adds the asset for the manpage to cargo deb config. Also moves the generated manpage file to a .1.gz file. Also, moves back to a build script since that was causing some issues for the automatic Cargo.toml fields detection for manpage and completion generation. To prevent compilation from happening every time, and only in CI, we use an env var to avoid generation steps.
Diffstat (limited to 'build.rs')
-rw-r--r--build.rs55
1 files changed, 55 insertions, 0 deletions
diff --git a/build.rs b/build.rs
new file mode 100644
index 00000000..fce34b48
--- /dev/null
+++ b/build.rs
@@ -0,0 +1,55 @@
+use clap_complete::{generate_to, shells::Shell};
+use std::{
+ env, fs,
+ io::Result,
+ path::{Path, PathBuf},
+};
+
+include!("src/clap.rs");
+
+fn create_dir(dir: &Path) -> Result<()> {
+ let res = fs::create_dir_all(&dir);
+ match &res {
+ Ok(()) => {}
+ Err(err) => {
+ eprintln!(
+ "Failed to create a directory at location {:?}, encountered error {:?}. Aborting...",
+ dir, err
+ );
+ }
+ }
+
+ res
+}
+
+fn main() -> Result<()> {
+ if env::var_os("GENERATE").is_some() {
+ // OUT_DIR is where extra build files are written to for Cargo.
+ let completion_out_dir = PathBuf::from("completion");
+ let manpage_out_dir = PathBuf::from("manpage");
+
+ create_dir(&completion_out_dir)?;
+ create_dir(&manpage_out_dir)?;
+
+ // Generate completions
+ let mut app = build_app();
+ generate_to(Shell::Bash, &mut app, "btm", &completion_out_dir)?;
+ generate_to(Shell::Zsh, &mut app, "btm", &completion_out_dir)?;
+ generate_to(Shell::Fish, &mut app, "btm", &completion_out_dir)?;
+ generate_to(Shell::PowerShell, &mut app, "btm", &completion_out_dir)?;
+ generate_to(Shell::Elvish, &mut app, "btm", &completion_out_dir)?;
+
+ // Generate manpage
+ let app = app.name("btm");
+ let man = clap_mangen::Man::new(app);
+ let mut buffer: Vec<u8> = Default::default();
+ man.render(&mut buffer)?;
+ std::fs::write(manpage_out_dir.join("btm.1"), buffer)?;
+ }
+
+ println!("cargo:rerun-if-changed=build.rs");
+ println!("cargo:rerun-if-changed=./src/clap.rs");
+ println!("cargo:rerun-if-env-changed=GENERATE");
+
+ Ok(())
+}