From 4e6fd6eb3054b60e6d81646d66beb49ba6b4ec7c Mon Sep 17 00:00:00 2001 From: basebuilder_pel7ppc64lebuilder0 Date: Mon, 6 Mar 2023 03:01:49 +0100 Subject: [PATCH] update rust to 1.67.1 Signed-off-by: basebuilder_pel7ppc64lebuilder0 --- SPECS/rust.spec | 911 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 709 insertions(+), 202 deletions(-) diff --git a/SPECS/rust.spec b/SPECS/rust.spec index 4322e89f..4d59f836 100644 --- a/SPECS/rust.spec +++ b/SPECS/rust.spec @@ -1,65 +1,89 @@ -%global _optflags '-m64 -O3 -fsigned-char -fno-strength-reduce -mcpu=power8 -mtune=power8 -mpower8-fusion -mpower8-vector -mcrypto -maltivec -mvsx -mdirect-move -mpowerpc-gpopt -mpowerpc-gfxopt -fPIE -fPIC' -%global _smp_mflags -j16 -%define python /usr/bin/python3 - # Only x86_64 and i686 are Tier 1 platforms at this time. -# https://forge.rust-lang.org/platform-support.html -%global rust_arches x86_64 i686 armv7hl aarch64 ppc64 ppc64le s390x +# https://doc.rust-lang.org/nightly/rustc/platform-support.html +%global rust_arches x86_64 i686 armv7hl aarch64 ppc64le s390x # The channel can be stable, beta, or nightly %{!?channel: %global channel stable} -# To bootstrap from scratch, set the channel and date from src/stage0.txt -# e.g. 1.10.0 wants rustc: 1.9.0-2016-05-24 +# To bootstrap from scratch, set the channel and date from src/stage0.json +# e.g. 1.59.0 wants rustc: 1.58.0-2022-01-13 # or nightly wants some beta-YYYY-MM-DD -# Note that cargo matches the program version here, not its crate version. -%global bootstrap_rust 1.43.1 -%global bootstrap_cargo 1.43.1 -%global bootstrap_channel 1.43.1 -%global bootstrap_date 2020-05-07 +%global bootstrap_version 1.66.0 +%global bootstrap_channel 1.66.0 +%global bootstrap_date 2022-12-15 # Only the specified arches will use bootstrap binaries. +# NOTE: Those binaries used to be uploaded with every new release, but that was +# a waste of lookaside cache space when they're most often unused. +# Run "spectool -g rust.spec" after changing this and then "fedpkg upload" to +# add them to sources. Remember to remove them again after the bootstrap build! #global bootstrap_arches %%{rust_arches} +# Define a space-separated list of targets to ship rust-std-static-$triple for +# cross-compilation. The packages are noarch, but they're not fully +# reproducible between hosts, so only x86_64 actually builds it. +%ifarch x86_64 +%if 0%{?fedora} +%global mingw_targets i686-pc-windows-gnu x86_64-pc-windows-gnu +%endif +%if 0%{?fedora} || 0%{?rhel} >= 8 +%global wasm_targets wasm32-unknown-unknown wasm32-wasi +%endif +%endif + +# We need CRT files for *-wasi targets, at least as new as the commit in +# src/ci/docker/host-x86_64/dist-various-2/build-wasi-toolchain.sh +# (updated per https://github.com/rust-lang/rust/pull/96907) +%global wasi_libc_url https://github.com/WebAssembly/wasi-libc +%global wasi_libc_ref wasi-sdk-17 +%global wasi_libc_name wasi-libc-%{wasi_libc_ref} +%global wasi_libc_source %{wasi_libc_url}/archive/%{wasi_libc_ref}/%{wasi_libc_name}.tar.gz +%global wasi_libc_dir %{_builddir}/%{wasi_libc_name} + # Using llvm-static may be helpful as an opt-in, e.g. to aid LLVM rebases. %bcond_with llvm_static # We can also choose to just use Rust's bundled LLVM, in case the system LLVM -# is insufficient. Rust currently requires LLVM 7.0+. -%if 0%{?rhel} && !0%{?epel} -%bcond_without bundled_llvm -%else +# is insufficient. Rust currently requires LLVM 12.0+. +%global min_llvm_version 13.0.0 +%global bundled_llvm_version 15.0.6 %bcond_with bundled_llvm -%endif -# libgit2-sys expects to use its bundled library, which is sometimes just a -# snapshot of libgit2's master branch. This can mean the FFI declarations -# won't match our released libgit2.so, e.g. having changed struct fields. -# So, tread carefully if you toggle this... +# Requires stable libgit2 1.5, and not the next minor soname change. +# This needs to be consistent with the bindings in vendor/libgit2-sys. +%global min_libgit2_version 1.5.0 +%global next_libgit2_version 1.6.0~ +%global bundled_libgit2_version 1.5.0 +%if 0%{?fedora} >= 38 +%bcond_with bundled_libgit2 +%else %bcond_without bundled_libgit2 +%endif +# needs libssh2_userauth_publickey_frommemory +%global min_libssh2_version 1.6.0 %if 0%{?rhel} -%bcond_without bundled_libssh2 +# Disable cargo->libgit2->libssh2 on RHEL, as it's not approved for FIPS (rhbz1732949) +%bcond_without disabled_libssh2 %else -%bcond_with bundled_libssh2 +%bcond_with disabled_libssh2 %endif -%if 0%{?rhel} && 0%{?rhel} <= 7 +%if 0%{?rhel} && 0%{?rhel} < 8 %bcond_with curl_http2 %else %bcond_without curl_http2 %endif - # LLDB isn't available everywhere... -%if !0%{?rhel} -%bcond_without lldb -%else +%if 0%{?rhel} && 0%{?rhel} < 8 %bcond_with lldb +%else +%bcond_without lldb %endif Name: rust -Version: 1.44.1 +Version: 1.67.1 Release: 1%{?dist} Summary: The Rust Programming Language License: (ASL 2.0 or MIT) and (BSD and MIT) @@ -73,13 +97,35 @@ ExclusiveArch: %{rust_arches} %global rustc_package rustc-%{channel}-src %endif Source0: https://static.rust-lang.org/dist/%{rustc_package}.tar.xz +Source1: %{wasi_libc_source} +# Sources for bootstrap_arches are inserted by lua below + +# By default, rust tries to use "rust-lld" as a linker for WebAssembly. +Patch1: 0001-Use-lld-provided-by-system-for-wasm.patch + +# Set a substitute-path in rust-gdb for standard library sources. +Patch2: rustc-1.61.0-rust-gdb-substitute-path.patch + +# Fix Async Generator ABI (rhbz2168622) +# https://github.com/rust-lang/rust/pull/105082 +Patch3: 0001-Fix-Async-Generator-ABI.patch + +### RHEL-specific patches below ### + +# Simple rpm macros for rust-toolset (as opposed to full rust-packaging) +Source100: macros.rust-toolset -# https://github.com/rust-lang/rust/pull/71782 -Patch1: rust-pr71782-Use-a-non-existent-test-path.patch +# Disable cargo->libgit2->libssh2 on RHEL, as it's not approved for FIPS (rhbz1732949) +Patch100: rustc-1.65.0-disable-libssh2.patch -# libcurl on EL7 doesn't have http2, but since cargo requests it, curl-sys +# libcurl on RHEL7 doesn't have http2, but since cargo requests it, curl-sys # will try to build it statically -- instead we turn off the feature. -Patch10: rustc-1.44.0-disable-http2.patch +Patch101: rustc-1.67.0-disable-http2.patch + +# kernel rh1410097 causes too-small stacks for PIE. +# (affects RHEL6 kernels when building for RHEL7) +Patch102: rustc-1.65.0-no-default-pie.patch + # Get the Rust triple for any arch. %{lua: function rust_triple(arch) @@ -91,12 +137,13 @@ Patch10: rustc-1.44.0-disable-http2.patch arch = "powerpc64" elseif arch == "ppc64le" then arch = "powerpc64le" + elseif arch == "riscv64" then + arch = "riscv64gc" end return arch.."-unknown-linux-"..abi end} %global rust_triple %{lua: print(rust_triple(rpm.expand("%{_target_cpu}")))} -%define rust_triple powerpc64le-unknown-linux-gnu %if %defined bootstrap_arches # For each bootstrap arch, add an additional binary Source. @@ -106,30 +153,35 @@ end} for arch in string.gmatch(rpm.expand("%{bootstrap_arches}"), "%S+") do table.insert(bootstrap_arches, arch) end - local base = rpm.expand("https://static.rust-lang.org/dist/%{bootstrap_date}" - .."/rust-%{bootstrap_channel}") + local base = rpm.expand("https://static.rust-lang.org/dist/%{bootstrap_date}") + local channel = rpm.expand("%{bootstrap_channel}") local target_arch = rpm.expand("%{_target_cpu}") for i, arch in ipairs(bootstrap_arches) do - print(string.format("Source%d: %s-%s.tar.xz\n", - i, base, rust_triple(arch))) + i = 1000 + i * 3 + local suffix = channel.."-"..rust_triple(arch) + print(string.format("Source%d: %s/cargo-%s.tar.xz\n", i, base, suffix)) + print(string.format("Source%d: %s/rustc-%s.tar.xz\n", i+1, base, suffix)) + print(string.format("Source%d: %s/rust-std-%s.tar.xz\n", i+2, base, suffix)) if arch == target_arch then - rpm.define("bootstrap_source "..i) + rpm.define("bootstrap_source_cargo "..i) + rpm.define("bootstrap_source_rustc "..i+1) + rpm.define("bootstrap_source_std "..i+2) + rpm.define("bootstrap_suffix "..suffix) end end end} %endif %ifarch %{bootstrap_arches} -%global bootstrap_root rust-%{bootstrap_channel}-%{rust_triple} -%global local_rust_root %{_builddir}/%{bootstrap_root}/usr -Provides: bundled(%{name}-bootstrap) = %{bootstrap_rust} -%else -BuildRequires: cargo >= %{bootstrap_cargo} -%if 0%{?fedora} >= 27 -BuildRequires: (%{name} >= %{bootstrap_rust} with %{name} <= %{version}) +%global local_rust_root %{_builddir}/rust-%{bootstrap_suffix} +Provides: bundled(%{name}-bootstrap) = %{bootstrap_version} %else -BuildRequires: %{name} >= %{bootstrap_rust} +BuildRequires: cargo >= %{bootstrap_version} +%if 0%{?rhel} && 0%{?rhel} < 8 +BuildRequires: %{name} >= %{bootstrap_version} BuildConflicts: %{name} > %{version} +%else +BuildRequires: (%{name} >= %{bootstrap_version} with %{name} <= %{version}) %endif %global local_rust_root %{_prefix} %endif @@ -138,35 +190,36 @@ BuildRequires: make BuildRequires: gcc BuildRequires: gcc-c++ BuildRequires: ncurses-devel -BuildRequires: curl +# explicit curl-devel to avoid httpd24-curl (rhbz1540167) +BuildRequires: curl-devel BuildRequires: pkgconfig(libcurl) BuildRequires: pkgconfig(liblzma) BuildRequires: pkgconfig(openssl) BuildRequires: pkgconfig(zlib) -%if %without bundled_libgit2 -BuildRequires: pkgconfig(libgit2) >= 1.0.0 +%if %{without bundled_libgit2} +BuildRequires: (pkgconfig(libgit2) >= %{min_libgit2_version} with pkgconfig(libgit2) < %{next_libgit2_version}) %endif -%if %without bundled_libssh2 -# needs libssh2_userauth_publickey_frommemory -BuildRequires: pkgconfig(libssh2) >= 1.6.0 +%if %{without disabled_libssh2} +BuildRequires: pkgconfig(libssh2) >= %{min_libssh2_version} %endif -%if 0%{?rhel} && 0%{?rhel} <= 7 -%global python python2 +%if 0%{?rhel} == 8 +BuildRequires: platform-python %else -%global python python3 +BuildRequires: python3 %endif -BuildRequires: %{python} +BuildRequires: python3-rpm-macros %if %with bundled_llvm -BuildRequires: cmake3 >= 3.4.3 -Provides: bundled(llvm) = 9.0.1 +BuildRequires: cmake3 >= 3.13.4 +BuildRequires: ninja-build +Provides: bundled(llvm) = %{bundled_llvm_version} %else BuildRequires: cmake >= 2.8.11 -%if 0%{?epel} -%global llvm llvm9.0 +%if 0%{?epel} == 7 +%global llvm llvm13 %endif %if %defined llvm %global llvm_root %{_libdir}/%{llvm} @@ -174,21 +227,21 @@ BuildRequires: cmake >= 2.8.11 %global llvm llvm %global llvm_root %{_prefix} %endif -BuildRequires: %{llvm}-devel >= 8.0 +BuildRequires: %{llvm}-devel >= %{min_llvm_version} %if %with llvm_static BuildRequires: %{llvm}-static BuildRequires: libffi-devel %endif %endif -# make check needs "ps" for src/test/run-pass/wait-forked-but-failed-child.rs +# make check needs "ps" for src/test/ui/wait-forked-but-failed-child.rs BuildRequires: procps-ng # debuginfo-gdb tests need gdb BuildRequires: gdb -# TODO: work on unbundling these! -Provides: bundled(libbacktrace) = 1.0.20200219 +# For src/test/run-make/static-pie +BuildRequires: glibc-static # Virtual provides for folks who attempt "dnf install rustc" Provides: rustc = %{version}-%{release} @@ -202,6 +255,21 @@ Requires: %{name}-std-static%{?_isa} = %{version}-%{release} # https://github.com/rust-lang/rust/issues/11937 Requires: /usr/bin/cc +%if 0%{?epel} == 7 +%global devtoolset_name devtoolset-9 +BuildRequires: %{devtoolset_name}-binutils +BuildRequires: %{devtoolset_name}-gcc +BuildRequires: %{devtoolset_name}-gcc-c++ +%global devtoolset_bindir /opt/rh/%{devtoolset_name}/root/usr/bin +%global __cc %{devtoolset_bindir}/gcc +%global __cxx %{devtoolset_bindir}/g++ +%global __ar %{devtoolset_bindir}/ar +%global __ranlib %{devtoolset_bindir}/ranlib +%global __strip %{devtoolset_bindir}/strip +%else +%global __ranlib %{_bindir}/ranlib +%endif + # ALL Rust libraries are private, because they don't keep an ABI. %global _privatelibs lib(.*-[[:xdigit:]]{16}*|rustc.*)[.]so.* %global __provides_exclude ^(%{_privatelibs})$ @@ -211,25 +279,48 @@ Requires: /usr/bin/cc # While we don't want to encourage dynamic linking to Rust shared libraries, as # there's no stable ABI, we still need the unallocated metadata (.rustc) to -# support custom-derive plugins like #[proc_macro_derive(Foo)]. But eu-strip is -# very eager by default, so we have to limit it to -g, only debugging symbols. -%if 0%{?fedora} >= 27 -# Newer find-debuginfo.sh supports --keep-section, which is preferable. rhbz1465997 -%global _find_debuginfo_opts --keep-section .rustc -%else +# support custom-derive plugins like #[proc_macro_derive(Foo)]. +%if 0%{?rhel} && 0%{?rhel} < 8 +# eu-strip is very eager by default, so we have to limit it to -g, only debugging symbols. %global _find_debuginfo_opts -g %undefine _include_minidebuginfo +%else +# Newer find-debuginfo.sh supports --keep-section, which is preferable. rhbz1465997 +%global _find_debuginfo_opts --keep-section .rustc %endif -# Use hardening ldflags. -%global rustflags -Clink-arg=-Wl,-z,relro,-z,now - %if %{without bundled_llvm} %if "%{llvm_root}" == "%{_prefix}" || 0%{?scl:1} %global llvm_has_filecheck 1 %endif %endif +# We're going to override --libdir when configuring to get rustlib into a +# common path, but we'll fix the shared libraries during install. +%global common_libdir %{_prefix}/lib +%global rustlibdir %{common_libdir}/rustlib + +%if %defined mingw_targets +BuildRequires: mingw32-filesystem >= 95 +BuildRequires: mingw64-filesystem >= 95 +BuildRequires: mingw32-crt +BuildRequires: mingw64-crt +BuildRequires: mingw32-gcc +BuildRequires: mingw64-gcc +BuildRequires: mingw32-winpthreads-static +BuildRequires: mingw64-winpthreads-static +%endif + +%if %defined wasm_targets +BuildRequires: clang +BuildRequires: lld +# brp-strip-static-archive breaks the archive index for wasm +%global __os_install_post \ +%__os_install_post \ +find '%{buildroot}%{rustlibdir}'/wasm*/lib -type f -regex '.*\\.\\(a\\|rlib\\)' -print -exec '%{llvm_root}/bin/llvm-ranlib' '{}' ';' \ +%{nil} +%endif + %description Rust is a systems programming language that runs blazingly fast, prevents segfaults, and guarantees thread safety. @@ -239,11 +330,74 @@ This package includes the Rust compiler and documentation generator. %package std-static Summary: Standard library for Rust +Requires: %{name} = %{version}-%{release} +Requires: glibc-devel%{?_isa} >= 2.11 %description std-static This package includes the standard libraries for building applications written in Rust. +%if %defined mingw_targets +%{lua: do + for triple in string.gmatch(rpm.expand("%{mingw_targets}"), "%S+") do + local subs = { + triple = triple, + name = rpm.expand("%{name}"), + verrel = rpm.expand("%{version}-%{release}"), + mingw = string.sub(triple, 1, 4) == "i686" and "mingw32" or "mingw64", + } + local s = string.gsub([[ + +%package std-static-{{triple}} +Summary: Standard library for Rust {{triple}} +BuildArch: noarch +Provides: {{mingw}}-rust = {{verrel}} +Provides: {{mingw}}-rustc = {{verrel}} +Requires: {{mingw}}-crt +Requires: {{mingw}}-gcc +Requires: {{mingw}}-winpthreads-static +Requires: {{name}} = {{verrel}} + +%description std-static-{{triple}} +This package includes the standard libraries for building applications +written in Rust for the MinGW target {{triple}}. + +]], "{{(%w+)}}", subs) + print(s) + end +end} +%endif + +%if %defined wasm_targets +%{lua: do + for triple in string.gmatch(rpm.expand("%{wasm_targets}"), "%S+") do + local subs = { + triple = triple, + name = rpm.expand("%{name}"), + verrel = rpm.expand("%{version}-%{release}"), + wasi = string.find(triple, "-wasi") and 1 or 0, + } + local s = string.gsub([[ + +%package std-static-{{triple}} +Summary: Standard library for Rust {{triple}} +BuildArch: noarch +Requires: {{name}} = {{verrel}} +Requires: lld >= 8.0 +%if {{wasi}} +Provides: bundled(wasi-libc) +%endif + +%description std-static-{{triple}} +This package includes the standard libraries for building applications +written in Rust for the WebAssembly target {{triple}}. + +]], "{{(%w+)}}", subs) + print(s) + end +end} +%endif + %package debugger-common Summary: Common debugger pretty printers for Rust @@ -270,11 +424,7 @@ programs. Summary: LLDB pretty printers for Rust BuildArch: noarch Requires: lldb -%if 0%{?fedora} >= 31 Requires: python3-lldb -%else -Requires: python2-lldb -%endif Requires: %{name}-debugger-common = %{version}-%{release} %description lldb @@ -291,6 +441,12 @@ Summary: Documentation for Rust # Koji will fail the build in rpmdiff if two architectures build a noarch # subpackage differently, so instead we have to keep its arch. +# Cargo no longer builds its own documentation +# https://github.com/rust-lang/cargo/pull/4904 +# We used to keep a shim cargo-doc package, but now that's merged too. +Obsoletes: cargo-doc < 1.65.0~ +Provides: cargo-doc = %{version}-%{release} + %description doc This package includes HTML documentation for the Rust programming language and its standard library. @@ -299,15 +455,12 @@ its standard library. %package -n cargo Summary: Rust's package manager and build tool %if %with bundled_libgit2 -Provides: bundled(libgit2) = 1.0.0 -%endif -%if %with bundled_libssh2 -Provides: bundled(libssh2) = 1.9.0~dev +Provides: bundled(libgit2) = %{bundled_libgit2_version} %endif # For tests: -BuildRequires: git +BuildRequires: git-core # Cargo is not much use without Rust -Requires: rust +Requires: %{name} # "cargo vendor" is a builtin command starting with 1.37. The Obsoletes and # Provides are mostly relevant to RHEL, but harmless to have on Fedora/etc. too @@ -319,17 +472,6 @@ Cargo is a tool that allows Rust projects to declare their various dependencies and ensure that you'll always get a repeatable build. -%package -n cargo-doc -Summary: Documentation for Cargo -BuildArch: noarch -# Cargo no longer builds its own documentation -# https://github.com/rust-lang/cargo/pull/4904 -Requires: rust-doc = %{version}-%{release} - -%description -n cargo-doc -This package includes HTML documentation for Cargo. - - %package -n rustfmt Summary: Tool to find and fix Rust formatting issues Requires: cargo @@ -342,27 +484,26 @@ Provides: rustfmt-preview = %{version}-%{release} A tool for formatting Rust code according to style guidelines. -%package -n rls -Summary: Rust Language Server for IDE integration -%if %with bundled_libgit2 -Provides: bundled(libgit2) = 1.0.0 -%endif -%if %with bundled_libssh2 -Provides: bundled(libssh2) = 1.9.0~dev +%package analyzer +Summary: Rust implementation of the Language Server Protocol + +# The standard library sources are needed for most functionality. +%if 0%{?rhel} && 0%{?rhel} < 8 +Requires: %{name}-src +%else +Recommends: %{name}-src %endif -Requires: rust-analysis -# /usr/bin/rls is dynamically linked against internal rustc libs -Requires: %{name}%{?_isa} = %{version}-%{release} +# RLS is no longer available as of Rust 1.65, but we're including the stub +# binary that implements LSP just enough to recommend rust-analyzer. +Obsoletes: rls < 1.65.0~ # The component/package was rls-preview until Rust 1.31. Obsoletes: rls-preview < 1.31.6 -Provides: rls-preview = %{version}-%{release} -%description -n rls -The Rust Language Server provides a server that runs in the background, -providing IDEs, editors, and other tools with information about Rust programs. -It supports functionality such as 'goto definition', symbol search, -reformatting, and code completion, and enables renaming and refactorings. +%description analyzer +rust-analyzer is an implementation of Language Server Protocol for the Rust +programming language. It provides features like completion and goto definition +for many code editors, including VS Code, Emacs and Vim. %package -n clippy @@ -382,6 +523,11 @@ A collection of lints to catch common mistakes and improve your Rust code. %package src Summary: Sources for the Rust standard library BuildArch: noarch +%if 0%{?rhel} && 0%{?rhel} < 8 +Requires: %{name}-std-static = %{version}-%{release} +%else +Recommends: %{name}-std-static = %{version}-%{release} +%endif %description src This package includes source files for the Rust standard library. It may be @@ -390,7 +536,11 @@ useful as a reference for code completion tools in various editors. %package analysis Summary: Compiler analysis data for the Rust standard library -Requires: rust-std-static%{?_isa} = %{version}-%{release} +%if 0%{?rhel} && 0%{?rhel} < 8 +Requires: %{name}-std-static%{?_isa} = %{version}-%{release} +%else +Recommends: %{name}-std-static%{?_isa} = %{version}-%{release} +%endif %description analysis This package contains analysis data files produced with rustc's -Zsave-analysis @@ -398,37 +548,75 @@ feature for the Rust standard library. The RLS (Rust Language Server) uses this data to provide information about the Rust standard library. +%if 0%{?rhel} && 0%{?rhel} >= 8 + +%package toolset +Summary: Rust Toolset +Requires: rust%{?_isa} = %{version}-%{release} +Requires: cargo%{?_isa} = %{version}-%{release} + +%description toolset +This is the metapackage for Rust Toolset, bringing in the Rust compiler, +the Cargo package manager, and a few convenience macros for rpm builds. + +%endif + + %prep %ifarch %{bootstrap_arches} -%setup -q -n %{bootstrap_root} -T -b %{bootstrap_source} -./install.sh --components=cargo,rustc,rust-std-%{rust_triple} \ - --prefix=%{local_rust_root} --disable-ldconfig +rm -rf %{local_rust_root} +%setup -q -n cargo-%{bootstrap_suffix} -T -b %{bootstrap_source_cargo} +./install.sh --prefix=%{local_rust_root} --disable-ldconfig +%setup -q -n rustc-%{bootstrap_suffix} -T -b %{bootstrap_source_rustc} +./install.sh --prefix=%{local_rust_root} --disable-ldconfig +%setup -q -n rust-std-%{bootstrap_suffix} -T -b %{bootstrap_source_std} +./install.sh --prefix=%{local_rust_root} --disable-ldconfig test -f '%{local_rust_root}/bin/cargo' test -f '%{local_rust_root}/bin/rustc' %endif +%if %defined wasm_targets +%setup -q -n %{wasi_libc_name} -T -b 1 +%endif + %setup -q -n %{rustc_package} %patch1 -p1 +%patch2 -p1 +%patch3 -p1 + +%if %with disabled_libssh2 +%patch100 -p1 +%endif %if %without curl_http2 -%patch10 -p1 +%patch101 -p1 rm -rf vendor/libnghttp2-sys/ %endif -%if "%{python}" == "python3" -sed -i.try-py3 -e '/try python2.7/i try python3 "$@"' ./configure +%if 0%{?rhel} && 0%{?rhel} < 8 +%patch102 -p1 %endif +# Use our explicit python3 first +sed -i.try-python -e '/^try python3 /i try "%{__python3}" "$@"' ./configure + +# Set a substitute-path in rust-gdb for standard library sources. +sed -i.rust-src -e "s#@BUILDDIR@#$PWD#" ./src/etc/rust-gdb + %if %without bundled_llvm rm -rf src/llvm-project/ +mkdir -p src/llvm-project/libunwind/ %endif # Remove other unused vendored libraries rm -rf vendor/curl-sys/curl/ -rm -rf vendor/jemalloc-sys/jemalloc/ +rm -rf vendor/*jemalloc-sys*/jemalloc/ +rm -rf vendor/libmimalloc-sys/c_src/mimalloc/ +rm -rf vendor/libssh2-sys/libssh2/ rm -rf vendor/libz-sys/src/zlib/ +rm -rf vendor/libz-sys/src/zlib-ng/ rm -rf vendor/lzma-sys/xz-*/ rm -rf vendor/openssl-src/openssl/ @@ -436,17 +624,14 @@ rm -rf vendor/openssl-src/openssl/ rm -rf vendor/libgit2-sys/libgit2/ %endif -%if %without bundled_libssh2 -rm -rf vendor/libssh2-sys/libssh2/ +%if %with disabled_libssh2 +rm -rf vendor/libssh2-sys/ %endif # This only affects the transient rust-installer, but let it use our dynamic xz-libs sed -i.lzma -e '/LZMA_API_STATIC/d' src/bootstrap/tool.rs -# rename bundled license for packaging -cp -a vendor/backtrace-sys/src/libbacktrace/LICENSE{,-libbacktrace} - -%if %{with bundled_llvm} && 0%{?epel} +%if %{with bundled_llvm} && 0%{?epel} == 7 mkdir -p cmake-bin ln -s /usr/bin/cmake3 cmake-bin/cmake %global cmake_path $PWD/cmake-bin @@ -456,7 +641,7 @@ ln -s /usr/bin/cmake3 cmake-bin/cmake # 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 + compiler/rustc_llvm/src/lib.rs %endif # The configure macro will modify some autoconf-related files, which upsets @@ -469,31 +654,25 @@ find vendor -name .cargo-checksum.json \ # it's a shebang and make them executable. Then brp-mangle-shebangs gets upset... find -name '*.rs' -type f -perm /111 -exec chmod -v -x '{}' '+' - -%build - -%if %without bundled_libgit2 -# convince libgit2-sys to use the distro libgit2 -export LIBGIT2_SYS_USE_PKG_CONFIG=1 +# Set up shared environment variables for build/install/check +%global rust_env %{?rustflags:RUSTFLAGS="%{rustflags}"} +%if 0%{?cmake_path:1} +%global rust_env %{?rust_env} PATH="%{cmake_path}:$PATH" %endif - -%if %without bundled_libssh2 +%if %without disabled_libssh2 # convince libssh2-sys to use the distro libssh2 -export LIBSSH2_SYS_USE_PKG_CONFIG=1 +%global rust_env %{?rust_env} LIBSSH2_SYS_USE_PKG_CONFIG=1 %endif +%global export_rust_env %{?rust_env:export %{rust_env}} -%{?cmake_path:export PATH=%{cmake_path}:$PATH} -%{?rustflags:export RUSTFLAGS="%{rustflags}"} -# We're going to override --libdir when configuring to get rustlib into a -# common path, but we'll fix the shared libraries during install. -%global common_libdir %{_prefix}/lib -%global rustlibdir %{common_libdir}/rustlib +%build +%{export_rust_env} -%ifarch %{arm} %{ix86} s390x +%ifarch %{arm} %{ix86} # full debuginfo is exhausting memory; just do libstd for now # https://github.com/rust-lang/rust/issues/45854 -%if (0%{?fedora} && 0%{?fedora} < 27) || (0%{?rhel} && 0%{?rhel} <= 7) +%if 0%{?rhel} && 0%{?rhel} < 8 # Older rpmbuild didn't work with partial debuginfo coverage. %global debug_package %{nil} %define enable_debuginfo --debuginfo-level=0 @@ -504,40 +683,102 @@ export LIBSSH2_SYS_USE_PKG_CONFIG=1 %define enable_debuginfo --debuginfo-level=2 %endif -# We want the best optimization for std, but it caused problems for rpm-ostree -# on ppc64le to have all of the compiler_builtins in a single object: -# https://bugzilla.redhat.com/show_bug.cgi?id=1713090 -%ifnarch %{power64} -%define codegen_units_std --set rust.codegen-units-std=1 +# Some builders have relatively little memory for their CPU count. +# At least 2GB per CPU is a good rule of thumb for building rustc. +ncpus=$(/usr/bin/getconf _NPROCESSORS_ONLN) +max_cpus=$(( ($(free -g | awk '/^Mem:/{print $2}') + 1) / 2 )) +if [ "$max_cpus" -ge 1 -a "$max_cpus" -lt "$ncpus" ]; then + ncpus="$max_cpus" +fi + +%if %defined mingw_targets +%{lua: do + local cfg = "" + for triple in string.gmatch(rpm.expand("%{mingw_targets}"), "%S+") do + local subs = { + triple = triple, + mingw = string.sub(triple, 1, 4) == "i686" and "mingw32" or "mingw64", + } + local s = string.gsub([[ + --set target.{{triple}}.linker=%{{{mingw}}_cc} + --set target.{{triple}}.cc=%{{{mingw}}_cc} + --set target.{{triple}}.ar=%{{{mingw}}_ar} + --set target.{{triple}}.ranlib=%{{{mingw}}_ranlib} + ]], "{{(%w+)}}", subs) + cfg = cfg .. " " .. s + end + cfg = string.gsub(cfg, "%s+", " ") + rpm.define("mingw_target_config " .. cfg) +end} %endif -source /opt/rh/devtoolset-7/enable +%if %defined wasm_targets +%make_build --quiet -C %{wasi_libc_dir} CC=clang AR=llvm-ar NM=llvm-nm +%{lua: do + local wasi_root = rpm.expand("%{wasi_libc_dir}") .. "/sysroot" + local cfg = "" + for triple in string.gmatch(rpm.expand("%{wasm_targets}"), "%S+") do + if string.find(triple, "-wasi") then + cfg = cfg .. " --set target." .. triple .. ".wasi-root=" .. wasi_root + end + end + rpm.define("wasm_target_config "..cfg) +end} +%endif -./configure --disable-option-checking \ +%configure --disable-option-checking \ --libdir=%{common_libdir} \ --build=%{rust_triple} --host=%{rust_triple} --target=%{rust_triple} \ - --python=%{python} \ + --set target.%{rust_triple}.linker=%{__cc} \ + --set target.%{rust_triple}.cc=%{__cc} \ + --set target.%{rust_triple}.cxx=%{__cxx} \ + --set target.%{rust_triple}.ar=%{__ar} \ + --set target.%{rust_triple}.ranlib=%{__ranlib} \ + %{?mingw_target_config} \ + %{?wasm_target_config} \ + --python=%{__python3} \ --local-rust-root=%{local_rust_root} \ + --set build.rustfmt=/bin/true \ %{!?with_bundled_llvm: --llvm-root=%{llvm_root} \ %{!?llvm_has_filecheck: --disable-codegen-tests} \ %{!?with_llvm_static: --enable-llvm-link-shared } } \ + --disable-llvm-static-stdcpp \ --disable-rpath \ %{enable_debuginfo} \ + --set rust.codegen-units-std=1 \ + --set build.build-stage=2 \ + --set build.doc-stage=2 \ + --set build.install-stage=2 \ + --set build.test-stage=2 \ --enable-extended \ + --tools=analysis,cargo,clippy,rls,rust-analyzer,rustfmt,src \ --enable-vendor \ --enable-verbose-tests \ - %{?codegen_units_std} \ - --release-channel=%{channel} + --dist-compression-formats=gz \ + --release-channel=%{channel} \ + --release-description="%{?fedora:Fedora }%{?rhel:Red Hat }%{version}-%{release}" -%{python} ./x.py build -%{python} ./x.py doc +%{__python3} ./x.py build -j "$ncpus" +%{__python3} ./x.py doc +for triple in %{?mingw_targets} %{?wasm_targets}; do + %{__python3} ./x.py build --target=$triple std +done %install -%{?cmake_path:export PATH=%{cmake_path}:$PATH} -%{?rustflags:export RUSTFLAGS="%{rustflags}"} +%{export_rust_env} + +DESTDIR=%{buildroot} %{__python3} ./x.py install + +for triple in %{?mingw_targets} %{?wasm_targets}; do + DESTDIR=%{buildroot} %{__python3} ./x.py install --target=$triple std +done -DESTDIR=%{buildroot} %{python} ./x.py install +# The rls stub doesn't have an install target, but we can just copy it. +%{__install} -t %{buildroot}%{_bindir} build/%{rust_triple}/stage2-tools-bin/rls + +# These are transient files used by x.py dist and install +rm -rf ./build/dist/ ./build/tmp/ # Make sure the shared libraries are in the proper libdir %if "%{_libdir}" != "%{common_libdir}" @@ -553,15 +794,15 @@ find %{buildroot}%{_libdir} -maxdepth 1 -type f -name '*.so' \ # The libdir libraries are identical to those under rustlib/. It's easier on # library loading if we keep them in libdir, but we do need them in rustlib/ # to support dynamic linking for compiler plugins, so we'll symlink. -(cd "%{buildroot}%{rustlibdir}/%{rust_triple}/lib" && - find ../../../../%{_lib} -maxdepth 1 -name '*.so' | - while read lib; do - if [ -f "${lib##*/}" ]; then - # make sure they're actually identical! - cmp "$lib" "${lib##*/}" - ln -v -f -s -t . "$lib" - fi - done) +find %{buildroot}%{rustlibdir}/%{rust_triple}/lib/ -maxdepth 1 -type f -name '*.so' | +while read lib; do + lib2="%{buildroot}%{_libdir}/${lib##*/}" + if [ -f "$lib2" ]; then + # make sure they're actually identical! + cmp "$lib" "$lib2" + ln -v -f -r -s -T "$lib2" "$lib" + fi +done # Remove installer artifacts (manifests, uninstall scripts, etc.) find %{buildroot}%{rustlibdir} -maxdepth 1 -type f -exec rm -v '{}' '+' @@ -599,20 +840,47 @@ ln -sT ../rust/html/cargo/ %{buildroot}%{_docdir}/cargo/html %if %without lldb rm -f %{buildroot}%{_bindir}/rust-lldb -rm -f %{buildroot}%{rustlibdir}/etc/lldb_*.py* +rm -f %{buildroot}%{rustlibdir}/etc/lldb_* +%endif + +# We don't want Rust copies of LLVM tools (rust-lld, rust-llvm-dwp) +rm -f %{buildroot}%{rustlibdir}/%{rust_triple}/bin/rust-ll* + +%if 0%{?rhel} && 0%{?rhel} >= 8 +# This allows users to build packages using Rust Toolset. +%{__install} -D -m 644 %{S:100} %{buildroot}%{rpmmacrodir}/macros.rust-toolset %endif %check -%{?cmake_path:export PATH=%{cmake_path}:$PATH} -%{?rustflags:export RUSTFLAGS="%{rustflags}"} +%{export_rust_env} + +# Sanity-check the installed binaries, debuginfo-stripped and all. +%{buildroot}%{_bindir}/cargo new build/hello-world +env RUSTC=%{buildroot}%{_bindir}/rustc \ + LD_LIBRARY_PATH="%{buildroot}%{_libdir}:$LD_LIBRARY_PATH" \ + %{buildroot}%{_bindir}/cargo run --manifest-path build/hello-world/Cargo.toml + +# Try a build sanity-check for other targets +for triple in %{?mingw_targets} %{?wasm_targets}; do + env RUSTC=%{buildroot}%{_bindir}/rustc \ + LD_LIBRARY_PATH="%{buildroot}%{_libdir}:$LD_LIBRARY_PATH" \ + %{buildroot}%{_bindir}/cargo build --manifest-path build/hello-world/Cargo.toml --target=$triple +done # The results are not stable on koji, so mask errors and just log it. -%{python} ./x.py test --no-fail-fast || : -%{python} ./x.py test --no-fail-fast cargo || : -%{python} ./x.py test --no-fail-fast clippy || : -%{python} ./x.py test --no-fail-fast rls || : -%{python} ./x.py test --no-fail-fast rustfmt || : +# Some of the larger test artifacts are manually cleaned to save space. +%{__python3} ./x.py test --no-fail-fast || : +rm -rf "./build/%{rust_triple}/test/" + +%{__python3} ./x.py test --no-fail-fast cargo || : +rm -rf "./build/%{rust_triple}/stage2-tools/%{rust_triple}/cit/" + +%{__python3} ./x.py test --no-fail-fast clippy || : + +%{__python3} ./x.py test --no-fail-fast rust-analyzer || : + +%{__python3} ./x.py test --no-fail-fast rustfmt || : %ldconfig_scriptlets @@ -620,18 +888,17 @@ rm -f %{buildroot}%{rustlibdir}/etc/lldb_*.py* %files %license COPYRIGHT LICENSE-APACHE LICENSE-MIT -%license vendor/backtrace-sys/src/libbacktrace/LICENSE-libbacktrace %doc README.md %{_bindir}/rustc %{_bindir}/rustdoc %{_libdir}/*.so +%{_libexecdir}/rust-analyzer-proc-macro-srv %{_mandir}/man1/rustc.1* %{_mandir}/man1/rustdoc.1* %dir %{rustlibdir} %dir %{rustlibdir}/%{rust_triple} %dir %{rustlibdir}/%{rust_triple}/lib %{rustlibdir}/%{rust_triple}/lib/*.so -%exclude %{_bindir}/*miri %files std-static @@ -641,45 +908,94 @@ rm -f %{buildroot}%{rustlibdir}/etc/lldb_*.py* %{rustlibdir}/%{rust_triple}/lib/*.rlib +%if %defined mingw_targets +%{lua: do + for triple in string.gmatch(rpm.expand("%{mingw_targets}"), "%S+") do + local subs = { + triple = triple, + rustlibdir = rpm.expand("%{rustlibdir}"), + } + local s = string.gsub([[ + +%files std-static-{{triple}} +%dir {{rustlibdir}} +%dir {{rustlibdir}}/{{triple}} +%dir {{rustlibdir}}/{{triple}}/lib +{{rustlibdir}}/{{triple}}/lib/*.rlib +{{rustlibdir}}/{{triple}}/lib/rs*.o +%exclude {{rustlibdir}}/{{triple}}/lib/*.dll +%exclude {{rustlibdir}}/{{triple}}/lib/*.dll.a +%exclude {{rustlibdir}}/{{triple}}/lib/self-contained + +]], "{{(%w+)}}", subs) + print(s) + end +end} +%endif + + +%if %defined wasm_targets +%{lua: do + for triple in string.gmatch(rpm.expand("%{wasm_targets}"), "%S+") do + local subs = { + triple = triple, + rustlibdir = rpm.expand("%{rustlibdir}"), + wasi = string.find(triple, "-wasi") and 1 or 0, + } + local s = string.gsub([[ + +%files std-static-{{triple}} +%dir {{rustlibdir}} +%dir {{rustlibdir}}/{{triple}} +%dir {{rustlibdir}}/{{triple}}/lib +{{rustlibdir}}/{{triple}}/lib/*.rlib +%if {{wasi}} +%dir {{rustlibdir}}/{{triple}}/lib/self-contained +{{rustlibdir}}/{{triple}}/lib/self-contained/crt*.o +{{rustlibdir}}/{{triple}}/lib/self-contained/libc.a +%endif + +]], "{{(%w+)}}", subs) + print(s) + end +end} +%endif + + %files debugger-common %dir %{rustlibdir} %dir %{rustlibdir}/etc -%{rustlibdir}/etc/debugger_*.py* +%{rustlibdir}/etc/rust_*.py* %files gdb %{_bindir}/rust-gdb -%{rustlibdir}/etc/gdb_*.py* +%{rustlibdir}/etc/gdb_* %exclude %{_bindir}/rust-gdbgui %if %with lldb %files lldb %{_bindir}/rust-lldb -%{rustlibdir}/etc/lldb_*.py* +%{rustlibdir}/etc/lldb_* %endif %files doc %docdir %{_docdir}/%{name} %dir %{_docdir}/%{name} -%dir %{_docdir}/%{name}/html -%{_docdir}/%{name}/html/*/ -%{_docdir}/%{name}/html/*.html -%{_docdir}/%{name}/html/*.css -%{_docdir}/%{name}/html/*.ico -%{_docdir}/%{name}/html/*.js -%{_docdir}/%{name}/html/*.png -%{_docdir}/%{name}/html/*.svg -%{_docdir}/%{name}/html/*.woff -%license %{_docdir}/%{name}/html/*.txt -%license %{_docdir}/%{name}/html/*.md +%{_docdir}/%{name}/html +# former cargo-doc +%docdir %{_docdir}/cargo +%dir %{_docdir}/cargo +%{_docdir}/cargo/html %files -n cargo -%license src/tools/cargo/LICENSE-APACHE src/tools/cargo/LICENSE-MIT src/tools/cargo/LICENSE-THIRD-PARTY +%license src/tools/cargo/LICENSE-{APACHE,MIT,THIRD-PARTY} %doc src/tools/cargo/README.md %{_bindir}/cargo +%{_libexecdir}/cargo* %{_mandir}/man1/cargo*.1* %{_sysconfdir}/bash_completion.d/cargo %{_datadir}/zsh/site-functions/_cargo @@ -687,12 +1003,6 @@ rm -f %{buildroot}%{rustlibdir}/etc/lldb_*.py* %dir %{_datadir}/cargo/registry -%files -n cargo-doc -%docdir %{_docdir}/cargo -%dir %{_docdir}/cargo -%{_docdir}/cargo/html - - %files -n rustfmt %{_bindir}/rustfmt %{_bindir}/cargo-fmt @@ -700,10 +1010,11 @@ rm -f %{buildroot}%{rustlibdir}/etc/lldb_*.py* %license src/tools/rustfmt/LICENSE-{APACHE,MIT} -%files -n rls +%files analyzer %{_bindir}/rls -%doc src/tools/rls/{README.md,COPYRIGHT,debugging.md} -%license src/tools/rls/LICENSE-{APACHE,MIT} +%{_bindir}/rust-analyzer +%doc src/tools/rust-analyzer/README.md +%license src/tools/rust-analyzer/LICENSE-{APACHE,MIT} %files -n clippy @@ -722,7 +1033,203 @@ rm -f %{buildroot}%{rustlibdir}/etc/lldb_*.py* %{rustlibdir}/%{rust_triple}/analysis/ +%if 0%{?rhel} && 0%{?rhel} >= 8 +%files toolset +%{rpmmacrodir}/macros.rust-toolset +%endif + + %changelog +* Thu Feb 09 2023 Josh Stone - 1.67.1-1 +- Update to 1.67.1. + +* Fri Feb 03 2023 Josh Stone - 1.67.0-3 +- Unbundle libgit2 on Fedora 38. + +* Fri Jan 27 2023 Adam Williamson - 1.67.0-2 +- Backport PR #107360 to fix build of mesa +- Backport 675fa0b3 to fix bootstrapping failure + +* Thu Jan 26 2023 Josh Stone - 1.67.0-1 +- Update to 1.67.0. + +* Fri Jan 20 2023 Fedora Release Engineering - 1.66.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Tue Jan 10 2023 Josh Stone - 1.66.1-1 +- Update to 1.66.1. +- Security fix for CVE-2022-46176 + +* Thu Dec 15 2022 Josh Stone - 1.66.0-1 +- Update to 1.66.0. + +* Thu Nov 03 2022 Josh Stone - 1.65.0-1 +- Update to 1.65.0. +- rust-analyzer now obsoletes rls. + +* Thu Sep 22 2022 Josh Stone - 1.64.0-1 +- Update to 1.64.0. +- Add rust-analyzer. + +* Thu Aug 11 2022 Josh Stone - 1.63.0-1 +- Update to 1.63.0. + +* Sat Jul 23 2022 Fedora Release Engineering - 1.62.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Tue Jul 19 2022 Josh Stone - 1.62.1-1 +- Update to 1.62.1. + +* Wed Jul 13 2022 Josh Stone - 1.62.0-2 +- Prevent unsound coercions from functions with opaque return types. + +* Thu Jun 30 2022 Josh Stone - 1.62.0-1 +- Update to 1.62.0. + +* Mon May 23 2022 Josh Stone - 1.61.0-2 +- Add missing target_feature to the list of well known cfg names + +* Thu May 19 2022 Josh Stone - 1.61.0-1 +- Update to 1.61.0. +- Add rust-toolset for ELN. + +* Thu Apr 07 2022 Josh Stone - 1.60.0-1 +- Update to 1.60.0. + +* Fri Mar 25 2022 Josh Stone - 1.59.0-4 +- Fix the archive index for wasm32-wasi's libc.a + +* Fri Mar 04 2022 Stephen Gallagher - 1.59.0-3 +- Rebuild against the bootstrapped build + +* Fri Mar 04 2022 Stephen Gallagher - 1.59.0-2.1 +- Bootstrapping for Fedora ELN + +* Tue Mar 01 2022 Josh Stone - 1.59.0-2 +- Fix s390x hangs, rhbz#2058803 + +* Thu Feb 24 2022 Josh Stone - 1.59.0-1 +- Update to 1.59.0. +- Revert to libgit2 1.3.x + +* Sun Feb 20 2022 Igor Raits - 1.58.1-2 +- Rebuild for libgit2 1.4.x + +* Thu Jan 20 2022 Josh Stone - 1.58.1-1 +- Update to 1.58.1. + +* Thu Jan 13 2022 Josh Stone - 1.58.0-1 +- Update to 1.58.0. + +* Wed Jan 05 2022 Josh Stone - 1.57.0-2 +- Add rust-std-static-i686-pc-windows-gnu +- Add rust-std-static-x86_64-pc-windows-gnu + +* Thu Dec 02 2021 Josh Stone - 1.57.0-1 +- Update to 1.57.0, fixes rhbz#2028675. +- Backport rust#91070, fixes rhbz#1990657 +- Add rust-std-static-wasm32-wasi + +* Sun Nov 28 2021 Igor Raits - 1.56.1-3 +- De-bootstrap (libgit2) + +* Sun Nov 28 2021 Igor Raits - 1.56.1-2 +- Rebuild for libgit2 1.3.x + +* Mon Nov 01 2021 Josh Stone - 1.56.1-1 +- Update to 1.56.1. + +* Thu Oct 21 2021 Josh Stone - 1.56.0-1 +- Update to 1.56.0. + +* Tue Sep 14 2021 Sahana Prasad - 1.55.0-2 +- Rebuilt with OpenSSL 3.0.0 + +* Thu Sep 09 2021 Josh Stone - 1.55.0-1 +- Update to 1.55.0. +- Use llvm-ranlib for wasm rlibs; Fixes rhbz#2002612 + +* Tue Aug 24 2021 Josh Stone - 1.54.0-2 +- Build with LLVM 12 on Fedora 35+ + +* Thu Jul 29 2021 Josh Stone - 1.54.0-1 +- Update to 1.54.0. + +* Fri Jul 23 2021 Fedora Release Engineering - 1.53.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Thu Jul 08 2021 Josh Stone - 1.53.0-2 +- Exclude wasm on s390x for lack of lld + +* Thu Jun 17 2021 Josh Stone - 1.53.0-1 +- Update to 1.53.0. + +* Wed Jun 02 2021 Josh Stone - 1.52.1-2 +- Set rust.codegen-units-std=1 for all targets again. +- Add rust-std-static-wasm32-unknown-unknown. +- Rebuild f34 with LLVM 12. + +* Mon May 10 2021 Josh Stone - 1.52.1-1 +- Update to 1.52.1. + +* Thu May 06 2021 Josh Stone - 1.52.0-1 +- Update to 1.52.0. + +* Fri Apr 16 2021 Josh Stone - 1.51.0-3 +- Security fixes for CVE-2020-36323, CVE-2021-31162 + +* Wed Apr 14 2021 Josh Stone - 1.51.0-2 +- Security fixes for CVE-2021-28876, CVE-2021-28878, CVE-2021-28879 +- Fix bootstrap for stage0 rust 1.51 + +* Thu Mar 25 2021 Josh Stone - 1.51.0-1 +- Update to 1.51.0. + +* Thu Feb 11 2021 Josh Stone - 1.50.0-1 +- Update to 1.50.0. + +* Wed Jan 27 2021 Fedora Release Engineering - 1.49.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Tue Jan 05 2021 Josh Stone - 1.49.0-1 +- Update to 1.49.0. + +* Tue Dec 29 2020 Igor Raits - 1.48.0-3 +- De-bootstrap + +* Mon Dec 28 2020 Igor Raits - 1.48.0-2 +- Rebuild for libgit2 1.1.x + +* Thu Nov 19 2020 Josh Stone - 1.48.0-1 +- Update to 1.48.0. + +* Sat Oct 10 2020 Jeff Law - 1.47.0-2 +- Re-enable LTO + +* Thu Oct 08 2020 Josh Stone - 1.47.0-1 +- Update to 1.47.0. + +* Fri Aug 28 2020 Fabio Valentini - 1.46.0-2 +- Fix LTO with doctests (backported cargo PR#8657). + +* Thu Aug 27 2020 Josh Stone - 1.46.0-1 +- Update to 1.46.0. + +* Mon Aug 03 2020 Josh Stone - 1.45.2-1 +- Update to 1.45.2. + +* Thu Jul 30 2020 Josh Stone - 1.45.1-1 +- Update to 1.45.1. + +* Wed Jul 29 2020 Fedora Release Engineering - 1.45.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Thu Jul 16 2020 Josh Stone - 1.45.0-1 +- Update to 1.45.0. + +* Wed Jul 01 2020 Jeff Law - 1.44.1-2 +- Disable LTO + * Thu Jun 18 2020 Josh Stone - 1.44.1-1 - Update to 1.44.1.