diff --git a/build/configure/src/rust.rs b/build/configure/src/rust.rs index de1e062c6..bbd6038f1 100644 --- a/build/configure/src/rust.rs +++ b/build/configure/src/rust.rs @@ -115,7 +115,7 @@ fn build_rsbridge(build: &mut Build) -> Result<()> { ":rslib:i18n", ":rslib:proto", // when env vars change the build hash gets updated - "$builddir/build.ninja", + "$builddir/env", // building on Windows requires python3.lib if cfg!(windows) { inputs![":extract:python"] diff --git a/build/ninja_gen/src/build.rs b/build/ninja_gen/src/build.rs index 15ba6e66b..30db0e29e 100644 --- a/build/ninja_gen/src/build.rs +++ b/build/ninja_gen/src/build.rs @@ -50,7 +50,7 @@ impl Build { groups: Default::default(), }; - build.add_action("build:run_configure", ConfigureBuild {})?; + build.add_action("build:configure", ConfigureBuild {})?; Ok(build) } diff --git a/build/ninja_gen/src/configure.rs b/build/ninja_gen/src/configure.rs index 3ce175398..bb87904ec 100644 --- a/build/ninja_gen/src/configure.rs +++ b/build/ninja_gen/src/configure.rs @@ -19,7 +19,7 @@ impl BuildAction for ConfigureBuild { } fn files(&mut self, build: &mut impl FilesHandle) { - build.add_inputs("cmd", inputs![":build:configure"]); + build.add_inputs("cmd", inputs![":build:configure_bin"]); // reconfigure when external inputs change build.add_inputs("", inputs!["$builddir/env", ".version", ".git"]); build.add_outputs("", ["build.ninja"]) @@ -27,7 +27,7 @@ impl BuildAction for ConfigureBuild { fn on_first_instance(&self, build: &mut Build) -> Result<()> { build.add_action( - "build:configure", + "build:configure_bin", CargoBuild { inputs: inputs![glob!["build/**/*"]], outputs: &[RustOutput::Binary("configure")], @@ -38,4 +38,12 @@ impl BuildAction for ConfigureBuild { )?; Ok(()) } + + fn generator(&self) -> bool { + true + } + + fn check_output_timestamps(&self) -> bool { + true + } } diff --git a/build/runner/src/build.rs b/build/runner/src/build.rs index 82dfca51f..7b5f1f599 100644 --- a/build/runner/src/build.rs +++ b/build/runner/src/build.rs @@ -8,6 +8,7 @@ use std::process::Command; use std::time::Instant; use camino::Utf8Path; +use camino::Utf8PathBuf; use clap::Args; use termcolor::Color; use termcolor::ColorChoice; @@ -22,7 +23,7 @@ pub struct BuildArgs { } pub fn run_build(args: BuildArgs) { - let build_root = setup_build_root(); + let build_root = &setup_build_root(); let path = if cfg!(windows) { format!( @@ -47,8 +48,6 @@ pub fn run_build(args: BuildArgs) { let build_file = build_root.join("build.ninja"); if !build_file.exists() { bootstrap_build(); - } else { - maybe_reconfigure_build(&build_file, &path); } // automatically convert foo:bar references to foo_bar, as Ninja can not @@ -117,7 +116,7 @@ fn get_ninja_command() -> &'static str { } } -fn setup_build_root() -> &'static Utf8Path { +fn setup_build_root() -> Utf8PathBuf { let build_root = Utf8Path::new("out"); #[cfg(unix)] @@ -139,22 +138,10 @@ fn setup_build_root() -> &'static Utf8Path { } fs::create_dir_all(build_root).unwrap(); - - build_root -} - -fn maybe_reconfigure_build(build_file: &Utf8Path, path: &str) { - let output = Command::new(get_ninja_command()) - .arg("-f") - .arg(build_file) - .arg("build_run_configure") - .env("PATH", path) - .output() - .expect("ninja installed"); - if !output.status.success() { - // The existing build.ninja may be invalid if files have been renamed/removed; - // resort to a slower cargo invocation instead to regenerate it. - bootstrap_build(); + if cfg!(windows) { + build_root.to_owned() + } else { + build_root.canonicalize_utf8().unwrap() } }