Reorganise build script into modules

This commit is contained in:
cyqsimon 2023-10-30 17:49:50 +08:00 committed by Martin Nordholts
parent f3a5e9a73c
commit 79a03b4299
4 changed files with 35 additions and 31 deletions

View File

@ -8,7 +8,7 @@ name = "bat"
repository = "https://github.com/sharkdp/bat" repository = "https://github.com/sharkdp/bat"
version = "0.24.0" version = "0.24.0"
exclude = ["assets/syntaxes/*", "assets/themes/*"] exclude = ["assets/syntaxes/*", "assets/themes/*"]
build = "build.rs" build = "build/main.rs"
edition = '2021' edition = '2021'
rust-version = "1.70" rust-version = "1.70"

View File

@ -1,17 +1,9 @@
use std::{collections::HashMap, fs, path::Path}; use std::{env, fs, path::PathBuf};
fn main() -> anyhow::Result<()> { use crate::util::render_template;
#[cfg(feature = "application")]
gen_man_and_comp()?;
Ok(())
}
/// Generate manpage and shell completions for the bat application. /// Generate manpage and shell completions for the bat application.
#[cfg(feature = "application")] pub fn gen_man_and_comp() -> anyhow::Result<()> {
fn gen_man_and_comp() -> anyhow::Result<()> {
use std::{env, path::PathBuf};
// Read environment variables. // Read environment variables.
let project_name = env::var("PROJECT_NAME").unwrap_or("bat".into()); let project_name = env::var("PROJECT_NAME").unwrap_or("bat".into());
let executable_name = env::var("PROJECT_EXECUTABLE").unwrap_or(project_name.clone()); let executable_name = env::var("PROJECT_EXECUTABLE").unwrap_or(project_name.clone());
@ -65,22 +57,3 @@ fn gen_man_and_comp() -> anyhow::Result<()> {
Ok(()) Ok(())
} }
/// Generates a file from a template.
#[allow(dead_code)]
fn render_template(
variables: &HashMap<&str, String>,
in_file: &str,
out_file: impl AsRef<Path>,
) -> anyhow::Result<()> {
let mut content = fs::read_to_string(in_file)?;
for (variable_name, value) in variables {
// Replace {{variable_name}} by the value
let pattern = format!("{{{{{variable_name}}}}}");
content = content.replace(&pattern, value);
}
fs::write(out_file, content)?;
Ok(())
}

10
build/main.rs Normal file
View File

@ -0,0 +1,10 @@
#[cfg(feature = "application")]
mod application;
mod util;
fn main() -> anyhow::Result<()> {
#[cfg(feature = "application")]
application::gen_man_and_comp()?;
Ok(())
}

21
build/util.rs Normal file
View File

@ -0,0 +1,21 @@
#![allow(dead_code)]
use std::{collections::HashMap, fs, path::Path};
/// Generates a file from a template.
pub fn render_template(
variables: &HashMap<&str, String>,
in_file: &str,
out_file: impl AsRef<Path>,
) -> anyhow::Result<()> {
let mut content = fs::read_to_string(in_file)?;
for (variable_name, value) in variables {
// Replace {{variable_name}} by the value
let pattern = format!("{{{{{variable_name}}}}}");
content = content.replace(&pattern, value);
}
fs::write(out_file, content)?;
Ok(())
}