Mercurial > hg-stable
changeset 44713:97c10b157665
rust: add option of static linking a local Re2 install
Previously, only dynamically linking the system-wide install was possible.
We force the user to provide one to prevent hard-to-track errors.
Differential Revision: https://phab.mercurial-scm.org/D8451
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Thu, 16 Apr 2020 17:31:11 +0200 |
parents | a825bfbf6642 |
children | 8dbcd5138102 |
files | rust/hg-core/build.rs |
diffstat | 1 files changed, 40 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/rust/hg-core/build.rs Wed Apr 15 23:11:55 2020 +0900 +++ b/rust/hg-core/build.rs Thu Apr 16 17:31:11 2020 +0200 @@ -8,15 +8,51 @@ #[cfg(feature = "with-re2")] use cc; +/// Uses either the system Re2 install as a dynamic library or the provided +/// build as a static library #[cfg(feature = "with-re2")] fn compile_re2() { - cc::Build::new() + use cc; + use std::path::Path; + use std::process::exit; + + let msg = r"HG_RE2_PATH must be one of `system|<path to build source clone of Re2>`"; + let re2 = match std::env::var_os("HG_RE2_PATH") { + None => { + eprintln!("{}", msg); + exit(1) + } + Some(v) => { + if v == "system" { + None + } else { + Some(v) + } + } + }; + + let mut options = cc::Build::new(); + options .cpp(true) .flag("-std=c++11") - .file("src/re2/rust_re2.cpp") - .compile("librustre.a"); + .file("src/re2/rust_re2.cpp"); + + if let Some(ref source) = re2 { + options.include(Path::new(source)); + }; + + options.compile("librustre.a"); - println!("cargo:rustc-link-lib=re2"); + if let Some(ref source) = &re2 { + // Link the local source statically + println!( + "cargo:rustc-link-search=native={}", + Path::new(source).join(Path::new("obj")).display() + ); + println!("cargo:rustc-link-lib=static=re2"); + } else { + println!("cargo:rustc-link-lib=re2"); + } } fn main() {