From 79a03b4299556a67ef7f3f40bda71db52535cf1a Mon Sep 17 00:00:00 2001 From: cyqsimon <28627918+cyqsimon@users.noreply.github.com> Date: Mon, 30 Oct 2023 17:49:50 +0800 Subject: [PATCH] Reorganise build script into modules --- Cargo.toml | 2 +- build.rs => build/application.rs | 33 +++----------------------------- build/main.rs | 10 ++++++++++ build/util.rs | 21 ++++++++++++++++++++ 4 files changed, 35 insertions(+), 31 deletions(-) rename build.rs => build/application.rs (69%) create mode 100644 build/main.rs create mode 100644 build/util.rs diff --git a/Cargo.toml b/Cargo.toml index d8e7ffe5..9057fdae 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ name = "bat" repository = "https://github.com/sharkdp/bat" version = "0.24.0" exclude = ["assets/syntaxes/*", "assets/themes/*"] -build = "build.rs" +build = "build/main.rs" edition = '2021' rust-version = "1.70" diff --git a/build.rs b/build/application.rs similarity index 69% rename from build.rs rename to build/application.rs index db3cd29c..4a6dc42f 100644 --- a/build.rs +++ b/build/application.rs @@ -1,17 +1,9 @@ -use std::{collections::HashMap, fs, path::Path}; +use std::{env, fs, path::PathBuf}; -fn main() -> anyhow::Result<()> { - #[cfg(feature = "application")] - gen_man_and_comp()?; - - Ok(()) -} +use crate::util::render_template; /// Generate manpage and shell completions for the bat application. -#[cfg(feature = "application")] -fn gen_man_and_comp() -> anyhow::Result<()> { - use std::{env, path::PathBuf}; - +pub fn gen_man_and_comp() -> anyhow::Result<()> { // Read environment variables. let project_name = env::var("PROJECT_NAME").unwrap_or("bat".into()); let executable_name = env::var("PROJECT_EXECUTABLE").unwrap_or(project_name.clone()); @@ -65,22 +57,3 @@ fn gen_man_and_comp() -> anyhow::Result<()> { Ok(()) } - -/// Generates a file from a template. -#[allow(dead_code)] -fn render_template( - variables: &HashMap<&str, String>, - in_file: &str, - out_file: impl AsRef, -) -> 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(()) -} diff --git a/build/main.rs b/build/main.rs new file mode 100644 index 00000000..5d33418b --- /dev/null +++ b/build/main.rs @@ -0,0 +1,10 @@ +#[cfg(feature = "application")] +mod application; +mod util; + +fn main() -> anyhow::Result<()> { + #[cfg(feature = "application")] + application::gen_man_and_comp()?; + + Ok(()) +} diff --git a/build/util.rs b/build/util.rs new file mode 100644 index 00000000..daae52ba --- /dev/null +++ b/build/util.rs @@ -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, +) -> 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(()) +}