summaryrefslogtreecommitdiff
path: root/build.rs
diff options
context:
space:
mode:
authorBert Belder <bertbelder@gmail.com>2018-11-01 02:29:39 +0100
committerBert Belder <bertbelder@gmail.com>2018-11-01 13:34:16 +0100
commit67944f298c1fb64f69766fc6ee0269ea6b1efb75 (patch)
treebe993d2f52e0948d134b54d59e73ab26c9feb6ef /build.rs
parentb73b651612233dc61d006f3dbed7f29b063fa289 (diff)
cargo: build only necessary Ninja targets when invoked by RLS
Diffstat (limited to 'build.rs')
-rw-r--r--build.rs21
1 files changed, 20 insertions, 1 deletions
diff --git a/build.rs b/build.rs
index 489f9f9d2..351a00cf7 100644
--- a/build.rs
+++ b/build.rs
@@ -7,12 +7,31 @@
// TODO Combine DENO_BUILD_PATH and OUT_DIR.
use std::env;
+use std::path::PathBuf;
use std::process::Command;
fn main() {
let mode = env::var("PROFILE").unwrap();
let deno_build_path = env::var("DENO_BUILD_PATH").unwrap();
+ // Detect if we're being invoked by the rust language server (RLS).
+ // Unfortunately we can't detect whether we're being run by `cargo check`.
+ let check_only = env::var_os("CARGO")
+ .map(PathBuf::from)
+ .as_ref()
+ .and_then(|p| p.file_stem())
+ .and_then(|f| f.to_str())
+ .map(|s| s.starts_with("rls"))
+ .unwrap_or(false);
+
+ // If we're being invoked by the RLS, build only the targets that are needed
+ // for `cargo check` to succeed.
+ let gn_target = if check_only {
+ "cargo_check_deps"
+ } else {
+ "deno_deps"
+ };
+
let status = Command::new("python")
.env("DENO_BUILD_PATH", &deno_build_path)
.env("DENO_BUILD_MODE", &mode)
@@ -31,7 +50,7 @@ fn main() {
.env("DENO_BUILD_PATH", &deno_build_path)
.env("DENO_BUILD_MODE", &mode)
.arg("./tools/build.py")
- .arg("deno_deps")
+ .arg(gn_target)
.arg("-v")
.status()
.expect("build.py failed");