From d2f283cfa22d65c7d568020c7e3de783e6801399 Mon Sep 17 00:00:00 2001 From: Adam Perry Date: Fri, 23 Apr 2021 20:47:10 +0000 Subject: [PATCH] Integration test include directory paths for depfiles. --- bindgen-integration/build.rs | 23 +++++++++++++++++------ bindgen-integration/cpp/Test.h | 2 ++ bindgen-integration/include/stub.h | 0 3 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 bindgen-integration/include/stub.h diff --git a/bindgen-integration/build.rs b/bindgen-integration/build.rs index f055f31f0d..b28dcee577 100644 --- a/bindgen-integration/build.rs +++ b/bindgen-integration/build.rs @@ -140,10 +140,16 @@ fn main() { cc::Build::new() .cpp(true) .file("cpp/Test.cc") + .include("include") .compile("libtest.a"); let macros = Arc::new(RwLock::new(HashSet::new())); + let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); + let out_rust_file = out_path.join("test.rs"); + let out_rust_file_relative = out_rust_file.strip_prefix(std::env::current_dir().unwrap()).unwrap(); + let out_dep_file = out_path.join("test.d"); + let bindings = Builder::default() .rustfmt_bindings(false) .enable_cxx_namespaces() @@ -154,7 +160,7 @@ fn main() { .raw_line("extern { fn my_prefixed_function_to_remove(i: i32); }") .module_raw_line("root::testing", "pub type Bar = i32;") .header("cpp/Test.h") - .clang_args(&["-x", "c++", "-std=c++11"]) + .clang_args(&["-x", "c++", "-std=c++11", "-I", "include"]) .parse_callbacks(Box::new(MacroCallback { macros: macros.clone(), seen_hellos: Mutex::new(0), @@ -163,13 +169,18 @@ fn main() { .blocklist_function("my_prefixed_function_to_remove") .constified_enum("my_prefixed_enum_to_be_constified") .opaque_type("my_prefixed_templated_foo") + .depfile(out_rust_file_relative.display().to_string(), &out_dep_file) .generate() .expect("Unable to generate bindings"); assert!(macros.read().unwrap().contains("TESTMACRO")); - - let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); - bindings - .write_to_file(out_path.join("test.rs")) - .expect("Couldn't write bindings!"); + bindings.write_to_file(&out_rust_file).expect("Couldn't write bindings!"); + + let observed_deps = std::fs::read_to_string(out_dep_file).expect("Couldn't read depfile!"); + let expected_deps = format!("{}: cpp/Test.h include/stub.h", out_rust_file_relative.display()); + assert_eq!( + observed_deps, + expected_deps, + "including stub via include dir must produce correct dep path", + ); } diff --git a/bindgen-integration/cpp/Test.h b/bindgen-integration/cpp/Test.h index 51a6e4b87f..ad71b0f672 100644 --- a/bindgen-integration/cpp/Test.h +++ b/bindgen-integration/cpp/Test.h @@ -1,3 +1,5 @@ +#include "stub.h" // this bad path is made valid by a `-I include` clang arg + #pragma once #define TESTMACRO diff --git a/bindgen-integration/include/stub.h b/bindgen-integration/include/stub.h new file mode 100644 index 0000000000..e69de29bb2