mirror of
https://github.com/tree-sitter/tree-sitter.git
synced 2026-09-10 07:36:22 -04:00
This is not breaking for consumers of the web bindings, nor the playground as both filenames will be kept in the .github.io repo
83 lines
2.2 KiB
Rust
83 lines
2.2 KiB
Rust
use std::{
|
|
env,
|
|
path::{Path, PathBuf},
|
|
process::Command,
|
|
time::SystemTime,
|
|
};
|
|
|
|
fn main() {
|
|
if let Some(git_sha) = read_git_sha() {
|
|
println!("cargo:rustc-env=BUILD_SHA={git_sha}");
|
|
}
|
|
|
|
println!("cargo:rustc-check-cfg=cfg(sanitizing)");
|
|
println!("cargo:rustc-check-cfg=cfg(TREE_SITTER_EMBED_WASM_BINDING)");
|
|
|
|
if web_playground_files_present() {
|
|
println!("cargo:rustc-cfg=TREE_SITTER_EMBED_WASM_BINDING");
|
|
}
|
|
|
|
let build_time = SystemTime::now()
|
|
.duration_since(SystemTime::UNIX_EPOCH)
|
|
.unwrap()
|
|
.as_secs_f64();
|
|
println!("cargo:rustc-env=BUILD_TIME={build_time}");
|
|
|
|
#[cfg(any(
|
|
target_os = "linux",
|
|
target_os = "android",
|
|
target_os = "freebsd",
|
|
target_os = "openbsd",
|
|
target_os = "netbsd",
|
|
target_os = "dragonfly",
|
|
))]
|
|
{
|
|
let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap()).join("dynamic-symbols.txt");
|
|
std::fs::write(
|
|
&out_dir,
|
|
"{
|
|
ts_current_malloc;
|
|
ts_current_calloc;
|
|
ts_current_realloc;
|
|
ts_current_free;
|
|
};",
|
|
)
|
|
.unwrap();
|
|
println!(
|
|
"cargo:rustc-link-arg=-Wl,--dynamic-list={}",
|
|
out_dir.display()
|
|
);
|
|
}
|
|
}
|
|
|
|
fn web_playground_files_present() -> bool {
|
|
let paths = [
|
|
"../docs/src/assets/js/playground.js",
|
|
"../lib/binding_web/web-tree-sitter.js",
|
|
"../lib/binding_web/web-tree-sitter.wasm",
|
|
];
|
|
|
|
paths.iter().all(|p| Path::new(p).exists())
|
|
}
|
|
|
|
// When updating this function, don't forget to also update generate/build.rs which has a
|
|
// near-identical function.
|
|
fn read_git_sha() -> Option<String> {
|
|
let crate_path = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
|
|
|
|
if !crate_path.parent().is_some_and(|p| p.join(".git").exists()) {
|
|
return None;
|
|
}
|
|
|
|
Command::new("git")
|
|
.args(["rev-parse", "HEAD"])
|
|
.current_dir(crate_path)
|
|
.output()
|
|
.map_or(None, |output| {
|
|
if !output.status.success() {
|
|
return None;
|
|
}
|
|
Some(String::from_utf8_lossy(&output.stdout).to_string())
|
|
})
|
|
}
|