@ -8,9 +8,9 @@
# To bootstrap from scratch, set the channel and date from src/stage0.json
# 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
# e.g. 1.59.0 wants rustc: 1.58.0-2022-01-13
# or nightly wants some beta-YYYY-MM-DD
# or nightly wants some beta-YYYY-MM-DD
%global bootstrap_version 1.61 .0
%global bootstrap_version 1.65 .0
%global bootstrap_channel 1.61 .0
%global bootstrap_channel 1.65 .0
%global bootstrap_date 2022-05-19
%global bootstrap_date 2022-11-03
# Only the specified arches will use bootstrap binaries.
# Only the specified arches will use bootstrap binaries.
# NOTE: Those binaries used to be uploaded with every new release, but that was
# NOTE: Those binaries used to be uploaded with every new release, but that was
@ -35,9 +35,9 @@
# src/ci/docker/host-x86_64/dist-various-2/build-wasi-toolchain.sh
# src/ci/docker/host-x86_64/dist-various-2/build-wasi-toolchain.sh
# (updated per https://github.com/rust-lang/rust/pull/96907)
# (updated per https://github.com/rust-lang/rust/pull/96907)
%global wasi_libc_url https://github.com/WebAssembly/wasi-libc
%global wasi_libc_url https://github.com/WebAssembly/wasi-libc
%global wasi_libc_commit 9886d3d6200fcc3726329966860fc058707406cd
%global wasi_libc_ref wasi-sdk-17
%global wasi_libc_name wasi-libc-%{wasi_libc_commit }
%global wasi_libc_name wasi-libc-%{wasi_libc_ref }
%global wasi_libc_source %{wasi_libc_url}/archive/%{wasi_libc_commit }/%{wasi_libc_name}.tar.gz
%global wasi_libc_source %{wasi_libc_url}/archive/%{wasi_libc_ref }/%{wasi_libc_name}.tar.gz
%global wasi_libc_dir %{_builddir}/%{wasi_libc_name}
%global wasi_libc_dir %{_builddir}/%{wasi_libc_name}
# Using llvm-static may be helpful as an opt-in, e.g. to aid LLVM rebases.
# Using llvm-static may be helpful as an opt-in, e.g. to aid LLVM rebases.
@ -45,15 +45,15 @@
# We can also choose to just use Rust's bundled LLVM, in case the system LLVM
# We can also choose to just use Rust's bundled LLVM, in case the system LLVM
# is insufficient. Rust currently requires LLVM 12.0+.
# is insufficient. Rust currently requires LLVM 12.0+.
%global min_llvm_version 12 .0.0
%global min_llvm_version 13 .0.0
%global bundled_llvm_version 14.0.4
%global bundled_llvm_version 15.0.2
%bcond_with bundled_llvm
%bcond_with bundled_llvm
# Requires stable libgit2 1.4 , and not the next minor soname change.
# Requires stable libgit2 1.5 , and not the next minor soname change.
# This needs to be consistent with the bindings in vendor/libgit2-sys.
# This needs to be consistent with the bindings in vendor/libgit2-sys.
%global min_libgit2_version 1.4 .0
%global min_libgit2_version 1.5 .0
%global next_libgit2_version 1.5 .0~
%global next_libgit2_version 1.6 .0~
%global bundled_libgit2_version 1.4.2
%global bundled_libgit2_version 1.5.0
%if 0%{?fedora} >= 99
%if 0%{?fedora} >= 99
%bcond_with bundled_libgit2
%bcond_with bundled_libgit2
%else
%else
@ -83,7 +83,7 @@
%endif
%endif
Name: rust
Name: rust
Version: 1.62 .1
Version: 1.66 .1
Release: 1%{?dist}
Release: 1%{?dist}
Summary: The Rust Programming Language
Summary: The Rust Programming Language
License: (ASL 2.0 or MIT) and (BSD and MIT)
License: (ASL 2.0 or MIT) and (BSD and MIT)
@ -106,21 +106,30 @@ Patch1: 0001-Use-lld-provided-by-system-for-wasm.patch
# Set a substitute-path in rust-gdb for standard library sources.
# Set a substitute-path in rust-gdb for standard library sources.
Patch2: rustc-1.61.0-rust-gdb-substitute-path.patch
Patch2: rustc-1.61.0-rust-gdb-substitute-path.patch
# https://github.com/rust-lang/rust/pull/103072
Patch3: 0001-compiletest-set-the-dylib-path-when-gathering-target.patch
# https://github.com/rust-lang/rust/pull/104001
Patch4: 0001-Improve-generating-Custom-entry-function.patch
# https://github.com/rust-lang/rust/pull/105468
Patch5: 0001-Mangle-main-as-__main_void-on-wasm32-wasi.patch
### RHEL-specific patches below ###
### RHEL-specific patches below ###
# Simple rpm macros for rust-toolset (as opposed to full rust-packaging)
# Simple rpm macros for rust-toolset (as opposed to full rust-packaging)
Source100: macros.rust-toolset
Source100: macros.rust-toolset
# Disable cargo->libgit2->libssh2 on RHEL, as it's not approved for FIPS (rhbz1732949)
# Disable cargo->libgit2->libssh2 on RHEL, as it's not approved for FIPS (rhbz1732949)
Patch100: rustc-1.59.0-disable-libssh2.patch
Patch100: rustc-1.6 5.0-disable-libssh2.patch
# libcurl on RHEL7 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.
# will try to build it statically -- instead we turn off the feature.
Patch101: rustc-1.62 .0-disable-http2.patch
Patch101: rustc-1.65 .0-disable-http2.patch
# kernel rh1410097 causes too-small stacks for PIE.
# kernel rh1410097 causes too-small stacks for PIE.
# (affects RHEL6 kernels when building for RHEL7)
# (affects RHEL6 kernels when building for RHEL7)
Patch102: rustc-1.58 .0-no-default-pie.patch
Patch102: rustc-1.6 5.0-no-default-pie.patch
# Get the Rust triple for any arch.
# Get the Rust triple for any arch.
@ -437,6 +446,12 @@ Summary: Documentation for Rust
# Koji will fail the build in rpmdiff if two architectures build a noarch
# Koji will fail the build in rpmdiff if two architectures build a noarch
# subpackage differently, so instead we have to keep its arch.
# 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
%description doc
This package includes HTML documentation for the Rust programming language and
This package includes HTML documentation for the Rust programming language and
its standard library.
its standard library.
@ -462,17 +477,6 @@ Cargo is a tool that allows Rust projects to declare their various dependencies
and ensure that you'll always get a repeatable build.
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: %{name}-doc = %{version}-%{release}
%description -n cargo-doc
This package includes HTML documentation for Cargo.
%package -n rustfmt
%package -n rustfmt
Summary: Tool to find and fix Rust formatting issues
Summary: Tool to find and fix Rust formatting issues
Requires: cargo
Requires: cargo
@ -485,24 +489,26 @@ Provides: rustfmt-preview = %{version}-%{release}
A tool for formatting Rust code according to style guidelines.
A tool for formatting Rust code according to style guidelines.
%package -n rls
%package analyzer
Summary: Rust Language Server for IDE integration
Summary: Rust implementation of the Language Server Protocol
%if %with bundled_libgit2
Provides: bundled(libgit2) = %{bundled_libgit2_version}
# The standard library sources are needed for most functionality.
%if 0%{?rhel} && 0%{?rhel} < 8
Requires: %{name}-src
%else
Recommends: %{name}-src
%endif
%endif
Requires: %{name}-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.
# The component/package was rls-preview until Rust 1.31.
Obsoletes: rls-preview < 1.31.6
Obsoletes: rls-preview < 1.31.6
Provides: rls-preview = %{version}-%{release}
%description -n rls
%description analyzer
The Rust Language Server provides a server that runs in the background,
rust-analyzer is an implementation of Language Server Protocol for the Rust
providing IDEs, editors, and other tools with information about Rust programs.
programming language. It provides features like completion and goto definition
It supports functionality such as 'goto definition', symbol search,
for many code editors, including VS Code, Emacs and Vim.
reformatting, and code completion, and enables renaming and refactorings.
%package -n clippy
%package -n clippy
@ -522,6 +528,11 @@ A collection of lints to catch common mistakes and improve your Rust code.
%package src
%package src
Summary: Sources for the Rust standard library
Summary: Sources for the Rust standard library
BuildArch: noarch
BuildArch: noarch
%if 0%{?rhel} && 0%{?rhel} < 8
Requires: %{name}-std-static = %{version}-%{release}
%else
Recommends: %{name}-std-static = %{version}-%{release}
%endif
%description src
%description src
This package includes source files for the Rust standard library. It may be
This package includes source files for the Rust standard library. It may be
@ -530,7 +541,11 @@ useful as a reference for code completion tools in various editors.
%package analysis
%package analysis
Summary: Compiler analysis data for the Rust standard library
Summary: Compiler analysis data for the Rust standard library
%if 0%{?rhel} && 0%{?rhel} < 8
Requires: %{name}-std-static%{?_isa} = %{version}-%{release}
Requires: %{name}-std-static%{?_isa} = %{version}-%{release}
%else
Recommends: %{name}-std-static%{?_isa} = %{version}-%{release}
%endif
%description analysis
%description analysis
This package contains analysis data files produced with rustc's -Zsave-analysis
This package contains analysis data files produced with rustc's -Zsave-analysis
@ -574,6 +589,9 @@ test -f '%{local_rust_root}/bin/rustc'
%patch1 -p1
%patch1 -p1
%patch2 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%if %with disabled_libssh2
%if %with disabled_libssh2
%patch100 -p1
%patch100 -p1
@ -630,7 +648,7 @@ ln -s /usr/bin/cmake3 cmake-bin/cmake
# Static linking to distro LLVM needs to add -lffi
# Static linking to distro LLVM needs to add -lffi
# https://github.com/rust-lang/rust/issues/34486
# https://github.com/rust-lang/rust/issues/34486
sed -i.ffi -e '$a #[link(name = "ffi")] extern {}' \
sed -i.ffi -e '$a #[link(name = "ffi")] extern {}' \
src/librustc_llvm /lib.rs
compiler/rustc_llvm/src /lib.rs
%endif
%endif
# The configure macro will modify some autoconf-related files, which upsets
# The configure macro will modify some autoconf-related files, which upsets
@ -658,7 +676,7 @@ find -name '*.rs' -type f -perm /111 -exec chmod -v -x '{}' '+'
%build
%build
%{export_rust_env}
%{export_rust_env}
%ifarch %{arm} %{ix86} s390x
%ifarch %{arm} %{ix86}
# full debuginfo is exhausting memory; just do libstd for now
# full debuginfo is exhausting memory; just do libstd for now
# https://github.com/rust-lang/rust/issues/45854
# https://github.com/rust-lang/rust/issues/45854
%if 0%{?rhel} && 0%{?rhel} < 8
%if 0%{?rhel} && 0%{?rhel} < 8
@ -735,19 +753,23 @@ end}
--disable-rpath \
--disable-rpath \
%{enable_debuginfo} \
%{enable_debuginfo} \
--set rust.codegen-units-std=1 \
--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 \
--enable-extended \
--tools=analysis,cargo,clippy,rls,rustfmt,src \
--tools=analysis,cargo,clippy,rls,rust-analyzer,rust fmt,src \
--enable-vendor \
--enable-vendor \
--enable-verbose-tests \
--enable-verbose-tests \
--dist-compression-formats=gz \
--dist-compression-formats=gz \
--release-channel=%{channel} \
--release-channel=%{channel} \
--release-description="%{?fedora:Fedora }%{?rhel:Red Hat }%{version}-%{release}"
--release-description="%{?fedora:Fedora }%{?rhel:Red Hat }%{version}-%{release}"
%{__python3} ./x.py build -j "$ncpus" --stage 2
%{__python3} ./x.py build -j "$ncpus"
%{__python3} ./x.py doc --stage 2
%{__python3} ./x.py doc
for triple in %{?mingw_targets} %{?wasm_targets}; do
for triple in %{?mingw_targets} %{?wasm_targets}; do
%{__python3} ./x.py build --stage 2 -- target=$triple std
%{__python3} ./x.py build --target=$triple std
done
done
%install
%install
@ -759,6 +781,9 @@ for triple in %{?mingw_targets} %{?wasm_targets}; do
DESTDIR=%{buildroot} %{__python3} ./x.py install --target=$triple std
DESTDIR=%{buildroot} %{__python3} ./x.py install --target=$triple std
done
done
# 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
# These are transient files used by x.py dist and install
rm -rf ./build/dist/ ./build/tmp/
rm -rf ./build/dist/ ./build/tmp/
@ -776,15 +801,15 @@ find %{buildroot}%{_libdir} -maxdepth 1 -type f -name '*.so' \
# The libdir libraries are identical to those under rustlib/. It's easier on
# 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/
# 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.
# to support dynamic linking for compiler plugins, so we'll symlink.
(cd "%{buildroot}%{rustlibdir}/%{rust_triple}/lib" &&
find %{buildroot}%{rustlibdir}/%{rust_triple}/lib/ -maxdepth 1 -type f -name '*.so' |
find ../../../../%{_lib} -maxdepth 1 -name '*.so' |
while read lib; do
while read lib; do
if [ -f "${lib##*/}" ]; then
lib2="%{buildroot}%{_libdir}/${lib##*/}"
if [ -f "$lib2" ]; then
# make sure they're actually identical!
# make sure they're actually identical!
cmp "$lib" "${lib##*/} "
cmp "$lib" "$lib2 "
ln -v -f -s -t . "$lib"
ln -v -f -r -s -T "$lib2" "$lib"
fi
fi
done)
done
# Remove installer artifacts (manifests, uninstall scripts, etc.)
# Remove installer artifacts (manifests, uninstall scripts, etc.)
find %{buildroot}%{rustlibdir} -maxdepth 1 -type f -exec rm -v '{}' '+'
find %{buildroot}%{rustlibdir} -maxdepth 1 -type f -exec rm -v '{}' '+'
@ -852,18 +877,17 @@ done
# The results are not stable on koji, so mask errors and just log it.
# The results are not stable on koji, so mask errors and just log it.
# Some of the larger test artifacts are manually cleaned to save space.
# Some of the larger test artifacts are manually cleaned to save space.
%{__python3} ./x.py test --no-fail-fast --stage 2 || :
%{__python3} ./x.py test --no-fail-fast || :
rm -rf "./build/%{rust_triple}/test/"
rm -rf "./build/%{rust_triple}/test/"
%{__python3} ./x.py test --no-fail-fast --stage 2 cargo || :
%{__python3} ./x.py test --no-fail-fast cargo || :
rm -rf "./build/%{rust_triple}/stage2-tools/%{rust_triple}/cit/"
rm -rf "./build/%{rust_triple}/stage2-tools/%{rust_triple}/cit/"
%{__python3} ./x.py test --no-fail-fast --stage 2 clippy || :
%{__python3} ./x.py test --no-fail-fast clippy || :
env RLS_TEST_WAIT_FOR_AGES=1 \
%{__python3} ./x.py test --no-fail-fast rust-analyzer || :
%{__python3} ./x.py test --no-fail-fast --stage 2 rls || :
%{__python3} ./x.py test --no-fail-fast --stage 2 rustfmt || :
%{__python3} ./x.py test --no-fail-fast rustfmt || :
%ldconfig_scriptlets
%ldconfig_scriptlets
@ -875,6 +899,7 @@ env RLS_TEST_WAIT_FOR_AGES=1 \
%{_bindir}/rustc
%{_bindir}/rustc
%{_bindir}/rustdoc
%{_bindir}/rustdoc
%{_libdir}/*.so
%{_libdir}/*.so
%{_libexecdir}/rust-analyzer-proc-macro-srv
%{_mandir}/man1/rustc.1*
%{_mandir}/man1/rustc.1*
%{_mandir}/man1/rustdoc.1*
%{_mandir}/man1/rustdoc.1*
%dir %{rustlibdir}
%dir %{rustlibdir}
@ -976,10 +1001,14 @@ end}
%{_docdir}/%{name}/html/*.woff2
%{_docdir}/%{name}/html/*.woff2
%license %{_docdir}/%{name}/html/*.txt
%license %{_docdir}/%{name}/html/*.txt
%license %{_docdir}/%{name}/html/*.md
%license %{_docdir}/%{name}/html/*.md
# former cargo-doc
%docdir %{_docdir}/cargo
%dir %{_docdir}/cargo
%{_docdir}/cargo/html
%files -n cargo
%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
%doc src/tools/cargo/README.md
%{_bindir}/cargo
%{_bindir}/cargo
%{_libexecdir}/cargo*
%{_libexecdir}/cargo*
@ -990,12 +1019,6 @@ end}
%dir %{_datadir}/cargo/registry
%dir %{_datadir}/cargo/registry
%files -n cargo-doc
%docdir %{_docdir}/cargo
%dir %{_docdir}/cargo
%{_docdir}/cargo/html
%files -n rustfmt
%files -n rustfmt
%{_bindir}/rustfmt
%{_bindir}/rustfmt
%{_bindir}/cargo-fmt
%{_bindir}/cargo-fmt
@ -1003,10 +1026,11 @@ end}
%license src/tools/rustfmt/LICENSE-{APACHE,MIT}
%license src/tools/rustfmt/LICENSE-{APACHE,MIT}
%files -n rls
%files analyzer
%{_bindir}/rls
%{_bindir}/rls
%doc src/tools/rls/{README.md,COPYRIGHT,debugging.md}
%{_bindir}/rust-analyzer
%license src/tools/rls/LICENSE-{APACHE,MIT}
%doc src/tools/rust-analyzer/README.md
%license src/tools/rust-analyzer/LICENSE-{APACHE,MIT}
%files -n clippy
%files -n clippy
@ -1032,6 +1056,23 @@ end}
%changelog
%changelog
* Wed Jan 11 2023 Josh Stone <jistone@redhat.com> - 1.66.1-1
- Update to 1.66.1.
* Fri Jan 06 2023 Josh Stone <jistone@redhat.com> - 1.65.0-1
- Update to 1.65.0.
- rust-analyzer now obsoletes rls.
* Wed Oct 12 2022 Josh Stone <jistone@redhat.com> - 1.64.0-2
- Rebuild for LLVM 15.0.1.
* Thu Sep 22 2022 Josh Stone <jistone@redhat.com> - 1.64.0-1
- Update to 1.64.0.
- Add rust-analyzer.
* Wed Sep 07 2022 Josh Stone <jistone@redhat.com> - 1.63.0-1
- Update to 1.63.0.
* Tue Jul 19 2022 Josh Stone <jistone@redhat.com> - 1.62.1-1
* Tue Jul 19 2022 Josh Stone <jistone@redhat.com> - 1.62.1-1
- Update to 1.62.1.
- Update to 1.62.1.