|
17 | 17 | //! Everything here is basically just a shim around calling either `rustbook` or
|
18 | 18 | //! `rustdoc`.
|
19 | 19 |
|
| 20 | +use std::collections::HashSet; |
20 | 21 | use std::fs::{self, File};
|
21 | 22 | use std::io::prelude::*;
|
22 | 23 | use std::io;
|
23 | 24 | use std::path::{PathBuf, Path};
|
24 | 25 |
|
25 |
| -use Mode; |
| 26 | +use {Build, Mode}; |
26 | 27 | use build_helper::up_to_date;
|
27 | 28 |
|
28 | 29 | use util::{cp_r, symlink_dir};
|
@@ -704,15 +705,41 @@ impl Step for Rustc {
|
704 | 705 | let mut cargo = builder.cargo(compiler, Mode::Librustc, target, "doc");
|
705 | 706 | compile::rustc_cargo(build, &mut cargo);
|
706 | 707 |
|
707 |
| - // src/rustc/Cargo.toml contains a bin crate called rustc which |
708 |
| - // would otherwise overwrite the docs for the real rustc lib crate. |
709 |
| - cargo.arg("-p").arg("rustc_driver"); |
| 708 | + // Only include compiler crates, no dependencies of those, such as `libc`. |
| 709 | + cargo.arg("--no-deps"); |
| 710 | + |
| 711 | + // Find dependencies for top level crates. |
| 712 | + let mut compiler_crates = HashSet::new(); |
| 713 | + for root_crate in &["rustc", "rustc_driver"] { |
| 714 | + let interned_root_crate = INTERNER.intern_str(root_crate); |
| 715 | + find_compiler_crates(&build, &interned_root_crate, &mut compiler_crates); |
| 716 | + } |
| 717 | + |
| 718 | + for krate in &compiler_crates { |
| 719 | + cargo.arg("-p").arg(krate); |
| 720 | + } |
710 | 721 |
|
711 | 722 | build.run(&mut cargo);
|
712 | 723 | cp_r(&my_out, &out);
|
713 | 724 | }
|
714 | 725 | }
|
715 | 726 |
|
| 727 | +fn find_compiler_crates( |
| 728 | + build: &Build, |
| 729 | + name: &Interned<String>, |
| 730 | + crates: &mut HashSet<Interned<String>> |
| 731 | +) { |
| 732 | + // Add current crate. |
| 733 | + crates.insert(*name); |
| 734 | + |
| 735 | + // Look for dependencies. |
| 736 | + for dep in build.crates.get(name).unwrap().deps.iter() { |
| 737 | + if build.crates.get(dep).unwrap().is_local(build) { |
| 738 | + find_compiler_crates(build, dep, crates); |
| 739 | + } |
| 740 | + } |
| 741 | +} |
| 742 | + |
716 | 743 | #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
|
717 | 744 | pub struct ErrorIndex {
|
718 | 745 | target: Interned<String>,
|
|
0 commit comments