Skip to content

Commit 157b331

Browse files
committed
Populate cargo env vars for crate_universe targets
1 parent a29ade9 commit 157b331

File tree

6 files changed

+695
-27
lines changed

6 files changed

+695
-27
lines changed

crate_universe/repositories.bzl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"""A module defining dependencies of the `cargo-bazel` Rust target"""
22

33
load("@rules_rust//rust:defs.bzl", "rust_common")
4+
load("//cargo/cargo_toml_variable_extractor/3rdparty/crates:defs.bzl", ctve_crate_repositories = "crate_repositories")
45
load("//crate_universe:deps_bootstrap.bzl", "cargo_bazel_bootstrap")
56
load("//crate_universe/3rdparty:third_party_deps.bzl", "third_party_deps")
67
load("//crate_universe/3rdparty/crates:crates.bzl", _vendor_crate_repositories = "crate_repositories")
@@ -25,4 +26,5 @@ def crate_universe_dependencies(rust_version = rust_common.default_version, boot
2526

2627
direct_deps = _vendor_crate_repositories()
2728
direct_deps.extend(crates_vendor_deps())
29+
direct_deps.extend(ctve_crate_repositories())
2830
return direct_deps

crate_universe/src/rendering.rs

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ use crate::rendering::template_engine::TemplateEngine;
1919
use crate::select::Select;
2020
use crate::splicing::default_splicing_package_crate_id;
2121
use crate::utils::starlark::{
22-
self, Alias, CargoBuildScript, CommonAttrs, Data, ExportsFiles, Filegroup, Glob, Label, Load,
23-
Package, RustBinary, RustLibrary, RustProcMacro, SelectDict, SelectList, SelectScalar,
24-
SelectSet, Starlark, TargetCompatibleWith,
22+
self, Alias, CargoBuildScript, CargoTomlEnvVars, CommonAttrs, Data, ExportsFiles, Filegroup,
23+
Glob, Label, Load, Package, RustBinary, RustLibrary, RustProcMacro, SelectDict, SelectList,
24+
SelectScalar, SelectSet, Starlark, TargetCompatibleWith,
2525
};
2626
use crate::utils::target_triple::TargetTriple;
2727
use crate::utils::{self, sanitize_repository_name};
@@ -360,6 +360,12 @@ impl Renderer {
360360
platforms: &Platforms,
361361
krate: &CrateContext,
362362
) -> Result<String> {
363+
let mut krate = krate.clone();
364+
krate
365+
.common_attrs
366+
.rustc_env_files
367+
.insert(":cargo_toml_env_vars".to_owned(), None);
368+
363369
let mut starlark = Vec::new();
364370

365371
// Banner comment for top of the file.
@@ -433,6 +439,12 @@ impl Renderer {
433439
starlark.push(Starlark::Package(package));
434440
}
435441

442+
load("@rules_rust//cargo:defs.bzl", "cargo_toml_env_vars");
443+
starlark.push(Starlark::CargoTomlEnvVars(CargoTomlEnvVars {
444+
name: "cargo_toml_env_vars".to_owned(),
445+
src: "Cargo.toml".to_owned(),
446+
}));
447+
436448
for rule in &krate.targets {
437449
if let Some(override_target) = krate.override_targets.get(rule.override_target_key()) {
438450
starlark.push(Starlark::Alias(Alias {
@@ -446,7 +458,7 @@ impl Renderer {
446458
Rule::BuildScript(target) => {
447459
load("@rules_rust//cargo:defs.bzl", "cargo_build_script");
448460
let cargo_build_script =
449-
self.make_cargo_build_script(platforms, krate, target)?;
461+
self.make_cargo_build_script(platforms, &krate, target)?;
450462
starlark.push(Starlark::CargoBuildScript(cargo_build_script));
451463
starlark.push(Starlark::Alias(Alias {
452464
rule: AliasRule::default().rule(),
@@ -458,17 +470,17 @@ impl Renderer {
458470
Rule::ProcMacro(target) => {
459471
load("@rules_rust//rust:defs.bzl", "rust_proc_macro");
460472
let rust_proc_macro =
461-
self.make_rust_proc_macro(platforms, krate, target)?;
473+
self.make_rust_proc_macro(platforms, &krate, target)?;
462474
starlark.push(Starlark::RustProcMacro(rust_proc_macro));
463475
}
464476
Rule::Library(target) => {
465477
load("@rules_rust//rust:defs.bzl", "rust_library");
466-
let rust_library = self.make_rust_library(platforms, krate, target)?;
478+
let rust_library = self.make_rust_library(platforms, &krate, target)?;
467479
starlark.push(Starlark::RustLibrary(rust_library));
468480
}
469481
Rule::Binary(target) => {
470482
load("@rules_rust//rust:defs.bzl", "rust_binary");
471-
let rust_binary = self.make_rust_binary(platforms, krate, target)?;
483+
let rust_binary = self.make_rust_binary(platforms, &krate, target)?;
472484
starlark.push(Starlark::RustBinary(rust_binary));
473485
}
474486
}

crate_universe/src/utils/starlark.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ pub(crate) enum Starlark {
3535
Filegroup(Filegroup),
3636
Alias(Alias),
3737
CargoBuildScript(CargoBuildScript),
38+
CargoTomlEnvVars(CargoTomlEnvVars),
3839
#[serde(serialize_with = "serialize::rust_proc_macro")]
3940
RustProcMacro(RustProcMacro),
4041
#[serde(serialize_with = "serialize::rust_library")]
@@ -140,6 +141,13 @@ pub(crate) struct CargoBuildScript {
140141
pub(crate) visibility: Set<String>,
141142
}
142143

144+
#[derive(Serialize)]
145+
#[serde(rename = "cargo_toml_env_vars")]
146+
pub(crate) struct CargoTomlEnvVars {
147+
pub(crate) name: String,
148+
pub(crate) src: String,
149+
}
150+
143151
#[derive(Serialize)]
144152
pub(crate) struct RustProcMacro {
145153
pub(crate) name: String,

examples/crate_universe/cargo_local/BUILD.bazel

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
load("@bazel_skylib//rules:build_test.bzl", "build_test")
12
load("@crate_index_cargo_local//:defs.bzl", "aliases", "all_crate_deps")
23
load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test")
34

@@ -16,3 +17,11 @@ rust_test(
1617
proc_macro_deps = all_crate_deps(proc_macro_dev = True),
1718
deps = all_crate_deps(normal_dev = True),
1819
)
20+
21+
build_test(
22+
name = "cargo_toml_env_var_test",
23+
targets = [
24+
# This target would fail to build if cargo_toml_env_vars didn't properly populate $CARGO_PKG_REPOSITORY.
25+
"@crate_index_cargo_local//:autometrics",
26+
],
27+
)

0 commit comments

Comments
 (0)