@@ -41,6 +41,8 @@ pub fn pkgname(builder: &Builder, component: &str) -> String {
4141 format ! ( "{}-{}" , component, builder. cargo_package_vers( ) )
4242 } else if component == "rls" {
4343 format ! ( "{}-{}" , component, builder. rls_package_vers( ) )
44+ } else if component == "clippy" {
45+ format ! ( "{}-{}" , component, builder. clippy_package_vers( ) )
4446 } else if component == "rustfmt" {
4547 format ! ( "{}-{}" , component, builder. rustfmt_package_vers( ) )
4648 } else if component == "llvm-tools" {
@@ -1183,6 +1185,82 @@ impl Step for Rls {
11831185 }
11841186}
11851187
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" ) , & doc, 0o644 ) ;
1244+ builder. create ( & overlay. join ( "version" ) , & version) ;
1245+
1246+ // Generate the installer tarball
1247+ let mut cmd = rust_installer ( builder) ;
1248+ cmd. arg ( "generate" )
1249+ . arg ( "--product-name=Rust" )
1250+ . arg ( "--rel-manifest-dir=rustlib" )
1251+ . arg ( "--success-message=clippy-ready-to-serve." )
1252+ . arg ( "--image-dir" ) . arg ( & image)
1253+ . arg ( "--work-dir" ) . arg ( & tmpdir ( builder) )
1254+ . arg ( "--output-dir" ) . arg ( & distdir ( builder) )
1255+ . arg ( "--non-installed-overlay" ) . arg ( & overlay)
1256+ . arg ( format ! ( "--package-name={}-{}" , name, target) )
1257+ . arg ( "--legacy-manifest-dirs=rustlib,cargo" )
1258+ . arg ( "--component-name=clippy-preview" ) ;
1259+
1260+ builder. run ( & mut cmd) ;
1261+ Some ( distdir ( builder) . join ( format ! ( "{}-{}.tar.gz" , name, target) ) )
1262+ }
1263+ }
11861264
11871265#[ derive( Debug , PartialOrd , Ord , Copy , Clone , Hash , PartialEq , Eq ) ]
11881266pub struct Rustfmt {
@@ -1304,6 +1382,7 @@ impl Step for Extended {
13041382 let rustfmt_installer = builder. ensure ( Rustfmt { stage, target } ) ;
13051383 let rls_installer = builder. ensure ( Rls { stage, target } ) ;
13061384 let llvm_tools_installer = builder. ensure ( LlvmTools { stage, target } ) ;
1385+ let clippy_installer = builder. ensure ( Clippy { stage, target } ) ;
13071386 let mingw_installer = builder. ensure ( Mingw { host : target } ) ;
13081387 let analysis_installer = builder. ensure ( Analysis {
13091388 compiler : builder. compiler ( stage, self . host ) ,
@@ -1340,6 +1419,7 @@ impl Step for Extended {
13401419 tarballs. push ( rustc_installer) ;
13411420 tarballs. push ( cargo_installer) ;
13421421 tarballs. extend ( rls_installer. clone ( ) ) ;
1422+ tarballs. extend ( clippy_installer. clone ( ) ) ;
13431423 tarballs. extend ( rustfmt_installer. clone ( ) ) ;
13441424 tarballs. extend ( llvm_tools_installer. clone ( ) ) ;
13451425 tarballs. push ( analysis_installer) ;
@@ -1409,6 +1489,9 @@ impl Step for Extended {
14091489 if rls_installer. is_none ( ) {
14101490 contents = filter ( & contents, "rls" ) ;
14111491 }
1492+ if clippy_installer. is_none ( ) {
1493+ contents = filter ( & contents, "clippy" ) ;
1494+ }
14121495 if rustfmt_installer. is_none ( ) {
14131496 contents = filter ( & contents, "rustfmt" ) ;
14141497 }
@@ -1446,6 +1529,9 @@ impl Step for Extended {
14461529 if rls_installer. is_some ( ) {
14471530 prepare ( "rls" ) ;
14481531 }
1532+ if clippy_installer. is_some ( ) {
1533+ prepare ( "clippy" ) ;
1534+ }
14491535
14501536 // create an 'uninstall' package
14511537 builder. install ( & etc. join ( "pkg/postinstall" ) , & pkg. join ( "uninstall" ) , 0o755 ) ;
@@ -1474,6 +1560,8 @@ impl Step for Extended {
14741560 format ! ( "{}-{}" , name, target)
14751561 } else if name == "rls" {
14761562 "rls-preview" . to_string ( )
1563+ } else if name == "clippy" {
1564+ "clippy-preview" . to_string ( )
14771565 } else {
14781566 name. to_string ( )
14791567 } ;
@@ -1490,6 +1578,9 @@ impl Step for Extended {
14901578 if rls_installer. is_some ( ) {
14911579 prepare ( "rls" ) ;
14921580 }
1581+ if clippy_installer. is_some ( ) {
1582+ prepare ( "clippy" ) ;
1583+ }
14931584 if target. contains ( "windows-gnu" ) {
14941585 prepare ( "rust-mingw" ) ;
14951586 }
@@ -1570,6 +1661,18 @@ impl Step for Extended {
15701661 . arg ( "-out" ) . arg ( exe. join ( "RlsGroup.wxs" ) )
15711662 . arg ( "-t" ) . arg ( etc. join ( "msi/remove-duplicates.xsl" ) ) ) ;
15721663 }
1664+ if clippy_installer. is_some ( ) {
1665+ builder. run ( Command :: new ( & heat)
1666+ . current_dir ( & exe)
1667+ . arg ( "dir" )
1668+ . arg ( "clippy" )
1669+ . args ( & heat_flags)
1670+ . arg ( "-cg" ) . arg ( "ClippyGroup" )
1671+ . arg ( "-dr" ) . arg ( "Clippy" )
1672+ . arg ( "-var" ) . arg ( "var.ClippyDir" )
1673+ . arg ( "-out" ) . arg ( exe. join ( "ClippyGroup.wxs" ) )
1674+ . arg ( "-t" ) . arg ( etc. join ( "msi/remove-duplicates.xsl" ) ) ) ;
1675+ }
15731676 builder. run ( Command :: new ( & heat)
15741677 . current_dir ( & exe)
15751678 . arg ( "dir" )
@@ -1612,6 +1715,9 @@ impl Step for Extended {
16121715 if rls_installer. is_some ( ) {
16131716 cmd. arg ( "-dRlsDir=rls" ) ;
16141717 }
1718+ if clippy_installer. is_some ( ) {
1719+ cmd. arg ( "-dClippyDir=clippy" ) ;
1720+ }
16151721 if target. contains ( "windows-gnu" ) {
16161722 cmd. arg ( "-dGccDir=rust-mingw" ) ;
16171723 }
@@ -1627,6 +1733,9 @@ impl Step for Extended {
16271733 if rls_installer. is_some ( ) {
16281734 candle ( "RlsGroup.wxs" . as_ref ( ) ) ;
16291735 }
1736+ if clippy_installer. is_some ( ) {
1737+ candle ( "ClippyGroup.wxs" . as_ref ( ) ) ;
1738+ }
16301739 candle ( "AnalysisGroup.wxs" . as_ref ( ) ) ;
16311740
16321741 if target. contains ( "windows-gnu" ) {
@@ -1656,6 +1765,9 @@ impl Step for Extended {
16561765 if rls_installer. is_some ( ) {
16571766 cmd. arg ( "RlsGroup.wixobj" ) ;
16581767 }
1768+ if clippy_installer. is_some ( ) {
1769+ cmd. arg ( "ClippyGroup.wixobj" ) ;
1770+ }
16591771
16601772 if target. contains ( "windows-gnu" ) {
16611773 cmd. arg ( "GccGroup.wixobj" ) ;
@@ -1741,6 +1853,7 @@ impl Step for HashSign {
17411853 cmd. arg ( builder. rust_package_vers ( ) ) ;
17421854 cmd. arg ( builder. package_vers ( & builder. release_num ( "cargo" ) ) ) ;
17431855 cmd. arg ( builder. package_vers ( & builder. release_num ( "rls" ) ) ) ;
1856+ cmd. arg ( builder. package_vers ( & builder. release_num ( "clippy" ) ) ) ;
17441857 cmd. arg ( builder. package_vers ( & builder. release_num ( "rustfmt" ) ) ) ;
17451858 cmd. arg ( builder. llvm_tools_package_vers ( ) ) ;
17461859 cmd. arg ( addr) ;
0 commit comments