From f18fde5c77291b2e0d23fe1f9b24686e9d957f1f Mon Sep 17 00:00:00 2001 From: Thijs Cadier Date: Thu, 25 Jun 2015 21:59:37 +0200 Subject: [PATCH] Add clang include dir detection and override On some systems the clang include directory cannot be found. This adds the path detected by bindgen's get_include_dir and a manual override via an env var. Thanks to @zerosign for reporting and proposing a solution. --- mongo_c_driver_wrapper/build.rs | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/mongo_c_driver_wrapper/build.rs b/mongo_c_driver_wrapper/build.rs index adc00e5..4571986 100644 --- a/mongo_c_driver_wrapper/build.rs +++ b/mongo_c_driver_wrapper/build.rs @@ -62,14 +62,30 @@ fn main() { let bindings_rs_path = Path::new(¤t_dir).join("src/bindings.rs"); let mongo_h_path = Path::new(¤t_dir).join(&driver_path).join("src/mongoc/mongoc.h"); let bson_path = Path::new(¤t_dir).join(&driver_path).join("src/libbson/src/bson"); - bindgen::builder() - .emit_builtins() - .header(mongo_h_path.to_str().unwrap()) - .clang_arg(format!("-I{}", bson_path.to_str().unwrap())) - .generate() - .unwrap() - .write_to_file(&bindings_rs_path) - .unwrap(); + let mongo_h_path_arg = mongo_h_path.to_str().unwrap(); + let bson_path_arg = bson_path.to_str().unwrap(); + + let mut builder = bindgen::builder(); + builder.emit_builtins(); + builder.header(mongo_h_path_arg); + builder.clang_arg("-I".to_owned()); + builder.clang_arg(bson_path_arg); + + // Add clang include dir if it's detected by bindgen. + if let Some(path) = bindgen::get_include_dir() { + builder.clang_arg("-I".to_owned()); + builder.clang_arg(path); + } + + // Add clang include dir from env var, use as a last resort + // if include cannot be detected normally. + if let Ok(path) = env::var("CLANG_INCLUDE_DIR") { + builder.clang_arg("-I".to_owned()); + builder.clang_arg(path); + } + + let binding = builder.generate().unwrap(); + binding.write_to_file(&bindings_rs_path).unwrap(); } // Output to Cargo