123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- //! This build script calculates the hash of all files in the `src/`
- //! directory and adds it as an environment variable during build time.
- //!
- //! This is used so that the python code can detect when the built native module
- //! does not match the source in-tree, helping to detect the case where the
- //! source has been updated but the library hasn't been rebuilt.
- use std::path::PathBuf;
- use blake2::{Blake2b512, Digest};
- fn main() -> Result<(), std::io::Error> {
- let mut dirs = vec![PathBuf::from("src")];
- let mut paths = Vec::new();
- while let Some(path) = dirs.pop() {
- let mut entries = std::fs::read_dir(path)?
- .map(|res| res.map(|e| e.path()))
- .collect::<Result<Vec<_>, std::io::Error>>()?;
- entries.sort();
- for entry in entries {
- if entry.is_dir() {
- dirs.push(entry);
- } else {
- paths.push(entry.to_str().expect("valid rust paths").to_string());
- }
- }
- }
- paths.sort();
- let mut hasher = Blake2b512::new();
- for path in paths {
- let bytes = std::fs::read(path)?;
- hasher.update(bytes);
- }
- let hex_digest = hex::encode(hasher.finalize());
- println!("cargo:rustc-env=SYNAPSE_RUST_DIGEST={hex_digest}");
- Ok(())
- }
|