Merge branch 'master' of euphorik.ch:rup into master
[rup.git] / backend / build.rs
diff --git a/backend/build.rs b/backend/build.rs
new file mode 100644 (file)
index 0000000..8837cfc
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+Additionnal build, doc: https://doc.rust-lang.org/cargo/reference/build-scripts.html
+
+What is build here:
+ - Compile the SASS file to CSS file.
+*/
+
+use std::{ env, process::{ Command, Output }, path::Path };
+
+fn exists_in_path<P>(filename: P) -> bool
+    where P: AsRef<Path> {
+        for path in env::split_paths(&env::var_os("PATH").unwrap()) {
+            if path.join(&filename).is_file() { return true; }
+        }
+    false
+}
+
+fn main() {
+    println!("cargo:rerun-if-changed=style.scss");
+
+    fn run_sass(command: &mut Command) -> Output {
+        command
+            .arg("style.scss")
+            .arg("static/style.css")
+            .output()
+            .expect("Unable to compile SASS file, install SASS, see https://sass-lang.com/")
+    }
+
+    let output =
+        if exists_in_path("sass.bat") {
+            run_sass(Command::new("cmd").args(&["/C", "sass.bat"]))
+        } else {
+            run_sass(&mut Command::new("sass"))
+        };
+
+    if !output.status.success() {
+        // SASS will put the error in the file.
+        let error = std::fs::read_to_string("./static/style.css").expect("unable to read style.css");
+        panic!(error);
+    }
+}