commit a0b3e8f7bb6989cecf4b47ecd37a83fc5851e8b3 Author: CentOS Sources Date: Fri Jul 26 14:49:54 2019 -0400 import rust-1.35.0-2.module+el8.1.0+3283+147a0f76 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..574a930 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/rustc-1.35.0-src.tar.xz diff --git a/.rust.metadata b/.rust.metadata new file mode 100644 index 0000000..9748f36 --- /dev/null +++ b/.rust.metadata @@ -0,0 +1 @@ +50cece3a9a40909c1042344e380e50681365e808 SOURCES/rustc-1.35.0-src.tar.xz diff --git a/SOURCES/0001-Limit-internalization-in-LLVM-8-ThinLTO.patch b/SOURCES/0001-Limit-internalization-in-LLVM-8-ThinLTO.patch new file mode 100644 index 0000000..3c09947 --- /dev/null +++ b/SOURCES/0001-Limit-internalization-in-LLVM-8-ThinLTO.patch @@ -0,0 +1,29 @@ +From b4131e297e18fde119f6f461b3e622218166b009 Mon Sep 17 00:00:00 2001 +From: Josh Stone +Date: Fri, 26 Apr 2019 08:58:14 -0700 +Subject: [PATCH] Limit internalization in LLVM 8 ThinLTO + +--- + src/rustllvm/PassWrapper.cpp | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/src/rustllvm/PassWrapper.cpp b/src/rustllvm/PassWrapper.cpp +index 319c66a21f17..0ebef82d3768 100644 +--- a/src/rustllvm/PassWrapper.cpp ++++ b/src/rustllvm/PassWrapper.cpp +@@ -873,8 +873,11 @@ LLVMRustCreateThinLTOData(LLVMRustThinLTOModule *modules, + return PrevailingType::Unknown; + }; + #if LLVM_VERSION_GE(8, 0) ++ // We don't have a complete picture in our use of ThinLTO, just our immediate ++ // crate, so we need `ImportEnabled = false` to limit internalization. ++ // Otherwise, we sometimes lose `static` values -- see #60184. + computeDeadSymbolsWithConstProp(Ret->Index, Ret->GUIDPreservedSymbols, +- deadIsPrevailing, /* ImportEnabled = */ true); ++ deadIsPrevailing, /* ImportEnabled = */ false); + #else + computeDeadSymbols(Ret->Index, Ret->GUIDPreservedSymbols, deadIsPrevailing); + #endif +-- +2.20.1 + diff --git a/SOURCES/0001-bump-bootstrap-fix-compiletest-wrt.-exclude_should_p.patch b/SOURCES/0001-bump-bootstrap-fix-compiletest-wrt.-exclude_should_p.patch new file mode 100644 index 0000000..7ab3801 --- /dev/null +++ b/SOURCES/0001-bump-bootstrap-fix-compiletest-wrt.-exclude_should_p.patch @@ -0,0 +1,24 @@ +From 26e9a81c487f63c734bb7ac1739cdae2da2cb9b1 Mon Sep 17 00:00:00 2001 +From: Mazdak Farrokhzad +Date: Mon, 15 Apr 2019 04:05:37 +0200 +Subject: [PATCH] bump bootstrap; fix compiletest wrt. exclude_should_panic + +--- + src/tools/compiletest/src/main.rs | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/tools/compiletest/src/main.rs b/src/tools/compiletest/src/main.rs +index 9e3c49119dea..431fd7969be0 100644 +--- a/src/tools/compiletest/src/main.rs ++++ b/src/tools/compiletest/src/main.rs +@@ -523,6 +523,7 @@ pub fn run_tests(config: &Config) { + + pub fn test_opts(config: &Config) -> test::TestOpts { + test::TestOpts { ++ exclude_should_panic: false, + filter: config.filter.clone(), + filter_exact: config.filter_exact, + run_ignored: if config.run_ignored { +-- +2.21.0 + diff --git a/SOURCES/rust-pr57840-llvm7-debuginfo-variants.patch b/SOURCES/rust-pr57840-llvm7-debuginfo-variants.patch new file mode 100644 index 0000000..71996bc --- /dev/null +++ b/SOURCES/rust-pr57840-llvm7-debuginfo-variants.patch @@ -0,0 +1,32 @@ +commit ab998a2eeb2bcdc69ce70c814af97f0d1302a404 (from d17f62d857c70508efbf60be41135880bcd2e062) +Merge: d17f62d857c7 9452a8dfa3ba +Author: Mazdak Farrokhzad +Date: Thu Jan 24 00:20:00 2019 +0100 + + Rollup merge of #57840 - tromey:fix-issue-57762, r=nikic + + Fix issue 57762 + + against a stock LLVM 7. LLVM 7 was released without a necessary fix + for a bug in the DWARF discriminant code. + + This patch changes rustc to use the fallback mode on (non-Rust) LLVM 7. + + Closes #57762 + +diff --git a/src/librustc_codegen_llvm/debuginfo/metadata.rs b/src/librustc_codegen_llvm/debuginfo/metadata.rs +index 6deedd0b5ea3..9f63038c3623 100644 +--- a/src/librustc_codegen_llvm/debuginfo/metadata.rs ++++ b/src/librustc_codegen_llvm/debuginfo/metadata.rs +@@ -1164,7 +1164,10 @@ fn use_enum_fallback(cx: &CodegenCx) -> bool { + // On MSVC we have to use the fallback mode, because LLVM doesn't + // lower variant parts to PDB. + return cx.sess().target.target.options.is_like_msvc +- || llvm_util::get_major_version() < 7; ++ // LLVM version 7 did not release with an important bug fix; ++ // but the required patch is in the LLVM 8. Rust LLVM reports ++ // 8 as well. ++ || llvm_util::get_major_version() < 8; + } + + // Describes the members of an enum value: An enum is described as a union of diff --git a/SOURCES/rust-pr61085-fix-ICE-with-incorrect-turbofish.patch b/SOURCES/rust-pr61085-fix-ICE-with-incorrect-turbofish.patch new file mode 100644 index 0000000..9929aaa --- /dev/null +++ b/SOURCES/rust-pr61085-fix-ICE-with-incorrect-turbofish.patch @@ -0,0 +1,229 @@ +From 476732995c2f5dc08e20eb8f9f03c628a48f5f41 Mon Sep 17 00:00:00 2001 +From: Oliver Scherer +Date: Thu, 23 May 2019 17:05:48 +0200 +Subject: [PATCH 1/3] WIP + +--- + src/librustc_typeck/check/mod.rs | 22 +++++++++++----------- + src/test/run-pass/issue-60989.rs | 4 ++++ + 2 files changed, 15 insertions(+), 11 deletions(-) + create mode 100644 src/test/run-pass/issue-60989.rs + +diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs +index 313ed19b945d..088729f12b1e 100644 +--- a/src/librustc_typeck/check/mod.rs ++++ b/src/librustc_typeck/check/mod.rs +@@ -5396,17 +5396,6 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> { + + let tcx = self.tcx; + +- match def { +- Def::Local(nid) | Def::Upvar(nid, ..) => { +- let hid = self.tcx.hir().node_to_hir_id(nid); +- let ty = self.local_ty(span, hid).decl_ty; +- let ty = self.normalize_associated_types_in(span, &ty); +- self.write_ty(hir_id, ty); +- return (ty, def); +- } +- _ => {} +- } +- + let (def, def_id, ty) = self.rewrite_self_ctor(def, span); + let path_segs = AstConv::def_ids_for_path_segments(self, segments, self_ty, def); + +@@ -5469,6 +5458,17 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> { + user_self_ty = None; + } + ++ match def { ++ Def::Local(nid) | Def::Upvar(nid, ..) => { ++ let hid = self.tcx.hir().node_to_hir_id(nid); ++ let ty = self.local_ty(span, hid).decl_ty; ++ let ty = self.normalize_associated_types_in(span, &ty); ++ self.write_ty(hir_id, ty); ++ return (ty, def); ++ } ++ _ => {} ++ } ++ + // Now we have to compare the types that the user *actually* + // provided against the types that were *expected*. If the user + // did not provide any types, then we want to substitute inference +diff --git a/src/test/run-pass/issue-60989.rs b/src/test/run-pass/issue-60989.rs +new file mode 100644 +index 000000000000..efaa74da3baa +--- /dev/null ++++ b/src/test/run-pass/issue-60989.rs +@@ -0,0 +1,4 @@ ++fn main() { ++ let c1 = (); ++ c1::<()>; ++} +-- +2.21.0 + + +From 97f204e6ae43bfe0fed64221d709a194bef728a4 Mon Sep 17 00:00:00 2001 +From: Oliver Scherer +Date: Thu, 23 May 2019 17:21:32 +0200 +Subject: [PATCH 2/3] Make regression test a compile-fail test + +--- + src/test/{run-pass => compile-fail}/issue-60989.rs | 0 + 1 file changed, 0 insertions(+), 0 deletions(-) + rename src/test/{run-pass => compile-fail}/issue-60989.rs (100%) + +diff --git a/src/test/run-pass/issue-60989.rs b/src/test/compile-fail/issue-60989.rs +similarity index 100% +rename from src/test/run-pass/issue-60989.rs +rename to src/test/compile-fail/issue-60989.rs +-- +2.21.0 + + +From 6e81f8205a6d47648d086d26e96bf05e962e3715 Mon Sep 17 00:00:00 2001 +From: Eduard-Mihai Burtescu +Date: Thu, 23 May 2019 19:23:00 +0300 +Subject: [PATCH 3/3] rustc_typeck: don't produce a `DefId` or `Ty` from + `rewrite_self_ctor`, only a `Def`. + +--- + src/librustc_typeck/check/mod.rs | 30 ++++++++++++++++++---------- + src/test/compile-fail/issue-60989.rs | 4 ---- + src/test/ui/issue-60989.rs | 18 +++++++++++++++++ + src/test/ui/issue-60989.stderr | 15 ++++++++++++++ + 4 files changed, 52 insertions(+), 15 deletions(-) + delete mode 100644 src/test/compile-fail/issue-60989.rs + create mode 100644 src/test/ui/issue-60989.rs + create mode 100644 src/test/ui/issue-60989.stderr + +diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs +index 088729f12b1e..b6adcdbf35e9 100644 +--- a/src/librustc_typeck/check/mod.rs ++++ b/src/librustc_typeck/check/mod.rs +@@ -5330,7 +5330,7 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> { + } + + // Rewrite `SelfCtor` to `Ctor` +- pub fn rewrite_self_ctor(&self, def: Def, span: Span) -> (Def, DefId, Ty<'tcx>) { ++ pub fn rewrite_self_ctor(&self, def: Def, span: Span) -> Def { + let tcx = self.tcx; + if let Def::SelfCtor(impl_def_id) = def { + let ty = self.impl_self_ty(span, impl_def_id).ty; +@@ -5340,8 +5340,7 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> { + Some(adt_def) if adt_def.has_ctor() => { + let variant = adt_def.non_enum_variant(); + let ctor_def_id = variant.ctor_def_id.unwrap(); +- let def = Def::Ctor(ctor_def_id, CtorOf::Struct, variant.ctor_kind); +- (def, ctor_def_id, tcx.type_of(ctor_def_id)) ++ Def::Ctor(ctor_def_id, CtorOf::Struct, variant.ctor_kind) + } + _ => { + let mut err = tcx.sess.struct_span_err(span, +@@ -5364,16 +5363,11 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> { + } + err.emit(); + +- (def, impl_def_id, tcx.types.err) ++ def + } + } + } else { +- let def_id = def.def_id(); +- +- // The things we are substituting into the type should not contain +- // escaping late-bound regions, and nor should the base type scheme. +- let ty = tcx.type_of(def_id); +- (def, def_id, ty) ++ def + } + } + +@@ -5396,7 +5390,7 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> { + + let tcx = self.tcx; + +- let (def, def_id, ty) = self.rewrite_self_ctor(def, span); ++ let def = self.rewrite_self_ctor(def, span); + let path_segs = AstConv::def_ids_for_path_segments(self, segments, self_ty, def); + + let mut user_self_ty = None; +@@ -5501,6 +5495,20 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> { + tcx.generics_of(*def_id).has_self + }).unwrap_or(false); + ++ let (def_id, ty) = if let Def::SelfCtor(impl_def_id) = def { ++ // NOTE(eddyb) an error has already been emitted by `rewrite_self_ctor`, ++ // avoid using the wrong type here. This isn't in `rewrite_self_ctor` ++ // itself because that runs too early (see #60989). ++ (impl_def_id, tcx.types.err) ++ } else { ++ let def_id = def.def_id(); ++ ++ // The things we are substituting into the type should not contain ++ // escaping late-bound regions, and nor should the base type scheme. ++ let ty = tcx.type_of(def_id); ++ (def_id, ty) ++ }; ++ + let substs = AstConv::create_substs_for_generic_args( + tcx, + def_id, +diff --git a/src/test/compile-fail/issue-60989.rs b/src/test/compile-fail/issue-60989.rs +deleted file mode 100644 +index efaa74da3baa..000000000000 +--- a/src/test/compile-fail/issue-60989.rs ++++ /dev/null +@@ -1,4 +0,0 @@ +-fn main() { +- let c1 = (); +- c1::<()>; +-} +diff --git a/src/test/ui/issue-60989.rs b/src/test/ui/issue-60989.rs +new file mode 100644 +index 000000000000..930e98bedce8 +--- /dev/null ++++ b/src/test/ui/issue-60989.rs +@@ -0,0 +1,18 @@ ++struct A {} ++struct B {} ++ ++impl From for B { ++ fn from(a: A) -> B { ++ B{} ++ } ++} ++ ++fn main() { ++ let c1 = (); ++ c1::<()>; ++ //~^ ERROR type arguments are not allowed for this type ++ ++ let c1 = A {}; ++ c1::>; ++ //~^ ERROR type arguments are not allowed for this type ++} +diff --git a/src/test/ui/issue-60989.stderr b/src/test/ui/issue-60989.stderr +new file mode 100644 +index 000000000000..55a0b9626df7 +--- /dev/null ++++ b/src/test/ui/issue-60989.stderr +@@ -0,0 +1,15 @@ ++error[E0109]: type arguments are not allowed for this type ++ --> $DIR/issue-60989.rs:12:10 ++ | ++LL | c1::<()>; ++ | ^^ type argument not allowed ++ ++error[E0109]: type arguments are not allowed for this type ++ --> $DIR/issue-60989.rs:16:10 ++ | ++LL | c1::>; ++ | ^^^^^^^ type argument not allowed ++ ++error: aborting due to 2 previous errors ++ ++For more information about this error, try `rustc --explain E0109`. +-- +2.21.0 + diff --git a/SPECS/rust.spec b/SPECS/rust.spec new file mode 100644 index 0000000..10f5522 --- /dev/null +++ b/SPECS/rust.spec @@ -0,0 +1,784 @@ +# Only x86_64 and i686 are Tier 1 platforms at this time. +# https://forge.rust-lang.org/platform-support.html +#global rust_arches x86_64 i686 armv7hl aarch64 ppc64 ppc64le s390x +%global rust_arches x86_64 i686 aarch64 ppc64le s390x + +# The channel can be stable, beta, or nightly +%{!?channel: %global channel stable} + +# To bootstrap from scratch, set the channel and date from src/stage0.txt +# 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.34.0 +%global bootstrap_cargo 1.34.0 +%global bootstrap_channel 1.34.2 +%global bootstrap_date 2019-05-14 + +# Only the specified arches will use bootstrap binaries. +#global bootstrap_arches %%{rust_arches} + +# Using llvm-static may be helpful as an opt-in, e.g. to aid LLVM rebases. +%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 5.0+. +%if 0%{?rhel} && 0%{?rhel} <= 6 && !0%{?epel} +%bcond_without bundled_llvm +%else +%bcond_with bundled_llvm +%endif + +# libgit2-sys expects to use its bundled library, which is sometimes just a +# snapshot of libgit2's master branch. This can mean the FFI declarations +# won't match our released libgit2.so, e.g. having changed struct fields. +# So, tread carefully if you toggle this... +%bcond_without bundled_libgit2 + +%if 0%{?rhel} +%bcond_without bundled_libssh2 +%else +%bcond_with bundled_libssh2 +%endif + +# LLDB isn't available everywhere... +%if !0%{?rhel} || 0%{?rhel} > 7 +%bcond_without lldb +%else +%bcond_with lldb +%endif + +Name: rust +Version: 1.35.0 +Release: 2%{?dist} +Summary: The Rust Programming Language +License: (ASL 2.0 or MIT) and (BSD and MIT) +# ^ written as: (rust itself) and (bundled libraries) +URL: https://www.rust-lang.org +ExclusiveArch: %{rust_arches} + +%if "%{channel}" == "stable" +%global rustc_package rustc-%{version}-src +%else +%global rustc_package rustc-%{channel}-src +%endif +Source0: https://static.rust-lang.org/dist/%{rustc_package}.tar.xz + +# Revert https://github.com/rust-lang/rust/pull/57840 +# We do have the necessary fix in our LLVM 7. +Patch1: rust-pr57840-llvm7-debuginfo-variants.patch + +# https://github.com/rust-lang/rust/pull/60313 +Patch2: 0001-Limit-internalization-in-LLVM-8-ThinLTO.patch + +# https://github.com/rust-lang/rust/pull/61085 +Patch3: rust-pr61085-fix-ICE-with-incorrect-turbofish.patch + +# https://github.com/rust-lang/rust/pull/59974/commits/26e9a81c487f63c734bb7ac1739cdae2da2cb9b1 +Patch4: 0001-bump-bootstrap-fix-compiletest-wrt.-exclude_should_p.patch + +# Get the Rust triple for any arch. +%{lua: function rust_triple(arch) + local abi = "gnu" + if arch == "armv7hl" then + arch = "armv7" + abi = "gnueabihf" + elseif arch == "ppc64" then + arch = "powerpc64" + elseif arch == "ppc64le" then + arch = "powerpc64le" + end + return arch.."-unknown-linux-"..abi +end} + +%global rust_triple %{lua: print(rust_triple(rpm.expand("%{_target_cpu}")))} + +%if %defined bootstrap_arches +# For each bootstrap arch, add an additional binary Source. +# Also define bootstrap_source just for the current target. +%{lua: do + local bootstrap_arches = {} + for arch in string.gmatch(rpm.expand("%{bootstrap_arches}"), "%S+") do + table.insert(bootstrap_arches, arch) + end + local base = rpm.expand("https://static.rust-lang.org/dist/%{bootstrap_date}" + .."/rust-%{bootstrap_channel}") + local target_arch = rpm.expand("%{_target_cpu}") + for i, arch in ipairs(bootstrap_arches) do + print(string.format("Source%d: %s-%s.tar.xz\n", + i, base, rust_triple(arch))) + if arch == target_arch then + rpm.define("bootstrap_source "..i) + end + end +end} +%endif + +%ifarch %{bootstrap_arches} +%global bootstrap_root rust-%{bootstrap_channel}-%{rust_triple} +%global local_rust_root %{_builddir}/%{bootstrap_root}/usr +Provides: bundled(%{name}-bootstrap) = %{bootstrap_rust} +%else +BuildRequires: cargo >= %{bootstrap_cargo} +%if 0%{?fedora} >= 27 || 0%{?rhel} > 7 +BuildRequires: (%{name} >= %{bootstrap_rust} with %{name} <= %{version}) +%else +BuildRequires: %{name} >= %{bootstrap_rust} +BuildConflicts: %{name} > %{version} +%endif +%global local_rust_root %{_prefix} +%endif + +BuildRequires: make +BuildRequires: gcc +BuildRequires: gcc-c++ +BuildRequires: ncurses-devel +BuildRequires: curl +BuildRequires: pkgconfig(libcurl) +BuildRequires: pkgconfig(liblzma) +BuildRequires: pkgconfig(openssl) +BuildRequires: pkgconfig(zlib) + +%if %without bundled_libgit2 +BuildRequires: pkgconfig(libgit2) >= 0.27 +%endif + +%if %without bundled_libssh2 +# needs libssh2_userauth_publickey_frommemory +BuildRequires: pkgconfig(libssh2) >= 1.6.0 +%endif + +%if 0%{?rhel} +%if 0%{?rhel} <= 7 +%global python python2 +%else +%global python /usr/libexec/platform-python +%endif +%else +%global python python3 +%endif +BuildRequires: %{python} + +%if %with bundled_llvm +BuildRequires: cmake3 >= 3.4.3 +Provides: bundled(llvm) = 8.0.0~svn +%else +BuildRequires: cmake >= 2.8.11 +%if 0%{?epel} +%global llvm llvm7.0 +%endif +%if %defined llvm +%global llvm_root %{_libdir}/%{llvm} +%else +%global llvm llvm +%global llvm_root %{_prefix} +%endif +BuildRequires: %{llvm}-devel >= 6.0 +%if %with llvm_static +BuildRequires: %{llvm}-static +BuildRequires: libffi-devel +%endif +%endif + +# make check needs "ps" for src/test/run-pass/wait-forked-but-failed-child.rs +BuildRequires: procps-ng + +# debuginfo-gdb tests need gdb +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} +Provides: rustc%{?_isa} = %{version}-%{release} + +# Always require our exact standard library +Requires: %{name}-std-static%{?_isa} = %{version}-%{release} + +# The C compiler is needed at runtime just for linking. Someday rustc might +# invoke the linker directly, and then we'll only need binutils. +# https://github.com/rust-lang/rust/issues/11937 +Requires: /usr/bin/cc + +# ALL Rust libraries are private, because they don't keep an ABI. +%global _privatelibs lib(.*-[[:xdigit:]]{16}*|rustc.*)[.]so.* +%global __provides_exclude ^(%{_privatelibs})$ +%global __requires_exclude ^(%{_privatelibs})$ +%global __provides_exclude_from ^(%{_docdir}|%{rustlibdir}/src)/.*$ +%global __requires_exclude_from ^(%{_docdir}|%{rustlibdir}/src)/.*$ + +# While we don't want to encourage dynamic linking to Rust shared libraries, as +# there's no stable ABI, we still need the unallocated metadata (.rustc) to +# support custom-derive plugins like #[proc_macro_derive(Foo)]. But eu-strip is +# very eager by default, so we have to limit it to -g, only debugging symbols. +%if 0%{?fedora} >= 27 || 0%{?rhel} > 7 +# Newer find-debuginfo.sh supports --keep-section, which is preferable. rhbz1465997 +%global _find_debuginfo_opts --keep-section .rustc +%else +%global _find_debuginfo_opts -g +%undefine _include_minidebuginfo +%endif + +# Use hardening ldflags. +%global rustflags -Clink-arg=-Wl,-z,relro,-z,now + +%if %{without bundled_llvm} +%if "%{llvm_root}" == "%{_prefix}" || 0%{?scl:1} +%global llvm_has_filecheck 1 +%endif +%endif + +%description +Rust is a systems programming language that runs blazingly fast, prevents +segfaults, and guarantees thread safety. + +This package includes the Rust compiler and documentation generator. + + +%package std-static +Summary: Standard library for Rust + +%description std-static +This package includes the standard libraries for building applications +written in Rust. + + +%package debugger-common +Summary: Common debugger pretty printers for Rust +BuildArch: noarch + +%description debugger-common +This package includes the common functionality for %{name}-gdb and %{name}-lldb. + + +%package gdb +Summary: GDB pretty printers for Rust +BuildArch: noarch +Requires: gdb +Requires: %{name}-debugger-common = %{version}-%{release} + +%description gdb +This package includes the rust-gdb script, which allows easier debugging of Rust +programs. + + +%if %with lldb + +%package lldb +Summary: LLDB pretty printers for Rust +BuildArch: noarch +Requires: lldb +Requires: python3-lldb +Requires: %{name}-debugger-common = %{version}-%{release} + +%description lldb +This package includes the rust-lldb script, which allows easier debugging of Rust +programs. + +%endif + + +%package doc +Summary: Documentation for Rust +# NOT BuildArch: noarch +# Note, while docs are mostly noarch, some things do vary by target_arch. +# Koji will fail the build in rpmdiff if two architectures build a noarch +# subpackage differently, so instead we have to keep its arch. + +%description doc +This package includes HTML documentation for the Rust programming language and +its standard library. + + +%package -n cargo +Summary: Rust's package manager and build tool +%if %with bundled_libgit2 +Provides: bundled(libgit2) = 0.27 +%endif +%if %with bundled_libssh2 +Provides: bundled(libssh2) = 1.8.1~dev +%endif +# For tests: +BuildRequires: git +# Cargo is not much use without Rust +Requires: rust + +%description -n cargo +Cargo is a tool that allows Rust projects to declare their various dependencies +and ensure that you'll always get a repeatable build. + + +%package -n cargo-doc +Summary: Documentation for Cargo +BuildArch: noarch +# Cargo no longer builds its own documentation +# https://github.com/rust-lang/cargo/pull/4904 +Requires: rust-doc = %{version}-%{release} + +%description -n cargo-doc +This package includes HTML documentation for Cargo. + + +%package -n rustfmt +Summary: Tool to find and fix Rust formatting issues +Requires: cargo + +# The component/package was rustfmt-preview until Rust 1.31. +Obsoletes: rustfmt-preview < 1.0.0 +Provides: rustfmt-preview = %{version}-%{release} + +%description -n rustfmt +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.27 +%endif +%if %with bundled_libssh2 +Provides: bundled(libssh2) = 1.8.1~dev +%endif +Requires: rust-analysis +# /usr/bin/rls is dynamically linked against internal rustc libs +Requires: %{name}%{?_isa} = %{version}-%{release} + +# The component/package was rls-preview until Rust 1.31. +Obsoletes: rls-preview < 1.31.6 +Provides: rls-preview = %{version}-%{release} + +%description -n rls +The Rust Language Server provides a server that runs in the background, +providing IDEs, editors, and other tools with information about Rust programs. +It supports functionality such as 'goto definition', symbol search, +reformatting, and code completion, and enables renaming and refactorings. + + +%package -n clippy +Summary: Lints to catch common mistakes and improve your Rust code +Requires: cargo +# /usr/bin/clippy-driver is dynamically linked against internal rustc libs +Requires: %{name}%{?_isa} = %{version}-%{release} + +# The component/package was clippy-preview until Rust 1.31. +Obsoletes: clippy-preview <= 0.0.212 +Provides: clippy-preview = %{version}-%{release} + +%description -n clippy +A collection of lints to catch common mistakes and improve your Rust code. + + +%package src +Summary: Sources for the Rust standard library +BuildArch: noarch + +%description src +This package includes source files for the Rust standard library. It may be +useful as a reference for code completion tools in various editors. + + +%package analysis +Summary: Compiler analysis data for the Rust standard library +Requires: rust-std-static%{?_isa} = %{version}-%{release} + +%description analysis +This package contains analysis data files produced with rustc's -Zsave-analysis +feature for the Rust standard library. The RLS (Rust Language Server) uses this +data to provide information about the Rust standard library. + + +%prep + +%ifarch %{bootstrap_arches} +%setup -q -n %{bootstrap_root} -T -b %{bootstrap_source} +./install.sh --components=cargo,rustc,rust-std-%{rust_triple} \ + --prefix=%{local_rust_root} --disable-ldconfig +test -f '%{local_rust_root}/bin/cargo' +test -f '%{local_rust_root}/bin/rustc' +%endif + +%setup -q -n %{rustc_package} + +%patch1 -p1 -R +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 + +%if "%{python}" != "python2" +sed -i.try-py3 -e '/try python2.7/i try %{python} "$@"' ./configure +%endif + +%if %without bundled_llvm +rm -rf src/llvm-project/ +%endif + +# We never enable emscripten. +rm -rf src/llvm-emscripten/ + +# rename bundled license for packaging +cp -a vendor/backtrace-sys/src/libbacktrace/LICENSE{,-libbacktrace} + +%if %{with bundled_llvm} && 0%{?epel} +mkdir -p cmake-bin +ln -s /usr/bin/cmake3 cmake-bin/cmake +%global cmake_path $PWD/cmake-bin +%endif + +%if %{without bundled_llvm} && %{with llvm_static} +# Static linking to distro LLVM needs to add -lffi +# https://github.com/rust-lang/rust/issues/34486 +sed -i.ffi -e '$a #[link(name = "ffi")] extern {}' \ + src/librustc_llvm/lib.rs +%endif + +# The configure macro will modify some autoconf-related files, which upsets +# cargo when it tries to verify checksums in those files. If we just truncate +# that file list, cargo won't have anything to complain about. +find vendor -name .cargo-checksum.json \ + -exec sed -i.uncheck -e 's/"files":{[^}]*}/"files":{ }/' '{}' '+' + + +%build + +%if %without bundled_libgit2 +# convince libgit2-sys to use the distro libgit2 +export LIBGIT2_SYS_USE_PKG_CONFIG=1 +%endif + +%if %without bundled_libssh2 +# convince libssh2-sys to use the distro libssh2 +export LIBSSH2_SYS_USE_PKG_CONFIG=1 +%endif + +%{?cmake_path:export PATH=%{cmake_path}:$PATH} +%{?rustflags:export RUSTFLAGS="%{rustflags}"} + +# We're going to override --libdir when configuring to get rustlib into a +# common path, but we'll fix the shared libraries during install. +%global common_libdir %{_prefix}/lib +%global rustlibdir %{common_libdir}/rustlib + +%ifarch %{arm} %{ix86} s390x +# full debuginfo is exhausting memory; just do libstd for now +# https://github.com/rust-lang/rust/issues/45854 +%if (0%{?fedora} && 0%{?fedora} < 27) || (0%{?rhel} && 0%{?rhel} <= 7) +# Older rpmbuild didn't work with partial debuginfo coverage. +%global debug_package %{nil} +%define enable_debuginfo --disable-debuginfo --disable-debuginfo-only-std --disable-debuginfo-tools --disable-debuginfo-lines +%else +%define enable_debuginfo --enable-debuginfo --enable-debuginfo-only-std --disable-debuginfo-tools --disable-debuginfo-lines +%endif +%else +%define enable_debuginfo --enable-debuginfo --disable-debuginfo-only-std --enable-debuginfo-tools --disable-debuginfo-lines +%endif + +# We want the best optimization for std, but it caused problems for rpm-ostree +# on ppc64le to have all of the compiler_builtins in a single object: +# https://bugzilla.redhat.com/show_bug.cgi?id=1713090 +%ifnarch %{power64} +%define codegen_units_std --set rust.codegen-units-std=1 +%endif + +%configure --disable-option-checking \ + --libdir=%{common_libdir} \ + --build=%{rust_triple} --host=%{rust_triple} --target=%{rust_triple} \ + --local-rust-root=%{local_rust_root} \ + %{!?with_bundled_llvm: --llvm-root=%{llvm_root} \ + %{!?llvm_has_filecheck: --disable-codegen-tests} \ + %{!?with_llvm_static: --enable-llvm-link-shared } } \ + --disable-rpath \ + %{enable_debuginfo} \ + --enable-extended \ + --enable-vendor \ + --enable-verbose-tests \ + %{?codegen_units_std} \ + --release-channel=%{channel} + +%{python} ./x.py build +%{python} ./x.py doc + + +%install +%{?cmake_path:export PATH=%{cmake_path}:$PATH} +%{?rustflags:export RUSTFLAGS="%{rustflags}"} + +DESTDIR=%{buildroot} %{python} ./x.py install + +# Make sure the shared libraries are in the proper libdir +%if "%{_libdir}" != "%{common_libdir}" +mkdir -p %{buildroot}%{_libdir} +find %{buildroot}%{common_libdir} -maxdepth 1 -type f -name '*.so' \ + -exec mv -v -t %{buildroot}%{_libdir} '{}' '+' +%endif + +# The shared libraries should be executable for debuginfo extraction. +find %{buildroot}%{_libdir} -maxdepth 1 -type f -name '*.so' \ + -exec chmod -v +x '{}' '+' + +# The libdir libraries are identical to those under rustlib/. It's easier on +# library loading if we keep them in libdir, but we do need them in rustlib/ +# to support dynamic linking for compiler plugins, so we'll symlink. +(cd "%{buildroot}%{rustlibdir}/%{rust_triple}/lib" && + find ../../../../%{_lib} -maxdepth 1 -name '*.so' | + while read lib; do + # make sure they're actually identical! + cmp "$lib" "${lib##*/}" + ln -v -f -s -t . "$lib" + done) + +# Remove installer artifacts (manifests, uninstall scripts, etc.) +find %{buildroot}%{rustlibdir} -maxdepth 1 -type f -exec rm -v '{}' '+' + +# Remove backup files from %%configure munging +find %{buildroot}%{rustlibdir} -type f -name '*.orig' -exec rm -v '{}' '+' + +# https://fedoraproject.org/wiki/Changes/Make_ambiguous_python_shebangs_error +# We don't actually need to ship any of those python scripts in rust-src anyway. +find %{buildroot}%{rustlibdir}/src -type f -name '*.py' -exec rm -v '{}' '+' + +# FIXME: __os_install_post will strip the rlibs +# -- should we find a way to preserve debuginfo? + +# Remove unwanted documentation files (we already package them) +rm -f %{buildroot}%{_docdir}/%{name}/README.md +rm -f %{buildroot}%{_docdir}/%{name}/COPYRIGHT +rm -f %{buildroot}%{_docdir}/%{name}/LICENSE +rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-APACHE +rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-MIT +rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-THIRD-PARTY +rm -f %{buildroot}%{_docdir}/%{name}/*.old + +# Sanitize the HTML documentation +find %{buildroot}%{_docdir}/%{name}/html -empty -delete +find %{buildroot}%{_docdir}/%{name}/html -type f -exec chmod -x '{}' '+' + +# Create the path for crate-devel packages +mkdir -p %{buildroot}%{_datadir}/cargo/registry + +# Cargo no longer builds its own documentation +# https://github.com/rust-lang/cargo/pull/4904 +mkdir -p %{buildroot}%{_docdir}/cargo +ln -sT ../rust/html/cargo/ %{buildroot}%{_docdir}/cargo/html + +%if %without lldb +rm -f %{buildroot}%{_bindir}/rust-lldb +rm -f %{buildroot}%{rustlibdir}/etc/lldb_*.py* +%endif + + +%check +%{?cmake_path:export PATH=%{cmake_path}:$PATH} +%{?rustflags:export RUSTFLAGS="%{rustflags}"} + +# The results are not stable on koji, so mask errors and just log it. +%{python} ./x.py test --no-fail-fast || : +%{python} ./x.py test --no-fail-fast cargo || : +%{python} ./x.py test --no-fail-fast clippy || : +%{python} ./x.py test --no-fail-fast rls || : +%{python} ./x.py test --no-fail-fast rustfmt || : + + +%ldconfig_scriptlets + + +%files +%license COPYRIGHT LICENSE-APACHE LICENSE-MIT +%license vendor/backtrace-sys/src/libbacktrace/LICENSE-libbacktrace +%doc README.md +%{_bindir}/rustc +%{_bindir}/rustdoc +%{_libdir}/*.so +%{_mandir}/man1/rustc.1* +%{_mandir}/man1/rustdoc.1* +%dir %{rustlibdir} +%dir %{rustlibdir}/%{rust_triple} +%dir %{rustlibdir}/%{rust_triple}/lib +%{rustlibdir}/%{rust_triple}/lib/*.so +%{rustlibdir}/%{rust_triple}/codegen-backends/ +%exclude %{_bindir}/*miri + + +%files std-static +%dir %{rustlibdir} +%dir %{rustlibdir}/%{rust_triple} +%dir %{rustlibdir}/%{rust_triple}/lib +%{rustlibdir}/%{rust_triple}/lib/*.rlib + + +%files debugger-common +%dir %{rustlibdir} +%dir %{rustlibdir}/etc +%{rustlibdir}/etc/debugger_*.py* + + +%files gdb +%{_bindir}/rust-gdb +%{rustlibdir}/etc/gdb_*.py* +%exclude %{_bindir}/rust-gdbgui + + +%if %with lldb +%files lldb +%{_bindir}/rust-lldb +%{rustlibdir}/etc/lldb_*.py* +%endif + + +%files doc +%docdir %{_docdir}/%{name} +%dir %{_docdir}/%{name} +%dir %{_docdir}/%{name}/html +%{_docdir}/%{name}/html/*/ +%{_docdir}/%{name}/html/*.html +%{_docdir}/%{name}/html/*.css +%{_docdir}/%{name}/html/*.ico +%{_docdir}/%{name}/html/*.js +%{_docdir}/%{name}/html/*.png +%{_docdir}/%{name}/html/*.svg +%{_docdir}/%{name}/html/*.woff +%license %{_docdir}/%{name}/html/*.txt + + +%files -n cargo +%license src/tools/cargo/LICENSE-APACHE src/tools/cargo/LICENSE-MIT src/tools/cargo/LICENSE-THIRD-PARTY +%doc src/tools/cargo/README.md +%{_bindir}/cargo +%{_mandir}/man1/cargo*.1* +%{_sysconfdir}/bash_completion.d/cargo +%{_datadir}/zsh/site-functions/_cargo +%dir %{_datadir}/cargo +%dir %{_datadir}/cargo/registry + + +%files -n cargo-doc +%docdir %{_docdir}/cargo +%dir %{_docdir}/cargo +%{_docdir}/cargo/html + + +%files -n rustfmt +%{_bindir}/rustfmt +%{_bindir}/cargo-fmt +%doc src/tools/rustfmt/{README,CHANGELOG,Configurations}.md +%license src/tools/rustfmt/LICENSE-{APACHE,MIT} + + +%files -n rls +%{_bindir}/rls +%doc src/tools/rls/{README.md,COPYRIGHT,debugging.md} +%license src/tools/rls/LICENSE-{APACHE,MIT} + + +%files -n clippy +%{_bindir}/cargo-clippy +%{_bindir}/clippy-driver +%doc src/tools/clippy/{README.md,CHANGELOG.md} +%license src/tools/clippy/LICENSE-{APACHE,MIT} + + +%files src +%dir %{rustlibdir} +%{rustlibdir}/src + + +%files analysis +%{rustlibdir}/%{rust_triple}/analysis/ + + +%changelog +* Wed May 29 2019 Josh Stone - 1.35.0-2 +- Fix compiletest for rebuild testing. + +* Thu May 23 2019 Josh Stone - 1.35.0-1 +- Update to 1.35.0. + +* Tue May 14 2019 Josh Stone - 1.34.2-1 +- Update to 1.34.2 -- fixes CVE-2019-12083. + +* Thu May 09 2019 Josh Stone - 1.34.1-1 +- Update to 1.34.1. + +* Thu Apr 11 2019 Josh Stone - 1.34.0-1 +- Update to 1.34.0. + +* Wed Apr 10 2019 Josh Stone - 1.33.0-1 +- Update to 1.33.0. + +* Tue Apr 09 2019 Josh Stone - 1.32.0-1 +- Update to 1.32.0. + +* Fri Dec 14 2018 Josh Stone - 1.31.0-5 +- Restore rust-lldb. + +* Thu Dec 13 2018 Josh Stone - 1.31.0-4 +- Backport fixes for rls. + +* Thu Dec 13 2018 Josh Stone - 1.31.0-3 +- Update to 1.31.0 -- Rust 2018! +- clippy/rls/rustfmt are no longer -preview + +* Wed Dec 12 2018 Josh Stone - 1.30.1-2 +- Update to 1.30.1. + +* Tue Nov 06 2018 Josh Stone - 1.29.2-1 +- Update to 1.29.2. + +* Thu Nov 01 2018 Josh Stone - 1.28.0-1 +- Update to 1.28.0. + +* Thu Nov 01 2018 Josh Stone - 1.27.2-1 +- Update to 1.27.2. + +* Wed Oct 10 2018 Josh Stone - 1.26.2-12 +- Fix "fp" target feature for AArch64 (#1632880) + +* Mon Oct 08 2018 Josh Stone - 1.26.2-11 +- Security fix for str::repeat (pending CVE). + +* Fri Oct 05 2018 Josh Stone - 1.26.2-10 +- Rebuild without bootstrap binaries. + +* Thu Oct 04 2018 Josh Stone - 1.26.2-9 +- Bootstrap without SCL packaging. (rhbz1635067) + +* Tue Aug 28 2018 Tom Stellard - 1.26.2-8 +- Use python3 prefix for lldb Requires + +* Mon Aug 13 2018 Josh Stone - 1.26.2-7 +- Build with platform-python + +* Tue Aug 07 2018 Josh Stone - 1.26.2-6 +- Exclude rust-src from auto-requires + +* Thu Aug 02 2018 Josh Stone - 1.26.2-5 +- Rebuild without bootstrap binaries. + +* Tue Jul 31 2018 Josh Stone - 1.26.2-4 +- Bootstrap as a module. + +* Mon Jun 04 2018 Josh Stone - 1.26.2-3 +- Update to 1.26.2. + +* Wed May 30 2018 Josh Stone - 1.26.1-2 +- Update to 1.26.1. + +* Fri May 18 2018 Josh Stone - 1.26.0-1 +- Update to 1.26.0. + +* Tue Apr 10 2018 Josh Stone - 1.25.0-2 +- Filter codegen-backends from Provides too. + +* Tue Apr 03 2018 Josh Stone - 1.25.0-1 +- Update to 1.25.0. +- Add rustfmt-preview as a subpackage. + +* Thu Feb 22 2018 Josh Stone - 1.24.0-1 +- Update to 1.24.0. + +* Tue Jan 16 2018 Josh Stone - 1.23.0-2 +- Rebuild without bootstrap binaries. + +* Mon Jan 15 2018 Josh Stone - 1.23.0-1 +- Bootstrap 1.23 on el8.