#test #generate #proc-macro #derive #dependencies

build build-deps

Rust build-script dependencies generator for data/IDL files

4 releases

0.1.4 Jul 28, 2019
0.1.3 Jan 23, 2019
0.1.2 Jan 22, 2019
0.1.1 Jan 21, 2019
0.1.0 Jan 21, 2019

#381 in Rust patterns

Download history 1750/week @ 2021-08-10 1573/week @ 2021-08-17 3273/week @ 2021-08-24 2029/week @ 2021-08-31 2368/week @ 2021-09-07 3243/week @ 2021-09-14 4965/week @ 2021-09-21 2656/week @ 2021-09-28 2677/week @ 2021-10-05 2170/week @ 2021-10-12 2773/week @ 2021-10-19 2288/week @ 2021-10-26 2952/week @ 2021-11-02 2757/week @ 2021-11-09 3047/week @ 2021-11-16 1703/week @ 2021-11-23

11,059 downloads per month
Used in 18 crates (7 directly)

Apache-2.0

36KB

Apache 2.0 licensed

Rust build-script dependencies generator

This is the Rust build-script dependencies generator for data/IDL files

The functionality shall be integrated into the build.script build.rs. The function rerun_if_changed_paths(glob_pattern: &str) will expand the GLOB pattern and will print the files-paths and directory paths to console. The Cargo-tool will evaluate the output. The compilation of the crate is re-run if specified files have changed since the last build.

GLOB Pattern Examples

"data/*" will enumerate all files/directories in directory "data/" and watchin changes

"data/" - will add the directory itself to the watch-list, triggering a rerun in case new entities are added.

"data/**/*.protobuf" will traverse all sub-directories enumerating all protobuf files.

"data/**" will traverse all sub-directories enumerating all directories.

Rule of thumb

Add files, if changes to files shall be detected.

Add directories, if the build-process shall be rerun in case of new files.

Setup

This illustrates a setup. Intention in this example is to rerun the build-process if the files in directory "data/*" have been modified or new files have been added to that directory.

The build-process will execute proc_macros reading those files and generating Rust-code.

A complete example/setup can be found at github test-generator/example

For further tooling around the build-scripts, please take a look at the crate build-helper

Cargo.toml

[package]
name = "datatester"
build = "build.rs"

...
[build-dependencies]
build-deps = "^0.1"
...

build.rs


// declared in Cargo.toml as "[build-dependencies]"
extern crate build_deps;

fn main() {
    // Enumerate files in sub-folder "data/*", being relevant for the code-generation (for example)
    // If function returns with error, exit with error message.
    build_deps::rerun_if_changed_paths( "data/*" ).unwrap();

    // Adding the parent directory "data" to the watch-list will capture new-files being added
    build_deps::rerun_if_changed_paths( "data" ).unwrap();
}

Integration into Conditional Build-Process

The following diagram illustrates the integration of the build-script into the conditional cargo build-process.

 <Diagram - Build Script Intregration>

Dependencies