63 lines
1.8 KiB
Rust
63 lines
1.8 KiB
Rust
use std::env;
|
|
use std::fs::{create_dir_all, File};
|
|
use std::path::Path;
|
|
use std::process::Command;
|
|
|
|
use clap::{CommandFactory, ValueEnum};
|
|
use clap_complete::{generate_to, Shell};
|
|
use clap_mangen::Man;
|
|
|
|
#[path = "src/args.rs"]
|
|
#[allow(dead_code)]
|
|
mod args;
|
|
|
|
fn main() {
|
|
// https://stackoverflow.com/a/51311222/11494565
|
|
println!("cargo:rustc-env=TARGET={}", env::var("TARGET").unwrap());
|
|
println!("cargo:rerun-if-env-changed=TYPST_VERSION");
|
|
println!("cargo:rerun-if-env-changed=GEN_ARTIFACTS");
|
|
|
|
if option_env!("TYPST_VERSION").is_none() {
|
|
println!("cargo:rustc-env=TYPST_VERSION={}", typst_version());
|
|
}
|
|
|
|
if let Some(dir) = env::var_os("GEN_ARTIFACTS") {
|
|
let out = &Path::new(&dir);
|
|
create_dir_all(out).unwrap();
|
|
let cmd = &mut args::CliArguments::command();
|
|
|
|
Man::new(cmd.clone())
|
|
.render(&mut File::create(out.join("typst.1")).unwrap())
|
|
.unwrap();
|
|
|
|
for subcmd in cmd.get_subcommands() {
|
|
let name = format!("typst-{}", subcmd.get_name());
|
|
Man::new(subcmd.clone().name(&name))
|
|
.render(&mut File::create(out.join(format!("{name}.1"))).unwrap())
|
|
.unwrap();
|
|
}
|
|
|
|
for shell in Shell::value_variants() {
|
|
generate_to(*shell, cmd, "typst", out).unwrap();
|
|
}
|
|
}
|
|
}
|
|
|
|
/// Also used by `args.rs`.
|
|
fn typst_version() -> String {
|
|
if let Some(version) = option_env!("TYPST_VERSION") {
|
|
return version.to_owned();
|
|
}
|
|
|
|
let pkg = env!("CARGO_PKG_VERSION");
|
|
let hash = Command::new("git")
|
|
.args(["rev-parse", "HEAD"])
|
|
.output()
|
|
.ok()
|
|
.filter(|output| output.status.success())
|
|
.and_then(|output| String::from_utf8(output.stdout.get(..8)?.into()).ok())
|
|
.unwrap_or_else(|| "unknown hash".into());
|
|
|
|
format!("{pkg} ({hash})")
|
|
}
|