cobyla 0.1.1

Rust wrapping of a C implementation of the COBYLA optimizer.
extern crate bindgen;

use std::env;
use std::path::PathBuf;

fn main() {
	let dst = cmake::Config::new("./cobyla")
		.very_verbose(true)
		.generator("NMake Makefiles")
		.build_target("cobyla")
		.build();

	println!("cargo:rustc-link-search=native={}/build", dst.display());
	println!("cargo:rustc-link-lib=static=cobyla");

	// Tell cargo to tell rustc to link the system cobyla
	// shared library.
	println!("cargo:rustc-link-lib=cobyla");

	// Tell cargo to invalidate the built crate whenever the wrapper changes
	println!("cargo:rerun-if-changed=wrapper.h");

	// The bindgen::Builder is the main entry point
	// to bindgen, and lets you build up options for
	// the resulting bindings.
	let bindings = bindgen::Builder::default()
		// The input header we would like to generate
		// bindings for.
		.header("wrapper.h")
		// Tell cargo to invalidate the built crate whenever any of the
		// included header files changed.
		.parse_callbacks(Box::new(bindgen::CargoCallbacks))
		.whitelist_function("raw_cobyla")
		// Finish the builder and generate the bindings.
		.generate()
		// Unwrap the Result and panic on failure.
		.expect("Unable to generate bindings");

	// Write the bindings to the $OUT_DIR/bindings.rs file.
	let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
	bindings
		.write_to_file(out_path.join("bindings.rs"))
		.expect("Couldn't write bindings!");
}