summaryrefslogtreecommitdiff
path: root/build.rs
diff options
context:
space:
mode:
Diffstat (limited to 'build.rs')
-rw-r--r--build.rs58
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();
+}