summaryrefslogtreecommitdiffstats
path: root/src/bootstrap/build.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/bootstrap/build.rs')
-rw-r--r--src/bootstrap/build.rs43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/bootstrap/build.rs b/src/bootstrap/build.rs
new file mode 100644
index 000000000..ab34d5c1e
--- /dev/null
+++ b/src/bootstrap/build.rs
@@ -0,0 +1,43 @@
+use env::consts::{EXE_EXTENSION, EXE_SUFFIX};
+use std::env;
+use std::ffi::OsString;
+use std::path::PathBuf;
+
+/// Given an executable called `name`, return the filename for the
+/// executable for a particular target.
+pub fn exe(name: &PathBuf) -> PathBuf {
+ if EXE_EXTENSION != "" && name.extension() != Some(EXE_EXTENSION.as_ref()) {
+ let mut name: OsString = name.clone().into();
+ name.push(EXE_SUFFIX);
+ name.into()
+ } else {
+ name.clone()
+ }
+}
+
+fn main() {
+ let host = env::var("HOST").unwrap();
+ println!("cargo:rerun-if-changed=build.rs");
+ println!("cargo:rerun-if-env-changed=RUSTC");
+ println!("cargo:rustc-env=BUILD_TRIPLE={}", host);
+
+ // This may not be a canonicalized path.
+ let mut rustc = PathBuf::from(env::var_os("RUSTC").unwrap());
+
+ if rustc.is_relative() {
+ println!("cargo:rerun-if-env-changed=PATH");
+ for dir in env::split_paths(&env::var_os("PATH").unwrap_or_default()) {
+ let absolute = dir.join(&exe(&rustc));
+ if absolute.exists() {
+ rustc = absolute;
+ break;
+ }
+ }
+ }
+ assert!(rustc.is_absolute());
+
+ // FIXME: if the path is not utf-8, this is going to break. Unfortunately
+ // Cargo doesn't have a way for us to specify non-utf-8 paths easily, so
+ // we'll need to invent some encoding scheme if this becomes a problem.
+ println!("cargo:rustc-env=RUSTC={}", rustc.to_str().unwrap());
+}