@@ -26,12 +26,6 @@ use std::process::{Command, Stdio};
2626
2727use build_helper:: output;
2828
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-
3529use { Build , Compiler , Mode } ;
3630use channel;
3731use util:: { cp_r, libdir, is_dylib, cp_filtered, copy, exe} ;
@@ -55,6 +49,10 @@ pub fn tmpdir(build: &Build) -> PathBuf {
5549 build. out . join ( "tmp/dist" )
5650}
5751
52+ fn rust_installer ( build : & Build ) -> Command {
53+ build. tool_cmd ( & Compiler :: new ( 0 , & build. config . build ) , "rust-installer" )
54+ }
55+
5856/// Builds the `rust-docs` installer component.
5957///
6058/// Slurps up documentation from the `stage`'s `host`.
@@ -74,14 +72,14 @@ pub fn docs(build: &Build, stage: u32, host: &str) {
7472 let src = build. out . join ( host) . join ( "doc" ) ;
7573 cp_r ( & src, & dst) ;
7674
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" )
7977 . arg ( "--product-name=Rust-Documentation" )
8078 . arg ( "--rel-manifest-dir=rustlib" )
8179 . 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) )
8583 . arg ( format ! ( "--package-name={}-{}" , name, host) )
8684 . arg ( "--component-name=rust-docs" )
8785 . arg ( "--legacy-manifest-dirs=rustlib,cargo" )
@@ -124,14 +122,14 @@ pub fn mingw(build: &Build, host: &str) {
124122 . arg ( host) ;
125123 build. run ( & mut cmd) ;
126124
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" )
129127 . arg ( "--product-name=Rust-MinGW" )
130128 . arg ( "--rel-manifest-dir=rustlib" )
131129 . 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) )
135133 . arg ( format ! ( "--package-name={}-{}" , name, host) )
136134 . arg ( "--component-name=rust-mingw" )
137135 . arg ( "--legacy-manifest-dirs=rustlib,cargo" ) ;
@@ -190,15 +188,15 @@ pub fn rustc(build: &Build, stage: u32, host: &str) {
190188 }
191189
192190 // 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" )
195193 . arg ( "--product-name=Rust" )
196194 . arg ( "--rel-manifest-dir=rustlib" )
197195 . 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)
202200 . arg ( format ! ( "--package-name={}-{}" , name, host) )
203201 . arg ( "--component-name=rustc" )
204202 . arg ( "--legacy-manifest-dirs=rustlib,cargo" ) ;
@@ -300,14 +298,14 @@ pub fn std(build: &Build, compiler: &Compiler, target: &str) {
300298 let src = build. sysroot ( compiler) . join ( "lib/rustlib" ) ;
301299 cp_r ( & src. join ( target) , & dst) ;
302300
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" )
305303 . arg ( "--product-name=Rust" )
306304 . arg ( "--rel-manifest-dir=rustlib" )
307305 . 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) )
311309 . arg ( format ! ( "--package-name={}-{}" , name, target) )
312310 . arg ( format ! ( "--component-name=rust-std-{}" , target) )
313311 . arg ( "--legacy-manifest-dirs=rustlib,cargo" ) ;
@@ -356,14 +354,14 @@ pub fn analysis(build: &Build, compiler: &Compiler, target: &str) {
356354 println ! ( "image_src: {:?}, dst: {:?}" , image_src, dst) ;
357355 cp_r ( & image_src, & dst) ;
358356
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" )
361359 . arg ( "--product-name=Rust" )
362360 . arg ( "--rel-manifest-dir=rustlib" )
363361 . 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) )
367365 . arg ( format ! ( "--package-name={}-{}" , name, target) )
368366 . arg ( format ! ( "--component-name=rust-analysis-{}" , target) )
369367 . arg ( "--legacy-manifest-dirs=rustlib,cargo" ) ;
@@ -471,13 +469,17 @@ pub fn rust_src(build: &Build) {
471469 write_file ( & plain_dst_src. join ( "version" ) , build. rust_version ( ) . as_bytes ( ) ) ;
472470
473471 // 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
475475 if let Some ( dir) = tarball. parent ( ) {
476476 t ! ( fs:: create_dir_all( dir) ) ;
477477 }
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=." )
481483 . current_dir ( tmpdir ( build) ) ;
482484 build. run ( & mut cmd) ;
483485
@@ -521,14 +523,14 @@ pub fn rust_src(build: &Build) {
521523 }
522524
523525 // 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" )
526528 . arg ( "--product-name=Rust" )
527529 . arg ( "--rel-manifest-dir=rustlib" )
528530 . 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) )
532534 . arg ( format ! ( "--package-name={}" , name) )
533535 . arg ( "--component-name=rust-src" )
534536 . arg ( "--legacy-manifest-dirs=rustlib,cargo" ) ;
@@ -622,15 +624,15 @@ pub fn cargo(build: &Build, stage: u32, target: &str) {
622624 t ! ( t!( File :: create( overlay. join( "version" ) ) ) . write_all( version. as_bytes( ) ) ) ;
623625
624626 // 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" )
627629 . arg ( "--product-name=Rust" )
628630 . arg ( "--rel-manifest-dir=rustlib" )
629631 . 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)
634636 . arg ( format ! ( "--package-name={}-{}" , name, target) )
635637 . arg ( "--component-name=cargo" )
636638 . arg ( "--legacy-manifest-dirs=rustlib,cargo" ) ;
@@ -671,15 +673,15 @@ pub fn rls(build: &Build, stage: u32, target: &str) {
671673 t ! ( t!( File :: create( overlay. join( "version" ) ) ) . write_all( version. as_bytes( ) ) ) ;
672674
673675 // 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" )
676678 . arg ( "--product-name=Rust" )
677679 . arg ( "--rel-manifest-dir=rustlib" )
678680 . 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)
683685 . arg ( format ! ( "--package-name={}-{}" , name, target) )
684686 . arg ( "--component-name=rls" )
685687 . arg ( "--legacy-manifest-dirs=rustlib,cargo" ) ;
@@ -730,29 +732,28 @@ pub fn extended(build: &Build, stage: u32, target: &str) {
730732 // upgrades rustc was upgraded before rust-std. To avoid rustc clobbering
731733 // the std files during uninstall. To do this ensure that rustc comes
732734 // 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] ;
740737 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) ;
743744 }
744745
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" )
747748 . arg ( "--product-name=Rust" )
748749 . arg ( "--rel-manifest-dir=rustlib" )
749750 . 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) )
752753 . arg ( format ! ( "--package-name={}-{}" , pkgname( build, "rust" ) , target) )
753754 . 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) ;
756757 build. run ( & mut cmd) ;
757758
758759 let mut license = String :: new ( ) ;
0 commit comments