russell_sparse 1.12.0

Solvers for large sparse linear systems (wraps MUMPS and UMFPACK)
Documentation
fn main() {
    let libs = vec!["klu", "umfpack"];

    #[cfg(target_os = "windows")]
    {
        let msys2_prefix = std::env::var("MSYS2_PREFIX").unwrap();
        let include_path = format!("{}/include/suitesparse", msys2_prefix);
        let lib_path = format!("{}/lib", msys2_prefix);
        
        cc::Build::new()
            .file("c_code/interface_complex_klu.c")
            .file("c_code/interface_complex_umfpack.c")
            .file("c_code/interface_klu.c")
            .file("c_code/interface_umfpack.c")
            .include(&include_path)
            .compile("c_code_suitesparse");
        
        println!("cargo:rustc-link-search=native={}", lib_path);
        for l in &libs {
            println!("cargo:rustc-link-lib=dylib={}", *l);
        }
    }
    
    #[cfg(not(target_os = "windows"))]
    {
        #[cfg(not(feature = "local_suitesparse"))]
        let lib_dirs = vec![
            "/usr/lib/x86_64-linux-gnu",
            "/usr/lib",
            "/usr/lib64",
            "/opt/homebrew/lib",
        ];

        #[cfg(not(feature = "local_suitesparse"))]
        let inc_dirs = vec![
            "/usr/include/suitesparse",
        ];

        #[cfg(target_os = "macos")]
        let inc_dirs = vec![
            "/opt/homebrew/include/suitesparse",
            "/usr/local/include/suitesparse",
        ];

        #[cfg(feature = "local_suitesparse")]
        let lib_dirs = vec!["/usr/local/lib/suitesparse"];

        #[cfg(feature = "local_suitesparse")]
        let inc_dirs = vec!["/usr/local/include/suitesparse"];

        cc::Build::new()
            .file("c_code/interface_complex_klu.c")
            .file("c_code/interface_complex_umfpack.c")
            .file("c_code/interface_klu.c")
            .file("c_code/interface_umfpack.c")
            .includes(&inc_dirs)
            .compile("c_code_suitesparse");
        for d in &lib_dirs {
            println!("cargo:rustc-link-search=native={}", *d);
        }
        for l in &libs {
            println!("cargo:rustc-link-lib=dylib={}", *l);
        }
    }

    #[cfg(feature = "with_mumps")]
    {
        cc::Build::new()
            .file("c_code/interface_complex_mumps.c")
            .file("c_code/interface_mumps.c")
            .include("/usr/local/include/mumps")
            .compile("c_code_mumps");
        println!("cargo:rustc-link-search=native=/usr/local/lib/mumps");
        println!("cargo:rustc-link-lib=dylib=dmumps_cpmech");
        println!("cargo:rustc-link-lib=dylib=zmumps_cpmech");
    }
}