diff --git a/0001-Set-more-llvm-function-attributes-for-__rust_try.patch b/0001-Set-more-llvm-function-attributes-for-__rust_try.patch new file mode 100644 index 0000000000000000000000000000000000000000..36bb15c04cc150363654eb5ddf2e034556231402 --- /dev/null +++ b/0001-Set-more-llvm-function-attributes-for-__rust_try.patch @@ -0,0 +1,186 @@ +From 4b95b1a4fd035a73998dc21b265ce4594e35f8ae Mon Sep 17 00:00:00 2001 +From: Alex Crichton +Date: Thu, 16 Aug 2018 13:19:04 -0700 +Subject: [PATCH] Set more llvm function attributes for __rust_try + +This shim is generated elsewhere in the compiler so this commit adds support to +ensure it goes through similar paths as the rest of the compiler to set llvm +function attributes like target features. + +cc #53372 +--- + src/librustc_codegen_llvm/attributes.rs | 52 +++++++++++++++++++------ + src/librustc_codegen_llvm/base.rs | 21 ---------- + src/librustc_codegen_llvm/callee.rs | 2 +- + src/librustc_codegen_llvm/intrinsic.rs | 2 + + src/librustc_codegen_llvm/mono_item.rs | 2 +- + 5 files changed, 44 insertions(+), 35 deletions(-) + +diff --git a/src/librustc_codegen_llvm/attributes.rs b/src/librustc_codegen_llvm/attributes.rs +index 3b5f927d52f0..2a79ce2f2285 100644 +--- a/src/librustc_codegen_llvm/attributes.rs ++++ b/src/librustc_codegen_llvm/attributes.rs +@@ -11,7 +11,7 @@ + + use std::ffi::{CStr, CString}; + +-use rustc::hir::CodegenFnAttrFlags; ++use rustc::hir::{CodegenFnAttrFlags, CodegenFnAttrs}; + use rustc::hir::def_id::{DefId, LOCAL_CRATE}; + use rustc::session::Session; + use rustc::session::config::Sanitizer; +@@ -123,11 +123,37 @@ pub fn llvm_target_features(sess: &Session) -> impl Iterator { + + /// Composite function which sets LLVM attributes for function depending on its AST (#[attribute]) + /// attributes. +-pub fn from_fn_attrs(cx: &CodegenCx, llfn: ValueRef, id: DefId) { +- let codegen_fn_attrs = cx.tcx.codegen_fn_attrs(id); ++pub fn from_fn_attrs( ++ cx: &CodegenCx, ++ llfn: ValueRef, ++ id: Option, ++) { ++ let codegen_fn_attrs = id.map(|id| cx.tcx.codegen_fn_attrs(id)) ++ .unwrap_or(CodegenFnAttrs::new()); + + inline(llfn, codegen_fn_attrs.inline); + ++ // The `uwtable` attribute according to LLVM is: ++ // ++ // This attribute indicates that the ABI being targeted requires that an ++ // unwind table entry be produced for this function even if we can show ++ // that no exceptions passes by it. This is normally the case for the ++ // ELF x86-64 abi, but it can be disabled for some compilation units. ++ // ++ // Typically when we're compiling with `-C panic=abort` (which implies this ++ // `no_landing_pads` check) we don't need `uwtable` because we can't ++ // generate any exceptions! On Windows, however, exceptions include other ++ // events such as illegal instructions, segfaults, etc. This means that on ++ // Windows we end up still needing the `uwtable` attribute even if the `-C ++ // panic=abort` flag is passed. ++ // ++ // You can also find more info on why Windows is whitelisted here in: ++ // https://bugzilla.mozilla.org/show_bug.cgi?id=1302078 ++ if !cx.sess().no_landing_pads() || ++ cx.sess().target.target.options.requires_uwtable { ++ attributes::emit_uwtable(llfn, true); ++ } ++ + set_frame_pointer_elimination(cx, llfn); + set_probestack(cx, llfn); + +@@ -151,7 +177,7 @@ pub fn from_fn_attrs(cx: &CodegenCx, llfn: ValueRef, id: DefId) { + // *in Rust code* may unwind. Foreign items like `extern "C" { + // fn foo(); }` are assumed not to unwind **unless** they have + // a `#[unwind]` attribute. +- } else if !cx.tcx.is_foreign_item(id) { ++ } else if id.map(|id| !cx.tcx.is_foreign_item(id)).unwrap_or(false) { + Some(true) + } else { + None +@@ -188,14 +214,16 @@ pub fn from_fn_attrs(cx: &CodegenCx, llfn: ValueRef, id: DefId) { + // Note that currently the `wasm-import-module` doesn't do anything, but + // eventually LLVM 7 should read this and ferry the appropriate import + // module to the output file. +- if cx.tcx.sess.target.target.arch == "wasm32" { +- if let Some(module) = wasm_import_module(cx.tcx, id) { +- llvm::AddFunctionAttrStringValue( +- llfn, +- llvm::AttributePlace::Function, +- cstr("wasm-import-module\0"), +- &module, +- ); ++ if let Some(id) = id { ++ if cx.tcx.sess.target.target.arch == "wasm32" { ++ if let Some(module) = wasm_import_module(cx.tcx, id) { ++ llvm::AddFunctionAttrStringValue( ++ llfn, ++ llvm::AttributePlace::Function, ++ cstr("wasm-import-module\0"), ++ &module, ++ ); ++ } + } + } + } +diff --git a/src/librustc_codegen_llvm/base.rs b/src/librustc_codegen_llvm/base.rs +index 223c04f420f3..b0461582ddcb 100644 +--- a/src/librustc_codegen_llvm/base.rs ++++ b/src/librustc_codegen_llvm/base.rs +@@ -486,27 +486,6 @@ pub fn codegen_instance<'a, 'tcx>(cx: &CodegenCx<'a, 'tcx>, instance: Instance<' + + cx.stats.borrow_mut().n_closures += 1; + +- // The `uwtable` attribute according to LLVM is: +- // +- // This attribute indicates that the ABI being targeted requires that an +- // unwind table entry be produced for this function even if we can show +- // that no exceptions passes by it. This is normally the case for the +- // ELF x86-64 abi, but it can be disabled for some compilation units. +- // +- // Typically when we're compiling with `-C panic=abort` (which implies this +- // `no_landing_pads` check) we don't need `uwtable` because we can't +- // generate any exceptions! On Windows, however, exceptions include other +- // events such as illegal instructions, segfaults, etc. This means that on +- // Windows we end up still needing the `uwtable` attribute even if the `-C +- // panic=abort` flag is passed. +- // +- // You can also find more info on why Windows is whitelisted here in: +- // https://bugzilla.mozilla.org/show_bug.cgi?id=1302078 +- if !cx.sess().no_landing_pads() || +- cx.sess().target.target.options.requires_uwtable { +- attributes::emit_uwtable(lldecl, true); +- } +- + let mir = cx.tcx.instance_mir(instance.def); + mir::codegen_mir(cx, lldecl, &mir, instance, sig); + } +diff --git a/src/librustc_codegen_llvm/callee.rs b/src/librustc_codegen_llvm/callee.rs +index 2c01bd42cc77..97f07792ede8 100644 +--- a/src/librustc_codegen_llvm/callee.rs ++++ b/src/librustc_codegen_llvm/callee.rs +@@ -97,7 +97,7 @@ pub fn get_fn<'a, 'tcx>(cx: &CodegenCx<'a, 'tcx>, + if instance.def.is_inline(tcx) { + attributes::inline(llfn, attributes::InlineAttr::Hint); + } +- attributes::from_fn_attrs(cx, llfn, instance.def.def_id()); ++ attributes::from_fn_attrs(cx, llfn, Some(instance.def.def_id())); + + let instance_def_id = instance.def_id(); + +diff --git a/src/librustc_codegen_llvm/intrinsic.rs b/src/librustc_codegen_llvm/intrinsic.rs +index 9c5c0f730c16..f69fce15dc55 100644 +--- a/src/librustc_codegen_llvm/intrinsic.rs ++++ b/src/librustc_codegen_llvm/intrinsic.rs +@@ -10,6 +10,7 @@ + + #![allow(non_upper_case_globals)] + ++use attributes; + use intrinsics::{self, Intrinsic}; + use llvm; + use llvm::{ValueRef}; +@@ -936,6 +937,7 @@ fn gen_fn<'a, 'tcx>(cx: &CodegenCx<'a, 'tcx>, + Abi::Rust + ))); + let llfn = declare::define_internal_fn(cx, name, rust_fn_ty); ++ attributes::from_fn_attrs(cx, llfn, None); + let bx = Builder::new_block(cx, llfn, "entry-block"); + codegen(bx); + llfn +diff --git a/src/librustc_codegen_llvm/mono_item.rs b/src/librustc_codegen_llvm/mono_item.rs +index a528008e3b4b..32d8b24e3c15 100644 +--- a/src/librustc_codegen_llvm/mono_item.rs ++++ b/src/librustc_codegen_llvm/mono_item.rs +@@ -183,7 +183,7 @@ fn predefine_fn<'a, 'tcx>(cx: &CodegenCx<'a, 'tcx>, + if instance.def.is_inline(cx.tcx) { + attributes::inline(lldecl, attributes::InlineAttr::Hint); + } +- attributes::from_fn_attrs(cx, lldecl, instance.def.def_id()); ++ attributes::from_fn_attrs(cx, lldecl, Some(instance.def.def_id())); + + cx.instances.borrow_mut().insert(instance, lldecl); + } +-- +2.17.1 + diff --git a/0001-std-stop-backtracing-when-the-frames-are-full.patch b/0001-std-stop-backtracing-when-the-frames-are-full.patch new file mode 100644 index 0000000000000000000000000000000000000000..aa1b9a5130e495f469cfc6a72c1404c69ba35572 --- /dev/null +++ b/0001-std-stop-backtracing-when-the-frames-are-full.patch @@ -0,0 +1,122 @@ +From f4e8d57b6ad6f599de54c020ba185db83cb011a3 Mon Sep 17 00:00:00 2001 +From: Josh Stone +Date: Thu, 16 Aug 2018 11:26:27 -0700 +Subject: [PATCH] std: stop backtracing when the frames are full + +--- + src/libstd/sys/cloudabi/backtrace.rs | 18 ++++++++++-------- + src/libstd/sys/redox/backtrace/tracing.rs | 18 ++++++++++-------- + src/libstd/sys/unix/backtrace/tracing/gcc_s.rs | 18 ++++++++++-------- + 3 files changed, 30 insertions(+), 24 deletions(-) + +diff --git a/src/libstd/sys/cloudabi/backtrace.rs b/src/libstd/sys/cloudabi/backtrace.rs +index 1b970187558c..2c43b5937ce5 100644 +--- a/src/libstd/sys/cloudabi/backtrace.rs ++++ b/src/libstd/sys/cloudabi/backtrace.rs +@@ -64,6 +64,10 @@ extern "C" fn trace_fn( + arg: *mut libc::c_void, + ) -> uw::_Unwind_Reason_Code { + let cx = unsafe { &mut *(arg as *mut Context) }; ++ if cx.idx >= cx.frames.len() { ++ return uw::_URC_NORMAL_STOP; ++ } ++ + let mut ip_before_insn = 0; + let mut ip = unsafe { uw::_Unwind_GetIPInfo(ctx, &mut ip_before_insn) as *mut libc::c_void }; + if !ip.is_null() && ip_before_insn == 0 { +@@ -73,14 +77,12 @@ extern "C" fn trace_fn( + } + + let symaddr = unsafe { uw::_Unwind_FindEnclosingFunction(ip) }; +- if cx.idx < cx.frames.len() { +- cx.frames[cx.idx] = Frame { +- symbol_addr: symaddr as *mut u8, +- exact_position: ip as *mut u8, +- inline_context: 0, +- }; +- cx.idx += 1; +- } ++ cx.frames[cx.idx] = Frame { ++ symbol_addr: symaddr as *mut u8, ++ exact_position: ip as *mut u8, ++ inline_context: 0, ++ }; ++ cx.idx += 1; + + uw::_URC_NO_REASON + } +diff --git a/src/libstd/sys/redox/backtrace/tracing.rs b/src/libstd/sys/redox/backtrace/tracing.rs +index bb70ca360370..c0414b78f8d6 100644 +--- a/src/libstd/sys/redox/backtrace/tracing.rs ++++ b/src/libstd/sys/redox/backtrace/tracing.rs +@@ -68,6 +68,10 @@ pub fn unwind_backtrace(frames: &mut [Frame]) + extern fn trace_fn(ctx: *mut uw::_Unwind_Context, + arg: *mut libc::c_void) -> uw::_Unwind_Reason_Code { + let cx = unsafe { &mut *(arg as *mut Context) }; ++ if cx.idx >= cx.frames.len() { ++ return uw::_URC_NORMAL_STOP; ++ } ++ + let mut ip_before_insn = 0; + let mut ip = unsafe { + uw::_Unwind_GetIPInfo(ctx, &mut ip_before_insn) as *mut libc::c_void +@@ -94,14 +98,12 @@ extern fn trace_fn(ctx: *mut uw::_Unwind_Context, + unsafe { uw::_Unwind_FindEnclosingFunction(ip) } + }; + +- if cx.idx < cx.frames.len() { +- cx.frames[cx.idx] = Frame { +- symbol_addr: symaddr as *mut u8, +- exact_position: ip as *mut u8, +- inline_context: 0, +- }; +- cx.idx += 1; +- } ++ cx.frames[cx.idx] = Frame { ++ symbol_addr: symaddr as *mut u8, ++ exact_position: ip as *mut u8, ++ inline_context: 0, ++ }; ++ cx.idx += 1; + + uw::_URC_NO_REASON + } +diff --git a/src/libstd/sys/unix/backtrace/tracing/gcc_s.rs b/src/libstd/sys/unix/backtrace/tracing/gcc_s.rs +index 1b92fc0e6ad0..6e8415686792 100644 +--- a/src/libstd/sys/unix/backtrace/tracing/gcc_s.rs ++++ b/src/libstd/sys/unix/backtrace/tracing/gcc_s.rs +@@ -68,6 +68,10 @@ pub fn unwind_backtrace(frames: &mut [Frame]) + extern fn trace_fn(ctx: *mut uw::_Unwind_Context, + arg: *mut libc::c_void) -> uw::_Unwind_Reason_Code { + let cx = unsafe { &mut *(arg as *mut Context) }; ++ if cx.idx >= cx.frames.len() { ++ return uw::_URC_NORMAL_STOP; ++ } ++ + let mut ip_before_insn = 0; + let mut ip = unsafe { + uw::_Unwind_GetIPInfo(ctx, &mut ip_before_insn) as *mut libc::c_void +@@ -94,14 +98,12 @@ extern fn trace_fn(ctx: *mut uw::_Unwind_Context, + unsafe { uw::_Unwind_FindEnclosingFunction(ip) } + }; + +- if cx.idx < cx.frames.len() { +- cx.frames[cx.idx] = Frame { +- symbol_addr: symaddr as *mut u8, +- exact_position: ip as *mut u8, +- inline_context: 0, +- }; +- cx.idx += 1; +- } ++ cx.frames[cx.idx] = Frame { ++ symbol_addr: symaddr as *mut u8, ++ exact_position: ip as *mut u8, ++ inline_context: 0, ++ }; ++ cx.idx += 1; + + uw::_URC_NO_REASON + } +-- +2.17.1 + diff --git a/rust-52876-const-endianess.patch b/rust-52876-const-endianess.patch new file mode 100644 index 0000000000000000000000000000000000000000..1e844e8274b84540ecf9fb25e64d0782da9f68f9 --- /dev/null +++ b/rust-52876-const-endianess.patch @@ -0,0 +1,26 @@ +From 1ea2765918d1212a07e1359537470c477d82a681 Mon Sep 17 00:00:00 2001 +From: Josh Stone +Date: Mon, 30 Jul 2018 13:08:56 -0700 +Subject: [PATCH] run-pass/const-endianness: negate before to_le() + +`const LE_I128` needs parentheses to negate the value *before* calling +`to_le()`, otherwise it doesn't match the operations performed in the +black-boxed part of the test. This only makes a tangible difference on +big-endian targets. +--- + src/test/run-pass/const-endianess.rs | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/test/run-pass/const-endianess.rs b/src/test/run-pass/const-endianess.rs +index fa34b49210a6..95c738d3ec49 100644 +--- a/src/test/run-pass/const-endianess.rs ++++ b/src/test/run-pass/const-endianess.rs +@@ -25,7 +25,7 @@ fn main() { + #[cfg(not(target_arch = "asmjs"))] + { + const BE_U128: u128 = 999999u128.to_be(); +- const LE_I128: i128 = -999999i128.to_le(); ++ const LE_I128: i128 = (-999999i128).to_le(); + assert_eq!(BE_U128, b(999999u128).to_be()); + assert_eq!(LE_I128, b(-999999i128).to_le()); + } diff --git a/rust.spec b/rust.spec index fd49d48726478590eb7af13a3d478210af162ee8..67cc7bb854984f6fc7a4265b15d8bd13b69711a8 100644 --- a/rust.spec +++ b/rust.spec @@ -1,327 +1,226 @@ -%{!?channel: %global channel stable} -%global bootstrap_rust 1.44.0 -%global bootstrap_cargo 1.44.0 -%global bootstrap_channel 1.44.0 -%global bootstrap_date 2020-06-04 -%bcond_with llvm_static -%bcond_with bundled_llvm -%bcond_without bundled_libgit2 -Name: rust -Version: 1.45.2 -Release: 1 -Summary: The Rust Programming Language -License: (ASL 2.0 or MIT) and (BSD and MIT) -URL: https://www.rust-lang.org -%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 -%{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 -%{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} -BuildRequires: (%{name} >= %{bootstrap_rust} with %{name} <= %{version}) -%global local_rust_root %{_prefix} -%endif -BuildRequires: make gcc gcc-c++ ncurses-devel curl pkgconfig(libcurl) pkgconfig(liblzma) -BuildRequires: pkgconfig(openssl) pkgconfig(zlib) pkgconfig(libssh2) >= 1.6.0 -%global python python3 -BuildRequires: %{python} -%if %with bundled_llvm -BuildRequires: cmake3 >= 3.4.3 -Provides: bundled(llvm) = 10.0.1 -%else -BuildRequires: cmake >= 2.8.11 -%if %defined llvm -%global llvm_root %{_libdir}/%{llvm} -%else -%global llvm llvm -%global llvm_root %{_prefix} -%endif -BuildRequires: %{llvm}-devel >= 8.0 -%if %with llvm_static -BuildRequires: %{llvm}-static libffi-devel -%endif -%endif -BuildRequires: procps-ng gdb -Provides: bundled(libbacktrace) = 1.0.20200219 -Provides: rustc = %{version}-%{release} -Provides: rustc%{?_isa} = %{version}-%{release} -Requires: %{name}-std-static%{?_isa} = %{version}-%{release} -Requires: /usr/bin/cc +%global rustlibdir %{_prefix}/lib/rustlib +%global rust_triple %{_target_cpu}-unknown-linux-gnu %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)/.*$ %global _find_debuginfo_opts --keep-section .rustc -%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. +%bcond_with bundled_llvm +%global llvm_root %{_prefix} + +Name: rust +Version: 1.29.1 +Release: 5 +Summary: A systems programming language +License: (ASL 2.0 or MIT) and (BSD and MIT) +URL: https://www.rust-lang.org +Source0: https://static.rust-lang.org/dist/rustc-1.29.1-src.tar.xz +Patch0000: rust-52876-const-endianess.patch +Patch0001: 0001-std-stop-backtracing-when-the-frames-are-full.patch +Patch0002: 0001-Set-more-llvm-function-attributes-for-__rust_try.patch +BuildRequires: cargo >= 1.28.0 (%{name} >= 1.28.0 with %{name} <= 1.29.1) llvm-devel +BuildRequires: make gcc-c++ ncurses-devel curl python3 cmake3 >= 3.4.3 procps-ng +BuildRequires: pkgconfig(libcurl) pkgconfig(liblzma) pkgconfig(openssl) pkgconfig(zlib) gdb +Requires: %{name}-devel = 1.29.1-%{release} +Provides: bundled(libbacktrace) = 8.1.0 bundled(miniz) = 1.16~beta+r1 +Provides: rustc = 1.29.1-%{release} -%package std-static -Summary: Standard library for Rust -%description std-static -This package includes the standard libraries for building applications -written in Rust. +%description +Rust is a systems programming language focused on three goals:safety, +speed,and concurrency.It maintains these goals without having a garbage +collector, making it a useful language for a number of use cases other +languages are not good at: embedding in other languages, programs with +specific space and time requirements,and writing low-level code, like +device drivers and operating systems. It improves on current languages +targeting this space by having a number of compile-time safety checks +that produce no runtime overhead,while eliminating all data races. + +%package devel +Summary: Libraries and header files for developing applications that use appstream-glib +Provides: %{name}-std-static = %{version}-%{release} +Obsoletes: %{name}-std-static < %{version}-%{release} + +%description devel +Libraries and header files for developing applications that use appstream-glib. %package debugger-common -Summary: Common debugger pretty printers for Rust -BuildArch: noarch +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 %{name}-debugger-common = %{version}-%{release} +Summary: GDB pretty printers for Rust +BuildArch: noarch +Requires: gdb +Requires: %{name}-debugger-common = 1.29.1-%{release} + %description gdb This package includes the rust-gdb script, which allows easier debugging of Rust programs. -%package lldb -Summary: LLDB pretty printers for Rust -BuildArch: noarch -Requires: lldb python3-lldb -Requires: %{name}-debugger-common = %{version}-%{release} -%description lldb -This package includes the rust-lldb script, which allows easier debugging of Rust -programs. - -%package doc -Summary: Documentation for Rust -%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 -Provides: bundled(libgit2) = 1.0.0 -BuildRequires: git -Requires: rust -Obsoletes: cargo-vendor <= 0.1.23 -Provides: cargo-vendor = %{version}-%{release} +Summary: Rust's package manager and build tool +Version: 1.29.0 +BuildRequires: git +Requires: rust +Provides: bundled(libgit2) = 0.27 bundled(libssh2) = 1.8.1 + %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 -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 -Obsoletes: rustfmt-preview < 1.0.0 -Provides: rustfmt-preview = %{version}-%{release} -%description -n rustfmt +%package -n rustfmt-preview +Summary: Tool to find and fix Rust formatting issues +Version: 0.99.1 +Requires: cargo +Provides: rustfmt = 0.99.1 +Obsoletes: rustfmt <= 0.9.0 + +%description -n rustfmt-preview A tool for formatting Rust code according to style guidelines. -%package -n rls -Summary: Rust Language Server for IDE integration -Provides: bundled(libgit2) = 1.0.0 -Requires: rust-analysis %{name}%{?_isa} = %{version}-%{release} -Obsoletes: rls-preview < 1.31.6 -Provides: rls-preview = %{version}-%{release} -%description -n rls +%package -n rls-preview +Summary: Rust Language Server for IDE integration +Version: 0.130.0 +Provides: rls = 0.130.0 bundled(libgit2) = 0.27 bundled(libssh2) = 1.8.1 +Requires: rust-analysis %{name} = 1.29.1-%{release} + +%description -n rls-preview 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 %{name}%{?_isa} = %{version}-%{release} -Obsoletes: clippy-preview <= 0.0.212 -Provides: clippy-preview = %{version}-%{release} -%description -n clippy +%package -n clippy-preview +Summary: Lints to catch common mistakes and improve your Rust code +Version: 0.0.212 +License: MPLv2.0 +Provides: clippy = 0.0.212 +Requires: cargo %{name} = 1.29.1-%{release} + +%description -n clippy-preview A collection of lints to catch common mistakes and improve your Rust code. %package src -Summary: Sources for the Rust standard library -BuildArch: noarch +Summary: Sources for the Rust standard library +BuildArch: noarch + %description src -This package includes source files for the Rust standard library. It may be +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} +Summary: Compiler analysis data for the Rust standard library +Requires: rust-std-static = 1.29.1-%{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. +%package help +Summary: Help documents for rust + +Provides: %{name}-doc = %{version}-%{release} %{name}-cargo-doc = %{version}-%{release} +Obsoletes: %{name}-doc < %{version}-%{release} %{name}-cargo-doc < %{version}-%{release} + +%description help +Man pages and other related help documents for rust. + %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} -%if "%{python}" == "python3" +%autosetup -n rustc-1.29.1-src -p1 + sed -i.try-py3 -e '/try python2.7/i try python3 "$@"' ./configure -%endif -%if %without bundled_llvm -rm -rf src/llvm-project/ -%endif -rm -rf vendor/curl-sys/curl/ -rm -rf vendor/jemalloc-sys/jemalloc/ -rm -rf vendor/libz-sys/src/zlib/ -rm -rf vendor/lzma-sys/xz-*/ -rm -rf vendor/openssl-src/openssl/ -rm -rf vendor/libssh2-sys/libssh2/ -sed -i.lzma -e '/LZMA_API_STATIC/d' src/bootstrap/tool.rs -cp -a vendor/backtrace-sys/src/libbacktrace/LICENSE{,-libbacktrace} -%if %{without bundled_llvm} && %{with llvm_static} -sed -i.ffi -e '$a #[link(name = "ffi")] extern {}' \ - src/librustc_llvm/lib.rs -%endif -find vendor -name .cargo-checksum.json \ - -exec sed -i.uncheck -e 's/"files":{[^}]*}/"files":{ }/' '{}' '+' -find -name '*.rs' -type f -perm /111 -exec chmod -v -x '{}' '+' +rm -rf src/llvm/ +rm -rf src/llvm-emscripten/ +sed -e '/*\//q' src/libbacktrace/backtrace.h >src/libbacktrace/LICENSE-libbacktrace + +sed -i.ignore -e '1i // ignore-test may still be exponential...' src/test/run-pass/issue-41696.rs + +find src/vendor -name .cargo-checksum.json -exec sed -i.uncheck -e 's/"files":{[^}]*}/"files":{ }/' '{}' '+' %build -export LIBSSH2_SYS_USE_PKG_CONFIG=1 %{?cmake_path:export PATH=%{cmake_path}:$PATH} -%{?rustflags:export RUSTFLAGS="%{rustflags}"} -%global common_libdir %{_prefix}/lib -%global rustlibdir %{common_libdir}/rustlib -%ifarch %{arm} %{ix86} s390x -%define enable_debuginfo --debuginfo-level=0 --debuginfo-level-std=2 -%else -%define enable_debuginfo --debuginfo-level=2 -%endif -%ifnarch %{power64} -%define codegen_units_std --set rust.codegen-units-std=1 -%endif -%configure --disable-option-checking \ - --libdir=%{common_libdir} \ +%{?library_path:export LIBRARY_PATH="%{library_path}"} +%{?rustflags:export RUSTFLAGS="-Clink-arg=-Wl,-z,relro,-z,now"} + +%configure --disable-option-checking --libdir=%{_prefix}/lib \ --build=%{rust_triple} --host=%{rust_triple} --target=%{rust_triple} \ - --python=%{python} \ - --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 \ - --tools=analysis,cargo,clippy,rls,rustfmt,src \ - --enable-vendor \ - --enable-verbose-tests \ - %{?codegen_units_std} \ - --release-channel=%{channel} -%{python} ./x.py build -%{python} ./x.py doc + --local-rust-root=%{_prefix} --disable-jemalloc --disable-rpath --enable-llvm-link-shared \ + %{!?with_bundled_llvm: --llvm-root=%{llvm_root} --disable-codegen-tests} \ + --enable-debuginfo --disable-debuginfo-only-std --enable-debuginfo-tools --disable-debuginfo-lines \ + --enable-extended --enable-vendor --enable-verbose-tests --release-channel=stable + +python3 ./x.py build +python3 ./x.py doc %install %{?cmake_path:export PATH=%{cmake_path}:$PATH} -%{?rustflags:export RUSTFLAGS="%{rustflags}"} -DESTDIR=%{buildroot} %{python} ./x.py install -%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 -find %{buildroot}%{_libdir} -maxdepth 1 -type f -name '*.so' \ - -exec chmod -v +x '{}' '+' +%{?library_path:export LIBRARY_PATH="%{library_path}"} +%{?rustflags:export RUSTFLAGS="-Clink-arg=-Wl,-z,relro,-z,now"} + +DESTDIR=%{buildroot} python3 ./x.py install + +install -d %{buildroot}%{_libdir} +find %{buildroot}%{_prefix}/lib -maxdepth 1 -type f -name '*.so' -exec mv -v -t %{buildroot}%{_libdir} '{}' '+' + +find %{buildroot}%{_libdir} -maxdepth 1 -type f -name '*.so' -exec chmod -v +x '{}' '+' + (cd "%{buildroot}%{rustlibdir}/%{rust_triple}/lib" && find ../../../../%{_lib} -maxdepth 1 -name '*.so' | while read lib; do - if [ -f "${lib##*/}" ]; then - # make sure they're actually identical! - cmp "$lib" "${lib##*/}" - ln -v -f -s -t . "$lib" - fi + cmp "$lib" "${lib##*/}" + ln -v -f -s -t . "$lib" done) + find %{buildroot}%{rustlibdir} -maxdepth 1 -type f -exec rm -v '{}' '+' find %{buildroot}%{rustlibdir} -type f -name '*.orig' -exec rm -v '{}' '+' find %{buildroot}%{rustlibdir}/src -type f -name '*.py' -exec rm -v '{}' '+' -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 find %{buildroot}%{_docdir}/%{name}/html -empty -delete find %{buildroot}%{_docdir}/%{name}/html -type f -exec chmod -x '{}' '+' -mkdir -p %{buildroot}%{_datadir}/cargo/registry -mkdir -p %{buildroot}%{_docdir}/cargo + +install -d %{buildroot}%{_datadir}/cargo/registry +install -d %{buildroot}%{_docdir}/cargo ln -sT ../rust/html/cargo/ %{buildroot}%{_docdir}/cargo/html %check %{?cmake_path:export PATH=%{cmake_path}:$PATH} -%{?rustflags:export RUSTFLAGS="%{rustflags}"} -%{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 +%{?library_path:export LIBRARY_PATH="%{library_path}"} +%{?rustflags:export RUSTFLAGS="-Clink-arg=-Wl,-z,relro,-z,now"} + +python3 ./x.py test --no-fail-fast || : +python3 ./x.py test --no-fail-fast cargo || : +python3 ./x.py test --no-fail-fast clippy || : +python3 ./x.py test --no-fail-fast rls || : +python3 ./x.py test --no-fail-fast rustfmt || : + +%post +/sbin/ldconfig +%postun +/sbin/ldconfig %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* +%license COPYRIGHT LICENSE-APACHE LICENSE-MIT +%license src/libbacktrace/LICENSE-libbacktrace +%license %{_docdir}/%{name}/html/*.txt %dir %{rustlibdir} %dir %{rustlibdir}/%{rust_triple} %dir %{rustlibdir}/%{rust_triple}/lib +%{_bindir}/rustc +%{_bindir}/rustdoc +%{_libdir}/*.so %{rustlibdir}/%{rust_triple}/lib/*.so +%{rustlibdir}/%{rust_triple}/codegen-backends/ +%exclude %{_docdir}/%{name}/{README.md,COPYRIGHT,LICENSE,*.old} +%exclude %{_docdir}/%{name}/LICENSE-{APACHE,MIT,THIRD-PARTY} +%exclude %{rustlibdir}/etc/lldb_*.py* +%exclude %{_bindir}/rust-lldb -%files std-static +%files devel %dir %{rustlibdir} %dir %{rustlibdir}/%{rust_triple} %dir %{rustlibdir}/%{rust_triple}/lib @@ -335,58 +234,32 @@ ln -sT ../rust/html/cargo/ %{buildroot}%{_docdir}/cargo/html %files gdb %{_bindir}/rust-gdb %{rustlibdir}/etc/gdb_*.py* -%exclude %{_bindir}/rust-gdbgui - -%files lldb -%{_bindir}/rust-lldb -%{rustlibdir}/etc/lldb_*.py* - -%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 -%license %{_docdir}/%{name}/html/*.md %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 +%license src/tools/cargo/LICENSE-APACHE src/tools/cargo/LICENSE-MIT src/tools/cargo/LICENSE-THIRD-PARTY +%dir %{_datadir}/cargo +%dir %{_datadir}/cargo/registry %{_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 +%files -n rustfmt-preview %doc src/tools/rustfmt/{README,CHANGELOG,Configurations}.md %license src/tools/rustfmt/LICENSE-{APACHE,MIT} +%{_bindir}/rustfmt +%{_bindir}/cargo-fmt -%files -n rls -%{_bindir}/rls +%files -n rls-preview %doc src/tools/rls/{README.md,COPYRIGHT,debugging.md} %license src/tools/rls/LICENSE-{APACHE,MIT} +%{_bindir}/rls -%files -n clippy +%files -n clippy-preview +%doc src/tools/clippy/{README.md,CHANGELOG.md} +%license src/tools/clippy/LICENSE %{_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} @@ -395,7 +268,28 @@ ln -sT ../rust/html/cargo/ %{buildroot}%{_docdir}/cargo/html %files analysis %{rustlibdir}/%{rust_triple}/analysis/ +%files help +%dir %{_docdir}/%{name} +%dir %{_docdir}/cargo +%dir %{_docdir}/%{name}/html +%docdir %{_docdir}/%{name} +%docdir %{_docdir}/cargo +%{_docdir}/%{name}/html/*/ +%{_docdir}/%{name}/html/*.html +%{_docdir}/%{name}/html/*.css +%{_docdir}/%{name}/html/*.js +%{_docdir}/%{name}/html/*.svg +%{_docdir}/%{name}/html/*.woff +%{_docdir}/cargo/html +%{_mandir}/man1/rustc.1* +%{_mandir}/man1/rustdoc.1* +%{_mandir}/man1/cargo*.1* + %changelog + +* Tue Nov 03 2020 Jeffery.Gao - 1.29.1-5 +- Reback to 1.29.1 because nodejs upgrade after openEuler-20.03-LTS update + * Mon Sep 21 2020 Jeffery.Gao - 1.45.2-1 - Update to 1.45.2 diff --git a/rustc-1.45.2-src.tar.xz b/rustc-1.29.1-src.tar.xz similarity index 60% rename from rustc-1.45.2-src.tar.xz rename to rustc-1.29.1-src.tar.xz index ee50aadfe62827bd43c3bc2f6943a8c4e931f671..6ecd27dd7a79602faf978bd1529d4c39a56997a8 100644 Binary files a/rustc-1.45.2-src.tar.xz and b/rustc-1.29.1-src.tar.xz differ