- Patch: require patching of src/librustc_llvm/build.rs to ignore a flag that llvm-config --cxxflags outputs which GCC doesn't recognise. - Default to building using the distro LLVM where the version is >= 5.0, instead of the Rust bundled LLVM which requires compilation. This should decrease build times. SLE LLVM is too old. - Fixing various rpmlint warnings and errors: + ExclusiveArch instead of BuildArch for i686 + Remove conflicts with same package name + Remove a few hidden files during prep, does not touch '.clang-format' + Remove old patch macro in comment + Fix lint warning about bash and zsh completition files + Fix various script shebang warnings (incorrect or missing) + Adjust rpmlintrc to mask some 'invalid' warnings - Move Rust and its tools in to their own category under: + Development/Languages/Rust - Jump from version 1.26.2 to 1.30.0 due to a build issue with using 1.26.x to compile 1.27.x. This package release requires %{rust_bootstrap} to be set. - Enable extra rust tools to be built (cargo, rls, rustfmt, analysis) + cargo is now packaged with the same version number as the rust release, this may break any packages that relied on a cargo version number. - Remove ccache and ninja from BuildRequires. - Switch build configuration to use configure script, remove config.toml. - Include all bootstraps in source rpm to make bootstrapping easier to manage within OBS. - Remove unused patch: update-config-guess.patch Update to version 1.30.0 (2018-10-25) + Language - Procedural macros are now available.- These kinds of macros allow for more powerful code generation. There is a new chapter available in the Rust Programming Language book that goes further in depth. - You can now use keywords as identifiers using the raw identifiers syntax (`r#`),- e.g. `let r#for = true;` - Using anonymous parameters in traits is now deprecated with a warning and will be a hard error in the 2018 edition.- - You can now use `crate` in paths.- This allows you to refer to the crate root in the path, e.g. `use crate::foo;` refers to `foo` in `src/lib.rs`. - Using a external crate no longer requires being prefixed with `::`.- Previously, using a external crate in a module without a use statement required `let json = ::serde_json::from_str(foo);` but can now be written as `let json = serde_json::from_str(foo);`. - You can now apply the `#[used]` attribute to static items to prevent the compiler from optimising them away, even if they appear to be unused,- e.g. `#[used] static FOO: u32 = 1;` - You can now import and reexport macros from other crates with the `use` syntax.- Macros exported with `#[macro_export]` are now placed into the root module of the crate. If your macro relies on calling other local macros, it is recommended to export with the `#[macro_export(local_inner_macros)]` attribute so users won't have to import those macros. - You can now catch visibility keywords (e.g. `pub`, `pub(crate)`) in macros using the `vis` specifier.- - Non-macro attributes now allow all forms of literals, not just strings.- Previously, you would write `#[attr("true")]`, and you can now write `#[attr(true)]`. - You can now specify a function to handle a panic in the Rust runtime with the `#[panic_handler]` attribute.- + Compiler - Added the `riscv32imc-unknown-none-elf` target.- - Added the `aarch64-unknown-netbsd` target- + Libraries - `ManuallyDrop` now allows the inner type to be unsized.- + Stabilized APIs - `Ipv4Addr::BROADCAST` - `Ipv4Addr::LOCALHOST` - `Ipv4Addr::UNSPECIFIED` - `Ipv6Addr::LOCALHOST` - `Ipv6Addr::UNSPECIFIED` - `Iterator::find_map` - The following methods are replacement methods for `trim_left`, `trim_right`, `trim_left_matches`, and `trim_right_matches`, which will be deprecated in 1.33.0: + `str::trim_end_matches` + `str::trim_end` + `str::trim_start_matches` + `str::trim_start` + Cargo - `cargo run` doesn't require specifying a package in workspaces.][cargo/5877] - `cargo doc` now supports `--message-format=json`.][cargo/5878] This is equivalent to calling `rustdoc --error-format=json`. - Cargo will now provide a progress bar for builds.][cargo/5995] + Misc - `rustdoc` allows you to specify what edition to treat your code as with the `--edition` option.- - `rustdoc` now has the `--color` (specify whether to output color) and `--error-format` (specify error format, e.g. `json`) options.- - We now distribute a `rust-gdbgui` script that invokes `gdbgui` with Rust debug symbols.- - Attributes from Rust tools such as `rustfmt` or `clippy` are now available,- e.g. `#[rustfmt::skip]` will skip formatting the next item. - Update to version 1.29.2 (2018-10-11) + Workaround for an aliasing-related LLVM bug, which caused miscompilation. + The `rls-preview` component on the windows-gnu targets has been restored. - Update to version 1.29.1 (2018-09-25) + Security Notes - The standard library's `str::repeat` function contained an out of bounds write caused by an integer overflow. This has been fixed by deterministically panicking when an overflow happens. - Update to version 1.29.0 (2018-09-13) + Compiler - Bumped minimum LLVM version to 5.0. - Added `powerpc64le-unknown-linux-musl` target. - Added `aarch64-unknown-hermit` and `x86_64-unknown-hermit` targets. + Libraries - `Once::call_once` no longer requires `Once` to be `'static`. - `BuildHasherDefault` now implements `PartialEq` and `Eq`. - `Box<CStr>`, `Box<OsStr>`, and `Box<Path>` now implement `Clone`. - Implemented `PartialEq<&str>` for `OsString` and `PartialEq<OsString>` for `&str`. - `Cell<T>` now allows `T` to be unsized. - `SocketAddr` is now stable on Redox. + Stabilized APIs - `Arc::downcast` - `Iterator::flatten` - `Rc::downcast` + Cargo - Cargo can silently fix some bad lockfiles.][cargo/5831] You can use `--locked` to disable this behavior. - `cargo-install` will now allow you to cross compile an install using `--target`.][cargo/5614] - Added the `cargo-fix` subcommand to automatically move project code from 2015 edition to 2018.][cargo/5723] - `cargo doc` can now optionally document private types using the `--document-private-items` flag.][cargo/5543] + Misc - `rustdoc` now has the `--cap-lints` option which demotes all lints above the specified level to that level. For example `--cap-lints warn` will demote `deny` and `forbid` lints to `warn`. - `rustc` and `rustdoc` will now have the exit code of `1` if compilation fails and `101` if there is a panic. - A preview of clippy has been made available through rustup. You can install the preview with `rustup component add clippy-preview`. + Compatibility Notes - `str::{slice_unchecked, slice_unchecked_mut}` are now deprecated. Use `str::get_unchecked(begin..end)` instead. - `std::env::home_dir` is now deprecated for its unintuitive behavior. Consider using the `home_dir` function from https://crates.io/crates/dirs instead. - `rustc` will no longer silently ignore invalid data in target spec. - `cfg` attributes and `--cfg` command line flags are now more strictly validated. - Update to version 1.28.0 + Language - The `#[repr(transparent)]` attribute is now stable.- This attribute allows a Rust newtype wrapper (`struct NewType<T>(T);`) to be represented as the inner type across Foreign Function Interface (FFI) boundaries. - The keywords `pure`, `sizeof`, `alignof`, and `offsetof` have been unreserved and can now be used as identifiers.- - The `GlobalAlloc` trait and `#[global_allocator]` attribute are now stable.- This will allow users to specify a global allocator for their program. - Unit test functions marked with the `#[test]` attribute can now return `Result<(), E: Debug>` in addition to `()`.- - The `lifetime` specifier for `macro_rules!` is now stable.- This allows macros to easily target lifetimes. + Compiler - The `s` and `z` optimisation levels are now stable.- These optimisations prioritise making smaller binary sizes. `z` is the same as `s` with the exception that it does not vectorise loops, which typically results in an even smaller binary. - The short error format is now stable.- Specified with `--error-format=short` this option will provide a more compressed output of rust error messages. - Added a lint warning when you have duplicated `macro_export`s.- - Reduced the number of allocations in the macro parser.- This can improve compile times of macro heavy crates on average by 5%. + Libraries - Implemented `Default` for `&mut str`.- - Implemented `From<bool>` for all integer and unsigned number types.- - Implemented `Extend` for `()`.- - The `Debug` implementation of `time::Duration` should now be more easily human readable.- Previously a `Duration` of one second would printed as `Duration { secs: 1, nanos: 0 }` and will now be printed as `1s`. - Implemented `From<&String>` for `Cow<str>`, `From<&Vec<T>>` for `Cow<[T]>`, `From<Cow<CStr>>` for `CString`, `From<CString>, From<CStr>, From<&CString>` for `Cow<CStr>`, `From<OsString>, From<OsStr>, From<&OsString>` for `Cow<OsStr>`, `From<&PathBuf>` for `Cow<Path>`, and `From<Cow<Path>>` for `PathBuf`.- - Implemented `Shl` and `Shr` for `Wrapping<u128>` and `Wrapping<i128>`.- - `DirEntry::metadata` now uses `fstatat` instead of `lstat` when possible.- This can provide up to a 40% speed increase. - Improved error messages when using `format!`.- + Stabilized APIs - `Iterator::step_by` - `Path::ancestors` - `SystemTime::UNIX_EPOCH` - `alloc::GlobalAlloc` - `alloc::Layout` - `alloc::LayoutErr` - `alloc::System` - `alloc::alloc` - `alloc::alloc_zeroed` - `alloc::dealloc` - `alloc::realloc` - `alloc::handle_alloc_error` - `btree_map::Entry::or_default` - `fmt::Alignment` - `hash_map::Entry::or_default` - `iter::repeat_with` - `num::NonZeroUsize` - `num::NonZeroU128` - `num::NonZeroU16` - `num::NonZeroU32` - `num::NonZeroU64` - `num::NonZeroU8` - `ops::RangeBounds` - `slice::SliceIndex` - `slice::from_mut` - `slice::from_ref` - `{Any + Send + Sync}::downcast_mut` - `{Any + Send + Sync}::downcast_ref` - `{Any + Send + Sync}::is` + Cargo - Cargo will now no longer allow you to publish crates with build scripts that modify the `src` directory.][cargo/5584] The `src` directory in a crate should be considered to be immutable. + Misc - The `suggestion_applicability` field in `rustc`'s json output is now stable.- This will allow dev tools to check whether a code suggestion would apply to them. + Compatibility Notes - Rust will consider trait objects with duplicated constraints to be the same type as without the duplicated constraint.- For example the below code will now fail to compile. ```rust trait Trait {} impl Trait + Send { fn test(&self) { println!("one"); } //~ ERROR duplicate definitions with name `test` } impl Trait + Send + Send { fn test(&self) { println!("two"); } } - Update to version 1.27.2: + Compatibility Notes - The borrow checker was fixed to avoid an additional potential unsoundness when using match ergonomics - Update to version 1.27.1: + Security Notes - rustdoc would execute plugins in the /tmp/rustdoc/plugins directory when running, which enabled executing code as some other user on a given machine. This release fixes that vulnerability; you can read more about this on the blog. The associated CVE is [CVE-2018-1000622]. Thank you to Red Hat for responsibily disclosing this vulnerability to us. + Compatibility Notes - The borrow checker was fixed to avoid an additional potential unsoundness when using match ergonomics - Update to version 1.27.0: + Language - Removed 'proc' from the reserved keywords list. This allows `proc` to be used as an identifier. - The dyn syntax is now available. This syntax is equivalent to the bare `Trait` syntax, and should make it clearer when being used in tandem with `impl Trait` because it is equivalent to the following syntax: `&Trait == &dyn Trait`, `&mut Trait == &mut dyn Trait`, and `Box<Trait> == Box<dyn Trait>`. - Attributes on generic parameters such as types and lifetimes are now stable. e.g. `fn foo<#[lifetime_attr] 'a, #[type_attr] T: 'a>() {}` - The `#[must_use]` attribute can now also be used on functions as well as types. It provides a lint that by default warns users when the value returned by a function has not been used. + Compiler - Added the `armvte-unknown-linux-musleabi` target. + Libraries - SIMD (Single Instruction Multiple Data) on x/x_ is now stable. This includes arch::x & arch::x_ modules which contain SIMD intrinsics, a new macro called `is_x_feature_detected!`, the `#[target_feature(enable="")]` attribute, and adding `target_feature = ""` to the `cfg` attribute. - A lot of methods for `[u]`, `f`, and `f` previously only available in std are now available in core. - The generic `Rhs` type parameter on `ops::{Shl, ShlAssign, Shr}` now defaults to `Self`. - std::str::replace` now has the `#[must_use]` attribute to clarify that the operation isn't done in place. - Clone::clone`, `Iterator::collect`, and `ToOwned::to_owned` now have the `#[must_use]` attribute] to warn about unused potentially expensive allocations. + Stabilized APIs - DoubleEndedIterator::rfind - DoubleEndedIterator::rfold - DoubleEndedIterator::try_rfold - Duration::from_micros - Duration::from_nanos - Duration::subsec_micros - Duration::subsec_millis - HashMap::remove_entry - Iterator::try_fold - Iterator::try_for_each - NonNull::cast - Option::filter - String::replace_range - Take::set_limit - hint::unreachable_unchecked - os::unix::process::parent_id - ptr::swap_nonoverlapping - slice::rsplit_mut - slice::rsplit - slice::swap_with_slice + Cargo - `cargo-metadata` now includes `authors`, `categories`, `keywords`, `readme`, and `repository` fields. - `cargo-metadata` now includes a package's `metadata` table. - Added the `--target-dir` optional argument. This allows you to specify a different directory than `target` for placing compilation artifacts. - Cargo will be adding automatic target inference for binaries, benchmarks, examples, and tests in the Rust 2018 edition. If your project specifies specific targets, e.g. using `[[bin]]`, and have other binaries in locations where cargo would infer a binary, Cargo will produce a warning. You can disable this feature ahead of time by setting any of the following to false: `autobins`, `autobenches`, `autoexamples`, `autotests`. - Cargo will now cache compiler information. This can be disabled by setting `CARGO_CACHE_RUSTC_INFO=0` in your environment. + Compatibility Notes - Calling a `CharExt` or `StrExt` method directly on core will no longer work. e.g. `::core::prelude::v1::StrExt::is_empty("")` will not compile, `"".is_empty()` will still compile. - `Debug` output on `atomic::{AtomicBool, AtomicIsize, AtomicPtr, AtomicUsize}` will only print the inner type. E.g. `print!("{:?}", AtomicBool::new(true))` will print `true`, not `AtomicBool(true)`. - The maximum number for `repr(align(N))` is now 2²⁹. Previously you could enter higher numbers but they were not supported by LLVM. Up to 512MB alignment should cover all use cases. - The `.description()` method on the `std::error::Error` trait has been soft-deprecated. It is no longer required to implement it. + Misc - Added “The Rustc book” into the official documentation. OBS-URL: https://build.opensuse.org/request/show/646330 OBS-URL: https://build.opensuse.org/package/show/devel:languages:rust/rust?expand=0&rev=161
529 lines
18 KiB
RPMSpec
529 lines
18 KiB
RPMSpec
#
|
||
# spec file for package rust
|
||
#
|
||
# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
|
||
# Copyright (c) 2018 Luke Jones, jones_ld@protonmail.com
|
||
#
|
||
# All modifications and additions to the file contributed by third parties
|
||
# remain the property of their copyright owners, unless otherwise agreed
|
||
# upon. The license for this file, and modifications and additions to the
|
||
# file, is the same license as for the pristine package itself (unless the
|
||
# license for the pristine package is not an Open Source License, in which
|
||
# case the license is the MIT License). An "Open Source License" is a
|
||
# license that conforms to the Open Source Definition (Version 1.9)
|
||
# published by the Open Source Initiative.
|
||
|
||
# Please submit bugfixes or comments via https://bugs.opensuse.org/
|
||
#
|
||
|
||
|
||
%global prev_rust 1.29.2
|
||
# some sub-packages are versioned independantly
|
||
%global rustfmt_version 0.99.4
|
||
%global rls_version 0.130.5
|
||
%global clippy_version 0.0.212
|
||
# Build the rust target triple.
|
||
# Some rust arches don't match what SUSE labels them.
|
||
%global rust_arch %{_arch}
|
||
%global abi gnu
|
||
%ifarch armv7hl
|
||
%global rust_arch armv7
|
||
%global abi gnueabihf
|
||
%endif
|
||
%ifarch armv6hl
|
||
%global rust_arch arm
|
||
%global abi gnueabihf
|
||
%endif
|
||
%ifarch ppc64
|
||
%global rust_arch powerpc64
|
||
%endif
|
||
%ifarch ppc64le
|
||
%global rust_arch powerpc64le
|
||
%endif
|
||
# Must restrict the x86 build to i686 since i586 is currently unsupported
|
||
%ifarch %{ix86}
|
||
%global rust_arch i686
|
||
%endif
|
||
%global rust_triple %{rust_arch}-unknown-linux-%{abi}
|
||
# All sources and bootstraps are fetched form here
|
||
%global dl_url https://static.rust-lang.org/dist
|
||
# Rust doesn't function well when put in /usr/lib64
|
||
%global common_libdir %{_prefix}/lib
|
||
%global rustlibdir %{common_libdir}/rustlib
|
||
# Use hardening ldflags.
|
||
%global rustflags -Clink-arg=-Wl,-z,relro,-z,now
|
||
# We occasionally need to bootstrap builds due to breakage etc. Rust only guarantees
|
||
# v-1 will build v
|
||
%bcond_with rust_bootstrap
|
||
# Distro LLVM should be sufficient, this also cuts compile times byu almost half
|
||
%if 0%{?suse_version} <= 1315
|
||
%bcond_without bundled_llvm
|
||
%else
|
||
%bcond_with bundled_llvm
|
||
%endif
|
||
Name: rust
|
||
Version: 1.30.0
|
||
Release: 0
|
||
Summary: A systems programming language
|
||
License: MIT OR Apache-2.0
|
||
Group: Development/Languages/Rust
|
||
URL: https://www.rust-lang.org
|
||
Source0: %{dl_url}/rustc-%{version}-src.tar.xz
|
||
Source99: %{name}-rpmlintrc
|
||
Source100: %{dl_url}/rust-%{prev_rust}-x86_64-unknown-linux-gnu.tar.xz
|
||
Source101: %{dl_url}/rust-%{prev_rust}-i686-unknown-linux-gnu.tar.xz
|
||
Source102: %{dl_url}/rust-%{prev_rust}-aarch64-unknown-linux-gnu.tar.xz
|
||
Source103: %{dl_url}/rust-%{prev_rust}-armv7-unknown-linux-gnueabihf.tar.xz
|
||
Source104: %{dl_url}/rust-%{prev_rust}-arm-unknown-linux-gnueabihf.tar.xz
|
||
Source105: %{dl_url}/rust-%{prev_rust}-powerpc64-unknown-linux-gnu.tar.xz
|
||
Source106: %{dl_url}/rust-%{prev_rust}-powerpc64le-unknown-linux-gnu.tar.xz
|
||
Source107: %{dl_url}/rust-%{prev_rust}-s390x-unknown-linux-gnu.tar.xz
|
||
Patch0: ignore-Wstring-conversion.patch
|
||
# PATCH-FIX-OPENSUSE: edit src/librustc_llvm/build.rs to ignore GCC incompatible flag
|
||
BuildRequires: cmake
|
||
BuildRequires: curl
|
||
BuildRequires: fdupes
|
||
BuildRequires: gcc-c++
|
||
BuildRequires: git
|
||
BuildRequires: pkgconfig
|
||
BuildRequires: procps
|
||
BuildRequires: python3-base
|
||
BuildRequires: pkgconfig(libcurl)
|
||
BuildRequires: pkgconfig(libgit2) >= 0.23
|
||
BuildRequires: pkgconfig(libssh2) >= 1.4.3
|
||
BuildRequires: pkgconfig(openssl)
|
||
BuildRequires: pkgconfig(zlib)
|
||
Recommends: %{name}-doc
|
||
Recommends: %{name}-std
|
||
Recommends: cargo
|
||
Conflicts: rust
|
||
Conflicts: rustc-bootstrap
|
||
# Restrict the architectures as building rust relies on being initially
|
||
# bootstrapped before we can build the n+1 release
|
||
ExclusiveArch: x86_64 %{arm} aarch64 ppc64 ppc64le s390x %{ix86}
|
||
%ifarch %{ix86}
|
||
ExclusiveArch: i686
|
||
%endif
|
||
%if %{without bundled_llvm}
|
||
# LLVM gives incorrect C++ flags for GCC
|
||
BuildRequires: llvm-devel >= 5.0
|
||
%endif
|
||
%if %{without rust_bootstrap}
|
||
# We will now package cargo using the version number of rustc since
|
||
# it is being built from rust sources. Old cargo packages have a 0.x number
|
||
BuildRequires: cargo <= %{version}
|
||
BuildRequires: cargo >= %{prev_rust}
|
||
BuildRequires: rust <= %{version}
|
||
BuildRequires: rust >= %{prev_rust}
|
||
# This must be bumped to rust-std-static after 1.27.2 is in mainstream
|
||
BuildRequires: rust-std <= %{version}
|
||
BuildRequires: rust-std >= %{prev_rust}
|
||
%endif
|
||
|
||
%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. Rust also aims to achieve "zero-cost abstractions",
|
||
even though some of these abstractions feel like those of a
|
||
high-level language. Even then, Rust still allows precise
|
||
control like a low-level language would.
|
||
|
||
%package -n rust-std-static
|
||
Summary: Standard library for Rust
|
||
License: MIT OR Apache-2.0
|
||
Group: Development/Languages/Rust
|
||
Requires: %{name} = %{version}
|
||
Conflicts: rust-std
|
||
|
||
%description -n rust-std-static
|
||
This package includes the standard libraries for building
|
||
applications written in Rust.
|
||
|
||
%package -n rust-doc
|
||
Summary: Rust documentation
|
||
License: MIT OR Apache-2.0
|
||
Group: Development/Languages/Rust
|
||
Requires: %{name} = %{version}
|
||
|
||
%description -n rust-doc
|
||
Documentation for the Rust language.
|
||
|
||
%package -n rust-gdb
|
||
Summary: Gdb integration for rust binaries
|
||
License: MIT OR Apache-2.0
|
||
Group: Development/Languages/Rust
|
||
Requires: %{name} = %{version}
|
||
Supplements: packageand(%{name}:gdb)
|
||
Provides: rust-gdb = %{version}
|
||
|
||
%description -n rust-gdb
|
||
This subpackage provides pretty printers and a wrapper script for
|
||
invoking gdb on rust binaries.
|
||
|
||
%package -n rust-src
|
||
Summary: Sources for the Rust standard library
|
||
License: MIT OR Apache-2.0
|
||
Group: Development/Languages/Rust
|
||
Requires: %{name} = %{version}
|
||
BuildArch: noarch
|
||
|
||
%description -n rust-src
|
||
This package includes source files for the Rust standard library. This
|
||
is commonly used for function detail lookups in helper programs such
|
||
as RLS or racer.
|
||
|
||
%package -n rls
|
||
Summary: Language server for Rust lang
|
||
License: MIT OR Apache-2.0
|
||
Group: Development/Languages/Rust
|
||
Requires: %{name} = %{version}
|
||
Provides: rls = %{rls_version}
|
||
|
||
%description -n rls
|
||
The RLS 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.
|
||
It can be used with an IDE such as Gnome-Builder.
|
||
|
||
%package -n rust-analysis
|
||
Summary: Compiler analysis data for the Rust standard library
|
||
License: MIT OR Apache-2.0
|
||
Group: Development/Languages/Rust
|
||
Requires: rust-std-static = %{version}
|
||
|
||
%description -n rust-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 -n rustfmt
|
||
Summary: Code formatting tool for Rust lang
|
||
License: MIT OR Apache-2.0
|
||
Group: Development/Languages/Rust
|
||
Requires: %{name} = %{version}
|
||
Supplements: packageand(%{name}:cargo)
|
||
Provides: cargo-fmt = %{rustfmt_version}
|
||
Provides: rustfmt = %{rustfmt_version}
|
||
|
||
%description -n rustfmt
|
||
A tool for formatting Rust code according to style guidelines.
|
||
|
||
%package -n clippy
|
||
Summary: Lints to catch common mistakes and improve your Rust code
|
||
# /usr/bin/clippy-driver is dynamically linked against internal rustc libs
|
||
License: MPL-2.0
|
||
Group: Development/Languages/Rust
|
||
Requires: %{name} = %{version}
|
||
Requires: cargo
|
||
Provides: clippy = %{clippy_version}
|
||
|
||
%description -n clippy
|
||
A collection of lints to catch common mistakes and improve your Rust code.
|
||
|
||
%package -n cargo
|
||
Summary: The Rust package manage
|
||
License: MIT OR Apache-2.0
|
||
Group: Development/Languages/Rust
|
||
Requires: %{name} = %{version}
|
||
Conflicts: cargo
|
||
Provides: rustc:%{_bindir}/cargo = %{version}
|
||
|
||
%description -n cargo
|
||
Cargo downloads your Rust project’s dependencies and compiles your project.
|
||
|
||
%package -n cargo-doc
|
||
Version: %{version}
|
||
Release: 0
|
||
Summary: Documentation for Cargo
|
||
# Cargo no longer builds its own documentation
|
||
# https://github.com/rust-lang/cargo/pull/4904
|
||
License: MIT OR Apache-2.0
|
||
Group: Development/Languages/Rust
|
||
Requires: rust-doc = %{version}
|
||
BuildArch: noarch
|
||
|
||
%description -n cargo-doc
|
||
This package includes HTML documentation for Cargo.
|
||
|
||
%prep
|
||
%if %{with rust_bootstrap}
|
||
%ifarch x86_64
|
||
%setup -q -T -b 100 -n rust-%{prev_rust}-%{rust_triple}
|
||
%endif
|
||
%ifarch %{ix86}
|
||
%setup -q -T -b 101 -n rust-%{prev_rust}-i686-unknown-linux-%{abi}
|
||
%endif
|
||
%ifarch aarch64
|
||
%setup -q -T -b 102 -n rust-%{prev_rust}-%{rust_triple}
|
||
%endif
|
||
%ifarch armv7hl
|
||
%setup -q -T -b 103 -n rust-%{prev_rust}-%{rust_triple}
|
||
%endif
|
||
%ifarch armv6hl
|
||
%setup -q -T -b 104 -n rust-%{prev_rust}-%{rust_triple}
|
||
%endif
|
||
%ifarch ppc64
|
||
%setup -q -T -b 105 -n rust-%{prev_rust}-%{rust_triple}
|
||
%endif
|
||
%ifarch ppc64le
|
||
%setup -q -T -b 106 -n rust-%{prev_rust}-%{rust_triple}
|
||
%endif
|
||
%ifarch s390x
|
||
%setup -q -T -b 107 -n rust-%{prev_rust}-%{rust_triple}
|
||
%endif
|
||
%endif
|
||
./install.sh --components=cargo,rustc,rust-std-%{rust_triple} --prefix=.%{_prefix} --disable-ldconfig
|
||
|
||
%if %{with rust_bootstrap}
|
||
%global rust_root %{_builddir}/rust-%{prev_rust}-%{rust_triple}%{_prefix}
|
||
%else
|
||
%global rust_root %{_prefix}
|
||
%endif
|
||
|
||
%setup -q -n rustc-%{version}-src
|
||
|
||
%patch0 -p1
|
||
|
||
# use python3
|
||
sed -i -e "1s|#!.*|#!%{_bindir}/python3|" x.py
|
||
sed -i.try-py3 -e '/try python2.7/i try python3 "$@"' ./configure
|
||
|
||
# We never enable emscripten.
|
||
rm -rf src/llvm-emscripten/
|
||
# We never enable other LLVM tools.
|
||
rm -rf src/tools/clang
|
||
rm -rf src/tools/lld
|
||
rm -rf src/tools/lldb
|
||
|
||
%if %without bundled_llvm
|
||
rm -rf src/llvm/
|
||
%endif
|
||
|
||
# extract bundled licenses for packaging
|
||
sed -e '/*\//q' src/libbacktrace/backtrace.h \
|
||
>src/libbacktrace/LICENSE-libbacktrace
|
||
|
||
# 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":{ }/' '{}' '+'
|
||
|
||
# Fix rpmlint error "This script uses 'env' as an interpreter"
|
||
sed -i '1s|#!%{_bindir}/env python|#!%{_bindir}/python3|' src/jemalloc/scripts/gen_travis.py
|
||
sed -i '1s|#!%{_bindir}/env python|#!%{_bindir}/python3|' src/libcore/unicode/unicode.py
|
||
sed -i '1s|#!%{_bindir}/env bash|#!%{_bindir}/bash|' src/liblibc/ci/emscripten-entry.sh
|
||
find src/libcompiler_builtins/compiler-rt/lib/ -name '*.py' \
|
||
-exec sed -i -e '1s|#!%{_bindir}/env python|#!%{_bindir}/python3|' '{}' '+'
|
||
|
||
# Fix rpmlint warnings about these shell scripts not having a shebang
|
||
sed -i '1s|^|#!/bin/bash\n|' src/libbacktrace/ltmain.sh
|
||
sed -i '1s|^|#!/bin/bash\n|' src/libcompiler_builtins/ci/run.sh
|
||
sed -i '1s|^|#!/bin/bash\n|' src/liblibc/ci/run-docker.sh
|
||
sed -i '1s|^|#!/bin/bash\n|' src/stdsimd/ci/run-docker.sh
|
||
|
||
%build
|
||
# This should eventually migrate to distro policy
|
||
# Enable optimization, debuginfo, and link hardening.
|
||
export RUSTFLAGS="%{rustflags}"
|
||
# Cargo use system libs
|
||
export LIBGIT2_SYS_USE_PKG_CONFIG=1
|
||
export LIBSSH2_SYS_USE_PKG_CONFIG=1
|
||
|
||
# Debuginfo can exhaust memory on these architecture workers
|
||
%ifarch %{arm} %{ix86}
|
||
%define codegen_units --set codegen-units=4
|
||
%define debug_info --disable-debuginfo --disable-debuginfo-only-std --disable-debuginfo-tools --disable-debuginfo-lines
|
||
%else
|
||
%define debug_info --enable-debuginfo --disable-debuginfo-only-std --enable-debuginfo-tools --disable-debuginfo-lines
|
||
%endif
|
||
|
||
%configure \
|
||
--disable-option-checking \
|
||
--build=%{rust_triple} --host=%{rust_triple} --target=%{rust_triple} \
|
||
--local-rust-root=%{rust_root} \
|
||
--libdir=%{common_libdir} \
|
||
--docdir=%{_docdir}/%{name} \
|
||
%{!?with_bundled_llvm: --llvm-root=%{_prefix} --enable-llvm-link-shared} \
|
||
--disable-codegen-tests \
|
||
--enable-docs \
|
||
--enable-verbose-tests \
|
||
--disable-jemalloc \
|
||
--disable-rpath \
|
||
%{debug_info} \
|
||
--enable-extended \
|
||
--enable-vendor \
|
||
--release-channel="stable"
|
||
|
||
export CPPFLAGS="%{optflags}" # eliminate complain from RPMlint
|
||
|
||
# We need less codegen units for these arches since the workers are running out of memory
|
||
# This means we must apply a minimum of 2 CPUs to a worker in constraints.
|
||
%ifarch %{arm} %{ix86}
|
||
sed -i -e "s|#codegen-units = 1|codegen-units = 2|" config.toml
|
||
%endif
|
||
|
||
./x.py build
|
||
./x.py doc
|
||
|
||
%install
|
||
DESTDIR=%{buildroot} python3 ./x.py install
|
||
DESTDIR=%{buildroot} python3 ./x.py install src
|
||
|
||
# Remove executable permission from HTML documentation
|
||
# to prevent RPMLINT errors.
|
||
chmod -R -x+X %{buildroot}%{_docdir}/%{name}/html
|
||
|
||
# Remove lockfile to avoid errors.
|
||
rm %{buildroot}%{_docdir}/%{name}/html/.lock
|
||
|
||
# Sanitize the HTML documentation
|
||
find %{buildroot}%{_docdir}/%{name}/html -empty -delete
|
||
find %{buildroot}%{_docdir}/%{name}/html -type f -exec chmod -x '{}' '+'
|
||
|
||
# Remove the license files from _docdir: make install put duplicates there
|
||
rm %{buildroot}%{_docdir}/%{name}/{README.md,COPYRIGHT,LICENSE*}
|
||
rm %{buildroot}%{_docdir}/%{name}/*.old
|
||
|
||
# Remove installer artifacts (manifests, uninstall scripts, etc.)
|
||
find %{buildroot}%{rustlibdir} -maxdepth 1 -type f -exec rm -v '{}' '+'
|
||
|
||
# Remove hidden files from source
|
||
find %{buildroot}%{rustlibdir} -type f -name '.appveyor.yml -exec rm -v '{}' '+'
|
||
find %{buildroot}%{rustlibdir} -type f -name '.travis.yml -exec rm -v '{}' '+'
|
||
|
||
# The shared libraries should be executable for debuginfo extraction.
|
||
find %{buildroot}%{rustlibdir} -maxdepth 1 -type f -name '*.so' -exec chmod -v +x '{}' '+'
|
||
|
||
# extract bundled licenses for packaging - From fedora spec
|
||
sed -e '/*\//q' src/libbacktrace/backtrace.h > src/libbacktrace/LICENSE-libbacktrace
|
||
|
||
# Removes duiplicates and links them
|
||
%fdupes %{buildroot}%{_prefix}
|
||
|
||
# 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
|
||
|
||
# Move the bash-completition to correct directory for openSUSE
|
||
install -D %{buildroot}%{_sysconfdir}/bash_completion.d/cargo %{buildroot}%{_datadir}/bash-completion/completions/cargo
|
||
# There should be nothing here at all
|
||
rm -rf %{buildroot}%{_sysconfdir}
|
||
|
||
%post -p /sbin/ldconfig
|
||
%postun -p /sbin/ldconfig
|
||
|
||
%files
|
||
%if 0%{?suse_version} == 1315
|
||
%doc COPYRIGHT LICENSE-APACHE LICENSE-MIT
|
||
%doc src/libbacktrace/LICENSE-libbacktrace
|
||
%else
|
||
%license COPYRIGHT LICENSE-APACHE LICENSE-MIT
|
||
%license src/libbacktrace/LICENSE-libbacktrace
|
||
%endif
|
||
%doc CONTRIBUTING.md README.md RELEASES.md
|
||
%{_bindir}/rustc
|
||
%{_bindir}/rustdoc
|
||
%{_bindir}/rust-lldb
|
||
%{_mandir}/man1/rustc.1%{?ext_man}
|
||
%{_mandir}/man1/rustdoc.1%{?ext_man}
|
||
%{_prefix}/lib/lib*.so
|
||
%dir %{rustlibdir}
|
||
%dir %{rustlibdir}/%{rust_triple}
|
||
%dir %{rustlibdir}/%{rust_triple}/lib
|
||
%{rustlibdir}/%{rust_triple}/lib/*.so
|
||
%{rustlibdir}/%{rust_triple}/codegen-backends/
|
||
%exclude %{_docdir}/%{name}/html
|
||
%exclude %{rustlibdir}/src
|
||
|
||
%files -n rust-std-static
|
||
%dir %{rustlibdir}
|
||
%dir %{rustlibdir}/%{rust_triple}
|
||
%dir %{rustlibdir}/%{rust_triple}/lib
|
||
%{rustlibdir}/%{rust_triple}/lib/*.rlib
|
||
|
||
%files -n rust-gdb
|
||
%{_bindir}/rust-gdb
|
||
%dir %{rustlibdir}
|
||
%dir %{rustlibdir}%{_sysconfdir}
|
||
%{rustlibdir}%{_sysconfdir}/debugger_pretty_printers_common.py
|
||
%{rustlibdir}%{_sysconfdir}/gdb_load_rust_pretty_printers.py
|
||
%{rustlibdir}%{_sysconfdir}/gdb_rust_pretty_printing.py
|
||
%{rustlibdir}%{_sysconfdir}/lldb_rust_formatters.py
|
||
|
||
%files -n rust-doc
|
||
%dir %{_docdir}/%{name}
|
||
%dir %{_docdir}/%{name}/html
|
||
%doc %{_docdir}/%{name}/html/*
|
||
|
||
%files -n rust-src
|
||
%dir %{rustlibdir}
|
||
%{rustlibdir}/src
|
||
|
||
%files -n rls
|
||
%if 0%{?suse_version} == 1315
|
||
%doc src/tools/rls/LICENSE-{APACHE,MIT}
|
||
%else
|
||
%license src/tools/rls/LICENSE-{APACHE,MIT}
|
||
%endif
|
||
%doc src/tools/rls/{README.md,COPYRIGHT,debugging.md}
|
||
%{_bindir}/rls
|
||
|
||
%files analysis
|
||
%{rustlibdir}/%{rust_triple}/analysis/
|
||
|
||
%files -n rustfmt
|
||
%if 0%{?suse_version} == 1315
|
||
%doc src/tools/rustfmt/LICENSE-{APACHE,MIT}
|
||
%else
|
||
%license src/tools/rustfmt/LICENSE-{APACHE,MIT}
|
||
%endif
|
||
%doc src/tools/rustfmt/{README,CHANGELOG,Configurations}.md
|
||
%{_bindir}/cargo-fmt
|
||
%{_bindir}/rustfmt
|
||
|
||
%files -n clippy
|
||
%if 0%{?suse_version} == 1315
|
||
%doc src/tools/clippy/LICENSE
|
||
%else
|
||
%license src/tools/clippy/LICENSE
|
||
%endif
|
||
%doc src/tools/clippy/{README.md,CHANGELOG.md}
|
||
%{_bindir}/cargo-clippy
|
||
%{_bindir}/clippy-driver
|
||
|
||
%files -n cargo
|
||
%if 0%{?suse_version} == 1315
|
||
%doc src/tools/cargo/LICENSE-{APACHE,MIT,THIRD-PARTY}
|
||
%else
|
||
%license src/tools/cargo/LICENSE-{APACHE,MIT,THIRD-PARTY}
|
||
%endif
|
||
%{_bindir}/cargo
|
||
%{_mandir}/man1/cargo*.1%{?ext_man}
|
||
%dir %{_datadir}/bash-completion
|
||
%dir %{_datadir}/bash-completion/completions
|
||
%{_datadir}/bash-completion/completions/cargo
|
||
%dir %{_datadir}/zsh
|
||
%dir %{_datadir}/zsh/site-functions
|
||
%{_datadir}/zsh/site-functions/_cargo
|
||
%dir %{_datadir}/cargo
|
||
%dir %{_datadir}/cargo/registry
|
||
|
||
%files -n cargo-doc
|
||
%dir %{_docdir}/cargo
|
||
%{_docdir}/cargo/html
|
||
|
||
%changelog
|