satgalaxy 0.1.0

satgalaxy-rs is a Rust library that provides Rust bindings for multiple popular SAT solvers
Documentation
use std::env;
use std::path::PathBuf;

fn binding_satsolver(path: &str, name: &str) {
    let solver_dir = format!("satgalaxy-core/{}", path);

    let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
    let mut cfg = cmake::Config::new(&solver_dir);
    let dst = cfg.out_dir(out_path.join(name)).build_target(name).build();
    println!("cargo:rustc-link-search=native={}/build/lib", dst.display());
    println!("cargo:rustc-link-lib=static=satgalaxy_{}", name);
    println!("cargo:rerun-if-changed={}", &solver_dir);

    let bindings = bindgen::Builder::default()
        .headers([format!(
            "{}/build/include/satgalaxy/satgalaxy_{}.h",
            dst.display(),
            name
        )])
        .allowlist_function(format!("{}_.*", name))
        .generate()
        .expect("Unable to generate bindings");

    let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
    bindings
        .write_to_file(out_path.join(format!("{}_bindings.rs", name)))
        .expect("Couldn't write bindings!");
}

fn binding_glucose(version: &str) {
    let path = format!("glucose-{}", version);
    binding_satsolver(&path, "glucose");
}
fn binding_cadical(_version: &str) {}
fn binding_minisat() {
    binding_satsolver("minisat", "minisat");
}
fn main() {
    println!("cargo:rerun-if-changed=build.rs");
    if cfg!(feature = "cadical") {
        binding_cadical("2.1.3");
    }
    if cfg!(feature = "minisat") {
        binding_minisat();
    }
    if cfg!(feature = "glucose") {
        binding_glucose("4.2.1");
    }
    let target = env::var("TARGET").unwrap();
    if target.contains("linux") {
        println!("cargo:rustc-link-lib=stdc++");
    } else if target.contains("apple") {
        println!("cargo:rustc-link-lib=c++");
    }
}