boost 0.0.4+1.89.0

Bindings for Boost Math
Documentation
const CXX_STANDARD: &str = "c++20";

const BOOST_MATH_DIR: &str = "subprojects/boost_math/math";
const WRAPPER_CPP: &str = "wrapper.cpp";

fn main() {
    cc::Build::new()
        .cpp(true)
        .std(CXX_STANDARD)
        // windows: use the specified C++ standard
        .flag_if_supported(format!("/std:{CXX_STANDARD}"))
        // windows: enable C++ exception unwinding
        .flag_if_supported("/EHsc")
        // windows: boost\math\special_functions\gamma.hpp (__forceinline function not inlined)
        .flag_if_supported("/wd4714")
        // linux: boost/math/special_functions/detail/hypergeometric_series.hpp:244
        .flag_if_supported("-Wno-maybe-uninitialized")
        // macos: boost/math/special_functions/lambert_w.hpp:184
        .flag_if_supported("-Wno-unused-parameter")
        .warnings_into_errors(true)
        .include(format!("{BOOST_MATH_DIR}/include"))
        .file(WRAPPER_CPP)
        .compile("wrapper");

    for &source_path in &["build.rs", WRAPPER_CPP, BOOST_MATH_DIR] {
        println!("cargo:rerun-if-changed={source_path}");
    }
}