Pass extraneous environment variables to build scripts (#362)
cargo-raze has `buildrs_additional_environment_variables` which allows
extraneous environment variable to be passed to the build script. In addition
this should enable for everybody to add the environment variables that are
not added by the `cargo_build_script` rule itself.
That's the rules_rust side of the fix for google/cargo-raze#179.
diff --git a/cargo/cargo_build_script.bzl b/cargo/cargo_build_script.bzl
index 00b738a..c879e5d 100644
--- a/cargo/cargo_build_script.bzl
+++ b/cargo/cargo_build_script.bzl
@@ -57,6 +57,8 @@
for f in ctx.attr.crate_features:
env["CARGO_FEATURE_" + f.upper().replace("-", "_")] = "1"
+ env.update(ctx.attr.build_script_env)
+
tools = depset(
direct = [
script,
@@ -113,6 +115,9 @@
cfg = "host",
doc = "The binary script to run, generally a rust_binary target. ",
),
+ "build_script_env": attr.string_dict(
+ doc = "Environment variables for build scripts.",
+ ),
"crate_name": attr.string(),
"crate_features": attr.string_list(doc = "The list of rust features that the build script should consider activated."),
"_cc_toolchain": attr.label(default = Label("@bazel_tools//tools/cpp:current_cc_toolchain")),
@@ -131,7 +136,12 @@
],
)
-def cargo_build_script(name, crate_name = "", crate_features = [], deps = [], **kwargs):
+def cargo_build_script(name,
+ crate_name = "",
+ crate_features = [],
+ deps = [],
+ build_script_env = {},
+ **kwargs):
"""
Compile and execute a rust build script to generate build attributes
@@ -166,6 +176,8 @@
srcs = ["build.rs"],
# Data are shipped during execution.
data = ["src/lib.rs"],
+ # Environment variables passed during build.rs execution
+ build_script_env = {"CARGO_PKG_VERSION": "0.1.2"},
)
rust_library(
@@ -191,5 +203,6 @@
script = ":%s_script_" % name,
crate_name = crate_name,
crate_features = crate_features,
+ build_script_env = build_script_env,
deps = deps,
)
diff --git a/docs/cargo_build_script.md b/docs/cargo_build_script.md
index 1dd6cb4..cffa514 100644
--- a/docs/cargo_build_script.md
+++ b/docs/cargo_build_script.md
@@ -6,7 +6,7 @@
## cargo_build_script
<pre>
-cargo_build_script(<a href="#cargo_build_script-name">name</a>, <a href="#cargo_build_script-crate_name">crate_name</a>, <a href="#cargo_build_script-crate_features">crate_features</a>, <a href="#cargo_build_script-deps">deps</a>, <a href="#cargo_build_script-kwargs">kwargs</a>)
+cargo_build_script(<a href="#cargo_build_script-name">name</a>, <a href="#cargo_build_script-crate_name">crate_name</a>, <a href="#cargo_build_script-crate_features">crate_features</a>, <a href="#cargo_build_script-deps">deps</a>, <a href="#cargo_build_script-build_script_env">build_script_env</a>, <a href="#cargo_build_script-kwargs">kwargs</a>)
</pre>
Compile and execute a rust build script to generate build attributes
@@ -42,6 +42,8 @@
srcs = ["build.rs"],
# Data are shipped during execution.
data = ["src/lib.rs"],
+ # Environment variables passed during build.rs execution
+ build_script_env = {"CARGO_PKG_VERSION": "0.1.2"},
)
rust_library(
@@ -65,6 +67,7 @@
| <a id="cargo_build_script-crate_name"></a>crate_name | <p align="center"> - </p> | <code>""</code> |
| <a id="cargo_build_script-crate_features"></a>crate_features | <p align="center"> - </p> | <code>[]</code> |
| <a id="cargo_build_script-deps"></a>deps | <p align="center"> - </p> | <code>[]</code> |
+| <a id="cargo_build_script-build_script_env"></a>build_script_env | <p align="center"> - </p> | <code>{}</code> |
| <a id="cargo_build_script-kwargs"></a>kwargs | <p align="center"> - </p> | none |
diff --git a/docs/flatten.md b/docs/flatten.md
index 8797b67..f597fc8 100644
--- a/docs/flatten.md
+++ b/docs/flatten.md
@@ -823,7 +823,7 @@
## cargo_build_script
<pre>
-cargo_build_script(<a href="#cargo_build_script-name">name</a>, <a href="#cargo_build_script-crate_name">crate_name</a>, <a href="#cargo_build_script-crate_features">crate_features</a>, <a href="#cargo_build_script-deps">deps</a>, <a href="#cargo_build_script-kwargs">kwargs</a>)
+cargo_build_script(<a href="#cargo_build_script-name">name</a>, <a href="#cargo_build_script-crate_name">crate_name</a>, <a href="#cargo_build_script-crate_features">crate_features</a>, <a href="#cargo_build_script-deps">deps</a>, <a href="#cargo_build_script-build_script_env">build_script_env</a>, <a href="#cargo_build_script-kwargs">kwargs</a>)
</pre>
Compile and execute a rust build script to generate build attributes
@@ -859,6 +859,8 @@
srcs = ["build.rs"],
# Data are shipped during execution.
data = ["src/lib.rs"],
+ # Environment variables passed during build.rs execution
+ build_script_env = {"CARGO_PKG_VERSION": "0.1.2"},
)
rust_library(
@@ -882,6 +884,7 @@
| <a id="cargo_build_script-crate_name"></a>crate_name | <p align="center"> - </p> | <code>""</code> |
| <a id="cargo_build_script-crate_features"></a>crate_features | <p align="center"> - </p> | <code>[]</code> |
| <a id="cargo_build_script-deps"></a>deps | <p align="center"> - </p> | <code>[]</code> |
+| <a id="cargo_build_script-build_script_env"></a>build_script_env | <p align="center"> - </p> | <code>{}</code> |
| <a id="cargo_build_script-kwargs"></a>kwargs | <p align="center"> - </p> | none |
diff --git a/examples/cargo/BUILD b/examples/cargo/BUILD
index 6949638..d168faf 100644
--- a/examples/cargo/BUILD
+++ b/examples/cargo/BUILD
@@ -14,6 +14,7 @@
srcs = ["build_script.rs"],
data = ["test.txt"],
crate_features = ["bleh"],
+ build_script_env = {"SOME_ENV": "42"},
)
rust_library(
diff --git a/examples/cargo/build_script.rs b/examples/cargo/build_script.rs
index 6c325fe..f54b1a7 100644
--- a/examples/cargo/build_script.rs
+++ b/examples/cargo/build_script.rs
@@ -17,9 +17,11 @@
fn main() {
let bleh = env::var("CARGO_FEATURE_BLEH").unwrap();
+ let some_env = env::var("SOME_ENV").unwrap();
let out_dir = env::var("OUT_DIR").unwrap();
let data = std::fs::read("cargo/test.txt").unwrap();
assert!(!bleh.is_empty());
+ assert_eq!(some_env, "42");
println!(r#"cargo:rustc-env=FOO=BAR
cargo:rustc-env=BAR=FOO
cargo:rustc-flags=--cfg=blah="bleh"