diff options
Diffstat (limited to 'components/script/build.rs')
-rw-r--r-- | components/script/build.rs | 120 |
1 files changed, 5 insertions, 115 deletions
diff --git a/components/script/build.rs b/components/script/build.rs index 1635558b4b8..d8780ec56c0 100644 --- a/components/script/build.rs +++ b/components/script/build.rs @@ -2,121 +2,11 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -use std::fs::File; -use std::io::Write; -use std::path::PathBuf; -use std::process::Command; -use std::time::Instant; -use std::{env, fmt}; - -use phf_shared::{self, FmtConst}; -use serde_json::{self, Value}; +use std::env; fn main() { - let start = Instant::now(); - - let style_out_dir = PathBuf::from(env::var_os("DEP_SERVO_STYLE_CRATE_OUT_DIR").unwrap()); - let css_properties_json = style_out_dir.join("css-properties.json"); - let out_dir = PathBuf::from(env::var_os("OUT_DIR").unwrap()); - - println!("cargo::rerun-if-changed=dom/webidls"); - println!("cargo::rerun-if-changed=dom/bindings/codegen"); - println!("cargo::rerun-if-changed={}", css_properties_json.display()); - println!("cargo::rerun-if-changed=../../third_party/WebIDL/WebIDL.py"); - // NB: We aren't handling changes in `third_party/ply` here. - - let status = Command::new(find_python()) - .arg("dom/bindings/codegen/run.py") - .arg(&css_properties_json) - .arg(&out_dir) - .status() - .unwrap(); - if !status.success() { - std::process::exit(1) - } - - println!("Binding generation completed in {:?}", start.elapsed()); - - let json = out_dir.join("InterfaceObjectMapData.json"); - let json: Value = serde_json::from_reader(File::open(json).unwrap()).unwrap(); - let mut map = phf_codegen::Map::new(); - for (key, value) in json.as_object().unwrap() { - map.entry(Bytes(key), value.as_str().unwrap()); - } - let phf = PathBuf::from(env::var_os("OUT_DIR").unwrap()).join("InterfaceObjectMapPhf.rs"); - let mut phf = File::create(phf).unwrap(); - writeln!( - &mut phf, - "pub(crate) static MAP: phf::Map<&'static [u8], fn(JSContext, HandleObject)> = {};", - map.build(), - ) - .unwrap(); -} - -#[derive(Eq, Hash, PartialEq)] -struct Bytes<'a>(&'a str); - -impl FmtConst for Bytes<'_> { - fn fmt_const(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - write!(formatter, "b\"{}\"", self.0) - } -} - -impl phf_shared::PhfHash for Bytes<'_> { - fn phf_hash<H: std::hash::Hasher>(&self, hasher: &mut H) { - self.0.as_bytes().phf_hash(hasher) - } -} - -/// Tries to find a suitable python -/// -/// Algorithm -/// 1. Trying to find python3/python in $VIRTUAL_ENV (this should be from Servo's venv) -/// 2. Checking PYTHON3 (set by mach) -/// 3. Falling back to the system installation. -/// -/// Note: This function should be kept in sync with the version in `components/servo/build.rs` -fn find_python() -> PathBuf { - let mut candidates = vec![]; - if let Some(venv) = env::var_os("VIRTUAL_ENV") { - let bin_directory = PathBuf::from(venv).join("bin"); - - let python3 = bin_directory.join("python3"); - if python3.exists() { - candidates.push(python3); - } - let python = bin_directory.join("python"); - if python.exists() { - candidates.push(python); - } - }; - if let Some(python3) = env::var_os("PYTHON3") { - let python3 = PathBuf::from(python3); - if python3.exists() { - candidates.push(python3); - } - } - - let system_python = ["python3", "python"].map(PathBuf::from); - candidates.extend_from_slice(&system_python); - - for name in &candidates { - // Command::new() allows us to omit the `.exe` suffix on windows - if Command::new(name) - .arg("--version") - .output() - .is_ok_and(|out| out.status.success()) - { - return name.to_owned(); - } - } - let candidates = candidates - .into_iter() - .map(|c| c.into_os_string()) - .collect::<Vec<_>>(); - panic!( - "Can't find python (tried {:?})! Try enabling Servo's Python venv, \ - setting the PYTHON3 env var or adding python3 to PATH.", - candidates.join(", ".as_ref()) - ) + println!( + "cargo:rustc-env=BINDINGS_OUT_DIR={}", + env::var("DEP_SCRIPT_BINDINGS_CRATE_OUT_DIR").unwrap(), + ); } |