]> git.lizzy.rs Git - rust.git/commitdiff
Touch up rls integration
authorAlex Crichton <alex@alexcrichton.com>
Mon, 10 Apr 2017 18:22:38 +0000 (11:22 -0700)
committerAlex Crichton <alex@alexcrichton.com>
Tue, 11 Apr 2017 17:47:53 +0000 (10:47 -0700)
* Use the right version when building combined installer
* Update dependencies of rls as it depends on rustc and plugins
* Fix build-manifest and the versions it uses for the rls

cargo
src/bootstrap/dist.rs
src/bootstrap/lib.rs
src/bootstrap/step.rs
src/tools/build-manifest/src/main.rs

diff --git a/cargo b/cargo
index 4e95c6b41eca3388f54dd5f7787366ad2df637b5..4729175045b41b688ab903120860866ce7a22ba9 160000 (submodule)
--- a/cargo
+++ b/cargo
@@ -1 +1 @@
-Subproject commit 4e95c6b41eca3388f54dd5f7787366ad2df637b5
+Subproject commit 4729175045b41b688ab903120860866ce7a22ba9
index e786d69555a1056804634de77a67b6426090224e..4328c4e3f1d4c58126c11d62b428557f8b2845be 100644 (file)
 fn pkgname(build: &Build, component: &str) -> String {
     if component == "cargo" {
         format!("{}-{}", component, build.cargo_package_vers())
+    } else if component == "rls" {
+        format!("{}-{}", component, build.package_vers(&build.release_num("rls")))
     } else {
-        assert!(component.starts_with("rust") || component == "rls");
+        assert!(component.starts_with("rust"));
         format!("{}-{}", component, build.rust_package_vers())
     }
 }
@@ -598,7 +600,8 @@ pub fn rls(build: &Build, stage: u32, target: &str) {
 
     let src = build.src.join("rls");
     let release_num = build.release_num("rls");
-    let name = format!("rls-{}", build.package_vers(&release_num));
+    let name = pkgname(build, "rls");
+    let version = build.rls_info.version(build, &release_num);
 
     let tmp = tmpdir(build);
     let image = tmp.join("rls-image");
@@ -614,6 +617,15 @@ pub fn rls(build: &Build, stage: u32, target: &str) {
     install(&src.join("LICENSE-MIT"), &doc, 0o644);
     install(&src.join("LICENSE-APACHE"), &doc, 0o644);
 
+    // Prepare the overlay
+    let overlay = tmp.join("rls-overlay");
+    drop(fs::remove_dir_all(&overlay));
+    t!(fs::create_dir_all(&overlay));
+    install(&src.join("README.md"), &overlay, 0o644);
+    install(&src.join("LICENSE-MIT"), &overlay, 0o644);
+    install(&src.join("LICENSE-APACHE"), &overlay, 0o644);
+    t!(t!(File::create(overlay.join("version"))).write_all(version.as_bytes()));
+
     // Generate the installer tarball
     let mut cmd = Command::new("sh");
     cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/gen-installer.sh")))
@@ -623,6 +635,7 @@ pub fn rls(build: &Build, stage: u32, target: &str) {
        .arg(format!("--image-dir={}", sanitize_sh(&image)))
        .arg(format!("--work-dir={}", sanitize_sh(&tmpdir(build))))
        .arg(format!("--output-dir={}", sanitize_sh(&distdir(build))))
+       .arg(format!("--non-installed-overlay={}", sanitize_sh(&overlay)))
        .arg(format!("--package-name={}-{}", name, target))
        .arg("--component-name=rls")
        .arg("--legacy-manifest-dirs=rustlib,cargo");
@@ -991,6 +1004,7 @@ pub fn hash_and_sign(build: &Build) {
     cmd.arg(today.trim());
     cmd.arg(build.rust_package_vers());
     cmd.arg(build.package_vers(&build.release_num("cargo")));
+    cmd.arg(build.package_vers(&build.release_num("rls")));
     cmd.arg(addr);
 
     t!(fs::create_dir_all(distdir(build)));
index e91664ac8aba76a96774948c7492c755a80a776f..d711b63ea2e26f348b9c4e679c32e88cc076cf15 100644 (file)
@@ -151,6 +151,7 @@ pub struct Build {
     out: PathBuf,
     rust_info: channel::GitInfo,
     cargo_info: channel::GitInfo,
+    rls_info: channel::GitInfo,
     local_rebuild: bool,
 
     // Probed tools at runtime
@@ -234,6 +235,7 @@ pub fn new(flags: Flags, config: Config) -> Build {
         };
         let rust_info = channel::GitInfo::new(&src);
         let cargo_info = channel::GitInfo::new(&src.join("cargo"));
+        let rls_info = channel::GitInfo::new(&src.join("rls"));
         let src_is_git = src.join(".git").exists();
 
         Build {
@@ -246,6 +248,7 @@ pub fn new(flags: Flags, config: Config) -> Build {
 
             rust_info: rust_info,
             cargo_info: cargo_info,
+            rls_info: rls_info,
             local_rebuild: local_rebuild,
             cc: HashMap::new(),
             cxx: HashMap::new(),
index d1581576957dc001a537df0bed522b58e97184fe..596cbcf01bb8088e4f7a15772a6f23c3b3967e8d 100644 (file)
@@ -572,7 +572,13 @@ fn crate_rule<'a, 'b>(build: &'a Build,
          .run(move |s| compile::tool(build, s.stage, s.target, "cargo"));
     rules.build("tool-rls", "rls")
          .host(true)
-         .dep(|s| s.name("libstd"))
+         .dep(|s| s.name("librustc"))
+         .dep(move |s| {
+             // rls, like cargo, uses procedural macros
+             s.name("librustc-link")
+              .target(&build.config.build)
+              .host(&build.config.build)
+         })
          .run(move |s| compile::tool(build, s.stage, s.target, "rls"));
 
     // ========================================================================
@@ -695,7 +701,6 @@ fn crate_rule<'a, 'b>(build: &'a Build,
          .run(move |s| dist::docs(build, s.stage, s.target));
     rules.dist("dist-analysis", "analysis")
          .dep(|s| s.name("dist-std"))
-         .default(true)
          .only_host_build(true)
          .run(move |s| dist::analysis(build, &s.compiler(), s.target));
     rules.dist("dist-rls", "rls")
index eab2dc75af8d06a39248537f10df7eaad03d1443..248f3d49f09359fb95c1f4df7624da2ea0a11d2d 100644 (file)
@@ -135,6 +135,7 @@ macro_rules! t {
 struct Builder {
     rust_release: String,
     cargo_release: String,
+    rls_release: String,
     input: PathBuf,
     output: PathBuf,
     gpg_passphrase: String,
@@ -143,6 +144,7 @@ struct Builder {
     date: String,
     rust_version: String,
     cargo_version: String,
+    rls_version: String,
 }
 
 fn main() {
@@ -152,6 +154,7 @@ fn main() {
     let date = args.next().unwrap();
     let rust_release = args.next().unwrap();
     let cargo_release = args.next().unwrap();
+    let rls_release = args.next().unwrap();
     let s3_address = args.next().unwrap();
     let mut passphrase = String::new();
     t!(io::stdin().read_to_string(&mut passphrase));
@@ -159,6 +162,7 @@ fn main() {
     Builder {
         rust_release: rust_release,
         cargo_release: cargo_release,
+        rls_release: rls_release,
         input: input,
         output: output,
         gpg_passphrase: passphrase,
@@ -167,6 +171,7 @@ fn main() {
         date: date,
         rust_version: String::new(),
         cargo_version: String::new(),
+        rls_version: String::new(),
     }.build();
 }
 
@@ -174,6 +179,7 @@ impl Builder {
     fn build(&mut self) {
         self.rust_version = self.version("rust", "x86_64-unknown-linux-gnu");
         self.cargo_version = self.version("cargo", "x86_64-unknown-linux-gnu");
+        self.rls_version = self.version("rls", "x86_64-unknown-linux-gnu");
 
         self.digest_and_sign();
         let Manifest { manifest_version, date, pkg } = self.build_manifest();
@@ -223,11 +229,8 @@ fn build_manifest(&mut self) -> Manifest {
         self.package("rust-std", &mut manifest.pkg, TARGETS);
         self.package("rust-docs", &mut manifest.pkg, TARGETS);
         self.package("rust-src", &mut manifest.pkg, &["*"]);
-
-        if self.rust_release == "nightly" {
-            self.package("rls", &mut manifest.pkg, HOSTS);
-            self.package("rust-analysis", &mut manifest.pkg, TARGETS);
-        }
+        self.package("rls", &mut manifest.pkg, HOSTS);
+        self.package("rust-analysis", &mut manifest.pkg, TARGETS);
 
         let mut pkg = Package {
             version: self.cached_version("rust").to_string(),
@@ -266,6 +269,14 @@ fn build_manifest(&mut self) -> Manifest {
                 });
             }
 
+            extensions.push(Component {
+                pkg: "rls".to_string(),
+                target: host.to_string(),
+            });
+            extensions.push(Component {
+                pkg: "rust-analysis".to_string(),
+                target: host.to_string(),
+            });
             for target in TARGETS {
                 if target != host {
                     extensions.push(Component {
@@ -273,16 +284,6 @@ fn build_manifest(&mut self) -> Manifest {
                         target: target.to_string(),
                     });
                 }
-                if self.rust_release == "nightly" {
-                    extensions.push(Component {
-                        pkg: "rust-analysis".to_string(),
-                        target: target.to_string(),
-                    });
-                    extensions.push(Component {
-                        pkg: "rls".to_string(),
-                        target: host.to_string(),
-                    });
-                }
             }
             extensions.push(Component {
                 pkg: "rust-src".to_string(),
@@ -348,6 +349,8 @@ fn filename(&self, component: &str, target: &str) -> String {
             format!("rust-src-{}.tar.gz", self.rust_release)
         } else if component == "cargo" {
             format!("cargo-{}-{}.tar.gz", self.cargo_release, target)
+        } else if component == "rls" {
+            format!("rls-{}-{}.tar.gz", self.rls_release, target)
         } else {
             format!("{}-{}-{}.tar.gz", component, self.rust_release, target)
         }
@@ -356,6 +359,8 @@ fn filename(&self, component: &str, target: &str) -> String {
     fn cached_version(&self, component: &str) -> &str {
         if component == "cargo" {
             &self.cargo_version
+        } else if component == "rls" {
+            &self.rls_version
         } else {
             &self.rust_version
         }