File rust.spec of Package rust
Name: rust
Version: 1.91.0
Release: %mkrel 1
Summary: Rust programming language compiler
License: MIT AND Apache-2.0
Group: Development/Languages
URL: https://www.rust-lang.org/
Conflicts: rust < 1.91.0
Obsoletes: rust < 1.91.0
Source0: rustc-%{version}-src.tar.xz
Source1: rustc-1.90.0-x86_64-unknown-linux-gnu.tar.xz
Source2: rust-std-1.90.0-x86_64-unknown-linux-gnu.tar.xz
# Cargo is now split; handled in cargo.spec, not here
BuildRequires: llvm21-devel
BuildRequires: clang21-devel
BuildRequires: cmake
BuildRequires: ninja
BuildRequires: python3
BuildRequires: libstdc++-devel
BuildRequires: pkgconfig(zlib)
BuildRequires: pkgconfig(sqlite3)
BuildRequires: coreutils
BuildRequires: lib64openssl-devel
%description
Rust is a systems programming language focused on safety, speed, and concurrency.
This package provides the Rust compiler (`rustc`), standard libraries, and developer tools.
%package clippy
Summary: Rust Clippy linter
Group: Development/Languages
%description clippy
Clippy is a collection of lints to catch common mistakes and improve Rust code.
%package rustfmt
Summary: Rust code formatter
Group: Development/Languages
%description rustfmt
Rustfmt formats Rust code according to style guidelines.
%package rust-analyzer
Summary: Rust language server
Group: Development/Languages
%description rust-analyzer
Rust Analyzer provides IDE-like features for Rust, including code completion and diagnostics.
%package std
Summary: Rust standard libraries
Group: Development/Languages
%description std
Standard libraries for Rust, required to run Rust programs.
%prep
%setup -q -n rustc-%{version}-src
# Vendored artifacts for stage0
mkdir -p src/bootstrap/cache/2025-09-18 build/cache/2025-09-18
cp %{SOURCE1} src/bootstrap/cache/2025-09-18/
cp %{SOURCE2} src/bootstrap/cache/2025-09-18/
cp %{SOURCE1} build/cache/2025-09-18/
cp %{SOURCE2} build/cache/2025-09-18/
# Stub out download_component() to avoid network
awk '
/^def download_component/ {
print "def download_component(info):"
print " print(\"using vendored artifact: {}\".format(getattr(info, \"url\", \"\")))"
print " return"
skip=1
next
}
skip && /^def / { skip=0 }
!skip { print }
' src/bootstrap/bootstrap.py > src/bootstrap/bootstrap.py.new && mv src/bootstrap/bootstrap.py.new src/bootstrap/bootstrap.py
# Normalize python shebangs
find src -type f -name '*.py' -exec sed -i 's|^#! */usr/bin/env python$|#!/usr/bin/python3|' {} \;
%build
export LLVM_CONFIG=%{_bindir}/llvm-config
./configure \
--prefix=%{_prefix} \
--release-channel=stable \
--enable-llvm-link-shared
COMPILER_HASH=$(sha256sum src/bootstrap/cache/2025-09-18/rustc-1.90.0-x86_64-unknown-linux-gnu.tar.xz | cut -d' ' -f1)
STD_HASH=$(sha256sum src/bootstrap/cache/2025-09-18/rust-std-1.90.0-x86_64-unknown-linux-gnu.tar.xz | cut -d' ' -f1)
cat > bootstrap.toml <<EOF
[build]
vendor = true
extended = true
configure-args = ['--prefix=/usr', '--release-channel=stable', '--enable-llvm-link-shared']
[install]
prefix = '/usr'
[rust]
channel = 'stable'
[llvm]
link-shared = true
EOF
cat > src/bootstrap/stage0.json <<EOF
{
"compiler": {
"x86_64-unknown-linux-gnu": {
"url": "file://src/bootstrap/cache/2025-09-18/rustc-1.90.0-x86_64-unknown-linux-gnu.tar.xz",
"hash": "sha256:${COMPILER_HASH}"
}
},
"std": {
"x86_64-unknown-linux-gnu": {
"url": "file://src/bootstrap/cache/2025-09-18/rust-std-1.90.0-x86_64-unknown-linux-gnu.tar.xz",
"hash": "sha256:${STD_HASH}"
}
}
}
EOF
make
%install
DESTDIR=%{buildroot} make install
# Sanitize manifests and install.log
for dir in %{buildroot}%{_prefix}/lib/rustlib; do
if [ -d "$dir" ]; then
find "$dir" -name 'manifest-*' -exec sed -i "s|%{buildroot}||g" {} \;
[ -f "$dir/install.log" ] && sed -i "s|%{buildroot}||g" "$dir/install.log"
find "$dir" -type f -name '*.py' -exec sed -i 's|^#! */usr/bin/env python$|#!/usr/bin/python3|' {} \;
fi
done
# Relocate vendored libraries into proper libdir
mkdir -p %{buildroot}%{_libdir}
for f in libLLVM-*-rust-*.so libLLVM.so.*-rust-* librustc_driver-*.so; do
if [ -e %{buildroot}/usr/lib/$f ]; then
mv %{buildroot}/usr/lib/$f %{buildroot}%{_libdir}/
fi
done
%files
%{_bindir}/rustc
%{_bindir}/rustdoc
%{_bindir}/rust-gdb
%{_bindir}/rust-gdbgui
%{_bindir}/rust-lldb
%{_prefix}/lib/rustlib/
%doc %{_datadir}/doc/rustc
%doc %{_datadir}/doc/docs/html
%{_mandir}/man1/rustc.1*
%{_mandir}/man1/rustdoc.1*
%{_libdir}/libLLVM*.so*
%{_libdir}/librustc_driver*.so
%files clippy
%{_bindir}/clippy-driver
%doc /usr/share/doc/clippy/*
%files rustfmt
%{_bindir}/rustfmt
%doc /usr/share/doc/rustfmt/*
%files rust-analyzer
%{_bindir}/rust-analyzer
%{_libexecdir}/rust-analyzer-proc-macro-srv
%doc /usr/share/doc/rust-analyzer/*
%files std
%{_prefix}/lib/rustlib/*/lib/*.rlib
%{_prefix}/lib/rustlib/*/lib/*.so
%changelog
* Sun Dec 07 2025 Henrik <henrik@example.com> - 1.91.0-1
- Split Cargo into its own package (cargo.spec)
- Sanitized manifests and install.log
- Normalized python shebangs
- Relocated vendored libraries into %{_libdir}