Skip to content

Commit f8d11e4

Browse files
committed
generate-copyright: pass the vendored sources from bootstrap
1 parent 6332c71 commit f8d11e4

File tree

6 files changed

+29
-45
lines changed

6 files changed

+29
-45
lines changed

src/bootstrap/src/core/build_steps/run.rs

+14-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use crate::Mode;
99
use crate::core::build_steps::dist::distdir;
1010
use crate::core::build_steps::test;
1111
use crate::core::build_steps::tool::{self, SourceType, Tool};
12-
use crate::core::build_steps::vendor::default_paths_to_vendor;
12+
use crate::core::build_steps::vendor::{Vendor, default_paths_to_vendor};
1313
use crate::core::builder::{Builder, Kind, RunConfig, ShouldRun, Step};
1414
use crate::core::config::TargetSelection;
1515
use crate::core::config::flags::get_completion;
@@ -226,13 +226,25 @@ impl Step for GenerateCopyright {
226226
.collect::<Vec<_>>()
227227
.join(",");
228228

229+
let vendored_sources = if let Some(path) = builder.vendored_crates_path() {
230+
path
231+
} else {
232+
let cache_dir = builder.out.join("vendor");
233+
builder.ensure(Vendor {
234+
sync_args: Vec::new(),
235+
versioned_dirs: true,
236+
root_dir: cache_dir.clone(),
237+
});
238+
cache_dir
239+
};
240+
229241
let mut cmd = builder.tool_cmd(Tool::GenerateCopyright);
230242
cmd.env("CARGO_MANIFESTS", &cargo_manifests);
231243
cmd.env("LICENSE_METADATA", &license_metadata);
232244
cmd.env("DEST", &dest);
233245
cmd.env("DEST_LIBSTD", &dest_libstd);
234-
cmd.env("OUT_DIR", &builder.out);
235246
cmd.env("SRC_DIR", &builder.src);
247+
cmd.env("VENDOR_DIR", &vendored_sources);
236248
cmd.env("CARGO", &builder.initial_cargo);
237249
// it is important that generate-copyright runs from the root of the
238250
// source tree, because it uses relative paths

src/bootstrap/src/core/build_steps/vendor.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ pub fn default_paths_to_vendor(builder: &Builder<'_>) -> Vec<(PathBuf, Vec<&'sta
2929

3030
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
3131
pub(crate) struct Vendor {
32-
sync_args: Vec<PathBuf>,
33-
versioned_dirs: bool,
34-
root_dir: PathBuf,
32+
pub(crate) sync_args: Vec<PathBuf>,
33+
pub(crate) versioned_dirs: bool,
34+
pub(crate) root_dir: PathBuf,
3535
}
3636

3737
impl Step for Vendor {
@@ -52,6 +52,8 @@ impl Step for Vendor {
5252
}
5353

5454
fn run(self, builder: &Builder<'_>) -> Self::Output {
55+
builder.info(&format!("Vendoring sources to {:?}", self.root_dir));
56+
5557
let mut cmd = command(&builder.initial_cargo);
5658
cmd.arg("vendor");
5759

src/bootstrap/src/core/builder/cargo.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -920,8 +920,7 @@ impl Builder<'_> {
920920

921921
if self.config.rust_remap_debuginfo {
922922
let mut env_var = OsString::new();
923-
if self.config.vendor {
924-
let vendor = self.build.src.join("vendor");
923+
if let Some(vendor) = self.build.vendored_crates_path() {
925924
env_var.push(vendor);
926925
env_var.push("=/rust/deps");
927926
} else {

src/bootstrap/src/lib.rs

+5
Original file line numberDiff line numberDiff line change
@@ -782,6 +782,11 @@ impl Build {
782782
self.out.join(target).join("md-doc")
783783
}
784784

785+
/// Path to the vendored Rust crates.
786+
fn vendored_crates_path(&self) -> Option<PathBuf> {
787+
if self.config.vendor { Some(self.src.join("vendor")) } else { None }
788+
}
789+
785790
/// Returns `true` if this is an external version of LLVM not managed by bootstrap.
786791
/// In particular, we expect llvm sources to be available when this is false.
787792
///

src/tools/generate-copyright/src/cargo_metadata.rs

-30
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,6 @@ pub enum Error {
1111
Io(#[from] std::io::Error),
1212
#[error("Failed get output from cargo-metadata: {0:?}")]
1313
GettingMetadata(#[from] cargo_metadata::Error),
14-
#[error("Failed to run cargo vendor: {0:?}")]
15-
LaunchingVendor(std::io::Error),
16-
#[error("Failed to complete cargo vendor")]
17-
RunningVendor,
1814
#[error("Bad path {0:?} whilst scraping files")]
1915
Scraping(PathBuf),
2016
}
@@ -58,10 +54,6 @@ pub fn get_metadata_and_notices(
5854
) -> Result<BTreeMap<Package, PackageMetadata>, Error> {
5955
let mut output = get_metadata(cargo, root_path, manifest_paths)?;
6056

61-
// Now do a cargo-vendor and grab everything
62-
println!("Vendoring deps into {}...", vendor_path.display());
63-
run_cargo_vendor(cargo, &vendor_path, manifest_paths)?;
64-
6557
// Now for each dependency we found, go and grab any important looking files
6658
for (package, metadata) in output.iter_mut() {
6759
load_important_files(package, metadata, &vendor_path)?;
@@ -113,28 +105,6 @@ pub fn get_metadata(
113105
Ok(output)
114106
}
115107

116-
/// Run cargo-vendor, fetching into the given dir
117-
fn run_cargo_vendor(cargo: &Path, dest: &Path, manifest_paths: &[PathBuf]) -> Result<(), Error> {
118-
let mut vendor_command = std::process::Command::new(cargo);
119-
vendor_command.env("RUSTC_BOOTSTRAP", "1");
120-
vendor_command.arg("vendor");
121-
vendor_command.arg("--quiet");
122-
vendor_command.arg("--versioned-dirs");
123-
for manifest_path in manifest_paths {
124-
vendor_command.arg("-s");
125-
vendor_command.arg(manifest_path);
126-
}
127-
vendor_command.arg(dest);
128-
129-
let vendor_status = vendor_command.status().map_err(Error::LaunchingVendor)?;
130-
131-
if !vendor_status.success() {
132-
return Err(Error::RunningVendor);
133-
}
134-
135-
Ok(())
136-
}
137-
138108
/// Add important files off disk into this dependency.
139109
///
140110
/// Maybe one-day Cargo.toml will contain enough information that we don't need

src/tools/generate-copyright/src/main.rs

+4-8
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ mod cargo_metadata;
1717
fn main() -> Result<(), Error> {
1818
let dest_file = env_path("DEST")?;
1919
let libstd_dest_file = env_path("DEST_LIBSTD")?;
20-
let out_dir = env_path("OUT_DIR")?;
2120
let src_dir = env_path("SRC_DIR")?;
21+
let vendor_dir = env_path("VENDOR_DIR")?;
2222
let cargo = env_path("CARGO")?;
2323
let license_metadata = env_path("LICENSE_METADATA")?;
2424

@@ -39,16 +39,12 @@ fn main() -> Result<(), Error> {
3939
.collect::<Vec<_>>();
4040

4141
// Scan Cargo dependencies
42-
let mut collected_cargo_metadata = cargo_metadata::get_metadata_and_notices(
43-
&cargo,
44-
&out_dir.join("vendor"),
45-
&src_dir,
46-
&cargo_manifests,
47-
)?;
42+
let mut collected_cargo_metadata =
43+
cargo_metadata::get_metadata_and_notices(&cargo, &vendor_dir, &src_dir, &cargo_manifests)?;
4844

4945
let library_collected_cargo_metadata = cargo_metadata::get_metadata_and_notices(
5046
&cargo,
51-
&out_dir.join("library-vendor"),
47+
&vendor_dir,
5248
&src_dir,
5349
&library_manifests,
5450
)?;

0 commit comments

Comments
 (0)