@@ -21,83 +21,110 @@ use std::process::Command;
2121use Build ;
2222use dist:: { sanitize_sh, tmpdir} ;
2323
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+ }
6133
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) ;
6756
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+ }
7573 }
7674
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) ) ;
8079
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+ }
8384
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+ }
101128}
102129
103130fn add_destdir ( path : & Path , destdir : & Option < PathBuf > ) -> PathBuf {
0 commit comments