mirror of
https://abf.rosa.ru/djam/rust.git
synced 2025-02-23 18:02:53 +00:00
Updated to 2.19.1
This commit is contained in:
parent
865d870915
commit
2e5d411747
6 changed files with 768 additions and 97 deletions
4
.abf.yml
4
.abf.yml
|
@ -1,2 +1,4 @@
|
||||||
sources:
|
sources:
|
||||||
rustc-1.27.0-src.tar.gz: 54e4a19cd7eea451fea568644e4a3e264efcf36a
|
rust-1.28.0-i686-unknown-linux-gnu.tar.xz: 9f2d0457eedf0c9c38fa3c16d19b3a112338cea6
|
||||||
|
rust-1.28.0-x86_64-unknown-linux-gnu.tar.xz: ed58f73ef18907ffd3c3157087bebfb88f4449a0
|
||||||
|
rustc-1.29.1-src.tar.xz: 3c5ed672a33acf182f2d21c41db03f87a56e00ad
|
||||||
|
|
186
0001-Set-more-llvm-function-attributes-for-__rust_try.patch
Normal file
186
0001-Set-more-llvm-function-attributes-for-__rust_try.patch
Normal file
|
@ -0,0 +1,186 @@
|
||||||
|
From 4b95b1a4fd035a73998dc21b265ce4594e35f8ae Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alex Crichton <alex@alexcrichton.com>
|
||||||
|
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<Item = &str> {
|
||||||
|
|
||||||
|
/// 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<DefId>,
|
||||||
|
+) {
|
||||||
|
+ 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
|
||||||
|
|
122
0001-std-stop-backtracing-when-the-frames-are-full.patch
Normal file
122
0001-std-stop-backtracing-when-the-frames-are-full.patch
Normal file
|
@ -0,0 +1,122 @@
|
||||||
|
From f4e8d57b6ad6f599de54c020ba185db83cb011a3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Josh Stone <jistone@redhat.com>
|
||||||
|
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
|
||||||
|
|
26
rust-52876-const-endianess.patch
Normal file
26
rust-52876-const-endianess.patch
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
From 1ea2765918d1212a07e1359537470c477d82a681 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Josh Stone <jistone@redhat.com>
|
||||||
|
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());
|
||||||
|
}
|
|
@ -1,4 +1,11 @@
|
||||||
addFilter("spurious-executable-perm")
|
# 834 warnings
|
||||||
addFilter("zero-length")
|
|
||||||
addFilter("W: no-soname")
|
|
||||||
addFilter("W: binaryinfo-readelf-failed")
|
addFilter("W: binaryinfo-readelf-failed")
|
||||||
|
addFilter("W: devel-file-in-non-devel-package")
|
||||||
|
addFilter("W: hidden-file-or-dir")
|
||||||
|
addFilter("W: no-soname")
|
||||||
|
addFilter("W: non-executable-script")
|
||||||
|
addFilter("W: only-non-binary-in-usr-lib")
|
||||||
|
addFilter("W: script-without-shebang")
|
||||||
|
#
|
||||||
|
addFilter("E: wrong-script-interpreter")
|
||||||
|
addFilter("E: unstripped-binary-or-object")
|
||||||
|
|
514
rust.spec
514
rust.spec
|
@ -1,130 +1,458 @@
|
||||||
|
# ALL Rust libraries are private, because they don't keep an ABI.
|
||||||
|
%define _privatelibs lib(.*-[[:xdigit:]]{16}*|rustc.*)[.]so.*
|
||||||
|
%define __provides_exclude ^(%{_privatelibs})$
|
||||||
|
%define __requires_exclude ^(%{_privatelibs})$
|
||||||
|
%define __provides_exclude_from ^(%{_docdir}|%{rustlibdir}/src)/.*$
|
||||||
|
%define __requires_exclude_from ^(%{_docdir}|%{rustlibdir}/src)/.*$
|
||||||
|
|
||||||
%define debug_package %{nil}
|
%define debug_package %{nil}
|
||||||
%define _disable_lto 1
|
%define _disable_lto 1
|
||||||
%define _disable_ld_no_undefined 1
|
%define _disable_ld_no_undefined 1
|
||||||
# To avoid undefined symbols
|
# To avoid undefined symbols
|
||||||
%define _find_debuginfo_opts -g
|
%define _find_debuginfo_opts -g
|
||||||
|
|
||||||
Summary: A safe, concurrent, practical programming language
|
# We're going to override --libdir when configuring to get rustlib into a
|
||||||
|
# common path, but we'll fix the shared libraries during install.
|
||||||
|
%define rustlibdir %{_libdir}/rustlib
|
||||||
|
|
||||||
|
# Only x86_64 and i686 are Tier 1 platforms at this time.
|
||||||
|
# https://forge.rust-lang.org/platform-support.html
|
||||||
|
%define rust_arches x86_64 %{ix86}
|
||||||
|
|
||||||
|
# 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.
|
||||||
|
%define bootstrap_rust 1.28.0
|
||||||
|
%define bootstrap_cargo 1.28.0
|
||||||
|
%define bootstrap_date 2018-08-02
|
||||||
|
|
||||||
|
%bcond_without bootstrap
|
||||||
|
|
||||||
|
%if %{without bootstrap}
|
||||||
|
%define bootstrap_arches %{nil}
|
||||||
|
%else
|
||||||
|
%define bootstrap_arches %{rust_arches}
|
||||||
|
%endif
|
||||||
|
|
||||||
|
# Using llvm-static may be helpful as an opt-in, e.g. to aid LLVM rebases.
|
||||||
|
%bcond_without llvm_static
|
||||||
|
|
||||||
|
# LLDB only works on some architectures
|
||||||
|
# LLDB isn't available everywhere...
|
||||||
|
%bcond_with lldb
|
||||||
|
|
||||||
|
# Some sub-packages are versioned independently of the rust compiler and runtime itself.
|
||||||
|
# Also beware that if any of these are not changed in a version bump, then the release
|
||||||
|
# number should still increase, not be reset to 1!
|
||||||
|
%define rustc_version 1.29.1
|
||||||
|
%define cargo_version 1.29.0
|
||||||
|
%define rustfmt_version 0.99.1
|
||||||
|
%define rls_version 0.130.0
|
||||||
|
%define clippy_version 0.0.212
|
||||||
|
|
||||||
|
%ifarch x86_64
|
||||||
|
%define rust_triple x86_64-unknown-linux-gnu
|
||||||
|
%else
|
||||||
|
%define rust_triple i686-unknown-linux-gnu
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%ifarch %{bootstrap_arches}
|
||||||
|
%define bootstrap_root rust-%{bootstrap_rust}-%{rust_triple}
|
||||||
|
%define local_rust_root %{_builddir}/%{bootstrap_root}/usr
|
||||||
|
%else
|
||||||
|
%define local_rust_root %{_prefix}
|
||||||
|
%endif
|
||||||
|
|
||||||
|
Summary: The Rust Programming Language
|
||||||
Name: rust
|
Name: rust
|
||||||
Version: 1.27.0
|
Version: %{rustc_version}
|
||||||
Release: 1
|
Release: 1
|
||||||
License: MIT
|
License: (ASL 2.0 or MIT) and (BSD and MIT)
|
||||||
Group: Development/Rust
|
Group: Development/Rust
|
||||||
Url: http://www.rust-lang.org/
|
# ^ written as: (rust itself) and (bundled libraries)
|
||||||
Source0: http://static.rust-lang.org/dist/rustc-%{version}-src.tar.gz
|
Url: https://www.rust-lang.org
|
||||||
Source10: %{name}.rpmlintrc
|
Source0: https://static.rust-lang.org/dist/rustc-%{rustc_version}-src.tar.xz
|
||||||
BuildRequires: cmake
|
# For bootstrap
|
||||||
BuildRequires: bison
|
Source1: https://static.rust-lang.org/dist/rust-%{bootstrap_rust}-x86_64-unknown-linux-gnu.tar.xz
|
||||||
|
Source2: https://static.rust-lang.org/dist/rust-%{bootstrap_rust}-i686-unknown-linux-gnu.tar.xz
|
||||||
|
Source10: rust.rpmlintrc
|
||||||
|
# https://github.com/rust-lang/rust/pull/52876
|
||||||
|
Patch1: rust-52876-const-endianess.patch
|
||||||
|
# https://github.com/rust-lang/rust/pull/53436
|
||||||
|
Patch2: 0001-std-stop-backtracing-when-the-frames-are-full.patch
|
||||||
|
# https://github.com/rust-lang/rust/pull/53437
|
||||||
|
Patch3: 0001-Set-more-llvm-function-attributes-for-__rust_try.patch
|
||||||
|
|
||||||
|
BuildRequires: ncurses-devel
|
||||||
BuildRequires: curl
|
BuildRequires: curl
|
||||||
BuildRequires: docbook-style-xsl
|
BuildRequires: pkgconfig(libcurl)
|
||||||
BuildRequires: flex
|
BuildRequires: pkgconfig(liblzma)
|
||||||
|
BuildRequires: pkgconfig(openssl)
|
||||||
|
BuildRequires: pkgconfig(zlib)
|
||||||
|
# needs libssh2_userauth_publickey_frommemory
|
||||||
|
BuildRequires: pkgconfig(libssh2) >= 1.6.0
|
||||||
|
BuildRequires: pkgconfig(python3)
|
||||||
|
BuildRequires: cmake >= 2.8.11
|
||||||
|
BuildRequires: llvm-devel >= 5.0
|
||||||
|
%if %{with llvm_static}
|
||||||
|
BuildRequires: pkgconfig(libffi)
|
||||||
|
%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
|
BuildRequires: gdb
|
||||||
BuildRequires: git
|
%if %{without bootstrap}
|
||||||
BuildRequires: xsltproc
|
BuildRequires: cargo >= %{bootstrap_cargo}
|
||||||
BuildRequires: llvm-devel
|
BuildRequires: %{name} >= %{bootstrap_rust}
|
||||||
BuildRequires: pkgconfig(python)
|
#Conflicts: %%{name} > %%{rustc_version}
|
||||||
|
%endif
|
||||||
|
# Virtual provides for folks who attempt "dnf install rustc"
|
||||||
|
Provides: rustc = %{rustc_version}-%{release}
|
||||||
|
# Always require our exact standard library
|
||||||
|
Requires: %{name}-std-static = %{rustc_version}-%{release}
|
||||||
|
|
||||||
|
|
||||||
%description
|
%description
|
||||||
Rust is a curly-brace, block-structured expression language. It
|
Rust is a systems programming language that runs blazingly fast, prevents
|
||||||
visually resembles the C language family, but differs significantly
|
segfaults, and guarantees thread safety.
|
||||||
in syntactic and semantic details. Its design is oriented toward
|
|
||||||
concerns of "programming in the large", that is, of creating and
|
|
||||||
maintaining boundaries - both abstract and operational - that
|
|
||||||
preserve large-system integrity, availability and concurrency.
|
|
||||||
|
|
||||||
It supports a mixture of imperative procedural, concurrent actor,
|
This package includes the Rust compiler and documentation generator.
|
||||||
object-oriented and pure functional styles. Rust also supports
|
|
||||||
generic programming and metaprogramming, in both static and dynamic
|
|
||||||
styles.
|
|
||||||
|
|
||||||
%files
|
%files
|
||||||
|
%doc README.md COPYRIGHT LICENSE-APACHE LICENSE-MIT
|
||||||
%{_bindir}/rustc
|
%{_bindir}/rustc
|
||||||
%{_bindir}/rustdoc
|
%{_bindir}/rustdoc
|
||||||
%{_bindir}/rust-gdb
|
%{_libdir}/*.so
|
||||||
%{_bindir}/rust-lldb
|
%{_mandir}/man1/rustc.1*
|
||||||
%{_docdir}/%{name}/COPYRIGHT
|
%{_mandir}/man1/rustdoc.1*
|
||||||
%{_docdir}/%{name}/LICENSE-APACHE
|
%dir %{rustlibdir}
|
||||||
%{_docdir}/%{name}/LICENSE-MIT
|
%dir %{rustlibdir}/%{rust_triple}
|
||||||
%{_docdir}/%{name}/README.md
|
%dir %{rustlibdir}/%{rust_triple}/lib
|
||||||
%{_libdir}/lib*-*.so
|
%{rustlibdir}/%{rust_triple}/lib/*.so
|
||||||
%{_libdir}/rustlib/components
|
%{rustlibdir}/%{rust_triple}/codegen-backends/
|
||||||
%{_libdir}/rustlib/etc/*.py
|
|
||||||
%{_libdir}/rustlib/*/codegen-backends/lib*-*.so
|
|
||||||
%{_libdir}/rustlib/*/lib/lib*-*.so
|
|
||||||
%{_libdir}/rustlib/*/lib/lib*-*.rlib
|
|
||||||
%{_mandir}/man*/*
|
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
|
|
||||||
%package doc
|
%package std-static
|
||||||
Summary: Documentation for the Rust programming language
|
Summary: Standard library for Rust
|
||||||
Group: Documentation
|
Group: Development/Rust
|
||||||
|
|
||||||
|
%description std-static
|
||||||
|
This package includes the standard libraries for building applications
|
||||||
|
written in Rust.
|
||||||
|
|
||||||
|
%files std-static
|
||||||
|
%doc README.md COPYRIGHT LICENSE-APACHE LICENSE-MIT
|
||||||
|
%dir %{rustlibdir}
|
||||||
|
%dir %{rustlibdir}/%{rust_triple}
|
||||||
|
%dir %{rustlibdir}/%{rust_triple}/lib
|
||||||
|
%{rustlibdir}/%{rust_triple}/lib/*.rlib
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
%package debugger-common
|
||||||
|
Summary: Common debugger pretty printers for Rust
|
||||||
|
Group: Development/Rust
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
|
|
||||||
%description doc
|
%description debugger-common
|
||||||
This package contains the HTML documentation of the Rust programming language.
|
This package includes the common functionality
|
||||||
|
for %{name}-gdb and %{name}-lldb.
|
||||||
|
|
||||||
%files doc
|
%files debugger-common
|
||||||
%{_docdir}/%{name}/html/
|
%doc README.md COPYRIGHT LICENSE-APACHE LICENSE-MIT
|
||||||
|
%dir %{rustlibdir}
|
||||||
|
%dir %{rustlibdir}/etc
|
||||||
|
%{rustlibdir}/etc/debugger_*.py*
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
%package gdb
|
||||||
|
Summary: GDB pretty printers for Rust
|
||||||
|
Group: Development/Rust
|
||||||
|
Requires: gdb
|
||||||
|
Requires: %{name}-debugger-common = %{rustc_version}-%{release}
|
||||||
|
BuildArch: noarch
|
||||||
|
# (akien) Handle moved files between our old Mageia package and this Fedora-based one
|
||||||
|
Conflicts: rust < 1.11.0-3
|
||||||
|
|
||||||
|
%description gdb
|
||||||
|
This package includes the rust-gdb script,
|
||||||
|
which allows easier debugging of Rust programs.
|
||||||
|
|
||||||
|
%files gdb
|
||||||
|
%doc README.md COPYRIGHT LICENSE-APACHE LICENSE-MIT
|
||||||
|
%{_bindir}/rust-gdb
|
||||||
|
%{rustlibdir}/etc/gdb_*.py*
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
%if %{with lldb}
|
||||||
|
|
||||||
|
%package lldb
|
||||||
|
Summary: LLDB pretty printers for Rust
|
||||||
|
Group: Development/Rust
|
||||||
|
Requires: lldb
|
||||||
|
Requires: python-lldb
|
||||||
|
Requires: %{name}-debugger-common = %{rustc_version}-%{release}
|
||||||
|
# It could be noarch, but lldb has limited availability
|
||||||
|
#BuildArch: noarch
|
||||||
|
|
||||||
|
%description lldb
|
||||||
|
This package includes the rust-lldb script,
|
||||||
|
which allows easier debugging of Rust programs.
|
||||||
|
|
||||||
|
%files lldb
|
||||||
|
%doc README.md COPYRIGHT LICENSE-APACHE LICENSE-MIT
|
||||||
|
%{_bindir}/rust-lldb
|
||||||
|
%{rustlibdir}/etc/lldb_*.py*
|
||||||
|
|
||||||
|
%endif
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
%package -n cargo
|
||||||
|
Summary: Rust's package manager and build tool
|
||||||
|
Version: %{cargo_version}
|
||||||
|
Group: Development/Rust
|
||||||
|
# For tests:
|
||||||
|
BuildRequires: git
|
||||||
|
# Cargo is not much use without Rust
|
||||||
|
Requires: rust
|
||||||
|
Obsoletes: cargo < 1.26.0-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.
|
||||||
|
|
||||||
|
%files -n cargo
|
||||||
|
%doc README.md COPYRIGHT LICENSE-APACHE LICENSE-MIT
|
||||||
|
%{_bindir}/cargo
|
||||||
|
%{_mandir}/man1/cargo*.1*
|
||||||
|
%{_sysconfdir}/bash_completion.d/cargo
|
||||||
|
%{_datadir}/zsh/site-functions/_cargo
|
||||||
|
%dir %{_datadir}/cargo
|
||||||
|
%dir %{_datadir}/cargo/registry
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
%package -n rustfmt-preview
|
||||||
|
Summary: Tool to find and fix Rust formatting issues
|
||||||
|
Group: Development/Rust
|
||||||
|
Version: %{rustfmt_version}
|
||||||
|
Requires: cargo
|
||||||
|
# Despite the lower version, our rustfmt-preview is newer than rustfmt-0.9.
|
||||||
|
# It's expected to stay "preview" until it's released as 1.0.
|
||||||
|
Obsoletes: rustfmt <= 0.9.0
|
||||||
|
Provides: rustfmt = %{rustfmt_version}
|
||||||
|
|
||||||
|
%description -n rustfmt-preview
|
||||||
|
A tool for formatting Rust code according to style guidelines.
|
||||||
|
|
||||||
|
%files -n rustfmt-preview
|
||||||
|
%doc src/tools/rustfmt/{README,CHANGELOG,Configurations}.md
|
||||||
|
%{_bindir}/rustfmt
|
||||||
|
%{_bindir}/cargo-fmt
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
%package -n rls-preview
|
||||||
|
Summary: Rust Language Server for IDE integration
|
||||||
|
Version: %{rls_version}
|
||||||
|
Group: Development/Rust
|
||||||
|
Provides: rls = %{rls_version}
|
||||||
|
Requires: rust-analysis
|
||||||
|
# /usr/bin/rls is dynamically linked against internal rustc libs
|
||||||
|
Requires: %{name} = %{rustc_version}-%{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.
|
||||||
|
|
||||||
|
%files -n rls-preview
|
||||||
|
%doc src/tools/rls/{README.md,COPYRIGHT,debugging.md}
|
||||||
|
%{_bindir}/rls
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
%package -n clippy-preview
|
||||||
|
Summary: Lints to catch common mistakes and improve your Rust code
|
||||||
|
Version: %{clippy_version}
|
||||||
|
License: MPLv2.0
|
||||||
|
Group: Development/Rust
|
||||||
|
Provides: clippy = %{clippy_version}
|
||||||
|
Requires: cargo
|
||||||
|
# /usr/bin/clippy-driver is dynamically linked against internal rustc libs
|
||||||
|
Requires: %{name} = %{rustc_version}-%{release}
|
||||||
|
|
||||||
|
%description -n clippy-preview
|
||||||
|
A collection of lints to catch common mistakes and improve your Rust code.
|
||||||
|
|
||||||
|
%files -n clippy-preview
|
||||||
|
%doc src/tools/clippy/{README.md,CHANGELOG.md}
|
||||||
|
%{_bindir}/cargo-clippy
|
||||||
|
%{_bindir}/clippy-driver
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
%package src
|
||||||
|
Summary: Sources for the Rust standard library
|
||||||
|
Group: Development/Rust
|
||||||
|
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.
|
||||||
|
|
||||||
|
%files src
|
||||||
|
%doc README.md COPYRIGHT LICENSE-APACHE LICENSE-MIT
|
||||||
|
%dir %{rustlibdir}
|
||||||
|
%{rustlibdir}/src
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
%package analysis
|
||||||
|
Summary: Compiler analysis data for the Rust standard library
|
||||||
|
Group: Development/Rust
|
||||||
|
Requires: rust-std-static = %{rustc_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.
|
||||||
|
|
||||||
|
%files analysis
|
||||||
|
%doc README.md COPYRIGHT LICENSE-APACHE LICENSE-MIT
|
||||||
|
%{rustlibdir}/%{rust_triple}/analysis/
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n rustc-%{version}-src
|
%ifarch %{bootstrap_arches}
|
||||||
|
%ifarch x86_64
|
||||||
|
tar xf %{SOURCE1}
|
||||||
|
%else
|
||||||
|
tar xf %{SOURCE2}
|
||||||
|
%endif
|
||||||
|
cd rust-%{bootstrap_rust}-%{rust_triple}
|
||||||
|
./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 -qn rustc-%{rustc_version}-src
|
||||||
|
%patch1 -p1
|
||||||
|
%patch2 -p1
|
||||||
|
%patch3 -p1
|
||||||
|
|
||||||
|
# python3
|
||||||
|
sed -i.try-py3 -e '/try python2.7/i try python3 "$@"' ./configure
|
||||||
|
|
||||||
|
# We're disabling jemalloc, but rust-src still wants it.
|
||||||
|
# rm -rf src/jemalloc/
|
||||||
|
|
||||||
rm -rf src/llvm/
|
rm -rf src/llvm/
|
||||||
|
|
||||||
%build
|
# We never enable emscripten.
|
||||||
./configure \
|
rm -rf src/llvm-emscripten/
|
||||||
--prefix=%{_prefix} \
|
|
||||||
--sysconfdir=%{_sysconfdir} \
|
|
||||||
--datadir=%{_datadir} \
|
|
||||||
--libdir=%{_libdir} \
|
|
||||||
--localstatedir=%{_localstatedir} \
|
|
||||||
--mandir=%{_mandir} \
|
|
||||||
--infodir=%{_infodir} \
|
|
||||||
--disable-rpath \
|
|
||||||
--default-linker=gcc \
|
|
||||||
--disable-codegen-tests \
|
|
||||||
--enable-llvm-link-shared \
|
|
||||||
--llvm-root=%{_prefix} \
|
|
||||||
--enable-vendor
|
|
||||||
|
|
||||||
./x.py build
|
# extract bundled licenses for packaging
|
||||||
./x.py doc
|
sed -e '/*\//q' src/libbacktrace/backtrace.h \
|
||||||
|
>src/libbacktrace/LICENSE-libbacktrace
|
||||||
|
|
||||||
|
# This tests a problem of exponential growth, which seems to be less-reliably
|
||||||
|
# fixed when running on older LLVM and/or some arches. Just skip it for now.
|
||||||
|
sed -i.ignore -e '1i // ignore-test may still be exponential...' \
|
||||||
|
src/test/run-pass/issue-41696.rs
|
||||||
|
|
||||||
|
%if %{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 src/vendor -name .cargo-checksum.json \
|
||||||
|
-exec sed -i.uncheck -e 's/"files":{[^}]*}/"files":{ }/' '{}' '+'
|
||||||
|
|
||||||
|
%build
|
||||||
|
# Use hardening ldflags.
|
||||||
|
%if %{without bootstrap}
|
||||||
|
%ifarch x86_64
|
||||||
|
%define rustflags -Clink-arg=-Wl,-z,relro,-z,now -L %{rustlibdir}/%{rust_triple}/lib
|
||||||
|
%else
|
||||||
|
%define rustflags -Clink-arg=-Wl,-z,relro,-z,now
|
||||||
|
%endif
|
||||||
|
%endif
|
||||||
|
|
||||||
|
# convince libssh2-sys to use the distro libssh2
|
||||||
|
export LIBSSH2_SYS_USE_PKG_CONFIG=1
|
||||||
|
|
||||||
|
export RUSTFLAGS="%{rustflags}"
|
||||||
|
|
||||||
|
%configure2_5x \
|
||||||
|
--disable-option-checking \
|
||||||
|
--libdir=%{_libdir} \
|
||||||
|
--build=%{rust_triple} --host=%{rust_triple} --target=%{rust_triple} \
|
||||||
|
--local-rust-root=%{local_rust_root} \
|
||||||
|
--llvm-root=%{_prefix} --disable-codegen-tests \
|
||||||
|
--disable-jemalloc \
|
||||||
|
--disable-rpath \
|
||||||
|
--enable-extended \
|
||||||
|
--enable-vendor \
|
||||||
|
--release-channel=stable
|
||||||
|
#%%{!?with_llvm_static: --enable-llvm-link-shared } } \
|
||||||
|
|
||||||
|
python3 ./x.py build
|
||||||
|
|
||||||
%install
|
%install
|
||||||
DESTDIR=%{buildroot} ./x.py install --verbose
|
export RUSTFLAGS="%{rustflags}"
|
||||||
|
|
||||||
rm -f %{buildroot}%{_libdir}/rustlib/install.log
|
DESTDIR=%{buildroot} python3 ./x.py install
|
||||||
rm -f %{buildroot}%{_libdir}/rustlib/manifest-*
|
|
||||||
rm -f %{buildroot}%{_libdir}/rustlib/rust-installer-version
|
|
||||||
rm -f %{buildroot}%{_libdir}/rustlib/uninstall.sh
|
|
||||||
|
|
||||||
# Turn libraries into symlinks to avoid duplicate Provides
|
# The shared libraries should be executable for debuginfo extraction.
|
||||||
pushd %{buildroot}%{_libdir}/rustlib/*/lib/
|
find %{buildroot}%{_libdir} -maxdepth 1 -type f -name '*.so' \
|
||||||
rm lib*.so
|
-exec chmod -v +x '{}' '+'
|
||||||
for lib in ../../../*.so
|
|
||||||
do
|
|
||||||
ln -s $lib `basename $lib`
|
|
||||||
done
|
|
||||||
popd
|
|
||||||
|
|
||||||
# Manually strip them because auto-strip damages files
|
# The libdir libraries are identical to those under rustlib/. It's easier on
|
||||||
pushd %{buildroot}%{_libdir}
|
# library loading if we keep them in libdir, but we do need them in rustlib/
|
||||||
strip *.so
|
# to support dynamic linking for compiler plugins, so we'll symlink.
|
||||||
popd
|
(cd "%{buildroot}%{rustlibdir}/%{rust_triple}/lib" &&
|
||||||
pushd %{buildroot}%{_bindir}
|
find ../../../../%{_lib} -maxdepth 1 -name '*.so' |
|
||||||
strip rustc
|
while read lib; do
|
||||||
strip rustdoc
|
# make sure they're actually identical!
|
||||||
popd
|
cmp "$lib" "${lib##*/}"
|
||||||
|
ln -v -f -s -t . "$lib"
|
||||||
|
done)
|
||||||
|
|
||||||
%ifarch x86_64
|
# Remove installer artifacts (manifests, uninstall scripts, etc.)
|
||||||
pushd %{buildroot}%{_libdir}/rustlib/x86_64-unknown-linux-gnu/codegen-backends
|
find %{buildroot}%{rustlibdir} -maxdepth 1 -type f -exec rm -v '{}' '+'
|
||||||
strip *.so
|
|
||||||
popd
|
# Remove backup files from %%configure munging
|
||||||
%else
|
find %{buildroot}%{rustlibdir} -type f -name '*.orig' -exec rm -v '{}' '+'
|
||||||
pushd %{buildroot}%{_libdir}/rustlib/i686-unknown-linux-gnu/codegen-backends
|
|
||||||
strip *.so
|
# https://fedoraproject.org/wiki/Changes/Make_ambiguous_python_shebangs_error
|
||||||
popd
|
# 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 '{}' '+'
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# Create the path for crate-devel packages
|
||||||
|
mkdir -p %{buildroot}%{_datadir}/cargo/registry
|
||||||
|
|
||||||
|
%if %{without lldb}
|
||||||
|
rm -f %{buildroot}%{_bindir}/rust-lldb
|
||||||
|
rm -f %{buildroot}%{rustlibdir}/etc/lldb_*.py*
|
||||||
%endif
|
%endif
|
||||||
|
|
Loading…
Add table
Reference in a new issue