Hello community, here is the log from the commit of package rust for openSUSE:Factory checked in at 2018-11-13 16:33:00 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/rust (Old) and /work/SRC/openSUSE:Factory/.rust.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rust" Tue Nov 13 16:33:00 2018 rev:30 rq:648255 version:1.30.0 Changes: -------- --- /work/SRC/openSUSE:Factory/rust/rust.changes 2018-06-15 14:32:52.457753232 +0200 +++ /work/SRC/openSUSE:Factory/.rust.new/rust.changes 2018-11-13 17:48:19.055731243 +0100 @@ -1,0 +2,367 @@ +Sun Nov 11 19:43:09 UTC 2018 - Luke Jones <[email protected]> + +- Set the bootstrap flag in the spec file temporarily so that rings + will build rust without intervention. Must be reverted once all + releases are successful. + +------------------------------------------------------------------- +Fri Nov 9 06:42:47 UTC 2018 - Luke Jones <[email protected]> + +- Add Provides/Obsoletes/Conflicts to rust-std-static and cargo + +------------------------------------------------------------------- +Thu Nov 8 01:17:22 UTC 2018 - Neal Gompa <[email protected]> + +- Strengthen the dependency on rust-std-static to Requires + to fix crate package builds in OBS +- Use standard form rich dependencies for SUSE Linux 15 and newer + +------------------------------------------------------------------- +Tue Nov 6 12:32:37 UTC 2018 - Jan Engelhardt <[email protected]> + +- Fix second-person language and spellos. + +------------------------------------------------------------------- +Sun Nov 4 22:12:42 UTC 2018 - Luke Jones <[email protected]> + +- Add ignore-Wstring-conversion.patch: we 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. + +------------------------------------------------------------------- +Sat Nov 3 23:03:53 UTC 2018 - Luke Jones <[email protected]> + +- 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 + +------------------------------------------------------------------- +Sat Nov 3 07:12:01 UTC 2018 - Luke Jones <[email protected]> + +- 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. ++++ 170 more lines (skipped) ++++ between /work/SRC/openSUSE:Factory/rust/rust.changes ++++ and /work/SRC/openSUSE:Factory/.rust.new/rust.changes Old: ---- cargo-0.27.0-aarch64-unknown-linux-gnu.tar.gz cargo-0.27.0-arm-unknown-linux-gnueabihf.tar.gz cargo-0.27.0-armv7-unknown-linux-gnueabihf.tar.gz cargo-0.27.0-i686-unknown-linux-gnu.tar.gz cargo-0.27.0-powerpc64-unknown-linux-gnu.tar.gz cargo-0.27.0-powerpc64le-unknown-linux-gnu.tar.gz cargo-0.27.0-s390x-unknown-linux-gnu.tar.gz cargo-0.27.0-x86_64-unknown-linux-gnu.tar.gz config.toml rustc-1.26.2-src.tar.gz update-config-guess.patch New: ---- ignore-Wstring-conversion.patch rust-1.29.2-aarch64-unknown-linux-gnu.tar.xz rust-1.29.2-arm-unknown-linux-gnueabihf.tar.xz rust-1.29.2-armv7-unknown-linux-gnueabihf.tar.xz rust-1.29.2-i686-unknown-linux-gnu.tar.xz rust-1.29.2-powerpc64-unknown-linux-gnu.tar.xz rust-1.29.2-powerpc64le-unknown-linux-gnu.tar.xz rust-1.29.2-s390x-unknown-linux-gnu.tar.xz rust-1.29.2-x86_64-unknown-linux-gnu.tar.xz rustc-1.30.0-src.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ rust.spec ++++++ --- /var/tmp/diff_new_pack.0kF21r/_old 2018-11-13 17:48:39.459702830 +0100 +++ /var/tmp/diff_new_pack.0kF21r/_new 2018-11-13 17:48:39.463702824 +0100 @@ -2,7 +2,7 @@ # spec file for package rust # # Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. -# Copyright (c) 2017 Luke Jones, [email protected] +# Copyright (c) 2018 Luke Jones, [email protected] # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -13,12 +13,17 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # -%global prev_rust 1.25.0 -%global cargo_version 0.27.0 +%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 @@ -40,41 +45,60 @@ %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 -%bcond_with rust_bootstrap +# 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 +# Temporarily set the bootstrap flag in the spec so rings will build without intervention +%bcond_without 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.26.2 +Version: 1.30.0 Release: 0 Summary: A systems programming language License: MIT OR Apache-2.0 -Group: Development/Languages/Other +Group: Development/Languages/Rust URL: https://www.rust-lang.org -Source0: %{dl_url}/rustc-%{version}-src.tar.gz -Source1: config.toml +Source0: %{dl_url}/rustc-%{version}-src.tar.xz Source99: %{name}-rpmlintrc -Source100: cargo-%{cargo_version}-x86_64-unknown-linux-gnu.tar.gz -Source101: cargo-%{cargo_version}-i686-unknown-linux-gnu.tar.gz -Source102: cargo-%{cargo_version}-aarch64-unknown-linux-gnu.tar.gz -Source103: cargo-%{cargo_version}-armv7-unknown-linux-gnueabihf.tar.gz -Source104: cargo-%{cargo_version}-arm-unknown-linux-gnueabihf.tar.gz -Source105: cargo-%{cargo_version}-powerpc64-unknown-linux-gnu.tar.gz -Source106: cargo-%{cargo_version}-powerpc64le-unknown-linux-gnu.tar.gz -Source107: cargo-%{cargo_version}-s390x-unknown-linux-gnu.tar.gz -Patch0: update-config-guess.patch -# PATCH-FIX-OPENSUSE: Set DT_SONAME when building dylibs -BuildRequires: ccache -BuildRequires: cmake >= 3.4.3 +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 +# PATCH-FIX-OPENSUSE: edit src/librustc_llvm/build.rs to ignore GCC incompatible flag +Patch0: ignore-Wstring-conversion.patch +BuildRequires: cmake BuildRequires: curl BuildRequires: fdupes BuildRequires: gcc-c++ -BuildRequires: llvm-devel -BuildRequires: ninja +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) +# The compiler is not generally useful without the std library installed +# And the std library is exactly specific to the version of the compiler +Requires: %{name}-std-static = %{version} Recommends: %{name}-doc -Recommends: %{name}-std Recommends: cargo Conflicts: rust Conflicts: rustc-bootstrap @@ -82,16 +106,22 @@ # bootstrapped before we can build the n+1 release ExclusiveArch: x86_64 %{arm} aarch64 ppc64 ppc64le s390x %{ix86} %ifarch %{ix86} -BuildArch: i686 +ExclusiveArch: i686 %endif -%if %{with rust_bootstrap} -BuildRequires: rust-std-bootstrap = %{prev_rust} -BuildRequires: rustc-bootstrap = %{prev_rust} -%else +%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} -BuildRequires: rust-std <= %{version} -BuildRequires: rust-std >= %{prev_rust} +# This must be bumped to rust-std-static after 1.27.2 is in mainstream +BuildRequires: rust-std-static <= %{version} +BuildRequires: rust-std-static >= %{prev_rust} %endif %description @@ -109,32 +139,41 @@ high-level language. Even then, Rust still allows precise control like a low-level language would. -%package -n rust-std +%package -n rust-std-static Summary: Standard library for Rust -Group: Development/Languages/Other +License: MIT OR Apache-2.0 +Group: Development/Languages/Rust Requires: %{name} = %{version} -Conflicts: rust-std +Obsoletes: rust-std < %{version} +Conflicts: rust-std < %{version} +Provides: rust-std = %{version} -%description -n 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 -Group: Development/Languages/Other +License: MIT OR Apache-2.0 +Group: Development/Languages/Rust Requires: %{name} = %{version} -Conflicts: rust-doc %description -n rust-doc Documentation for the Rust language. %package -n rust-gdb Summary: Gdb integration for rust binaries -Group: Development/Languages/Other +License: MIT OR Apache-2.0 +Group: Development/Languages/Rust Requires: %{name} = %{version} +%if 0%{?suse_version} && 0%{?suse_version} < 1500 +# Legacy SUSE-only form Supplements: packageand(%{name}:gdb) -Conflicts: rust-gdb -Provides: rustc:%{_bindir}/rust-gdb +%else +# Standard form +Supplements: (%{name} and gdb) +%endif +Provides: rust-gdb = %{version} %description -n rust-gdb This subpackage provides pretty printers and a wrapper script for @@ -142,7 +181,8 @@ %package -n rust-src Summary: Sources for the Rust standard library -Group: Development/Languages/Other +License: MIT OR Apache-2.0 +Group: Development/Languages/Rust Requires: %{name} = %{version} BuildArch: noarch @@ -151,53 +191,207 @@ 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} +%if 0%{?suse_version} && 0%{?suse_version} < 1500 +# Legacy SUSE-only form +Supplements: packageand(%{name}:cargo) +%else +# Standard form +Supplements: (%{name} and cargo) +%endif +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 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 Rust code. + +%package -n cargo +Summary: The Rust package manager +License: MIT OR Apache-2.0 +Group: Development/Languages/Rust +Requires: %{name} = %{version} +Obsoletes: cargo < %{version} +Conflicts: cargo < %{version} +Provides: rustc:%{_bindir}/cargo = %{version} + +%description -n cargo +Cargo downloads dependencies of Rust projects and compiles it. + +%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 cargo-%{cargo_version}-%{rust_triple} +%setup -q -T -b 100 -n rust-%{prev_rust}-%{rust_triple} %endif %ifarch %{ix86} -%setup -q -T -b 101 -n cargo-%{cargo_version}-i686-unknown-linux-%{abi} +%setup -q -T -b 101 -n rust-%{prev_rust}-i686-unknown-linux-%{abi} %endif %ifarch aarch64 -%setup -q -T -b 102 -n cargo-%{cargo_version}-%{rust_triple} +%setup -q -T -b 102 -n rust-%{prev_rust}-%{rust_triple} %endif %ifarch armv7hl -%setup -q -T -b 103 -n cargo-%{cargo_version}-%{rust_triple} +%setup -q -T -b 103 -n rust-%{prev_rust}-%{rust_triple} %endif %ifarch armv6hl -%setup -q -T -b 104 -n cargo-%{cargo_version}-%{rust_triple} +%setup -q -T -b 104 -n rust-%{prev_rust}-%{rust_triple} %endif %ifarch ppc64 -%setup -q -T -b 105 -n cargo-%{cargo_version}-%{rust_triple} +%setup -q -T -b 105 -n rust-%{prev_rust}-%{rust_triple} %endif %ifarch ppc64le -%setup -q -T -b 106 -n cargo-%{cargo_version}-%{rust_triple} +%setup -q -T -b 106 -n rust-%{prev_rust}-%{rust_triple} %endif %ifarch s390x -%setup -q -T -b 107 -n cargo-%{cargo_version}-%{rust_triple} +%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 -# The cargo binary is only used to build rust and is not shipped -%global cargo_bin %{_builddir}/cargo-%{cargo_version}-%{rust_triple}/cargo/bin/cargo +%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 -sed -e 's:<cargo-bin>:%{cargo_bin}:g' \ - -e 's:<rust-triple>:%{rust_triple}:g' \ - -e 's:<prefix>:%{_prefix}:g' \ - -e 's:<bindir>:%{_prefix}/bin:g' \ - -e 's:<libdir>:%{common_libdir}:g' \ - -e 's:<mandir>:%{_mandir}:g' \ - -e 's:<docdir>:%{_docdir}/%{name}:g' \ - %{SOURCE1} > config.toml + +%patch0 -p1 # use python3 -sed -i -e "1s|#!.*|#!/usr/bin/python3|" x.py +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 --enable-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 -RUST_BACKTRACE=1 python3 ./x.py build --config config.toml -python3 ./x.py doc --config config.toml + +# 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 @@ -214,26 +408,39 @@ find %{buildroot}%{_docdir}/%{name}/html -empty -delete find %{buildroot}%{_docdir}/%{name}/html -type f -exec chmod -x '{}' '+' -# Remove surplus files -rm %{buildroot}%{rustlibdir}/components -rm %{buildroot}%{rustlibdir}/manifest-rust* -rm %{buildroot}%{rustlibdir}/install.log -rm %{buildroot}%{rustlibdir}/uninstall.sh -rm %{buildroot}%{rustlibdir}/rust-installer-version +# 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 -# Remove the license files from _docdir: make install put duplicates there -rm %{buildroot}%{_docdir}/%{name}/{README.md,COPYRIGHT,LICENSE-APACHE,LICENSE-MIT} - -%fdupes %{buildroot}%{_prefix} +# The html docs for x86 and x86_64 are the same in most places +%fdupes %{buildroot}%{_docdir}/%{name}/html +# We don't want to run fdupes over much else (like src) or it may cause weirdness. + +# 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 @@ -250,20 +457,22 @@ %{_bindir}/rustc %{_bindir}/rustdoc %{_bindir}/rust-lldb -%{_mandir}/man1/rustc.1* -%{_mandir}/man1/rustdoc.1* +%{_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 +%files -n rust-std-static %dir %{rustlibdir} %dir %{rustlibdir}/%{rust_triple} -%dir %{rustlibdir}/%{rust_triple}/codegen-backends %dir %{rustlibdir}/%{rust_triple}/lib -%{rustlibdir}/%{rust_triple}/codegen-backends/librustc_trans-llvm.so %{rustlibdir}/%{rust_triple}/lib/*.rlib -%{rustlibdir}/%{rust_triple}/lib/*.so %files -n rust-gdb %{_bindir}/rust-gdb @@ -283,4 +492,57 @@ %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 ++++++ _constraints ++++++ --- /var/tmp/diff_new_pack.0kF21r/_old 2018-11-13 17:48:39.491702784 +0100 +++ /var/tmp/diff_new_pack.0kF21r/_new 2018-11-13 17:48:39.491702784 +0100 @@ -1,7 +1,7 @@ <?xml version="1.0"?> <constraints> <hardware> - <processors>8</processors> + <processors>4</processors> <memory> <size unit="G">8</size> </memory> @@ -11,14 +11,41 @@ </hardware> <overwrite> <conditions> + <arch>i586</arch> <arch>armv6l</arch> <arch>armv7l</arch> </conditions> <hardware> - <memory> - <size unit="M">768</size> - </memory> + <processors>2</processors> + <physicalmemory> + <size unit="G">4</size> + </physicalmemory> + <disk> + <size unit="G">15</size> + </disk> + </hardware> + </overwrite> + <overwrite> + <conditions> + <arch>x86_64</arch> + </conditions> + <hardware> + <physicalmemory> + <size unit="G">8</size> + </physicalmemory> + </hardware> + </overwrite> + <overwrite> + <conditions> + <arch>aarch64</arch> + </conditions> + <hardware> + <physicalmemory> + <size unit="G">8</size> + </physicalmemory> + <disk> + <size unit="G">10</size> + </disk> </hardware> </overwrite> </constraints> - ++++++ ignore-Wstring-conversion.patch ++++++ *** rustc-1.30.0-src/src/librustc_llvm/build.rs 2018-10-25 09:00:01.000000000 +1300 --- rust-patch/src/librustc_llvm/build.rs 2018-11-05 07:31:35.672765505 +1300 *************** *** 147,152 **** --- 147,158 ---- continue; } + // hack to avoid flag on openSUSE which is incompatible with GCC + if flag.starts_with("-W") && flag.contains("string-conversion") { + continue; + } + + cfg.flag(flag); } ++++++ rust-rpmlintrc ++++++ --- /var/tmp/diff_new_pack.0kF21r/_old 2018-11-13 17:48:39.531702729 +0100 +++ /var/tmp/diff_new_pack.0kF21r/_new 2018-11-13 17:48:39.531702729 +0100 @@ -1,8 +1,8 @@ # filters for rust-src +addFilter("devel-dependency rust-std-static") addFilter("devel-file-in-non-devel-package.*/usr/lib/rustlib/src/.*") -addFilter("non-executable-script*./usr/lib/rustlib/src/.*") # filters for rust-std # rlib not in elf format addFilter("binaryinfo-readelf-failed*./usr/lib/rustlib/*.rlib") # rust has no stable ABI as of yet, soname is of no use yet -addFilter("no-soname.*/usr/lib/lib.*") +addFilter("no-soname.*/usr/lib/rustlib/.*")
