@@ -21,83 +21,110 @@ use std::process::Command;
21
21
use Build ;
22
22
use dist:: { sanitize_sh, tmpdir} ;
23
23
24
- /// Installs everything.
25
- pub fn install ( build : & Build , stage : u32 , host : & str ) {
26
- let prefix_default = PathBuf :: from ( "/usr/local" ) ;
27
- let sysconfdir_default = PathBuf :: from ( "/etc" ) ;
28
- let docdir_default = PathBuf :: from ( "share/doc/rust" ) ;
29
- let bindir_default = PathBuf :: from ( "bin" ) ;
30
- let libdir_default = PathBuf :: from ( "lib" ) ;
31
- let mandir_default = PathBuf :: from ( "share/man" ) ;
32
- let prefix = build. config . prefix . as_ref ( ) . unwrap_or ( & prefix_default) ;
33
- let sysconfdir = build. config . sysconfdir . as_ref ( ) . unwrap_or ( & sysconfdir_default) ;
34
- let docdir = build. config . docdir . as_ref ( ) . unwrap_or ( & docdir_default) ;
35
- let bindir = build. config . bindir . as_ref ( ) . unwrap_or ( & bindir_default) ;
36
- let libdir = build. config . libdir . as_ref ( ) . unwrap_or ( & libdir_default) ;
37
- let mandir = build. config . mandir . as_ref ( ) . unwrap_or ( & mandir_default) ;
38
-
39
- let sysconfdir = prefix. join ( sysconfdir) ;
40
- let docdir = prefix. join ( docdir) ;
41
- let bindir = prefix. join ( bindir) ;
42
- let libdir = prefix. join ( libdir) ;
43
- let mandir = prefix. join ( mandir) ;
44
-
45
- let destdir = env:: var_os ( "DESTDIR" ) . map ( PathBuf :: from) ;
46
-
47
- let prefix = add_destdir ( & prefix, & destdir) ;
48
- let sysconfdir = add_destdir ( & sysconfdir, & destdir) ;
49
- let docdir = add_destdir ( & docdir, & destdir) ;
50
- let bindir = add_destdir ( & bindir, & destdir) ;
51
- let libdir = add_destdir ( & libdir, & destdir) ;
52
- let mandir = add_destdir ( & mandir, & destdir) ;
53
-
54
- let empty_dir = build. out . join ( "tmp/empty_dir" ) ;
55
- t ! ( fs:: create_dir_all( & empty_dir) ) ;
56
- if build. config . docs {
57
- install_sh ( & build, "docs" , "rust-docs" , & build. rust_package_vers ( ) ,
58
- stage, host, & prefix, & sysconfdir, & docdir, & bindir, & libdir,
59
- & mandir, & empty_dir) ;
60
- }
24
+ pub struct Installer < ' a > {
25
+ build : & ' a Build ,
26
+ prefix : PathBuf ,
27
+ sysconfdir : PathBuf ,
28
+ docdir : PathBuf ,
29
+ bindir : PathBuf ,
30
+ libdir : PathBuf ,
31
+ mandir : PathBuf ,
32
+ }
61
33
62
- for target in build. config . target . iter ( ) {
63
- install_sh ( & build, "std" , "rust-std" , & build. rust_package_vers ( ) ,
64
- stage, target, & prefix, & sysconfdir, & docdir, & bindir, & libdir,
65
- & mandir, & empty_dir) ;
66
- }
34
+ impl < ' a > Installer < ' a > {
35
+ pub fn new ( build : & ' a Build ) -> Installer < ' a > {
36
+ let prefix_default = PathBuf :: from ( "/usr/local" ) ;
37
+ let sysconfdir_default = PathBuf :: from ( "/etc" ) ;
38
+ let docdir_default = PathBuf :: from ( "share/doc/rust" ) ;
39
+ let bindir_default = PathBuf :: from ( "bin" ) ;
40
+ let libdir_default = PathBuf :: from ( "lib" ) ;
41
+ let mandir_default = PathBuf :: from ( "share/man" ) ;
42
+ let prefix = build. config . prefix . as_ref ( ) . unwrap_or ( & prefix_default) ;
43
+ let sysconfdir = build. config . sysconfdir . as_ref ( ) . unwrap_or ( & sysconfdir_default) ;
44
+ let docdir = build. config . docdir . as_ref ( ) . unwrap_or ( & docdir_default) ;
45
+ let bindir = build. config . bindir . as_ref ( ) . unwrap_or ( & bindir_default) ;
46
+ let libdir = build. config . libdir . as_ref ( ) . unwrap_or ( & libdir_default) ;
47
+ let mandir = build. config . mandir . as_ref ( ) . unwrap_or ( & mandir_default) ;
48
+
49
+ let sysconfdir = prefix. join ( sysconfdir) ;
50
+ let docdir = prefix. join ( docdir) ;
51
+ let bindir = prefix. join ( bindir) ;
52
+ let libdir = prefix. join ( libdir) ;
53
+ let mandir = prefix. join ( mandir) ;
54
+
55
+ let destdir = env:: var_os ( "DESTDIR" ) . map ( PathBuf :: from) ;
67
56
68
- if build. config . extended {
69
- install_sh ( & build, "cargo" , "cargo" , & build. cargo_package_vers ( ) ,
70
- stage, host, & prefix, & sysconfdir, & docdir, & bindir, & libdir,
71
- & mandir, & empty_dir) ;
72
- install_sh ( & build, "rls" , "rls" , & build. rls_package_vers ( ) ,
73
- stage, host, & prefix, & sysconfdir, & docdir, & bindir, & libdir,
74
- & mandir, & empty_dir) ;
57
+ let prefix = add_destdir ( & prefix, & destdir) ;
58
+ let sysconfdir = add_destdir ( & sysconfdir, & destdir) ;
59
+ let docdir = add_destdir ( & docdir, & destdir) ;
60
+ let bindir = add_destdir ( & bindir, & destdir) ;
61
+ let libdir = add_destdir ( & libdir, & destdir) ;
62
+ let mandir = add_destdir ( & mandir, & destdir) ;
63
+
64
+ Installer {
65
+ build,
66
+ prefix,
67
+ sysconfdir,
68
+ docdir,
69
+ bindir,
70
+ libdir,
71
+ mandir,
72
+ }
75
73
}
76
74
77
- install_sh ( & build, "rustc" , "rustc" , & build. rust_package_vers ( ) ,
78
- stage, host, & prefix, & sysconfdir, & docdir, & bindir, & libdir,
79
- & mandir, & empty_dir) ;
75
+ /// Installs everything.
76
+ pub fn install ( & self , stage : u32 , host : & str ) {
77
+ let empty_dir = self . build . out . join ( "tmp/empty_dir" ) ;
78
+ t ! ( fs:: create_dir_all( & empty_dir) ) ;
80
79
81
- t ! ( fs:: remove_dir_all( & empty_dir) ) ;
82
- }
80
+ if self . build . config . docs {
81
+ self . install_sh ( "docs" , "rust-docs" , & self . build . rust_package_vers ( ) ,
82
+ stage, Some ( host) , & empty_dir) ;
83
+ }
83
84
84
- fn install_sh ( build : & Build , package : & str , name : & str , version : & str , stage : u32 , host : & str ,
85
- prefix : & Path , sysconfdir : & Path , docdir : & Path , bindir : & Path , libdir : & Path ,
86
- mandir : & Path , empty_dir : & Path ) {
87
- println ! ( "Install {} stage{} ({})" , package, stage, host) ;
88
- let package_name = format ! ( "{}-{}-{}" , name, version, host) ;
89
-
90
- let mut cmd = Command :: new ( "sh" ) ;
91
- cmd. current_dir ( empty_dir)
92
- . arg ( sanitize_sh ( & tmpdir ( build) . join ( & package_name) . join ( "install.sh" ) ) )
93
- . arg ( format ! ( "--prefix={}" , sanitize_sh( prefix) ) )
94
- . arg ( format ! ( "--sysconfdir={}" , sanitize_sh( sysconfdir) ) )
95
- . arg ( format ! ( "--docdir={}" , sanitize_sh( docdir) ) )
96
- . arg ( format ! ( "--bindir={}" , sanitize_sh( bindir) ) )
97
- . arg ( format ! ( "--libdir={}" , sanitize_sh( libdir) ) )
98
- . arg ( format ! ( "--mandir={}" , sanitize_sh( mandir) ) )
99
- . arg ( "--disable-ldconfig" ) ;
100
- build. run ( & mut cmd) ;
85
+ for target in self . build . config . target . iter ( ) {
86
+ self . install_sh ( "std" , "rust-std" , & self . build . rust_package_vers ( ) ,
87
+ stage, Some ( target) , & empty_dir) ;
88
+ }
89
+
90
+ if self . build . config . extended {
91
+ self . install_sh ( "cargo" , "cargo" , & self . build . cargo_package_vers ( ) ,
92
+ stage, Some ( host) , & empty_dir) ;
93
+ self . install_sh ( "rls" , "rls" , & self . build . rls_package_vers ( ) ,
94
+ stage, Some ( host) , & empty_dir) ;
95
+ self . install_sh ( "analysis" , "rust-analysis" , & self . build . rust_package_vers ( ) ,
96
+ stage, Some ( host) , & empty_dir) ;
97
+ self . install_sh ( "src" , "rust-src" , & self . build . rust_package_vers ( ) ,
98
+ stage, None , & empty_dir) ;
99
+ }
100
+
101
+ self . install_sh ( "rustc" , "rustc" , & self . build . rust_package_vers ( ) ,
102
+ stage, Some ( host) , & empty_dir) ;
103
+
104
+ t ! ( fs:: remove_dir_all( & empty_dir) ) ;
105
+ }
106
+
107
+ fn install_sh ( & self , package : & str , name : & str , version : & str ,
108
+ stage : u32 , host : Option < & str > , empty_dir : & Path ) {
109
+ println ! ( "Install {} stage{} ({:?})" , package, stage, host) ;
110
+ let package_name = if let Some ( host) = host {
111
+ format ! ( "{}-{}-{}" , name, version, host)
112
+ } else {
113
+ format ! ( "{}-{}" , name, version)
114
+ } ;
115
+
116
+ let mut cmd = Command :: new ( "sh" ) ;
117
+ cmd. current_dir ( empty_dir)
118
+ . arg ( sanitize_sh ( & tmpdir ( self . build ) . join ( & package_name) . join ( "install.sh" ) ) )
119
+ . arg ( format ! ( "--prefix={}" , sanitize_sh( & self . prefix) ) )
120
+ . arg ( format ! ( "--sysconfdir={}" , sanitize_sh( & self . sysconfdir) ) )
121
+ . arg ( format ! ( "--docdir={}" , sanitize_sh( & self . docdir) ) )
122
+ . arg ( format ! ( "--bindir={}" , sanitize_sh( & self . bindir) ) )
123
+ . arg ( format ! ( "--libdir={}" , sanitize_sh( & self . libdir) ) )
124
+ . arg ( format ! ( "--mandir={}" , sanitize_sh( & self . mandir) ) )
125
+ . arg ( "--disable-ldconfig" ) ;
126
+ self . build . run ( & mut cmd) ;
127
+ }
101
128
}
102
129
103
130
fn add_destdir ( path : & Path , destdir : & Option < PathBuf > ) -> PathBuf {
0 commit comments