@@ -298,12 +298,16 @@ def build_manifest(rustc_date, rustc_version, rustc_short_version,
298
298
mingw_pkg = build_package_def_from_archive ("rust-mingw" , "dist" , rustc_date ,
299
299
rustc_version , rustc_short_version ,
300
300
mingw_list )
301
+ src_pkg = build_package_def_from_archive ("rust-src" , "dist" , rustc_date ,
302
+ rustc_version , rustc_short_version ,
303
+ ["*" ])
301
304
302
305
packages ["rustc" ] = rustc_pkg
303
306
packages ["rust-std" ] = std_pkg
304
307
packages ["rust-docs" ] = doc_pkg
305
308
packages ["cargo" ] = cargo_pkg
306
309
packages ["rust-mingw" ] = mingw_pkg
310
+ packages ["rust-src" ] = src_pkg
307
311
308
312
# Build the rust package. It is the only one with subcomponents
309
313
rust_target_pkgs = {}
@@ -335,6 +339,12 @@ def build_manifest(rustc_date, rustc_version, rustc_short_version,
335
339
"target" : target ,
336
340
}]
337
341
342
+ # The src package is also an extension
343
+ extensions += [{
344
+ "pkg" : "rust-src" ,
345
+ "target" : "*" ,
346
+ }]
347
+
338
348
# The binaries of the 'rust' package are on the local disk.
339
349
# url_and_hash_of_rust_package will try to locate them
340
350
# and tell us where they are going to live on static.rust-lang.org
@@ -405,8 +415,14 @@ def live_package_url(name, dist_dir, date, version, target):
405
415
if name == "cargo" :
406
416
maybe_channel = "nightly"
407
417
408
- url1 = s3_addy + "/" + dist_dir + "/" + date + "/" + name + "-" + version + "-" + target + ".tar.gz"
409
- url2 = s3_addy + "/" + dist_dir + "/" + date + "/" + name + "-" + maybe_channel + "-" + target + ".tar.gz"
418
+ if name == "rust-src" :
419
+ # The build system treats source packages as a separate target for `rustc`
420
+ # but for rustup we'd like to treat them as a completely separate package.
421
+ url1 = s3_addy + "/" + dist_dir + "/" + date + "/rust-src-" + version + ".tar.gz"
422
+ url2 = s3_addy + "/" + dist_dir + "/" + date + "/rust-src-" + maybe_channel + ".tar.gz"
423
+ else :
424
+ url1 = s3_addy + "/" + dist_dir + "/" + date + "/" + name + "-" + version + "-" + target + ".tar.gz"
425
+ url2 = s3_addy + "/" + dist_dir + "/" + date + "/" + name + "-" + maybe_channel + "-" + target + ".tar.gz"
410
426
411
427
print "checking " + url1
412
428
request = urllib2 .Request (url1 )
@@ -468,39 +484,48 @@ def url_and_hash_of_rust_package(target, rustc_short_version):
468
484
}
469
485
470
486
def write_manifest (manifest , file_path ):
487
+ def quote (value ):
488
+ return '"' + str (value ).replace ('"' , r'\"' ) + '"'
489
+
490
+ def bare_key (key ):
491
+ if re .match (r"^[a-zA-Z0-9_\-]+$" , key ):
492
+ return key
493
+ else :
494
+ return quote (key )
495
+
471
496
with open (file_path , "w" ) as f :
472
497
f .write ('manifest-version = "2"\n ' )
473
- f .write ('date = " ' + today + '" \n ' )
498
+ f .write ('date = ' + quote ( today ) + '\n ' )
474
499
f .write ('\n ' )
475
500
476
501
for name , pkg in sorted (manifest ["pkg" ].items ()):
477
- f .write ('[pkg.' + name + ']\n ' )
478
- f .write ('version = " ' + pkg ["version" ] + '" \n ' )
502
+ f .write ('[pkg.' + bare_key ( name ) + ']\n ' )
503
+ f .write ('version = ' + quote ( pkg ["version" ]) + '\n ' )
479
504
f .write ('\n ' )
480
505
481
506
for target , target_pkg in sorted (pkg ["target" ].items ()):
482
507
available = "true"
483
508
if not target_pkg ["available" ]: available = "false"
484
509
485
- f .write ('[pkg.' + name + '.target.' + target + ']\n ' )
510
+ f .write ('[pkg.' + bare_key ( name ) + '.target.' + bare_key ( target ) + ']\n ' )
486
511
f .write ('available = ' + available + '\n ' )
487
- f .write ('url = " ' + target_pkg ["url" ] + '" \n ' )
488
- f .write ('hash = " ' + target_pkg ["hash" ] + '" \n ' )
512
+ f .write ('url = ' + quote ( target_pkg ["url" ]) + '\n ' )
513
+ f .write ('hash = ' + quote ( target_pkg ["hash" ]) + '\n ' )
489
514
f .write ('\n ' )
490
515
491
516
components = target_pkg .get ("components" )
492
517
if components :
493
518
for component in components :
494
- f .write ('[[pkg.' + name + '.target.' + target + '.components]]\n ' )
495
- f .write ('pkg = " ' + component ["pkg" ] + '" \n ' )
496
- f .write ('target = " ' + component ["target" ] + '" \n ' )
519
+ f .write ('[[pkg.' + bare_key ( name ) + '.target.' + bare_key ( target ) + '.components]]\n ' )
520
+ f .write ('pkg = ' + quote ( component ["pkg" ]) + '\n ' )
521
+ f .write ('target = ' + quote ( component ["target" ]) + '\n ' )
497
522
498
523
extensions = target_pkg .get ("extensions" )
499
524
if extensions :
500
525
for extension in extensions :
501
- f .write ('[[pkg.' + name + '.target.' + target + '.extensions]]\n ' )
502
- f .write ('pkg = " ' + extension ["pkg" ] + '" \n ' )
503
- f .write ('target = " ' + extension ["target" ] + '" \n ' )
526
+ f .write ('[[pkg.' + bare_key ( name ) + '.target.' + bare_key ( target ) + '.extensions]]\n ' )
527
+ f .write ('pkg = ' + quote ( extension ["pkg" ]) + '\n ' )
528
+ f .write ('target = ' + quote ( extension ["target" ]) + '\n ' )
504
529
505
530
f .write ('\n ' )
506
531
0 commit comments