From a43525c917d66e842b6aec7e16c9b6f65a50baf9 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Jul 28 2020 06:32:45 +0000 Subject: import rust-1.43.1-1.module+el8.3.0+6781+9238d68c --- diff --git a/.gitignore b/.gitignore index 10d4156..3b56dc2 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/rustc-1.39.0-src.tar.xz +SOURCES/rustc-1.43.1-src.tar.xz diff --git a/.rust.metadata b/.rust.metadata index cc23d94..b1bb850 100644 --- a/.rust.metadata +++ b/.rust.metadata @@ -1 +1 @@ -6cf245536bb7f8e58825f838be9a403579e45640 SOURCES/rustc-1.39.0-src.tar.xz +24243dbbeb70be8370fddc4a83e68a1ad228c4ed SOURCES/rustc-1.43.1-src.tar.xz diff --git a/SOURCES/0001-Hopefully-fix-rustdoc-build.patch b/SOURCES/0001-Hopefully-fix-rustdoc-build.patch deleted file mode 100644 index 06ca58e..0000000 --- a/SOURCES/0001-Hopefully-fix-rustdoc-build.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 73369f32621f6a844a80a8513ae3ded901e4a406 Mon Sep 17 00:00:00 2001 -From: Mark Rousskov -Date: Tue, 5 Nov 2019 11:16:46 -0500 -Subject: [PATCH] Hopefully fix rustdoc build - -It's super unclear why this broke when we switched to beta but not -previously -- but at least it's hopefully fixed now. ---- - src/bootstrap/builder.rs | 13 ++++++++++++- - 1 file changed, 12 insertions(+), 1 deletion(-) - -diff --git a/src/bootstrap/builder.rs b/src/bootstrap/builder.rs -index 2748903f2d47..2edcef203ad2 100644 ---- a/src/bootstrap/builder.rs -+++ b/src/bootstrap/builder.rs -@@ -886,7 +886,18 @@ impl<'a> Builder<'a> { - // things still build right, please do! - match mode { - Mode::Std => metadata.push_str("std"), -- _ => {}, -+ // When we're building rustc tools, they're built with a search path -+ // that contains things built during the rustc build. For example, -+ // bitflags is built during the rustc build, and is a dependency of -+ // rustdoc as well. We're building rustdoc in a different target -+ // directory, though, which means that Cargo will rebuild the -+ // dependency. When we go on to build rustdoc, we'll look for -+ // bitflags, and find two different copies: one built during the -+ // rustc step and one that we just built. This isn't always a -+ // problem, somehow -- not really clear why -- but we know that this -+ // fixes things. -+ Mode::ToolRustc => metadata.push_str("tool-rustc"), -+ _ => {} - } - cargo.env("__CARGO_DEFAULT_LIB_METADATA", &metadata); - --- -2.23.0 - diff --git a/SOURCES/rust-pr57840-llvm7-debuginfo-variants.patch b/SOURCES/rust-pr57840-llvm7-debuginfo-variants.patch index 71996bc..b1fd427 100644 --- a/SOURCES/rust-pr57840-llvm7-debuginfo-variants.patch +++ b/SOURCES/rust-pr57840-llvm7-debuginfo-variants.patch @@ -29,4 +29,4 @@ index 6deedd0b5ea3..9f63038c3623 100644 + || llvm_util::get_major_version() < 8; } - // Describes the members of an enum value: An enum is described as a union of + // FIXME(eddyb) maybe precompute this? Right now it's computed once diff --git a/SOURCES/rust-pr65474-split-rustc-dev.patch b/SOURCES/rust-pr65474-split-rustc-dev.patch deleted file mode 100644 index 7e1c57a..0000000 --- a/SOURCES/rust-pr65474-split-rustc-dev.patch +++ /dev/null @@ -1,479 +0,0 @@ -From 8e0007f829661e57d008d2e908c95f6e84b04b25 Mon Sep 17 00:00:00 2001 -From: bors -Date: Thu, 24 Oct 2019 07:27:00 +0000 -Subject: [PATCH] Auto merge of #65474 - Mark-Simulacrum:rustc-dev-split, - r=pietroalbini - -Split the rustc target libraries into separate rustc-dev component - -This is re-applies a squashed version of #64823 as well as including #65337 to fix bugs noted after merging the first PR. - -The second PR is confirmed as fixing windows-gnu, and presumably also fixes other platforms, such as musl (i.e. #65335 should be fixed); `RUSTUP_DIST_SERVER=https://dev-static.rust-lang.org rustup toolchain install nightly-2019-10-16` can be installed to confirm that this is indeed the case. - -diff --git a/src/bootstrap/builder.rs b/src/bootstrap/builder.rs -index b8071b98f707..2748903f2d47 100644 ---- a/src/bootstrap/builder.rs -+++ b/src/bootstrap/builder.rs -@@ -443,6 +443,7 @@ impl<'a> Builder<'a> { - dist::Rustc, - dist::DebuggerScripts, - dist::Std, -+ dist::RustcDev, - dist::Analysis, - dist::Src, - dist::PlainSourceTarball, -diff --git a/src/bootstrap/check.rs b/src/bootstrap/check.rs -index cadb9a7e441f..df1c72575846 100644 ---- a/src/bootstrap/check.rs -+++ b/src/bootstrap/check.rs -@@ -55,6 +55,7 @@ impl Step for Std { - cargo, - args(builder.kind), - &libstd_stamp(builder, compiler, target), -+ vec![], - true); - - let libdir = builder.sysroot_libdir(compiler, target); -@@ -103,6 +104,7 @@ impl Step for Rustc { - cargo, - args(builder.kind), - &librustc_stamp(builder, compiler, target), -+ vec![], - true); - - let libdir = builder.sysroot_libdir(compiler, target); -@@ -155,6 +157,7 @@ impl Step for CodegenBackend { - cargo, - args(builder.kind), - &codegen_backend_stamp(builder, compiler, target, backend), -+ vec![], - true); - } - } -@@ -199,6 +202,7 @@ impl Step for Rustdoc { - cargo, - args(builder.kind), - &rustdoc_stamp(builder, compiler, target), -+ vec![], - true); - - let libdir = builder.sysroot_libdir(compiler, target); -diff --git a/src/bootstrap/compile.rs b/src/bootstrap/compile.rs -index 5074b035789a..da8d43ed49b7 100644 ---- a/src/bootstrap/compile.rs -+++ b/src/bootstrap/compile.rs -@@ -69,7 +69,7 @@ impl Step for Std { - return; - } - -- builder.ensure(StartupObjects { compiler, target }); -+ let mut target_deps = builder.ensure(StartupObjects { compiler, target }); - - let compiler_to_use = builder.compiler_for(compiler.stage, compiler.host, target); - if compiler_to_use != compiler { -@@ -91,7 +91,7 @@ impl Step for Std { - return; - } - -- copy_third_party_objects(builder, &compiler, target); -+ target_deps.extend(copy_third_party_objects(builder, &compiler, target).into_iter()); - - let mut cargo = builder.cargo(compiler, Mode::Std, target, "build"); - std_cargo(builder, &compiler, target, &mut cargo); -@@ -102,6 +102,7 @@ impl Step for Std { - cargo, - vec![], - &libstd_stamp(builder, compiler, target), -+ target_deps, - false); - - builder.ensure(StdLink { -@@ -113,9 +114,22 @@ impl Step for Std { - } - - /// Copies third pary objects needed by various targets. --fn copy_third_party_objects(builder: &Builder<'_>, compiler: &Compiler, target: Interned) { -+fn copy_third_party_objects(builder: &Builder<'_>, compiler: &Compiler, target: Interned) -+ -> Vec -+{ - let libdir = builder.sysroot_libdir(*compiler, target); - -+ let mut target_deps = vec![]; -+ -+ let mut copy_and_stamp = |sourcedir: &Path, name: &str| { -+ let target = libdir.join(name); -+ builder.copy( -+ &sourcedir.join(name), -+ &target, -+ ); -+ target_deps.push(target); -+ }; -+ - // Copies the crt(1,i,n).o startup objects - // - // Since musl supports fully static linking, we can cross link for it even -@@ -123,19 +137,13 @@ fn copy_third_party_objects(builder: &Builder<'_>, compiler: &Compiler, target: - // files. As those shipped with glibc won't work, copy the ones provided by - // musl so we have them on linux-gnu hosts. - if target.contains("musl") { -+ let srcdir = builder.musl_root(target).unwrap().join("lib"); - for &obj in &["crt1.o", "crti.o", "crtn.o"] { -- builder.copy( -- &builder.musl_root(target).unwrap().join("lib").join(obj), -- &libdir.join(obj), -- ); -+ copy_and_stamp(&srcdir, obj); - } - } else if target.ends_with("-wasi") { -- for &obj in &["crt1.o"] { -- builder.copy( -- &builder.wasi_root(target).unwrap().join("lib/wasm32-wasi").join(obj), -- &libdir.join(obj), -- ); -- } -+ let srcdir = builder.wasi_root(target).unwrap().join("lib/wasm32-wasi"); -+ copy_and_stamp(&srcdir, "crt1.o"); - } - - // Copies libunwind.a compiled to be linked wit x86_64-fortanix-unknown-sgx. -@@ -145,11 +153,11 @@ fn copy_third_party_objects(builder: &Builder<'_>, compiler: &Compiler, target: - // which is provided by std for this target. - if target == "x86_64-fortanix-unknown-sgx" { - let src_path_env = "X86_FORTANIX_SGX_LIBS"; -- let obj = "libunwind.a"; - let src = env::var(src_path_env).expect(&format!("{} not found in env", src_path_env)); -- let src = Path::new(&src).join(obj); -- builder.copy(&src, &libdir.join(obj)); -+ copy_and_stamp(Path::new(&src), "libunwind.a"); - } -+ -+ target_deps - } - - /// Configure cargo to compile the standard library, adding appropriate env vars -@@ -306,7 +314,7 @@ pub struct StartupObjects { - } - - impl Step for StartupObjects { -- type Output = (); -+ type Output = Vec; - - fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> { - run.path("src/rtstartup") -@@ -325,13 +333,15 @@ impl Step for StartupObjects { - /// They don't require any library support as they're just plain old object - /// files, so we just use the nightly snapshot compiler to always build them (as - /// no other compilers are guaranteed to be available). -- fn run(self, builder: &Builder<'_>) { -+ fn run(self, builder: &Builder<'_>) -> Vec { - let for_compiler = self.compiler; - let target = self.target; - if !target.contains("windows-gnu") { -- return -+ return vec![] - } - -+ let mut target_deps = vec![]; -+ - let src_dir = &builder.src.join("src/rtstartup"); - let dst_dir = &builder.native_dir(target).join("rtstartup"); - let sysroot_dir = &builder.sysroot_libdir(for_compiler, target); -@@ -350,7 +360,9 @@ impl Step for StartupObjects { - .arg(src_file)); - } - -- builder.copy(dst_file, &sysroot_dir.join(file.to_string() + ".o")); -+ let target = sysroot_dir.join(file.to_string() + ".o"); -+ builder.copy(dst_file, &target); -+ target_deps.push(target); - } - - for obj in ["crt2.o", "dllcrt2.o"].iter() { -@@ -358,8 +370,12 @@ impl Step for StartupObjects { - builder.cc(target), - target, - obj); -- builder.copy(&src, &sysroot_dir.join(obj)); -+ let target = sysroot_dir.join(obj); -+ builder.copy(&src, &target); -+ target_deps.push(target); - } -+ -+ target_deps - } - } - -@@ -437,6 +453,7 @@ impl Step for Rustc { - cargo, - vec![], - &librustc_stamp(builder, compiler, target), -+ vec![], - false); - - builder.ensure(RustcLink { -@@ -585,7 +602,7 @@ impl Step for CodegenBackend { - - let tmp_stamp = out_dir.join(".tmp.stamp"); - -- let files = run_cargo(builder, cargo, vec![], &tmp_stamp, false); -+ let files = run_cargo(builder, cargo, vec![], &tmp_stamp, vec![], false); - if builder.config.dry_run { - return; - } -@@ -941,6 +958,7 @@ pub fn run_cargo(builder: &Builder<'_>, - cargo: Cargo, - tail_args: Vec, - stamp: &Path, -+ additional_target_deps: Vec, - is_check: bool) - -> Vec - { -@@ -1057,6 +1075,7 @@ pub fn run_cargo(builder: &Builder<'_>, - deps.push((path_to_add.into(), false)); - } - -+ deps.extend(additional_target_deps.into_iter().map(|d| (d, false))); - deps.sort(); - let mut new_contents = Vec::new(); - for (dep, proc_macro) in deps.iter() { -diff --git a/src/bootstrap/dist.rs b/src/bootstrap/dist.rs -index 514ad1144491..93143570b0fe 100644 ---- a/src/bootstrap/dist.rs -+++ b/src/bootstrap/dist.rs -@@ -637,6 +637,28 @@ impl Step for DebuggerScripts { - } - } - -+fn skip_host_target_lib(builder: &Builder<'_>, compiler: Compiler) -> bool { -+ // The only true set of target libraries came from the build triple, so -+ // let's reduce redundant work by only producing archives from that host. -+ if compiler.host != builder.config.build { -+ builder.info("\tskipping, not a build host"); -+ true -+ } else { -+ false -+ } -+} -+ -+/// Copy stamped files into an image's `target/lib` directory. -+fn copy_target_libs(builder: &Builder<'_>, target: &str, image: &Path, stamp: &Path) { -+ let dst = image.join("lib/rustlib").join(target).join("lib"); -+ t!(fs::create_dir_all(&dst)); -+ for (path, host) in builder.read_stamp_file(stamp) { -+ if !host || builder.config.build == target { -+ builder.copy(&path, &dst.join(path.file_name().unwrap())); -+ } -+ } -+} -+ - #[derive(Debug, PartialOrd, Ord, Copy, Clone, Hash, PartialEq, Eq)] - pub struct Std { - pub compiler: Compiler, -@@ -667,44 +689,19 @@ impl Step for Std { - let target = self.target; - - let name = pkgname(builder, "rust-std"); -- -- // The only true set of target libraries came from the build triple, so -- // let's reduce redundant work by only producing archives from that host. -- if compiler.host != builder.config.build { -- builder.info("\tskipping, not a build host"); -- return distdir(builder).join(format!("{}-{}.tar.gz", name, target)); -+ let archive = distdir(builder).join(format!("{}-{}.tar.gz", name, target)); -+ if skip_host_target_lib(builder, compiler) { -+ return archive; - } - -- // We want to package up as many target libraries as possible -- // for the `rust-std` package, so if this is a host target we -- // depend on librustc and otherwise we just depend on libtest. -- if builder.hosts.iter().any(|t| t == target) { -- builder.ensure(compile::Rustc { compiler, target }); -- } else { -- builder.ensure(compile::Std { compiler, target }); -- } -+ builder.ensure(compile::Std { compiler, target }); - - let image = tmpdir(builder).join(format!("{}-{}-image", name, target)); - let _ = fs::remove_dir_all(&image); - -- let dst = image.join("lib/rustlib").join(target); -- t!(fs::create_dir_all(&dst)); -- let mut src = builder.sysroot_libdir(compiler, target).to_path_buf(); -- src.pop(); // Remove the trailing /lib folder from the sysroot_libdir -- builder.cp_filtered(&src, &dst, &|path| { -- if let Some(name) = path.file_name().and_then(|s| s.to_str()) { -- if name == builder.config.rust_codegen_backends_dir.as_str() { -- return false -- } -- if name == "bin" { -- return false -- } -- if name.contains("LLVM") { -- return false -- } -- } -- true -- }); -+ let compiler_to_use = builder.compiler_for(compiler.stage, compiler.host, target); -+ let stamp = compile::libstd_stamp(builder, compiler_to_use, target); -+ copy_target_libs(builder, &target, &image, &stamp); - - let mut cmd = rust_installer(builder); - cmd.arg("generate") -@@ -723,7 +720,73 @@ impl Step for Std { - let _time = timeit(builder); - builder.run(&mut cmd); - builder.remove_dir(&image); -- distdir(builder).join(format!("{}-{}.tar.gz", name, target)) -+ archive -+ } -+} -+ -+#[derive(Debug, PartialOrd, Ord, Copy, Clone, Hash, PartialEq, Eq)] -+pub struct RustcDev { -+ pub compiler: Compiler, -+ pub target: Interned, -+} -+ -+impl Step for RustcDev { -+ type Output = PathBuf; -+ const DEFAULT: bool = true; -+ const ONLY_HOSTS: bool = true; -+ -+ fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> { -+ run.path("rustc-dev") -+ } -+ -+ fn make_run(run: RunConfig<'_>) { -+ run.builder.ensure(RustcDev { -+ compiler: run.builder.compiler_for( -+ run.builder.top_stage, -+ run.builder.config.build, -+ run.target, -+ ), -+ target: run.target, -+ }); -+ } -+ -+ fn run(self, builder: &Builder<'_>) -> PathBuf { -+ let compiler = self.compiler; -+ let target = self.target; -+ -+ let name = pkgname(builder, "rustc-dev"); -+ let archive = distdir(builder).join(format!("{}-{}.tar.gz", name, target)); -+ if skip_host_target_lib(builder, compiler) { -+ return archive; -+ } -+ -+ builder.ensure(compile::Rustc { compiler, target }); -+ -+ let image = tmpdir(builder).join(format!("{}-{}-image", name, target)); -+ let _ = fs::remove_dir_all(&image); -+ -+ let compiler_to_use = builder.compiler_for(compiler.stage, compiler.host, target); -+ let stamp = compile::librustc_stamp(builder, compiler_to_use, target); -+ copy_target_libs(builder, &target, &image, &stamp); -+ -+ let mut cmd = rust_installer(builder); -+ cmd.arg("generate") -+ .arg("--product-name=Rust") -+ .arg("--rel-manifest-dir=rustlib") -+ .arg("--success-message=Rust-is-ready-to-develop.") -+ .arg("--image-dir").arg(&image) -+ .arg("--work-dir").arg(&tmpdir(builder)) -+ .arg("--output-dir").arg(&distdir(builder)) -+ .arg(format!("--package-name={}-{}", name, target)) -+ .arg(format!("--component-name=rustc-dev-{}", target)) -+ .arg("--legacy-manifest-dirs=rustlib,cargo"); -+ -+ builder.info(&format!("Dist rustc-dev stage{} ({} -> {})", -+ compiler.stage, &compiler.host, target)); -+ let _time = timeit(builder); -+ builder.run(&mut cmd); -+ builder.remove_dir(&image); -+ archive - } - } - -diff --git a/src/bootstrap/lib.rs b/src/bootstrap/lib.rs -index a182405f3b2d..d1cf1cbca784 100644 ---- a/src/bootstrap/lib.rs -+++ b/src/bootstrap/lib.rs -@@ -1137,6 +1137,7 @@ impl Build { - pub fn copy(&self, src: &Path, dst: &Path) { - if self.config.dry_run { return; } - self.verbose_than(1, &format!("Copy {:?} to {:?}", src, dst)); -+ if src == dst { return; } - let _ = fs::remove_file(&dst); - let metadata = t!(src.symlink_metadata()); - if metadata.file_type().is_symlink() { -diff --git a/src/tools/build-manifest/src/main.rs b/src/tools/build-manifest/src/main.rs -index f41e7dd17ede..c0d2deab2f8b 100644 ---- a/src/tools/build-manifest/src/main.rs -+++ b/src/tools/build-manifest/src/main.rs -@@ -399,6 +399,7 @@ impl Builder { - fn add_packages_to(&mut self, manifest: &mut Manifest) { - let mut package = |name, targets| self.package(name, &mut manifest.pkg, targets); - package("rustc", HOSTS); -+ package("rustc-dev", HOSTS); - package("cargo", HOSTS); - package("rust-mingw", MINGW); - package("rust-std", TARGETS); -@@ -426,6 +427,13 @@ impl Builder { - "rls-preview", "rust-src", "llvm-tools-preview", - "lldb-preview", "rust-analysis", "miri-preview" - ]); -+ -+ // The compiler libraries are not stable for end users, but `rustc-dev` was only recently -+ // split out of `rust-std`. We'll include it by default as a transition for nightly users. -+ if self.rust_release == "nightly" { -+ self.extend_profile("default", &mut manifest.profiles, &["rustc-dev"]); -+ self.extend_profile("complete", &mut manifest.profiles, &["rustc-dev"]); -+ } - } - - fn add_renames_to(&self, manifest: &mut Manifest) { -@@ -481,6 +489,15 @@ impl Builder { - components.push(host_component("rust-mingw")); - } - -+ // The compiler libraries are not stable for end users, but `rustc-dev` was only recently -+ // split out of `rust-std`. We'll include it by default as a transition for nightly users, -+ // but ship it as an optional component on the beta and stable channels. -+ if self.rust_release == "nightly" { -+ components.push(host_component("rustc-dev")); -+ } else { -+ extensions.push(host_component("rustc-dev")); -+ } -+ - // Tools are always present in the manifest, - // but might be marked as unavailable if they weren't built. - extensions.extend(vec![ -@@ -498,6 +515,11 @@ impl Builder { - .filter(|&&target| target != host) - .map(|target| Component::from_str("rust-std", target)) - ); -+ extensions.extend( -+ HOSTS.iter() -+ .filter(|&&target| target != host) -+ .map(|target| Component::from_str("rustc-dev", target)) -+ ); - extensions.push(Component::from_str("rust-src", "*")); - - // If the components/extensions don't actually exist for this -@@ -534,6 +556,14 @@ impl Builder { - dst.insert(profile_name.to_owned(), pkgs.iter().map(|s| (*s).to_owned()).collect()); - } - -+ fn extend_profile(&mut self, -+ profile_name: &str, -+ dst: &mut BTreeMap>, -+ pkgs: &[&str]) { -+ dst.get_mut(profile_name).expect("existing profile") -+ .extend(pkgs.iter().map(|s| (*s).to_owned())); -+ } -+ - fn package(&mut self, - pkgname: &str, - dst: &mut BTreeMap, diff --git a/SOURCES/rust-pr66317-bindir-relative.patch b/SOURCES/rust-pr66317-bindir-relative.patch deleted file mode 100644 index 71d3b0c..0000000 --- a/SOURCES/rust-pr66317-bindir-relative.patch +++ /dev/null @@ -1,39 +0,0 @@ -diff --git a/src/bootstrap/builder.rs b/src/bootstrap/builder.rs -index 2748903f2d47..10d02d6db829 100644 ---- a/src/bootstrap/builder.rs -+++ b/src/bootstrap/builder.rs -@@ -1231,7 +1231,8 @@ impl<'a> Builder<'a> { - cargo.arg("--frozen"); - } - -- cargo.env("RUSTC_INSTALL_BINDIR", &self.config.bindir); -+ // Try to use a sysroot-relative bindir, in case it was configured absolutely. -+ cargo.env("RUSTC_INSTALL_BINDIR", self.config.bindir_relative()); - - self.ci_env.force_coloring_in_ci(&mut cargo); - -diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs -index d1bdfa0a7676..0c03b95c7b25 100644 ---- a/src/bootstrap/config.rs -+++ b/src/bootstrap/config.rs -@@ -647,6 +647,20 @@ impl Config { - config - } - -+ /// Try to find the relative path of `bindir`, otherwise return it in full. -+ pub fn bindir_relative(&self) -> &Path { -+ let bindir = &self.bindir; -+ if bindir.is_absolute() { -+ // Try to make it relative to the prefix. -+ if let Some(prefix) = &self.prefix { -+ if let Ok(stripped) = bindir.strip_prefix(prefix) { -+ return stripped; -+ } -+ } -+ } -+ bindir -+ } -+ - /// Try to find the relative path of `libdir`. - pub fn libdir_relative(&self) -> Option<&Path> { - let libdir = self.libdir.as_ref()?; diff --git a/SOURCES/rust-pr70123-ensure-llvm-is-in-the-link-path.patch b/SOURCES/rust-pr70123-ensure-llvm-is-in-the-link-path.patch new file mode 100644 index 0000000..d076d35 --- /dev/null +++ b/SOURCES/rust-pr70123-ensure-llvm-is-in-the-link-path.patch @@ -0,0 +1,210 @@ +commit 9423c4f0dda638ec2a925140850b85e8d3e6d455 (from bee074f032970fd1b59650c04a70e75eeee9c63b) +Merge: bee074f03297 3a2a4429a288 +Author: Mazdak Farrokhzad +Date: Mon Mar 23 10:29:13 2020 +0100 + + Rollup merge of #70123 - cuviper:library-path, r=Mark-Simulacrum + + Ensure LLVM is in the link path for rustc tools + + The build script for `rustc_llvm` outputs LLVM information in `cargo:rustc-link-lib` and `cargo:rustc-link-search` so the compiler can be linked correctly. However, while the lib is carried along in metadata, the search paths are not. So when cargo is invoked again later for rustc _tools_, they'll also try to link with LLVM, but the necessary paths may be left out. + + Rustbuild can use the environment to set the LLVM link path for tools -- `LIB` for MSVC toolchains and `LIBRARY_PATH` for everyone else. + + Fixes #68714. + +diff --git a/src/bootstrap/builder.rs b/src/bootstrap/builder.rs +index 602e4511ea58..dd519506d42a 100644 +--- a/src/bootstrap/builder.rs ++++ b/src/bootstrap/builder.rs +@@ -11,7 +11,7 @@ use std::path::{Path, PathBuf}; + use std::process::Command; + use std::time::{Duration, Instant}; + +-use build_helper::t; ++use build_helper::{output, t}; + + use crate::cache::{Cache, Interned, INTERNER}; + use crate::check; +@@ -23,7 +23,7 @@ use crate::install; + use crate::native; + use crate::test; + use crate::tool; +-use crate::util::{self, add_lib_path, exe, libdir}; ++use crate::util::{self, add_dylib_path, add_link_lib_path, exe, libdir}; + use crate::{Build, DocTests, GitRepo, Mode}; + + pub use crate::Compiler; +@@ -660,7 +660,7 @@ impl<'a> Builder<'a> { + return; + } + +- add_lib_path(vec![self.rustc_libdir(compiler)], &mut cmd.command); ++ add_dylib_path(vec![self.rustc_libdir(compiler)], &mut cmd.command); + } + + /// Gets a path to the compiler specified. +@@ -698,6 +698,20 @@ impl<'a> Builder<'a> { + cmd + } + ++ /// Return the path to `llvm-config` for the target, if it exists. ++ /// ++ /// Note that this returns `None` if LLVM is disabled, or if we're in a ++ /// check build or dry-run, where there's no need to build all of LLVM. ++ fn llvm_config(&self, target: Interned) -> Option { ++ if self.config.llvm_enabled() && self.kind != Kind::Check && !self.config.dry_run { ++ let llvm_config = self.ensure(native::Llvm { target }); ++ if llvm_config.is_file() { ++ return Some(llvm_config); ++ } ++ } ++ None ++ } ++ + /// Prepares an invocation of `cargo` to be run. + /// + /// This will create a `Command` that represents a pending execution of +@@ -1034,6 +1048,17 @@ impl<'a> Builder<'a> { + .env("RUSTC_SNAPSHOT_LIBDIR", self.rustc_libdir(compiler)); + } + ++ // Tools that use compiler libraries may inherit the `-lLLVM` link ++ // requirement, but the `-L` library path is not propagated across ++ // separate Cargo projects. We can add LLVM's library path to the ++ // platform-specific environment variable as a workaround. ++ if mode == Mode::ToolRustc { ++ if let Some(llvm_config) = self.llvm_config(target) { ++ let llvm_libdir = output(Command::new(&llvm_config).arg("--libdir")); ++ add_link_lib_path(vec![llvm_libdir.trim().into()], &mut cargo); ++ } ++ } ++ + if self.config.incremental { + cargo.env("CARGO_INCREMENTAL", "1"); + } else { +diff --git a/src/bootstrap/compile.rs b/src/bootstrap/compile.rs +index 65a00db33949..ad494b88b3af 100644 +--- a/src/bootstrap/compile.rs ++++ b/src/bootstrap/compile.rs +@@ -451,44 +451,6 @@ impl Step for Rustc { + false, + ); + +- // We used to build librustc_codegen_llvm as a separate step, +- // which produced a dylib that the compiler would dlopen() at runtime. +- // This meant that we only needed to make sure that libLLVM.so was +- // installed by the time we went to run a tool using it - since +- // librustc_codegen_llvm was effectively a standalone artifact, +- // other crates were completely oblivious to its dependency +- // on `libLLVM.so` during build time. +- // +- // However, librustc_codegen_llvm is now built as an ordinary +- // crate during the same step as the rest of the compiler crates. +- // This means that any crates depending on it will see the fact +- // that it uses `libLLVM.so` as a native library, and will +- // cause us to pass `-llibLLVM.so` to the linker when we link +- // a binary. +- // +- // For `rustc` itself, this works out fine. +- // During the `Assemble` step, we call `dist::maybe_install_llvm_dylib` +- // to copy libLLVM.so into the `stage` directory. We then link +- // the compiler binary, which will find `libLLVM.so` in the correct place. +- // +- // However, this is insufficient for tools that are build against stage0 +- // (e.g. stage1 rustdoc). Since `Assemble` for stage0 doesn't actually do anything, +- // we won't have `libLLVM.so` in the stage0 sysroot. In the past, this wasn't +- // a problem - we would copy the tool binary into its correct stage directory +- // (e.g. stage1 for a stage1 rustdoc built against a stage0 compiler). +- // Since libLLVM.so wasn't resolved until runtime, it was fine for it to +- // not exist while we were building it. +- // +- // To ensure that we can still build stage1 tools against a stage0 compiler, +- // we explicitly copy libLLVM.so into the stage0 sysroot when building +- // the stage0 compiler. This ensures that tools built against stage0 +- // will see libLLVM.so at build time, making the linker happy. +- if compiler.stage == 0 { +- builder.info(&format!("Installing libLLVM.so to stage 0 ({})", compiler.host)); +- let sysroot = builder.sysroot(compiler); +- dist::maybe_install_llvm_dylib(builder, compiler.host, &sysroot); +- } +- + builder.ensure(RustcLink { + compiler: builder.compiler(compiler.stage, builder.config.build), + target_compiler: compiler, +diff --git a/src/bootstrap/tool.rs b/src/bootstrap/tool.rs +index 67e0ed5c5802..c8ccba467e50 100644 +--- a/src/bootstrap/tool.rs ++++ b/src/bootstrap/tool.rs +@@ -12,7 +12,7 @@ use crate::channel; + use crate::channel::GitInfo; + use crate::compile; + use crate::toolstate::ToolState; +-use crate::util::{add_lib_path, exe, CiEnv}; ++use crate::util::{add_dylib_path, exe, CiEnv}; + use crate::Compiler; + use crate::Mode; + +@@ -388,7 +388,7 @@ pub struct ErrorIndex { + impl ErrorIndex { + pub fn command(builder: &Builder<'_>, compiler: Compiler) -> Command { + let mut cmd = Command::new(builder.ensure(ErrorIndex { compiler })); +- add_lib_path( ++ add_dylib_path( + vec![PathBuf::from(&builder.sysroot_libdir(compiler, compiler.host))], + &mut cmd, + ); +@@ -689,7 +689,7 @@ impl<'a> Builder<'a> { + } + } + +- add_lib_path(lib_paths, &mut cmd); ++ add_dylib_path(lib_paths, &mut cmd); + cmd + } + } +diff --git a/src/bootstrap/util.rs b/src/bootstrap/util.rs +index eac790fe504b..2bc6f1939d97 100644 +--- a/src/bootstrap/util.rs ++++ b/src/bootstrap/util.rs +@@ -40,7 +40,7 @@ pub fn libdir(target: &str) -> &'static str { + } + + /// Adds a list of lookup paths to `cmd`'s dynamic library lookup path. +-pub fn add_lib_path(path: Vec, cmd: &mut Command) { ++pub fn add_dylib_path(path: Vec, cmd: &mut Command) { + let mut list = dylib_path(); + for path in path { + list.insert(0, path); +@@ -72,6 +72,31 @@ pub fn dylib_path() -> Vec { + env::split_paths(&var).collect() + } + ++/// Adds a list of lookup paths to `cmd`'s link library lookup path. ++pub fn add_link_lib_path(path: Vec, cmd: &mut Command) { ++ let mut list = link_lib_path(); ++ for path in path { ++ list.insert(0, path); ++ } ++ cmd.env(link_lib_path_var(), t!(env::join_paths(list))); ++} ++ ++/// Returns the environment variable which the link library lookup path ++/// resides in for this platform. ++fn link_lib_path_var() -> &'static str { ++ if cfg!(target_env = "msvc") { "LIB" } else { "LIBRARY_PATH" } ++} ++ ++/// Parses the `link_lib_path_var()` environment variable, returning a list of ++/// paths that are members of this lookup path. ++fn link_lib_path() -> Vec { ++ let var = match env::var_os(link_lib_path_var()) { ++ Some(v) => v, ++ None => return vec![], ++ }; ++ env::split_paths(&var).collect() ++} ++ + /// `push` all components to `buf`. On windows, append `.exe` to the last component. + pub fn push_exe_path(mut buf: PathBuf, components: &[&str]) -> PathBuf { + let (&file, components) = components.split_last().expect("at least one component required"); diff --git a/SOURCES/rust-pr70163-prepare-for-llvm-10-upgrade.patch b/SOURCES/rust-pr70163-prepare-for-llvm-10-upgrade.patch new file mode 100644 index 0000000..765c2e9 --- /dev/null +++ b/SOURCES/rust-pr70163-prepare-for-llvm-10-upgrade.patch @@ -0,0 +1,175 @@ +commit 374ab25585f0a817fe7bd6986737f12347b12d0b (from 1add455ec6f81045e7651c6225902823f5d4fbfa) +Merge: 1add455ec6f8 497f879b1e24 +Author: bors +Date: Tue Mar 24 12:42:54 2020 +0000 + + Auto merge of #70163 - nikic:llvm-10-preparation, r=cuviper + + Prepare for LLVM 10 upgrade + + This is #67759 minus the submodule update. + + * Fix two compatibility issues in the rustllvm wrapper. + * Update data layout strings in tests. + * Fix LLVM version comparison (this become a problem because the major version has two digits now). + + r? @cuviper + +diff --git a/src/bootstrap/test.rs b/src/bootstrap/test.rs +index aa1d1b7c4241..b52fbe4666eb 100644 +--- a/src/bootstrap/test.rs ++++ b/src/bootstrap/test.rs +@@ -1141,6 +1141,8 @@ impl Step for Compiletest { + let llvm_config = builder.ensure(native::Llvm { target: builder.config.build }); + if !builder.config.dry_run { + let llvm_version = output(Command::new(&llvm_config).arg("--version")); ++ // Remove trailing newline from llvm-config output. ++ let llvm_version = llvm_version.trim_end(); + cmd.arg("--llvm-version").arg(llvm_version); + } + if !builder.is_rust_llvm(target) { +diff --git a/src/rustllvm/PassWrapper.cpp b/src/rustllvm/PassWrapper.cpp +index 90d24d20737d..9e8614e3b6d3 100644 +--- a/src/rustllvm/PassWrapper.cpp ++++ b/src/rustllvm/PassWrapper.cpp +@@ -67,7 +67,11 @@ extern "C" void LLVMInitializePasses() { + } + + extern "C" void LLVMTimeTraceProfilerInitialize() { +-#if LLVM_VERSION_GE(9, 0) ++#if LLVM_VERSION_GE(10, 0) ++ timeTraceProfilerInitialize( ++ /* TimeTraceGranularity */ 0, ++ /* ProcName */ "rustc"); ++#elif LLVM_VERSION_GE(9, 0) + timeTraceProfilerInitialize(); + #endif + } +diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp +index 25cfee3373dc..799adb418822 100644 +--- a/src/rustllvm/RustWrapper.cpp ++++ b/src/rustllvm/RustWrapper.cpp +@@ -1333,8 +1333,13 @@ extern "C" LLVMValueRef LLVMRustBuildMemSet(LLVMBuilderRef B, + LLVMValueRef Dst, unsigned DstAlign, + LLVMValueRef Val, + LLVMValueRef Size, bool IsVolatile) { ++#if LLVM_VERSION_GE(10, 0) ++ return wrap(unwrap(B)->CreateMemSet( ++ unwrap(Dst), unwrap(Val), unwrap(Size), MaybeAlign(DstAlign), IsVolatile)); ++#else + return wrap(unwrap(B)->CreateMemSet( + unwrap(Dst), unwrap(Val), unwrap(Size), DstAlign, IsVolatile)); ++#endif + } + + extern "C" LLVMValueRef +diff --git a/src/test/run-make-fulldeps/target-specs/my-awesome-platform.json b/src/test/run-make-fulldeps/target-specs/my-awesome-platform.json +index 8d028280a8da..00de3de05f07 100644 +--- a/src/test/run-make-fulldeps/target-specs/my-awesome-platform.json ++++ b/src/test/run-make-fulldeps/target-specs/my-awesome-platform.json +@@ -1,5 +1,5 @@ + { +- "data-layout": "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128", ++ "data-layout": "e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-f64:32:64-f80:32-n8:16:32-S128", + "linker-flavor": "gcc", + "llvm-target": "i686-unknown-linux-gnu", + "target-endian": "little", +diff --git a/src/test/run-make-fulldeps/target-specs/my-x86_64-unknown-linux-gnu-platform.json b/src/test/run-make-fulldeps/target-specs/my-x86_64-unknown-linux-gnu-platform.json +index 48040ae3da0e..6d5e964ed4fe 100644 +--- a/src/test/run-make-fulldeps/target-specs/my-x86_64-unknown-linux-gnu-platform.json ++++ b/src/test/run-make-fulldeps/target-specs/my-x86_64-unknown-linux-gnu-platform.json +@@ -1,6 +1,6 @@ + { + "pre-link-args": {"gcc": ["-m64"]}, +- "data-layout": "e-m:e-i64:64-f80:128-n8:16:32:64-S128", ++ "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", + "linker-flavor": "gcc", + "llvm-target": "x86_64-unknown-linux-gnu", + "target-endian": "little", +diff --git a/src/tools/compiletest/src/header.rs b/src/tools/compiletest/src/header.rs +index 2a24a8c3c948..cb648db8830e 100644 +--- a/src/tools/compiletest/src/header.rs ++++ b/src/tools/compiletest/src/header.rs +@@ -191,6 +191,7 @@ impl EarlyProps { + return true; + } + if let Some(ref actual_version) = config.llvm_version { ++ let actual_version = version_to_int(actual_version); + if line.starts_with("min-llvm-version") { + let min_version = line + .trim_end() +@@ -199,7 +200,7 @@ impl EarlyProps { + .expect("Malformed llvm version directive"); + // Ignore if actual version is smaller the minimum required + // version +- &actual_version[..] < min_version ++ actual_version < version_to_int(min_version) + } else if line.starts_with("min-system-llvm-version") { + let min_version = line + .trim_end() +@@ -208,7 +209,7 @@ impl EarlyProps { + .expect("Malformed llvm version directive"); + // Ignore if using system LLVM and actual version + // is smaller the minimum required version +- config.system_llvm && &actual_version[..] < min_version ++ config.system_llvm && actual_version < version_to_int(min_version) + } else if line.starts_with("ignore-llvm-version") { + // Syntax is: "ignore-llvm-version [- ]" + let range_components = line +@@ -219,15 +220,15 @@ impl EarlyProps { + .take(3) // 3 or more = invalid, so take at most 3. + .collect::>(); + match range_components.len() { +- 1 => &actual_version[..] == range_components[0], ++ 1 => actual_version == version_to_int(range_components[0]), + 2 => { +- let v_min = range_components[0]; +- let v_max = range_components[1]; ++ let v_min = version_to_int(range_components[0]); ++ let v_max = version_to_int(range_components[1]); + if v_max < v_min { + panic!("Malformed LLVM version range: max < min") + } + // Ignore if version lies inside of range. +- &actual_version[..] >= v_min && &actual_version[..] <= v_max ++ actual_version >= v_min && actual_version <= v_max + } + _ => panic!("Malformed LLVM version directive"), + } +@@ -238,6 +239,20 @@ impl EarlyProps { + false + } + } ++ ++ fn version_to_int(version: &str) -> u32 { ++ let version_without_suffix = version.split('-').next().unwrap(); ++ let components: Vec = version_without_suffix ++ .split('.') ++ .map(|s| s.parse().expect("Malformed version component")) ++ .collect(); ++ match components.len() { ++ 1 => components[0] * 10000, ++ 2 => components[0] * 10000 + components[1] * 100, ++ 3 => components[0] * 10000 + components[1] * 100 + components[2], ++ _ => panic!("Malformed version"), ++ } ++ } + } + } + +diff --git a/src/tools/compiletest/src/header/tests.rs b/src/tools/compiletest/src/header/tests.rs +index 6c478f7e29da..31d991e0c2f8 100644 +--- a/src/tools/compiletest/src/header/tests.rs ++++ b/src/tools/compiletest/src/header/tests.rs +@@ -122,9 +122,8 @@ fn llvm_version() { + config.llvm_version = Some("9.3.1-rust-1.43.0-dev".to_owned()); + assert!(!parse_rs(&config, "// min-llvm-version 9.2").ignore); + +- // FIXME. +- // config.llvm_version = Some("10.0.0-rust".to_owned()); +- // assert!(!parse_rs(&config, "// min-llvm-version 9.0").ignore); ++ config.llvm_version = Some("10.0.0-rust".to_owned()); ++ assert!(!parse_rs(&config, "// min-llvm-version 9.0").ignore); + } + + #[test] diff --git a/SOURCES/rust-pr70591-ensure-llvm-is-in-the-link-path.patch b/SOURCES/rust-pr70591-ensure-llvm-is-in-the-link-path.patch new file mode 100644 index 0000000..9f5722b --- /dev/null +++ b/SOURCES/rust-pr70591-ensure-llvm-is-in-the-link-path.patch @@ -0,0 +1,40 @@ +commit 6067315d58ff3d49b305ae3c99810656856c8e21 +Author: Josh Stone +Date: Mon Mar 30 14:03:39 2020 -0700 + + Ensure LLVM is in the link path for "fulldeps" tests + + This is a follow-up to #70123, which added `llvm-config --libdir` to the + `LIBRARY_PATH` for rustc tools. We need the same for "run-make-fulldeps" + and "ui-fulldeps" tests which depend on compiler libraries, implicitly + needing to link to `-lLLVM` as well. + +diff --git a/src/bootstrap/test.rs b/src/bootstrap/test.rs +index 5b946b05735d..2499856235f1 100644 +--- a/src/bootstrap/test.rs ++++ b/src/bootstrap/test.rs +@@ -21,7 +21,7 @@ use crate::flags::Subcommand; + use crate::native; + use crate::tool::{self, SourceType, Tool}; + use crate::toolstate::ToolState; +-use crate::util::{self, dylib_path, dylib_path_var}; ++use crate::util::{self, add_link_lib_path, dylib_path, dylib_path_var}; + use crate::Crate as CargoCrate; + use crate::{envify, DocTests, GitRepo, Mode}; + +@@ -1178,6 +1178,15 @@ impl Step for Compiletest { + cmd.arg("--system-llvm"); + } + ++ // Tests that use compiler libraries may inherit the `-lLLVM` link ++ // requirement, but the `-L` library path is not propagated across ++ // separate compilations. We can add LLVM's library path to the ++ // platform-specific environment variable as a workaround. ++ if !builder.config.dry_run && suite.ends_with("fulldeps") { ++ let llvm_libdir = output(Command::new(&llvm_config).arg("--libdir")); ++ add_link_lib_path(vec![llvm_libdir.trim().into()], &mut cmd); ++ } ++ + // Only pass correct values for these flags for the `run-make` suite as it + // requires that a C++ compiler was configured which isn't always the case. + if !builder.config.dry_run && suite == "run-make-fulldeps" { diff --git a/SOURCES/rust-pr71782-Use-a-non-existent-test-path.patch b/SOURCES/rust-pr71782-Use-a-non-existent-test-path.patch new file mode 100644 index 0000000..df02449 --- /dev/null +++ b/SOURCES/rust-pr71782-Use-a-non-existent-test-path.patch @@ -0,0 +1,56 @@ +From fbd3fbdb24563a9d8fd3651f6bdc90bbbbd81d3e Mon Sep 17 00:00:00 2001 +From: Josh Stone +Date: Fri, 1 May 2020 16:50:10 -0700 +Subject: [PATCH] Use a non-existent test path instead of clobbering /dev/null + +--- + src/test/ui/non-ice-error-on-worker-io-fail.rs | 10 +++++++--- + src/test/ui/non-ice-error-on-worker-io-fail.stderr | 2 +- + 2 files changed, 8 insertions(+), 4 deletions(-) + +diff --git a/src/test/ui/non-ice-error-on-worker-io-fail.rs b/src/test/ui/non-ice-error-on-worker-io-fail.rs +index 8af17742850d..30779fc65c0f 100644 +--- a/src/test/ui/non-ice-error-on-worker-io-fail.rs ++++ b/src/test/ui/non-ice-error-on-worker-io-fail.rs +@@ -4,8 +4,12 @@ + // + // An attempt to `-o` into a directory we cannot write into should indeed + // be an error; but not an ICE. ++// ++// However, some folks run tests as root, which can write `/dev/` and end ++// up clobbering `/dev/null`. Instead we'll use a non-existent path, which ++// also used to ICE, but even root can't magically write there. + +-// compile-flags: -o /dev/null ++// compile-flags: -o /does-not-exist/output + + // The error-pattern check occurs *before* normalization, and the error patterns + // are wildly different between build environments. So this is a cop-out (and we +@@ -15,10 +19,10 @@ + // error-pattern: error + + // On Mac OS X, we get an error like the below +-// normalize-stderr-test "failed to write bytecode to /dev/null.non_ice_error_on_worker_io_fail.*" -> "io error modifying /dev/" ++// normalize-stderr-test "failed to write bytecode to /does-not-exist/output.non_ice_error_on_worker_io_fail.*" -> "io error modifying /does-not-exist/" + + // On Linux, we get an error like the below +-// normalize-stderr-test "couldn't create a temp dir.*" -> "io error modifying /dev/" ++// normalize-stderr-test "couldn't create a temp dir.*" -> "io error modifying /does-not-exist/" + + // ignore-tidy-linelength + // ignore-windows - this is a unix-specific test +diff --git a/src/test/ui/non-ice-error-on-worker-io-fail.stderr b/src/test/ui/non-ice-error-on-worker-io-fail.stderr +index f732abc52b71..edadecf273a7 100644 +--- a/src/test/ui/non-ice-error-on-worker-io-fail.stderr ++++ b/src/test/ui/non-ice-error-on-worker-io-fail.stderr +@@ -1,6 +1,6 @@ + warning: ignoring --out-dir flag due to -o flag + +-error: io error modifying /dev/ ++error: io error modifying /does-not-exist/ + + error: aborting due to previous error + +-- +2.26.2 + diff --git a/SOURCES/rustc-1.39.0-disable-libssh2.patch b/SOURCES/rustc-1.39.0-disable-libssh2.patch deleted file mode 100644 index fdcdcc3..0000000 --- a/SOURCES/rustc-1.39.0-disable-libssh2.patch +++ /dev/null @@ -1,42 +0,0 @@ ---- rustc-1.39.0-src/Cargo.lock.orig 2019-11-04 07:45:21.000000000 -0800 -+++ rustc-1.39.0-src/Cargo.lock 2019-11-08 13:25:37.743377197 -0800 -@@ -1697,7 +1697,6 @@ - dependencies = [ - "cc", - "libc", -- "libssh2-sys", - "libz-sys", - "openssl-sys", - "pkg-config", -@@ -1714,20 +1713,6 @@ - ] - - [[package]] --name = "libssh2-sys" --version = "0.2.11" --source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "126a1f4078368b163bfdee65fbab072af08a1b374a5551b21e87ade27b1fbf9d" --dependencies = [ -- "cc", -- "libc", -- "libz-sys", -- "openssl-sys", -- "pkg-config", -- "vcpkg", --] -- --[[package]] - name = "libz-sys" - version = "1.0.25" - source = "registry+https://github.com/rust-lang/crates.io-index" ---- rustc-1.39.0-src/vendor/git2/Cargo.toml.orig 2019-11-04 09:34:41.000000000 -0800 -+++ rustc-1.39.0-src/vendor/git2/Cargo.toml 2019-11-08 13:25:13.174904479 -0800 -@@ -55,7 +55,7 @@ - version = "0.1.39" - - [features] --default = ["ssh", "https", "ssh_key_from_memory"] -+default = ["https"] - https = ["libgit2-sys/https", "openssl-sys", "openssl-probe"] - ssh = ["libgit2-sys/ssh"] - ssh_key_from_memory = ["libgit2-sys/ssh_key_from_memory"] diff --git a/SOURCES/rustc-1.42.0-disable-libssh2.patch b/SOURCES/rustc-1.42.0-disable-libssh2.patch new file mode 100644 index 0000000..770ad34 --- /dev/null +++ b/SOURCES/rustc-1.42.0-disable-libssh2.patch @@ -0,0 +1,42 @@ +--- rustc-1.42.0-src/Cargo.lock.orig 2020-03-09 15:11:17.000000000 -0700 ++++ rustc-1.42.0-src/Cargo.lock 2020-04-02 16:39:22.268896227 -0700 +@@ -1796,7 +1796,6 @@ + dependencies = [ + "cc", + "libc", +- "libssh2-sys", + "libz-sys", + "openssl-sys", + "pkg-config", +@@ -1813,20 +1812,6 @@ + ] + + [[package]] +-name = "libssh2-sys" +-version = "0.2.14" +-source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "36aa6e813339d3a063292b77091dfbbb6152ff9006a459895fa5bebed7d34f10" +-dependencies = [ +- "cc", +- "libc", +- "libz-sys", +- "openssl-sys", +- "pkg-config", +- "vcpkg", +-] +- +-[[package]] + name = "libz-sys" + version = "1.0.25" + source = "registry+https://github.com/rust-lang/crates.io-index" +--- rustc-1.42.0-src/vendor/git2/Cargo.toml.orig 2020-03-09 17:00:19.000000000 -0700 ++++ rustc-1.42.0-src/vendor/git2/Cargo.toml 2020-04-02 16:38:46.163664007 -0700 +@@ -55,7 +55,7 @@ + version = "0.1.39" + + [features] +-default = ["ssh", "https", "ssh_key_from_memory"] ++default = ["https"] + https = ["libgit2-sys/https", "openssl-sys", "openssl-probe"] + ssh = ["libgit2-sys/ssh"] + ssh_key_from_memory = ["libgit2-sys/ssh_key_from_memory"] diff --git a/SPECS/rust.spec b/SPECS/rust.spec index e147b59..b195df6 100644 --- a/SPECS/rust.spec +++ b/SPECS/rust.spec @@ -10,10 +10,10 @@ # e.g. 1.10.0 wants rustc: 1.9.0-2016-05-24 # or nightly wants some beta-YYYY-MM-DD # Note that cargo matches the program version here, not its crate version. -%global bootstrap_rust 1.38.0 -%global bootstrap_cargo 1.38.0 -%global bootstrap_channel 1.38.0 -%global bootstrap_date 2019-09-26 +%global bootstrap_rust 1.42.0 +%global bootstrap_cargo 1.42.0 +%global bootstrap_channel 1.42.0 +%global bootstrap_date 2020-03-12 # Only the specified arches will use bootstrap binaries. #global bootstrap_arches %%{rust_arches} @@ -22,7 +22,7 @@ %bcond_with llvm_static # We can also choose to just use Rust's bundled LLVM, in case the system LLVM -# is insufficient. Rust currently requires LLVM 6.0+. +# is insufficient. Rust currently requires LLVM 7.0+. %if 0%{?rhel} && 0%{?rhel} <= 6 && !0%{?epel} %bcond_without bundled_llvm %else @@ -49,8 +49,8 @@ %endif Name: rust -Version: 1.39.0 -Release: 2%{?dist} +Version: 1.43.1 +Release: 1%{?dist} Summary: The Rust Programming Language License: (ASL 2.0 or MIT) and (BSD and MIT) # ^ written as: (rust itself) and (bundled libraries) @@ -68,20 +68,21 @@ Source0: https://static.rust-lang.org/dist/%{rustc_package}.tar.xz # We do have the necessary fix in our LLVM 7. Patch1: rust-pr57840-llvm7-debuginfo-variants.patch -# Reduce the size of rust-std -# https://github.com/rust-lang/rust/pull/65474 -Patch2: rust-pr65474-split-rustc-dev.patch +# Ensure LLVM is in the link path for rustc tools and "fulldeps" tests +# https://github.com/rust-lang/rust/pull/70123 +# https://github.com/rust-lang/rust/pull/70591 +Patch2: rust-pr70123-ensure-llvm-is-in-the-link-path.patch +Patch3: rust-pr70591-ensure-llvm-is-in-the-link-path.patch -# Fix conflicting libraries of rustc tools -# https://github.com/rust-lang/rust/commit/73369f32621f6a844a80a8513ae3ded901e4a406 -Patch3: 0001-Hopefully-fix-rustdoc-build.patch +# Prepare for LLVM 10 upgrade +# https://github.com/rust-lang/rust/pull/70163 +Patch4: rust-pr70163-prepare-for-llvm-10-upgrade.patch -# Fix the bindir used by rustdoc to find rustc -# https://github.com/rust-lang/rust/pull/66317 -Patch4: rust-pr66317-bindir-relative.patch +# https://github.com/rust-lang/rust/pull/71782 +Patch5: rust-pr71782-Use-a-non-existent-test-path.patch # Disable cargo->libgit2->libssh2, as it's not approved for FIPS (rhbz1732949) -Patch10: rustc-1.39.0-disable-libssh2.patch +Patch10: rustc-1.42.0-disable-libssh2.patch # Get the Rust triple for any arch. %{lua: function rust_triple(arch) @@ -167,7 +168,7 @@ BuildRequires: %{python} %if %with bundled_llvm BuildRequires: cmake3 >= 3.4.3 -Provides: bundled(llvm) = 8.0.0 +Provides: bundled(llvm) = 9.0.0 %else BuildRequires: cmake >= 2.8.11 %if 0%{?epel} @@ -179,7 +180,7 @@ BuildRequires: cmake >= 2.8.11 %global llvm llvm %global llvm_root %{_prefix} %endif -BuildRequires: %{llvm}-devel >= 6.0 +BuildRequires: %{llvm}-devel >= 7.0 %if %with llvm_static BuildRequires: %{llvm}-static BuildRequires: libffi-devel @@ -194,7 +195,6 @@ BuildRequires: gdb # TODO: work on unbundling these! Provides: bundled(libbacktrace) = 8.1.0 -Provides: bundled(miniz) = 2.0.7 # Virtual provides for folks who attempt "dnf install rustc" Provides: rustc = %{version}-%{release} @@ -305,10 +305,10 @@ its standard library. %package -n cargo Summary: Rust's package manager and build tool %if %with bundled_libgit2 -Provides: bundled(libgit2) = 0.28.2 +Provides: bundled(libgit2) = 0.99.0 %endif %if %with bundled_libssh2 -Provides: bundled(libssh2) = 1.8.1~dev +Provides: bundled(libssh2) = 1.9.0~dev %endif # For tests: BuildRequires: git @@ -351,10 +351,10 @@ A tool for formatting Rust code according to style guidelines. %package -n rls Summary: Rust Language Server for IDE integration %if %with bundled_libgit2 -Provides: bundled(libgit2) = 0.28.2 +Provides: bundled(libgit2) = 0.99.0 %endif %if %with bundled_libssh2 -Provides: bundled(libssh2) = 1.8.1~dev +Provides: bundled(libssh2) = 1.9.0~dev %endif Requires: rust-analysis # /usr/bin/rls is dynamically linked against internal rustc libs @@ -420,6 +420,7 @@ test -f '%{local_rust_root}/bin/rustc' %patch2 -p1 %patch3 -p1 %patch4 -p1 +%patch5 -p1 %if %with disabled_libssh2 %patch10 -p1 @@ -433,9 +434,6 @@ sed -i.try-py3 -e '/try python2.7/i try %{python} "$@"' ./configure rm -rf src/llvm-project/ %endif -# We never enable emscripten. -rm -rf src/llvm-emscripten/ - # Remove other unused vendored libraries rm -rf vendor/curl-sys/curl/ rm -rf vendor/jemalloc-sys/jemalloc/ @@ -643,7 +641,6 @@ rm -f %{buildroot}%{rustlibdir}/etc/lldb_*.py* %dir %{rustlibdir}/%{rust_triple} %dir %{rustlibdir}/%{rust_triple}/lib %{rustlibdir}/%{rust_triple}/lib/*.so -%{rustlibdir}/%{rust_triple}/codegen-backends/ %exclude %{_bindir}/*miri @@ -736,6 +733,27 @@ rm -f %{buildroot}%{rustlibdir}/etc/lldb_*.py* %changelog +* Thu May 07 2020 Josh Stone - 1.43.1-1 +- Update to 1.43.1. + +* Thu Apr 23 2020 Josh Stone - 1.43.0-1 +- Update to 1.43.0. + +* Thu Mar 12 2020 Josh Stone - 1.42.0-1 +- Update to 1.42.0. + +* Thu Feb 27 2020 Josh Stone - 1.41.1-1 +- Update to 1.41.1. + +* Thu Jan 30 2020 Josh Stone - 1.41.0-1 +- Update to 1.41.0. + +* Thu Jan 16 2020 Josh Stone - 1.40.0-1 +- Update to 1.40.0. +- Fix compiletest with newer (local-rebuild) libtest +- Build compiletest with in-tree libtest +- Fix ARM EHABI unwinding + * Tue Nov 12 2019 Josh Stone - 1.39.0-2 - Fix a couple build and test issues with rustdoc.