From 88171e86a1a52889516b9aa8e478f9a5c674a490 Mon Sep 17 00:00:00 2001 From: Daniel Vigovszky Date: Mon, 1 Apr 2024 11:31:02 +0200 Subject: [PATCH] Better build script --- Cargo.lock | 10 ++++++++++ Cargo.toml | 1 + build.rs | 18 ++++++++++++++---- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0e125df..f519683 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -190,6 +190,15 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "dir-diff" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7ad16bf5f84253b50d6557681c58c3ab67c47c77d39fed9aeb56e947290bd10" +dependencies = [ + "walkdir", +] + [[package]] name = "fancy-regex" version = "0.13.0" @@ -210,6 +219,7 @@ dependencies = [ "clap", "copy_dir", "derive_more", + "dir-diff", "fancy-regex", "golem-wit", "include_dir", diff --git a/Cargo.toml b/Cargo.toml index 2518f43..2e8e2e8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,6 +23,7 @@ clap = { version = "4.4.17", features = ["derive"], optional = true } [build-dependencies] cargo_metadata = "0.18.1" copy_dir = "0.1.3" +dir-diff = "0.3.3" [features] build-binary = ["clap"] diff --git a/build.rs b/build.rs index d50a92b..3e85e46 100644 --- a/build.rs +++ b/build.rs @@ -5,12 +5,22 @@ use std::path::PathBuf; fn main() { let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap()); - let golem_wit_root = find_package_root("golem-wit"); + let golem_wit_root = PathBuf::from(find_package_root("golem-wit")); - println!("Output dir: {out_dir:?}"); - println!("Golem WIT root: {golem_wit_root:?}"); + println!("cargo:warning=Output dir: {out_dir:?}"); + println!("cargo:warning=Golem WIT root: {golem_wit_root:?}"); - copy_dir(golem_wit_root, out_dir.join("golem-wit")).unwrap(); + let target = out_dir.join("golem-wit"); + if target.exists() { + if dir_diff::is_different(&golem_wit_root, &target).unwrap_or(true) { + std::fs::remove_dir_all(&target).unwrap(); + copy_dir(golem_wit_root, target).unwrap(); + } else { + println!("cargo:warning=Golem WIT is up to date in {target:?}"); + } + } else { + copy_dir(golem_wit_root, target).unwrap(); + } } fn find_package_root(name: &str) -> String {