xapian-rusty 0.0.56

Rust bindings to Xapian
Documentation
use cxx_build::CFG;
use std::env;
use std::path::Path;

fn main() {
    if cfg!(trybuild) {
        return;
    }

    let manifest_dir = env::var_os("CARGO_MANIFEST_DIR").unwrap();
    let xapian_include_dir = Path::new(&manifest_dir).join("include");
    CFG.exported_header_dirs.push(&xapian_include_dir);

    let sources = vec!["src/lib.rs"];
    let mut builder = cxx_build::bridges(sources);
    builder
        .file("xapian-bind.cc")
        .flag_if_supported("-std=c++14")
        .flag_if_supported("-Wno-deprecated-declarations")
        .flag_if_supported("-Wno-cpp")
        .flag_if_supported("-Wno-deprecated-copy")
        .flag_if_supported("-Wno-unknown-warning-option")
        .flag_if_supported("-Wno-implicit-fallthrough")
        .flag_if_supported("-Wno-maybe-uninitialized")
        .opt_level_str("2");
    
    if let Ok(cxx_var) = env::var("CXX") {
        builder.compiler(cxx_var);
    } else {
        for compiler in &["g++", "clang++", "c++"] {
            if std::process::Command::new(compiler)
                .arg("--version")
                .output()
                .is_ok()
            {
                builder.compiler(compiler);
                break;
            }
        }
    }
    
    builder.compile("xapian-rusty");

    println!("cargo:rustc-link-lib=xapianm");
    println!("cargo:rustc-link-lib=m");
    
    println!("cargo:rerun-if-changed=xapian-bind.cc");
    println!("cargo:rerun-if-changed=xapian-bind.h");
    println!("cargo:rerun-if-changed=include/");
    
    println!("cargo:rerun-if-env-changed=CXX");
    println!("cargo:rerun-if-env-changed=CXXFLAGS");
}