2
2
//!
3
3
//! This module ensures that all required Cargo dependencies are gathered
4
4
//! and stored in the `<src>/<VENDOR_DIR>` directory.
5
+ use std:: collections:: BTreeSet ;
5
6
use std:: path:: PathBuf ;
6
7
7
8
use crate :: core:: build_steps:: tool:: SUBMODULES_FOR_RUSTBOOK ;
@@ -16,21 +17,32 @@ pub const VENDOR_DIR: &str = "vendor";
16
17
/// Returns a `Vec` of `(path_to_manifest, submodules_required)` where
17
18
/// `path_to_manifest` is the cargo workspace, and `submodules_required` is
18
19
/// the set of submodules that must be available.
19
- pub fn default_paths_to_vendor ( builder : & Builder < ' _ > ) -> Vec < ( PathBuf , Vec < & ' static str > ) > {
20
+ pub fn default_paths_to_vendor (
21
+ builder : & Builder < ' _ > ,
22
+ excluded_submodules : & BTreeSet < String > ,
23
+ ) -> Vec < ( PathBuf , Vec < & ' static str > ) > {
20
24
[
21
- ( "src/tools/cargo/Cargo.toml" , vec ! [ "src/tools/cargo" ] ) ,
22
- ( "src/tools/rust-analyzer/Cargo.toml" , vec ! [ ] ) ,
23
- ( "compiler/rustc_codegen_cranelift/Cargo.toml" , vec ! [ ] ) ,
24
- ( "compiler/rustc_codegen_gcc/Cargo.toml" , vec ! [ ] ) ,
25
- ( "library/Cargo.toml" , vec ! [ ] ) ,
26
- ( "src/bootstrap/Cargo.toml" , vec ! [ ] ) ,
27
- ( "src/tools/rustbook/Cargo.toml" , SUBMODULES_FOR_RUSTBOOK . into ( ) ) ,
28
- ( "src/tools/rustc-perf/Cargo.toml" , vec ! [ "src/tools/rustc-perf" ] ) ,
29
- ( "src/tools/opt-dist/Cargo.toml" , vec ! [ ] ) ,
30
- ( "src/doc/book/packages/trpl/Cargo.toml" , vec ! [ ] ) ,
25
+ ( "src/tools/cargo/Cargo.toml" , & [ "src/tools/cargo" ] [ .. ] ) ,
26
+ ( "src/tools/rust-analyzer/Cargo.toml" , & [ ] ) ,
27
+ ( "compiler/rustc_codegen_cranelift/Cargo.toml" , & [ ] ) ,
28
+ ( "compiler/rustc_codegen_gcc/Cargo.toml" , & [ ] ) ,
29
+ ( "library/Cargo.toml" , & [ ] ) ,
30
+ ( "src/bootstrap/Cargo.toml" , & [ ] ) ,
31
+ ( "src/tools/rustbook/Cargo.toml" , SUBMODULES_FOR_RUSTBOOK ) ,
32
+ ( "src/tools/rustc-perf/Cargo.toml" , & [ "src/tools/rustc-perf" ] ) ,
33
+ ( "src/tools/opt-dist/Cargo.toml" , & [ ] ) ,
34
+ ( "src/doc/book/packages/trpl/Cargo.toml" , & [ ] ) ,
31
35
]
32
36
. into_iter ( )
33
- . map ( |( path, submodules) | ( builder. src . join ( path) , submodules) )
37
+ . filter_map ( |( path, submodules) | {
38
+ for submodule in submodules {
39
+ if excluded_submodules. contains ( & * * submodule) {
40
+ return None ;
41
+ }
42
+ }
43
+
44
+ Some ( ( builder. src . join ( path) , submodules. into ( ) ) )
45
+ } )
34
46
. collect ( )
35
47
}
36
48
@@ -82,7 +94,11 @@ impl Step for Vendor {
82
94
cmd. arg ( "--versioned-dirs" ) ;
83
95
}
84
96
85
- let to_vendor = default_paths_to_vendor ( builder) ;
97
+ let to_vendor = default_paths_to_vendor (
98
+ builder,
99
+ & builder. config . dist_exclude_submodules_from_vendoring ,
100
+ ) ;
101
+
86
102
// These submodules must be present for `x vendor` to work.
87
103
for ( _, submodules) in & to_vendor {
88
104
for submodule in submodules {
0 commit comments