diff options
author | Emilio Cobos Álvarez <emilio@crisal.io> | 2017-01-22 12:58:12 +0100 |
---|---|---|
committer | Emilio Cobos Álvarez <emilio@crisal.io> | 2017-01-23 10:22:08 +0100 |
commit | b83da2729fc83663f979da05201920e039ae3c3f (patch) | |
tree | 27e1c8b1b7f0fef74b064740238da843d4cfc1f6 /build.rs | |
parent | 7373a4258f652c23e5fe00ad14740393caa40082 (diff) |
Unify under the `bindgen` name.
Diffstat (limited to 'build.rs')
-rw-r--r-- | build.rs | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/build.rs b/build.rs new file mode 100644 index 00000000..c3633cd4 --- /dev/null +++ b/build.rs @@ -0,0 +1,58 @@ +mod codegen { + extern crate quasi_codegen; + use std::env; + use std::path::{Path, PathBuf}; + + pub fn main() { + let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap()); + let src = Path::new("src/codegen/mod.rs"); + let dst = Path::new(&out_dir).join("codegen.rs"); + + quasi_codegen::expand(&src, &dst).unwrap(); + println!("cargo:rerun-if-changed=src/codegen/mod.rs"); + println!("cargo:rerun-if-changed=src/codegen/helpers.rs"); + } +} + +mod testgen { + use std::char; + use std::env; + use std::ffi::OsStr; + use std::fs::{self, File}; + use std::io::Write; + use std::path::{Path, PathBuf}; + + pub fn main() { + let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap()); + let mut dst = File::create(Path::new(&out_dir).join("tests.rs")).unwrap(); + + println!("cargo:rerun-if-changed=tests/headers"); + let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()); + let headers_dir = manifest_dir.join("tests").join("headers"); + + let entries = fs::read_dir(headers_dir) + .expect("Couldn't read headers dir") + .map(|result| result.expect("Couldn't read header file")); + + for entry in entries { + match entry.path().extension().and_then(OsStr::to_str) { + Some("h") | Some("hpp") => { + let func = entry.file_name().to_str().unwrap() + .replace(|c| !char::is_alphanumeric(c), "_") + .replace("__", "_") + .to_lowercase(); + writeln!(dst, "test_header!(header_{}, {:?});", + func, entry.path()).unwrap(); + } + _ => {} + } + } + + dst.flush().unwrap(); + } +} + +fn main() { + codegen::main(); + testgen::main(); +} |