From 162cc051e68adc29519114315bf40e9aec15c14d Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 19 Jun 2021 11:12:04 +0100 Subject: build: Support dot/plantuml.jar paths via build environment variables This also adds Java binary path override Signed-off-by: Daniel Silverstone --- build.rs | 21 +++++++++++++++++++++ src/graphmarkup.rs | 17 ++++++++++++++--- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/build.rs b/build.rs index 1852601..e86db58 100644 --- a/build.rs +++ b/build.rs @@ -118,6 +118,24 @@ fn write_out_resource_file<'a>(paths: impl Iterator) -> Result< Ok(()) } +/// Adopt an environment variable into the build. +/// +/// This entails watching `SUBPLOT_{var}` and setting build environment +/// to contain `BUILTIN_{var}` to either the env value, or `{def}` if not +/// provided. +fn adopt_env_var(var: &str, def: &str) { + println!("cargo:rerun-if-env-changed=SUBPLOT_{var}", var = var); + if let Ok(value) = std::env::var(format!("SUBPLOT_{var}", var = var)) { + println!( + "cargo:rustc-env=BUILTIN_{var}={value}", + var = var, + value = value + ); + } else { + println!("cargo:rustc-env=BUILTIN_{var}={def}", var = var, def = def); + } +} + fn main() { println!("cargo:rerun-if-env-changed=DEB_BUILD_OPTIONS"); let paths = if std::env::var("DEB_BUILD_OPTIONS").is_err() { @@ -129,4 +147,7 @@ fn main() { }; write_out_resource_file(paths.iter().map(PathBuf::as_path)) .expect("Unable to write the resource file out"); + adopt_env_var("DOT_PATH", "dot"); + adopt_env_var("PLANTUML_JAR_PATH", "/usr/share/plantuml/plantuml.jar"); + adopt_env_var("JAVA_PATH", "java"); } diff --git a/src/graphmarkup.rs b/src/graphmarkup.rs index 78ffe89..f5637dc 100644 --- a/src/graphmarkup.rs +++ b/src/graphmarkup.rs @@ -29,6 +29,13 @@ pub struct MarkupOpts { env = "SUBPLOT_PLANTUML_JAR_PATH" )] plantuml_jar_path: Option, + #[structopt( + long = "java", + help = "Path to Java executable (note, effectively overrides JAVA_HOME if set to an absolute path)", + name = "JAVA_PATH", + env = "SUBPLOT_JAVA_PATH" + )] + java_path: Option, } impl MarkupOpts { @@ -40,13 +47,17 @@ impl MarkupOpts { if let Some(plantuml_path) = &self.plantuml_jar_path { *PLANTUML_JAR_PATH.lock().unwrap() = plantuml_path.clone(); } + if let Some(java_path) = &self.java_path { + *JAVA_PATH.lock().unwrap() = java_path.clone(); + } } } lazy_static! { - static ref DOT_PATH: Mutex = Mutex::new("dot".into()); + static ref DOT_PATH: Mutex = Mutex::new(env!("BUILTIN_DOT_PATH").into()); static ref PLANTUML_JAR_PATH: Mutex = - Mutex::new("/usr/share/plantuml/plantuml.jar".into()); + Mutex::new(env!("BUILTIN_PLANTUML_JAR_PATH").into()); + static ref JAVA_PATH: Mutex = Mutex::new(env!("BUILTIN_JAVA_PATH").into()); } /// A code block with markup for a graph. @@ -181,7 +192,7 @@ impl PlantumlMarkup { impl GraphMarkup for PlantumlMarkup { fn as_svg(&self) -> Result> { - let mut cmd = Command::new("java"); + let mut cmd = Command::new(JAVA_PATH.lock().unwrap().clone()); cmd.arg("-Djava.awt.headless=true") .arg("-jar") .arg(PLANTUML_JAR_PATH.lock().unwrap().clone()) -- cgit v1.2.1