in neqo-crypto/build.rs [233:290]
fn build_bindings(base: &str, bindings: &Bindings, flags: &[String], gecko: bool) {
let suffix = if bindings.cplusplus { ".hpp" } else { ".h" };
let header_path = PathBuf::from(BINDINGS_DIR).join(String::from(base) + suffix);
let header = header_path.to_str().unwrap();
let out = PathBuf::from(env::var("OUT_DIR").unwrap()).join(String::from(base) + ".rs");
println!("cargo:rerun-if-changed={header}");
let mut builder = Builder::default().header(header);
builder = builder.generate_comments(false);
builder = builder.size_t_is_usize(true);
builder = builder.clang_arg("-v");
if !gecko {
builder = builder.clang_arg("-DNO_NSPR_10_SUPPORT");
if env::consts::OS == "windows" {
builder = builder.clang_arg("-DWIN");
} else if env::consts::OS == "macos" {
builder = builder.clang_arg("-DDARWIN");
} else if env::consts::OS == "linux" {
builder = builder.clang_arg("-DLINUX");
} else if env::consts::OS == "android" {
builder = builder.clang_arg("-DLINUX");
builder = builder.clang_arg("-DANDROID");
}
if bindings.cplusplus {
builder = builder.clang_args(&["-x", "c++", "-std=c++14"]);
}
}
builder = builder.clang_args(flags);
// Apply the configuration.
for v in &bindings.types {
builder = builder.allowlist_type(v);
}
for v in &bindings.functions {
builder = builder.allowlist_function(v);
}
for v in &bindings.variables {
builder = builder.allowlist_var(v);
}
for v in &bindings.exclude {
builder = builder.blocklist_item(v);
}
for v in &bindings.opaque {
builder = builder.opaque_type(v);
}
for v in &bindings.enums {
builder = builder.constified_enum_module(v);
}
let bindings = builder.generate().expect("unable to generate bindings");
bindings
.write_to_file(out)
.expect("couldn't write bindings");
}