@@ -41,6 +41,8 @@ pub fn pkgname(builder: &Builder, component: &str) -> String {
41
41
format ! ( "{}-{}" , component, builder. cargo_package_vers( ) )
42
42
} else if component == "rls" {
43
43
format ! ( "{}-{}" , component, builder. rls_package_vers( ) )
44
+ } else if component == "clippy" {
45
+ format ! ( "{}-{}" , component, builder. clippy_package_vers( ) )
44
46
} else if component == "rustfmt" {
45
47
format ! ( "{}-{}" , component, builder. rustfmt_package_vers( ) )
46
48
} else if component == "llvm-tools" {
@@ -1183,6 +1185,83 @@ impl Step for Rls {
1183
1185
}
1184
1186
}
1185
1187
1188
+ #[ derive( Debug , PartialOrd , Ord , Copy , Clone , Hash , PartialEq , Eq ) ]
1189
+ pub struct Clippy {
1190
+ pub stage : u32 ,
1191
+ pub target : Interned < String > ,
1192
+ }
1193
+
1194
+ impl Step for Clippy {
1195
+ type Output = Option < PathBuf > ;
1196
+ const ONLY_HOSTS : bool = true ;
1197
+
1198
+ fn should_run ( run : ShouldRun ) -> ShouldRun {
1199
+ run. path ( "clippy" )
1200
+ }
1201
+
1202
+ fn make_run ( run : RunConfig ) {
1203
+ run. builder . ensure ( Clippy {
1204
+ stage : run. builder . top_stage ,
1205
+ target : run. target ,
1206
+ } ) ;
1207
+ }
1208
+
1209
+ fn run ( self , builder : & Builder ) -> Option < PathBuf > {
1210
+ let stage = self . stage ;
1211
+ let target = self . target ;
1212
+ assert ! ( builder. config. extended) ;
1213
+
1214
+ builder. info ( & format ! ( "Dist clippy stage{} ({})" , stage, target) ) ;
1215
+ let src = builder. src . join ( "src/tools/clippy" ) ;
1216
+ let release_num = builder. release_num ( "clippy" ) ;
1217
+ let name = pkgname ( builder, "clippy" ) ;
1218
+ let version = builder. clippy_info . version ( builder, & release_num) ;
1219
+
1220
+ let tmp = tmpdir ( builder) ;
1221
+ let image = tmp. join ( "clippy-image" ) ;
1222
+ drop ( fs:: remove_dir_all ( & image) ) ;
1223
+ t ! ( fs:: create_dir_all( & image) ) ;
1224
+
1225
+ // Prepare the image directory
1226
+ // We expect clippy to build, because we've exited this step above if tool
1227
+ // state for clippy isn't testing.
1228
+ let clippy = builder. ensure ( tool:: Clippy {
1229
+ compiler : builder. compiler ( stage, builder. config . build ) ,
1230
+ target, extra_features : Vec :: new ( )
1231
+ } ) . or_else ( || { println ! ( "Unable to build clippy, skipping dist" ) ; None } ) ?;
1232
+
1233
+ builder. install ( & clippy, & image. join ( "bin" ) , 0o755 ) ;
1234
+ let doc = image. join ( "share/doc/clippy" ) ;
1235
+ builder. install ( & src. join ( "README.md" ) , & doc, 0o644 ) ;
1236
+ builder. install ( & src. join ( "LICENSE" ) , & doc, 0o644 ) ;
1237
+
1238
+ // Prepare the overlay
1239
+ let overlay = tmp. join ( "clippy-overlay" ) ;
1240
+ drop ( fs:: remove_dir_all ( & overlay) ) ;
1241
+ t ! ( fs:: create_dir_all( & overlay) ) ;
1242
+ builder. install ( & src. join ( "README.md" ) , & overlay, 0o644 ) ;
1243
+ builder. install ( & src. join ( "LICENSE-MIT" ) , & overlay, 0o644 ) ;
1244
+ builder. install ( & src. join ( "LICENSE-APACHE" ) , & overlay, 0o644 ) ;
1245
+ builder. create ( & overlay. join ( "version" ) , & version) ;
1246
+
1247
+ // Generate the installer tarball
1248
+ let mut cmd = rust_installer ( builder) ;
1249
+ cmd. arg ( "generate" )
1250
+ . arg ( "--product-name=Rust" )
1251
+ . arg ( "--rel-manifest-dir=rustlib" )
1252
+ . arg ( "--success-message=clippy-ready-to-serve." )
1253
+ . arg ( "--image-dir" ) . arg ( & image)
1254
+ . arg ( "--work-dir" ) . arg ( & tmpdir ( builder) )
1255
+ . arg ( "--output-dir" ) . arg ( & distdir ( builder) )
1256
+ . arg ( "--non-installed-overlay" ) . arg ( & overlay)
1257
+ . arg ( format ! ( "--package-name={}-{}" , name, target) )
1258
+ . arg ( "--legacy-manifest-dirs=rustlib,cargo" )
1259
+ . arg ( "--component-name=clippy-preview" ) ;
1260
+
1261
+ builder. run ( & mut cmd) ;
1262
+ Some ( distdir ( builder) . join ( format ! ( "{}-{}.tar.gz" , name, target) ) )
1263
+ }
1264
+ }
1186
1265
1187
1266
#[ derive( Debug , PartialOrd , Ord , Copy , Clone , Hash , PartialEq , Eq ) ]
1188
1267
pub struct Rustfmt {
@@ -1304,6 +1383,7 @@ impl Step for Extended {
1304
1383
let rustfmt_installer = builder. ensure ( Rustfmt { stage, target } ) ;
1305
1384
let rls_installer = builder. ensure ( Rls { stage, target } ) ;
1306
1385
let llvm_tools_installer = builder. ensure ( LlvmTools { stage, target } ) ;
1386
+ let clippy_installer = builder. ensure ( Clippy { stage, target } ) ;
1307
1387
let mingw_installer = builder. ensure ( Mingw { host : target } ) ;
1308
1388
let analysis_installer = builder. ensure ( Analysis {
1309
1389
compiler : builder. compiler ( stage, self . host ) ,
@@ -1340,6 +1420,7 @@ impl Step for Extended {
1340
1420
tarballs. push ( rustc_installer) ;
1341
1421
tarballs. push ( cargo_installer) ;
1342
1422
tarballs. extend ( rls_installer. clone ( ) ) ;
1423
+ tarballs. extend ( clippy_installer. clone ( ) ) ;
1343
1424
tarballs. extend ( rustfmt_installer. clone ( ) ) ;
1344
1425
tarballs. extend ( llvm_tools_installer. clone ( ) ) ;
1345
1426
tarballs. push ( analysis_installer) ;
@@ -1409,6 +1490,9 @@ impl Step for Extended {
1409
1490
if rls_installer. is_none ( ) {
1410
1491
contents = filter ( & contents, "rls" ) ;
1411
1492
}
1493
+ if clippy_installer. is_none ( ) {
1494
+ contents = filter ( & contents, "clippy" ) ;
1495
+ }
1412
1496
if rustfmt_installer. is_none ( ) {
1413
1497
contents = filter ( & contents, "rustfmt" ) ;
1414
1498
}
@@ -1446,6 +1530,9 @@ impl Step for Extended {
1446
1530
if rls_installer. is_some ( ) {
1447
1531
prepare ( "rls" ) ;
1448
1532
}
1533
+ if clippy_installer. is_some ( ) {
1534
+ prepare ( "clippy" ) ;
1535
+ }
1449
1536
1450
1537
// create an 'uninstall' package
1451
1538
builder. install ( & etc. join ( "pkg/postinstall" ) , & pkg. join ( "uninstall" ) , 0o755 ) ;
@@ -1474,6 +1561,8 @@ impl Step for Extended {
1474
1561
format ! ( "{}-{}" , name, target)
1475
1562
} else if name == "rls" {
1476
1563
"rls-preview" . to_string ( )
1564
+ } else if name == "clippy" {
1565
+ "clippy-preview" . to_string ( )
1477
1566
} else {
1478
1567
name. to_string ( )
1479
1568
} ;
@@ -1490,6 +1579,9 @@ impl Step for Extended {
1490
1579
if rls_installer. is_some ( ) {
1491
1580
prepare ( "rls" ) ;
1492
1581
}
1582
+ if clippy_installer. is_some ( ) {
1583
+ prepare ( "clippy" ) ;
1584
+ }
1493
1585
if target. contains ( "windows-gnu" ) {
1494
1586
prepare ( "rust-mingw" ) ;
1495
1587
}
@@ -1570,6 +1662,18 @@ impl Step for Extended {
1570
1662
. arg ( "-out" ) . arg ( exe. join ( "RlsGroup.wxs" ) )
1571
1663
. arg ( "-t" ) . arg ( etc. join ( "msi/remove-duplicates.xsl" ) ) ) ;
1572
1664
}
1665
+ if clippy_installer. is_some ( ) {
1666
+ builder. run ( Command :: new ( & heat)
1667
+ . current_dir ( & exe)
1668
+ . arg ( "dir" )
1669
+ . arg ( "clippy" )
1670
+ . args ( & heat_flags)
1671
+ . arg ( "-cg" ) . arg ( "ClippyGroup" )
1672
+ . arg ( "-dr" ) . arg ( "Clippy" )
1673
+ . arg ( "-var" ) . arg ( "var.ClippyDir" )
1674
+ . arg ( "-out" ) . arg ( exe. join ( "ClippyGroup.wxs" ) )
1675
+ . arg ( "-t" ) . arg ( etc. join ( "msi/remove-duplicates.xsl" ) ) ) ;
1676
+ }
1573
1677
builder. run ( Command :: new ( & heat)
1574
1678
. current_dir ( & exe)
1575
1679
. arg ( "dir" )
@@ -1612,6 +1716,9 @@ impl Step for Extended {
1612
1716
if rls_installer. is_some ( ) {
1613
1717
cmd. arg ( "-dRlsDir=rls" ) ;
1614
1718
}
1719
+ if clippy_installer. is_some ( ) {
1720
+ cmd. arg ( "-dClippyDir=clippy" ) ;
1721
+ }
1615
1722
if target. contains ( "windows-gnu" ) {
1616
1723
cmd. arg ( "-dGccDir=rust-mingw" ) ;
1617
1724
}
@@ -1627,6 +1734,9 @@ impl Step for Extended {
1627
1734
if rls_installer. is_some ( ) {
1628
1735
candle ( "RlsGroup.wxs" . as_ref ( ) ) ;
1629
1736
}
1737
+ if clippy_installer. is_some ( ) {
1738
+ candle ( "ClippyGroup.wxs" . as_ref ( ) ) ;
1739
+ }
1630
1740
candle ( "AnalysisGroup.wxs" . as_ref ( ) ) ;
1631
1741
1632
1742
if target. contains ( "windows-gnu" ) {
@@ -1656,6 +1766,9 @@ impl Step for Extended {
1656
1766
if rls_installer. is_some ( ) {
1657
1767
cmd. arg ( "RlsGroup.wixobj" ) ;
1658
1768
}
1769
+ if clippy_installer. is_some ( ) {
1770
+ cmd. arg ( "ClippyGroup.wixobj" ) ;
1771
+ }
1659
1772
1660
1773
if target. contains ( "windows-gnu" ) {
1661
1774
cmd. arg ( "GccGroup.wixobj" ) ;
@@ -1741,6 +1854,7 @@ impl Step for HashSign {
1741
1854
cmd. arg ( builder. rust_package_vers ( ) ) ;
1742
1855
cmd. arg ( builder. package_vers ( & builder. release_num ( "cargo" ) ) ) ;
1743
1856
cmd. arg ( builder. package_vers ( & builder. release_num ( "rls" ) ) ) ;
1857
+ cmd. arg ( builder. package_vers ( & builder. release_num ( "clippy" ) ) ) ;
1744
1858
cmd. arg ( builder. package_vers ( & builder. release_num ( "rustfmt" ) ) ) ;
1745
1859
cmd. arg ( builder. llvm_tools_package_vers ( ) ) ;
1746
1860
cmd. arg ( addr) ;
0 commit comments