libpwquality-sys 0.2.0

Native bindings to the libpwquality library
Documentation
use cc::Build;
use std::fs::File;
use std::{path::PathBuf, process::Command};

fn main() {
    println!("cargo:rerun-if-changed=build.rs");
    println!("cargo:rerun-if-changed=libpwquality");

    let out_dir = PathBuf::from(std::env::var("OUT_DIR").unwrap());

    if !PathBuf::from("libpwquality/src").exists() {
        Command::new("git")
            .args(&["submodule", "update", "--init"])
            .status()
            .expect("Failed to initialize libpwquality");
    }

    File::create(out_dir.join("config.h")).expect("Failed to create config.h");

    let mut cfg = Build::new();
    let files = ["check.c", "error.c", "generate.c", "settings.c"];

    cfg.files(files.map(|f| PathBuf::from("libpwquality/src").join(f)))
        .include(&out_dir)
        .include("libpwquality/src")
        .define("_(msgid)", "(msgid)")
        .define("_GNU_SOURCE", None)
        .warnings(false)
        .out_dir(&out_dir);

    if cfg!(feature = "crack") {
        cfg.define("HAVE_CRACK_H", None);
        println!("cargo:rustc-link-lib=crack");
    }

    cfg.compile("pwquality");

    println!("cargo:rustc-link-lib=pwquality");
}