summaryrefslogtreecommitdiffstats
path: root/rust/vendor/num-derive/build.rs
diff options
context:
space:
mode:
Diffstat (limited to 'rust/vendor/num-derive/build.rs')
-rw-r--r--rust/vendor/num-derive/build.rs35
1 files changed, 35 insertions, 0 deletions
diff --git a/rust/vendor/num-derive/build.rs b/rust/vendor/num-derive/build.rs
new file mode 100644
index 0000000..fd60866
--- /dev/null
+++ b/rust/vendor/num-derive/build.rs
@@ -0,0 +1,35 @@
+use std::env;
+use std::io::Write;
+use std::process::{Command, Stdio};
+
+fn main() {
+ if probe("fn main() { 0i128; }") {
+ println!("cargo:rustc-cfg=has_i128");
+ } else if env::var_os("CARGO_FEATURE_I128").is_some() {
+ panic!("i128 support was not detected!");
+ }
+}
+
+/// Test if a code snippet can be compiled
+fn probe(code: &str) -> bool {
+ let rustc = env::var_os("RUSTC").unwrap_or_else(|| "rustc".into());
+ let out_dir = env::var_os("OUT_DIR").expect("environment variable OUT_DIR");
+
+ let mut child = Command::new(rustc)
+ .arg("--out-dir")
+ .arg(out_dir)
+ .arg("--emit=obj")
+ .arg("-")
+ .stdin(Stdio::piped())
+ .spawn()
+ .expect("rustc probe");
+
+ child
+ .stdin
+ .as_mut()
+ .expect("rustc stdin")
+ .write_all(code.as_bytes())
+ .expect("write rustc stdin");
+
+ child.wait().expect("rustc probe").success()
+}