@@ -374,13 +374,11 @@ pub fn rust_src(build: &Build) {
374374
375375    println ! ( "Dist src" ) ; 
376376
377-     let  name = pkgname ( build,  "rust-src" ) ; 
378-     let  image = tmpdir ( build) . join ( format ! ( "{}-image" ,  name) ) ; 
379-     let  _ = fs:: remove_dir_all ( & image) ; 
380- 
381-     let  dst = image. join ( "lib/rustlib/src" ) ; 
382-     let  dst_src = dst. join ( "rust" ) ; 
383-     t ! ( fs:: create_dir_all( & dst_src) ) ; 
377+     // Make sure that the root folder of tarball has the correct name 
378+     let  plain_name = format ! ( "rustc-{}-src" ,  build. rust_package_vers( ) ) ; 
379+     let  plain_dst_src = tmpdir ( build) . join ( & plain_name) ; 
380+     let  _ = fs:: remove_dir_all ( & plain_dst_src) ; 
381+     t ! ( fs:: create_dir_all( & plain_dst_src) ) ; 
384382
385383    // This is the set of root paths which will become part of the source package 
386384    let  src_files = [ 
@@ -429,13 +427,13 @@ pub fn rust_src(build: &Build) {
429427
430428    // Copy the directories using our filter 
431429    for  item in  & src_dirs { 
432-         let  dst = & dst_src . join ( item) ; 
430+         let  dst = & plain_dst_src . join ( item) ; 
433431        t ! ( fs:: create_dir( dst) ) ; 
434432        cp_filtered ( & build. src . join ( item) ,  dst,  & filter_fn) ; 
435433    } 
436434    // Copy the files normally 
437435    for  item in  & src_files { 
438-         copy ( & build. src . join ( item) ,  & dst_src . join ( item) ) ; 
436+         copy ( & build. src . join ( item) ,  & plain_dst_src . join ( item) ) ; 
439437    } 
440438
441439    // If we're building from git sources, we need to vendor a complete distribution. 
@@ -460,10 +458,63 @@ pub fn rust_src(build: &Build) {
460458        // Vendor all Cargo dependencies 
461459        let  mut  cmd = Command :: new ( & build. cargo ) ; 
462460        cmd. arg ( "vendor" ) 
463-            . current_dir ( & dst_src . join ( "src" ) ) ; 
461+            . current_dir ( & plain_dst_src . join ( "src" ) ) ; 
464462        build. run ( & mut  cmd) ; 
465463    } 
466464
465+     // Create the version file 
466+     write_file ( & plain_dst_src. join ( "version" ) ,  build. rust_version ( ) . as_bytes ( ) ) ; 
467+ 
468+     // Create plain source tarball 
469+     let  tarball = rust_src_location ( build) ; 
470+     if  let  Some ( dir)  = tarball. parent ( )  { 
471+         t ! ( fs:: create_dir_all( dir) ) ; 
472+     } 
473+     let  mut  cmd = Command :: new ( "tar" ) ; 
474+     cmd. arg ( "-czf" ) . arg ( sanitize_sh ( & tarball) ) 
475+        . arg ( & plain_name) 
476+        . current_dir ( tmpdir ( build) ) ; 
477+     build. run ( & mut  cmd) ; 
478+ 
479+ 
480+     let  name = pkgname ( build,  "rust-src" ) ; 
481+     let  image = tmpdir ( build) . join ( format ! ( "{}-image" ,  name) ) ; 
482+     let  _ = fs:: remove_dir_all ( & image) ; 
483+ 
484+     let  dst = image. join ( "lib/rustlib/src" ) ; 
485+     let  dst_src = dst. join ( "rust" ) ; 
486+     t ! ( fs:: create_dir_all( & dst_src) ) ; 
487+ 
488+     // This is the reduced set of paths which will become the rust-src component 
489+     // (essentially libstd and all of its path dependencies) 
490+     let  std_src_dirs = [ 
491+         "src/build_helper" , 
492+         "src/liballoc" , 
493+         "src/liballoc_jemalloc" , 
494+         "src/liballoc_system" , 
495+         "src/libcollections" , 
496+         "src/libcompiler_builtins" , 
497+         "src/libcore" , 
498+         "src/liblibc" , 
499+         "src/libpanic_abort" , 
500+         "src/libpanic_unwind" , 
501+         "src/librand" , 
502+         "src/librustc_asan" , 
503+         "src/librustc_lsan" , 
504+         "src/librustc_msan" , 
505+         "src/librustc_tsan" , 
506+         "src/libstd" , 
507+         "src/libstd_unicode" , 
508+         "src/libunwind" , 
509+         "src/rustc/libc_shim" , 
510+     ] ; 
511+ 
512+     for  item in  & std_src_dirs { 
513+         let  dst = & dst_src. join ( item) ; 
514+         t ! ( fs:: create_dir_all( dst) ) ; 
515+         cp_r ( & plain_dst_src. join ( item) ,  dst) ; 
516+     } 
517+ 
467518    // Create source tarball in rust-installer format 
468519    let  mut  cmd = Command :: new ( SH_CMD ) ; 
469520    cmd. arg ( sanitize_sh ( & build. src . join ( "src/rust-installer/gen-installer.sh" ) ) ) 
@@ -478,23 +529,6 @@ pub fn rust_src(build: &Build) {
478529       . arg ( "--legacy-manifest-dirs=rustlib,cargo" ) ; 
479530    build. run ( & mut  cmd) ; 
480531
481-     // Rename directory, so that root folder of tarball has the correct name 
482-     let  plain_name = format ! ( "rustc-{}-src" ,  build. rust_package_vers( ) ) ; 
483-     let  plain_dst_src = tmpdir ( build) . join ( & plain_name) ; 
484-     let  _ = fs:: remove_dir_all ( & plain_dst_src) ; 
485-     t ! ( fs:: create_dir_all( & plain_dst_src) ) ; 
486-     cp_r ( & dst_src,  & plain_dst_src) ; 
487- 
488-     // Create the version file 
489-     write_file ( & plain_dst_src. join ( "version" ) ,  build. rust_version ( ) . as_bytes ( ) ) ; 
490- 
491-     // Create plain source tarball 
492-     let  mut  cmd = Command :: new ( "tar" ) ; 
493-     cmd. arg ( "-czf" ) . arg ( sanitize_sh ( & rust_src_location ( build) ) ) 
494-        . arg ( & plain_name) 
495-        . current_dir ( tmpdir ( build) ) ; 
496-     build. run ( & mut  cmd) ; 
497- 
498532    t ! ( fs:: remove_dir_all( & image) ) ; 
499533    t ! ( fs:: remove_dir_all( & plain_dst_src) ) ; 
500534} 
0 commit comments