##// END OF EJS Templates
rust-filepatterns: match exact `rootglob`s with a `HashSet`, not in the regex...
rust-filepatterns: match exact `rootglob`s with a `HashSet`, not in the regex This optimization yields some very interesting results in `rootglob`-heavy repositories. I build a test repository of the following structure: ``` root /<uuid>/build/empty_file ... repeat for 4000 entries ``` and a `.hgignore` containing the corresponding 4000 `rootglob` entries pointing to all `build/` folders. Rust+c `hg status` goes from 350ms down to 110ms. Differential Revision: https://phab.mercurial-scm.org/D8491

File last commit:

r45207:97c10b15 default
r45311:e0414fcd default
Show More
build.rs
61 lines | 1.5 KiB | application/rls-services+xml | RustLexer
Raphaël Gomès
rust-re2: add wrapper for calling Re2 from Rust...
r44786 // build.rs
//
// Copyright 2020 Raphaël Gomès <rgomes@octobus.net>
//
// This software may be used and distributed according to the terms of the
// GNU General Public License version 2 or any later version.
#[cfg(feature = "with-re2")]
use cc;
Raphaël Gomès
rust: add option of static linking a local Re2 install...
r45207 /// Uses either the system Re2 install as a dynamic library or the provided
/// build as a static library
Raphaël Gomès
rust-re2: add wrapper for calling Re2 from Rust...
r44786 #[cfg(feature = "with-re2")]
fn compile_re2() {
Raphaël Gomès
rust: add option of static linking a local Re2 install...
r45207 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
Raphaël Gomès
rust-re2: add wrapper for calling Re2 from Rust...
r44786 .cpp(true)
.flag("-std=c++11")
Raphaël Gomès
rust: add option of static linking a local Re2 install...
r45207 .file("src/re2/rust_re2.cpp");
if let Some(ref source) = re2 {
options.include(Path::new(source));
};
options.compile("librustre.a");
Raphaël Gomès
rust-re2: add wrapper for calling Re2 from Rust...
r44786
Raphaël Gomès
rust: add option of static linking a local Re2 install...
r45207 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");
}
Raphaël Gomès
rust-re2: add wrapper for calling Re2 from Rust...
r44786 }
fn main() {
#[cfg(feature = "with-re2")]
compile_re2();
}