@@ -26,12 +26,6 @@ use std::process::{Command, Stdio};
26
26
27
27
use build_helper:: output;
28
28
29
- #[ cfg( not( target_os = "solaris" ) ) ]
30
- const SH_CMD : & ' static str = "sh" ;
31
- // On Solaris, sh is the historical bourne shell, not a POSIX shell, or bash.
32
- #[ cfg( target_os = "solaris" ) ]
33
- const SH_CMD : & ' static str = "bash" ;
34
-
35
29
use { Build , Compiler , Mode } ;
36
30
use channel;
37
31
use util:: { cp_r, libdir, is_dylib, cp_filtered, copy, exe} ;
@@ -55,6 +49,10 @@ pub fn tmpdir(build: &Build) -> PathBuf {
55
49
build. out . join ( "tmp/dist" )
56
50
}
57
51
52
+ fn rust_installer ( build : & Build ) -> Command {
53
+ build. tool_cmd ( & Compiler :: new ( 0 , & build. config . build ) , "rust-installer" )
54
+ }
55
+
58
56
/// Builds the `rust-docs` installer component.
59
57
///
60
58
/// Slurps up documentation from the `stage`'s `host`.
@@ -74,14 +72,14 @@ pub fn docs(build: &Build, stage: u32, host: &str) {
74
72
let src = build. out . join ( host) . join ( "doc" ) ;
75
73
cp_r ( & src, & dst) ;
76
74
77
- let mut cmd = Command :: new ( SH_CMD ) ;
78
- cmd. arg ( sanitize_sh ( & build . src . join ( "src/rust-installer/gen-installer.sh" ) ) )
75
+ let mut cmd = rust_installer ( build ) ;
76
+ cmd. arg ( "generate" )
79
77
. arg ( "--product-name=Rust-Documentation" )
80
78
. arg ( "--rel-manifest-dir=rustlib" )
81
79
. arg ( "--success-message=Rust-documentation-is-installed." )
82
- . arg ( format ! ( "--image-dir={}" , sanitize_sh ( & image) ) )
83
- . arg ( format ! ( "--work-dir={}" , sanitize_sh ( & tmpdir( build) ) ) )
84
- . arg ( format ! ( "--output-dir={}" , sanitize_sh ( & distdir( build) ) ) )
80
+ . arg ( "--image-dir" ) . arg ( & image)
81
+ . arg ( "--work-dir" ) . arg ( & tmpdir ( build) )
82
+ . arg ( "--output-dir" ) . arg ( & distdir ( build) )
85
83
. arg ( format ! ( "--package-name={}-{}" , name, host) )
86
84
. arg ( "--component-name=rust-docs" )
87
85
. arg ( "--legacy-manifest-dirs=rustlib,cargo" )
@@ -124,14 +122,14 @@ pub fn mingw(build: &Build, host: &str) {
124
122
. arg ( host) ;
125
123
build. run ( & mut cmd) ;
126
124
127
- let mut cmd = Command :: new ( SH_CMD ) ;
128
- cmd. arg ( sanitize_sh ( & build . src . join ( "src/rust-installer/gen-installer.sh" ) ) )
125
+ let mut cmd = rust_installer ( build ) ;
126
+ cmd. arg ( "generate" )
129
127
. arg ( "--product-name=Rust-MinGW" )
130
128
. arg ( "--rel-manifest-dir=rustlib" )
131
129
. arg ( "--success-message=Rust-MinGW-is-installed." )
132
- . arg ( format ! ( "--image-dir={}" , sanitize_sh ( & image) ) )
133
- . arg ( format ! ( "--work-dir={}" , sanitize_sh ( & tmpdir( build) ) ) )
134
- . arg ( format ! ( "--output-dir={}" , sanitize_sh ( & distdir( build) ) ) )
130
+ . arg ( "--image-dir" ) . arg ( & image)
131
+ . arg ( "--work-dir" ) . arg ( & tmpdir ( build) )
132
+ . arg ( "--output-dir" ) . arg ( & distdir ( build) )
135
133
. arg ( format ! ( "--package-name={}-{}" , name, host) )
136
134
. arg ( "--component-name=rust-mingw" )
137
135
. arg ( "--legacy-manifest-dirs=rustlib,cargo" ) ;
@@ -190,15 +188,15 @@ pub fn rustc(build: &Build, stage: u32, host: &str) {
190
188
}
191
189
192
190
// Finally, wrap everything up in a nice tarball!
193
- let mut cmd = Command :: new ( SH_CMD ) ;
194
- cmd. arg ( sanitize_sh ( & build . src . join ( "src/rust-installer/gen-installer.sh" ) ) )
191
+ let mut cmd = rust_installer ( build ) ;
192
+ cmd. arg ( "generate" )
195
193
. arg ( "--product-name=Rust" )
196
194
. arg ( "--rel-manifest-dir=rustlib" )
197
195
. arg ( "--success-message=Rust-is-ready-to-roll." )
198
- . arg ( format ! ( "--image-dir={}" , sanitize_sh ( & image) ) )
199
- . arg ( format ! ( "--work-dir={}" , sanitize_sh ( & tmpdir( build) ) ) )
200
- . arg ( format ! ( "--output-dir={}" , sanitize_sh ( & distdir( build) ) ) )
201
- . arg ( format ! ( "--non-installed-overlay={}" , sanitize_sh ( & overlay) ) )
196
+ . arg ( "--image-dir" ) . arg ( & image)
197
+ . arg ( "--work-dir" ) . arg ( & tmpdir ( build) )
198
+ . arg ( "--output-dir" ) . arg ( & distdir ( build) )
199
+ . arg ( "--non-installed-overlay" ) . arg ( & overlay)
202
200
. arg ( format ! ( "--package-name={}-{}" , name, host) )
203
201
. arg ( "--component-name=rustc" )
204
202
. arg ( "--legacy-manifest-dirs=rustlib,cargo" ) ;
@@ -300,14 +298,14 @@ pub fn std(build: &Build, compiler: &Compiler, target: &str) {
300
298
let src = build. sysroot ( compiler) . join ( "lib/rustlib" ) ;
301
299
cp_r ( & src. join ( target) , & dst) ;
302
300
303
- let mut cmd = Command :: new ( SH_CMD ) ;
304
- cmd. arg ( sanitize_sh ( & build . src . join ( "src/rust-installer/gen-installer.sh" ) ) )
301
+ let mut cmd = rust_installer ( build ) ;
302
+ cmd. arg ( "generate" )
305
303
. arg ( "--product-name=Rust" )
306
304
. arg ( "--rel-manifest-dir=rustlib" )
307
305
. arg ( "--success-message=std-is-standing-at-the-ready." )
308
- . arg ( format ! ( "--image-dir={}" , sanitize_sh ( & image) ) )
309
- . arg ( format ! ( "--work-dir={}" , sanitize_sh ( & tmpdir( build) ) ) )
310
- . arg ( format ! ( "--output-dir={}" , sanitize_sh ( & distdir( build) ) ) )
306
+ . arg ( "--image-dir" ) . arg ( & image)
307
+ . arg ( "--work-dir" ) . arg ( & tmpdir ( build) )
308
+ . arg ( "--output-dir" ) . arg ( & distdir ( build) )
311
309
. arg ( format ! ( "--package-name={}-{}" , name, target) )
312
310
. arg ( format ! ( "--component-name=rust-std-{}" , target) )
313
311
. arg ( "--legacy-manifest-dirs=rustlib,cargo" ) ;
@@ -356,14 +354,14 @@ pub fn analysis(build: &Build, compiler: &Compiler, target: &str) {
356
354
println ! ( "image_src: {:?}, dst: {:?}" , image_src, dst) ;
357
355
cp_r ( & image_src, & dst) ;
358
356
359
- let mut cmd = Command :: new ( SH_CMD ) ;
360
- cmd. arg ( sanitize_sh ( & build . src . join ( "src/rust-installer/gen-installer.sh" ) ) )
357
+ let mut cmd = rust_installer ( build ) ;
358
+ cmd. arg ( "generate" )
361
359
. arg ( "--product-name=Rust" )
362
360
. arg ( "--rel-manifest-dir=rustlib" )
363
361
. arg ( "--success-message=save-analysis-saved." )
364
- . arg ( format ! ( "--image-dir={}" , sanitize_sh ( & image) ) )
365
- . arg ( format ! ( "--work-dir={}" , sanitize_sh ( & tmpdir( build) ) ) )
366
- . arg ( format ! ( "--output-dir={}" , sanitize_sh ( & distdir( build) ) ) )
362
+ . arg ( "--image-dir" ) . arg ( & image)
363
+ . arg ( "--work-dir" ) . arg ( & tmpdir ( build) )
364
+ . arg ( "--output-dir" ) . arg ( & distdir ( build) )
367
365
. arg ( format ! ( "--package-name={}-{}" , name, target) )
368
366
. arg ( format ! ( "--component-name=rust-analysis-{}" , target) )
369
367
. arg ( "--legacy-manifest-dirs=rustlib,cargo" ) ;
@@ -471,13 +469,17 @@ pub fn rust_src(build: &Build) {
471
469
write_file ( & plain_dst_src. join ( "version" ) , build. rust_version ( ) . as_bytes ( ) ) ;
472
470
473
471
// Create plain source tarball
474
- let tarball = rust_src_location ( build) ;
472
+ let mut tarball = rust_src_location ( build) ;
473
+ tarball. set_extension ( "" ) ; // strip .gz
474
+ tarball. set_extension ( "" ) ; // strip .tar
475
475
if let Some ( dir) = tarball. parent ( ) {
476
476
t ! ( fs:: create_dir_all( dir) ) ;
477
477
}
478
- let mut cmd = Command :: new ( "tar" ) ;
479
- cmd. arg ( "-czf" ) . arg ( sanitize_sh ( & tarball) )
480
- . arg ( & plain_name)
478
+ let mut cmd = rust_installer ( build) ;
479
+ cmd. arg ( "tarball" )
480
+ . arg ( "--input" ) . arg ( & plain_name)
481
+ . arg ( "--output" ) . arg ( & tarball)
482
+ . arg ( "--work-dir=." )
481
483
. current_dir ( tmpdir ( build) ) ;
482
484
build. run ( & mut cmd) ;
483
485
@@ -521,14 +523,14 @@ pub fn rust_src(build: &Build) {
521
523
}
522
524
523
525
// Create source tarball in rust-installer format
524
- let mut cmd = Command :: new ( SH_CMD ) ;
525
- cmd. arg ( sanitize_sh ( & build . src . join ( "src/rust-installer/gen-installer.sh" ) ) )
526
+ let mut cmd = rust_installer ( build ) ;
527
+ cmd. arg ( "generate" )
526
528
. arg ( "--product-name=Rust" )
527
529
. arg ( "--rel-manifest-dir=rustlib" )
528
530
. arg ( "--success-message=Awesome-Source." )
529
- . arg ( format ! ( "--image-dir={}" , sanitize_sh ( & image) ) )
530
- . arg ( format ! ( "--work-dir={}" , sanitize_sh ( & tmpdir( build) ) ) )
531
- . arg ( format ! ( "--output-dir={}" , sanitize_sh ( & distdir( build) ) ) )
531
+ . arg ( "--image-dir" ) . arg ( & image)
532
+ . arg ( "--work-dir" ) . arg ( & tmpdir ( build) )
533
+ . arg ( "--output-dir" ) . arg ( & distdir ( build) )
532
534
. arg ( format ! ( "--package-name={}" , name) )
533
535
. arg ( "--component-name=rust-src" )
534
536
. arg ( "--legacy-manifest-dirs=rustlib,cargo" ) ;
@@ -622,15 +624,15 @@ pub fn cargo(build: &Build, stage: u32, target: &str) {
622
624
t ! ( t!( File :: create( overlay. join( "version" ) ) ) . write_all( version. as_bytes( ) ) ) ;
623
625
624
626
// Generate the installer tarball
625
- let mut cmd = Command :: new ( "sh" ) ;
626
- cmd. arg ( sanitize_sh ( & build . src . join ( "src/rust-installer/gen-installer.sh" ) ) )
627
+ let mut cmd = rust_installer ( build ) ;
628
+ cmd. arg ( "generate" )
627
629
. arg ( "--product-name=Rust" )
628
630
. arg ( "--rel-manifest-dir=rustlib" )
629
631
. arg ( "--success-message=Rust-is-ready-to-roll." )
630
- . arg ( format ! ( "--image-dir={}" , sanitize_sh ( & image) ) )
631
- . arg ( format ! ( "--work-dir={}" , sanitize_sh ( & tmpdir( build) ) ) )
632
- . arg ( format ! ( "--output-dir={}" , sanitize_sh ( & distdir( build) ) ) )
633
- . arg ( format ! ( "--non-installed-overlay={}" , sanitize_sh ( & overlay) ) )
632
+ . arg ( "--image-dir" ) . arg ( & image)
633
+ . arg ( "--work-dir" ) . arg ( & tmpdir ( build) )
634
+ . arg ( "--output-dir" ) . arg ( & distdir ( build) )
635
+ . arg ( "--non-installed-overlay" ) . arg ( & overlay)
634
636
. arg ( format ! ( "--package-name={}-{}" , name, target) )
635
637
. arg ( "--component-name=cargo" )
636
638
. arg ( "--legacy-manifest-dirs=rustlib,cargo" ) ;
@@ -671,15 +673,15 @@ pub fn rls(build: &Build, stage: u32, target: &str) {
671
673
t ! ( t!( File :: create( overlay. join( "version" ) ) ) . write_all( version. as_bytes( ) ) ) ;
672
674
673
675
// Generate the installer tarball
674
- let mut cmd = Command :: new ( "sh" ) ;
675
- cmd. arg ( sanitize_sh ( & build . src . join ( "src/rust-installer/gen-installer.sh" ) ) )
676
+ let mut cmd = rust_installer ( build ) ;
677
+ cmd. arg ( "generate" )
676
678
. arg ( "--product-name=Rust" )
677
679
. arg ( "--rel-manifest-dir=rustlib" )
678
680
. arg ( "--success-message=RLS-ready-to-serve." )
679
- . arg ( format ! ( "--image-dir={}" , sanitize_sh ( & image) ) )
680
- . arg ( format ! ( "--work-dir={}" , sanitize_sh ( & tmpdir( build) ) ) )
681
- . arg ( format ! ( "--output-dir={}" , sanitize_sh ( & distdir( build) ) ) )
682
- . arg ( format ! ( "--non-installed-overlay={}" , sanitize_sh ( & overlay) ) )
681
+ . arg ( "--image-dir" ) . arg ( & image)
682
+ . arg ( "--work-dir" ) . arg ( & tmpdir ( build) )
683
+ . arg ( "--output-dir" ) . arg ( & distdir ( build) )
684
+ . arg ( "--non-installed-overlay" ) . arg ( & overlay)
683
685
. arg ( format ! ( "--package-name={}-{}" , name, target) )
684
686
. arg ( "--component-name=rls" )
685
687
. arg ( "--legacy-manifest-dirs=rustlib,cargo" ) ;
@@ -730,29 +732,28 @@ pub fn extended(build: &Build, stage: u32, target: &str) {
730
732
// upgrades rustc was upgraded before rust-std. To avoid rustc clobbering
731
733
// the std files during uninstall. To do this ensure that rustc comes
732
734
// before rust-std in the list below.
733
- let mut input_tarballs = format ! ( "{},{},{},{},{},{}" ,
734
- sanitize_sh( & rustc_installer) ,
735
- sanitize_sh( & cargo_installer) ,
736
- sanitize_sh( & rls_installer) ,
737
- sanitize_sh( & analysis_installer) ,
738
- sanitize_sh( & docs_installer) ,
739
- sanitize_sh( & std_installer) ) ;
735
+ let mut tarballs = vec ! [ rustc_installer, cargo_installer, rls_installer,
736
+ analysis_installer, docs_installer, std_installer] ;
740
737
if target. contains ( "pc-windows-gnu" ) {
741
- input_tarballs. push_str ( "," ) ;
742
- input_tarballs. push_str ( & sanitize_sh ( & mingw_installer) ) ;
738
+ tarballs. push ( mingw_installer) ;
739
+ }
740
+ let mut input_tarballs = tarballs[ 0 ] . as_os_str ( ) . to_owned ( ) ;
741
+ for tarball in & tarballs[ 1 ..] {
742
+ input_tarballs. push ( "," ) ;
743
+ input_tarballs. push ( tarball) ;
743
744
}
744
745
745
- let mut cmd = Command :: new ( SH_CMD ) ;
746
- cmd. arg ( sanitize_sh ( & build . src . join ( "src/rust-installer/ combine-installers.sh" ) ) )
746
+ let mut cmd = rust_installer ( build ) ;
747
+ cmd. arg ( " combine" )
747
748
. arg ( "--product-name=Rust" )
748
749
. arg ( "--rel-manifest-dir=rustlib" )
749
750
. arg ( "--success-message=Rust-is-ready-to-roll." )
750
- . arg ( format ! ( "--work-dir={}" , sanitize_sh ( & work) ) )
751
- . arg ( format ! ( "--output-dir={}" , sanitize_sh ( & distdir( build) ) ) )
751
+ . arg ( "--work-dir" ) . arg ( & work)
752
+ . arg ( "--output-dir" ) . arg ( & distdir ( build) )
752
753
. arg ( format ! ( "--package-name={}-{}" , pkgname( build, "rust" ) , target) )
753
754
. arg ( "--legacy-manifest-dirs=rustlib,cargo" )
754
- . arg ( format ! ( "--input-tarballs={}" , input_tarballs ) )
755
- . arg ( format ! ( "--non-installed-overlay={}" , sanitize_sh ( & overlay) ) ) ;
755
+ . arg ( "--input-tarballs" ) . arg ( input_tarballs )
756
+ . arg ( "--non-installed-overlay" ) . arg ( & overlay) ;
756
757
build. run ( & mut cmd) ;
757
758
758
759
let mut license = String :: new ( ) ;
0 commit comments