view rust/hg-core/build.rs @ 45026:ddf66c218104 stable

convert: add docstring on convert.subversion.geturl() The function is unusual for a bytes-handling function in Mercurial because it can’t handle arbitrary bytes. Therefore we should document this fact. Pointed out by Yuya Nishihara while reviewing e3b19004087a.
author Manuel Jacob <me@manueljacob.de>
date Tue, 30 Jun 2020 16:39:45 +0200
parents 97c10b157665
children
line wrap: on
line source

// 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;

/// 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() {
    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");

    if let Some(ref source) = re2 {
        options.include(Path::new(source));
    };

    options.compile("librustre.a");

    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() {
    #[cfg(feature = "with-re2")]
    compile_re2();
}