@@ -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