summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-08-07 13:20:17 +0000
committerCoprDistGit <infra@openeuler.org>2023-08-07 13:20:17 +0000
commit887c4da5a1fc67b3d77a3e024126190bebbc7b65 (patch)
treebadaf59a23676083eacdc8600d4526bd753d4c88
parent50b4a3b4549253b7362fd6a55a441e0f59feea2e (diff)
-rw-r--r--0001-Use-lld-provided-by-system-for-wasm.patch26
-rw-r--r--cargo-config5
-rw-r--r--cargo-config.csh5
-rw-r--r--cargo-config.sh5
-rw-r--r--cargo-help-clippy-should-have-description-to-user.patch30
-rw-r--r--clippy-driver-usage-should-user-friendly.patch25
-rw-r--r--fix-a-println-wrong-format.patch25
-rw-r--r--rust.spec594
-rw-r--r--rustc-1.70.0-rust-gdb-substitute-path.patch21
-rw-r--r--rustc-1.71.0-disable-http2.patch92
-rw-r--r--rustc-1.71.0-disable-libssh2.patch42
-rw-r--r--rustc-1.71.1-src.tar.xz3
-rw-r--r--sources0
13 files changed, 873 insertions, 0 deletions
diff --git a/0001-Use-lld-provided-by-system-for-wasm.patch b/0001-Use-lld-provided-by-system-for-wasm.patch
new file mode 100644
index 0000000..5fcc245
--- /dev/null
+++ b/0001-Use-lld-provided-by-system-for-wasm.patch
@@ -0,0 +1,26 @@
+From 37cb177eb53145103ae72b67562884782dde01c3 Mon Sep 17 00:00:00 2001
+From: Ivan Mironov <mironov.ivan@gmail.com>
+Date: Sun, 8 Dec 2019 17:23:08 +0500
+Subject: [PATCH] Use lld provided by system for wasm
+
+---
+ compiler/rustc_target/src/spec/wasm_base.rs | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/compiler/rustc_target/src/spec/wasm_base.rs b/compiler/rustc_target/src/spec/wasm_base.rs
+index 528a84a8b37c..353d742161d1 100644
+--- a/compiler/rustc_target/src/spec/wasm_base.rs
++++ b/compiler/rustc_target/src/spec/wasm_base.rs
+@@ -89,8 +89,7 @@ macro_rules! args {
+ // arguments just yet
+ limit_rdylib_exports: false,
+
+- // we use the LLD shipped with the Rust toolchain by default
+- linker: Some("rust-lld".into()),
++ linker: Some("lld".into()),
+ linker_flavor: LinkerFlavor::WasmLld(Cc::No),
+
+ pre_link_args,
+--
+2.38.1
+
diff --git a/cargo-config b/cargo-config
new file mode 100644
index 0000000..621c190
--- /dev/null
+++ b/cargo-config
@@ -0,0 +1,5 @@
+[source.crates-io]
+replace-with = 'ustc'
+
+[source.ustc]
+registry = "sparse+https://mirrors.ustc.edu.cn/crates.io-index/"
diff --git a/cargo-config.csh b/cargo-config.csh
new file mode 100644
index 0000000..7613473
--- /dev/null
+++ b/cargo-config.csh
@@ -0,0 +1,5 @@
+# Copy cargo config from skel if it is not exist
+if ( ! -e "$HOME/.cargo/config.toml" ) then
+ mkdir -p $HOME/.cargo
+ cp -f /etc/skel/.cargo/config.toml $HOME/.cargo
+endif
diff --git a/cargo-config.sh b/cargo-config.sh
new file mode 100644
index 0000000..2338945
--- /dev/null
+++ b/cargo-config.sh
@@ -0,0 +1,5 @@
+# Copy cargo config from skel if it is not exist
+if [ ! -f "$HOME/.cargo/config.toml" ] ; then
+ mkdir -p $HOME/.cargo
+ cp -f /etc/skel/.cargo/config.toml $HOME/.cargo
+fi
diff --git a/cargo-help-clippy-should-have-description-to-user.patch b/cargo-help-clippy-should-have-description-to-user.patch
new file mode 100644
index 0000000..5658c47
--- /dev/null
+++ b/cargo-help-clippy-should-have-description-to-user.patch
@@ -0,0 +1,30 @@
+From 4a2c2e81316960ffbcc3dc1c91758420d6db0a6e Mon Sep 17 00:00:00 2001
+From: si-gui <sunguoshuai@huawei.com>
+Date: Thu, 24 Jun 2021 16:35:12 +0800
+Subject: [PATCH] cargo help clippy should have description to user
+
+---
+ src/tools/cargo/src/bin/cargo/cli.rs | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/src/tools/cargo/src/bin/cargo/cli.rs b/src/tools/cargo/src/bin/cargo/cli.rs
+index 243f6ac0..c2dd8785 100644
+--- a/src/tools/cargo/src/bin/cargo/cli.rs
++++ b/src/tools/cargo/src/bin/cargo/cli.rs
+@@ -135,7 +135,12 @@ Run with 'cargo -Z [FLAG] [SUBCOMMAND]'",
+ } else if is_verbose {
+ drop_println!(config, " {:<20} {}", name, path.display());
+ } else {
+- drop_println!(config, " {}", name);
++ if name.as_str() == "clippy" {
++ let summary = "Checks a package to catch common mistakes and improve your Rust code.";
++ drop_println!(config, " {}", name, summary);
++ } else {
++ drop_println!(config, " {}", name);
++ }
+ }
+ }
+ CommandInfo::Alias { target } => {
+--
+2.30.0
+
diff --git a/clippy-driver-usage-should-user-friendly.patch b/clippy-driver-usage-should-user-friendly.patch
new file mode 100644
index 0000000..5787dfe
--- /dev/null
+++ b/clippy-driver-usage-should-user-friendly.patch
@@ -0,0 +1,25 @@
+From 1062e11170d93df3c53b01c1a630a7151af3a003 Mon Sep 17 00:00:00 2001
+From: si-gui <sunguoshuai@huawei.com>
+Date: Wed, 23 Jun 2021 14:36:09 +0800
+Subject: [PATCH] clippy-driver usage should user friendly
+
+---
+ src/tools/clippy/src/driver.rs | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/tools/clippy/src/driver.rs b/src/tools/clippy/src/driver.rs
+index f5f6c09e..7af74f15 100644
+--- a/src/tools/clippy/src/driver.rs
++++ b/src/tools/clippy/src/driver.rs
+@@ -126,7 +126,7 @@ fn display_help() {
+ Checks a package to catch common mistakes and improve your Rust code.
+
+ Usage:
+- cargo clippy [options] [--] [<opts>...]
++ clippy-driver [options] [--] [<opts>...]
+
+ Common options:
+ -h, --help Print this message
+--
+2.30.0
+
diff --git a/fix-a-println-wrong-format.patch b/fix-a-println-wrong-format.patch
new file mode 100644
index 0000000..d9456be
--- /dev/null
+++ b/fix-a-println-wrong-format.patch
@@ -0,0 +1,25 @@
+From edbb1b7011fe7bccf8a2efc71d806d61cd8e0c9b Mon Sep 17 00:00:00 2001
+From: si-gui <sunguoshuai@huawei.com>
+Date: Thu, 24 Jun 2021 20:15:14 +0800
+Subject: [PATCH] fix a println wrong format
+
+---
+ src/tools/cargo/src/bin/cargo/cli.rs | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/tools/cargo/src/bin/cargo/cli.rs b/src/tools/cargo/src/bin/cargo/cli.rs
+index c2dd8785..9c240690 100644
+--- a/src/tools/cargo/src/bin/cargo/cli.rs
++++ b/src/tools/cargo/src/bin/cargo/cli.rs
+@@ -137,7 +137,7 @@ Run with 'cargo -Z [FLAG] [SUBCOMMAND]'",
+ } else {
+ if name.as_str() == "clippy" {
+ let summary = "Checks a package to catch common mistakes and improve your Rust code.";
+- drop_println!(config, " {}", name, summary);
++ drop_println!(config, " {:<20} {}", name, summary);
+ } else {
+ drop_println!(config, " {}", name);
+ }
+--
+2.30.0
+
diff --git a/rust.spec b/rust.spec
new file mode 100644
index 0000000..d7e2a8f
--- /dev/null
+++ b/rust.spec
@@ -0,0 +1,594 @@
+%global bootstrap_rust 1.70.0
+%global bootstrap_cargo 1.70.0
+%global bootstrap_channel 1.70.0
+%global bootstrap_date 2023-06-01
+%bcond_with llvm_static
+%bcond_with bundled_llvm
+%bcond_without bundled_libgit2
+%bcond_with disabled_libssh2
+%bcond_without curl_http2
+%bcond_without lldb
+%bcond_without analyzer
+
+Name: rust
+Version: 1.71.1
+Release: 1
+Summary: The Rust Programming Language
+License: (ASL 2.0 or MIT) and (BSD and MIT)
+URL: https://www.rust-lang.org
+Source0: https://static.rust-lang.org/dist/rustc-%{version}-src.tar.xz
+# SOURCE1-3: use local mirror for speed up
+Source1: cargo-config
+Source2: cargo-config.sh
+Source3: cargo-config.csh
+
+Patch0000: rustc-1.71.0-disable-libssh2.patch
+Patch0001: rustc-1.71.0-disable-http2.patch
+Patch0002: clippy-driver-usage-should-user-friendly.patch
+Patch0003: cargo-help-clippy-should-have-description-to-user.patch
+Patch0004: fix-a-println-wrong-format.patch
+# By default, rust tries to use "rust-lld" as a linker for WebAssembly.
+Patch0007: 0001-Use-lld-provided-by-system-for-wasm.patch
+# Set a substitute-path in rust-gdb for standard library sources.
+Patch0008: rustc-1.70.0-rust-gdb-substitute-path.patch
+
+%{lua: function rust_triple(arch)
+ local abi = "gnu"
+ if arch == "armv7hl" then
+ arch = "armv7"
+ abi = "gnueabihf"
+ elseif arch == "ppc64" then
+ arch = "powerpc64"
+ elseif arch == "ppc64le" then
+ arch = "powerpc64le"
+ elseif arch == "riscv64" then
+ arch = "riscv64gc"
+ end
+ return arch.."-unknown-linux-"..abi
+end}
+%{lua: function rust_musl_triple(arch)
+ local abi = "musl"
+ if arch == "riscv64" then
+ arch = "riscv64gc"
+ end
+ return arch.."-unknown-linux-"..abi
+end}
+%{lua: function rust_musl_root(arch)
+ if arch == "riscv64" then
+ arch = "riscv64gc"
+ end
+ return "--musl-root-"..arch
+end}
+%global rust_triple %{lua: print(rust_triple(rpm.expand("%{_target_cpu}")))}
+%global rust_musl_triple %{lua: print(rust_musl_triple(rpm.expand("%{_target_cpu}")))}
+%global rust_musl_root %{lua: print(rust_musl_root(rpm.expand("%{_target_cpu}")))}
+%if %defined bootstrap_arches
+%{lua: do
+ local bootstrap_arches = {}
+ 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 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)))
+ if arch == target_arch then
+ rpm.define("bootstrap_source "..i)
+ 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}
+BuildRequires: (%{name} >= %{bootstrap_rust} with %{name} <= %{version})
+%global local_rust_root %{_prefix}
+%endif
+BuildRequires: make gcc gcc-c++ ncurses-devel curl curl-devel musl-libc-static musl-gcc pkgconfig(libcurl) pkgconfig(liblzma)
+BuildRequires: pkgconfig(openssl) pkgconfig(zlib) pkgconfig(libssh2) >= 1.6.0
+%global python python3
+BuildRequires: %{python}
+%if %with bundled_llvm
+BuildRequires: cmake3 >= 3.13.4
+Provides: bundled(llvm) = 16.0.5
+%else
+BuildRequires: cmake >= 2.8.11
+%if %defined llvm
+%global llvm_root %{_libdir}/%{llvm}
+%else
+# default llvm is decent enough on riscv64
+%global llvm llvm
+%global llvm_root %{_prefix}
+%endif
+# rust currently requires llvm 14.0+
+BuildRequires: %{llvm} >= 14.0.0
+BuildRequires: %{llvm}-devel >= 14.0.0
+%if %with llvm_static
+BuildRequires: %{llvm}-static libffi-devel
+%endif
+%endif
+BuildRequires: procps-ng
+BuildRequires: ninja-build
+Provides: rustc = %{version}-%{release}
+Provides: rustc%{?_isa} = %{version}-%{release}
+Requires: %{name}-std-static%{?_isa} = %{version}-%{release}
+Requires: /usr/bin/cc
+%global _privatelibs lib(.*-[[:xdigit:]]{16}*|rustc.*)[.]so.*
+%global __provides_exclude ^(%{_privatelibs})$
+%global __requires_exclude ^(%{_privatelibs})$
+%global __provides_exclude_from ^(%{_docdir}|%{rustlibdir}/src)/.*$
+%global __requires_exclude_from ^(%{_docdir}|%{rustlibdir}/src)/.*$
+%global _find_debuginfo_opts --keep-section .rustc
+%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
+%global musl_root %{_prefix}/musl
+
+# The 'analysis' component is removed since Rust 1.69.0
+# ref: https://github.com/rust-lang/rust/pull/101841
+Obsoletes: %{name}-analysis < 1.69.0~
+
+%description
+Rust is a systems programming language that runs blazingly fast, prevents
+segfaults, and guarantees thread safety.
+This package includes the Rust compiler and documentation generator.
+
+%package std-static
+Summary: Standard library for Rust
+%description std-static
+This package includes the standard libraries for building applications
+written in Rust.
+
+%package debugger-common
+Summary: Common debugger pretty printers for Rust
+BuildArch: noarch
+%description debugger-common
+This package includes the common functionality for %{name}-gdb and %{name}-lldb.
+
+%package gdb
+Summary: GDB pretty printers for Rust
+BuildArch: noarch
+Requires: gdb %{name}-debugger-common = %{version}-%{release}
+%description gdb
+This package includes the rust-gdb script, which allows easier debugging of Rust
+programs.
+
+%package lldb
+Summary: LLDB pretty printers for Rust
+BuildArch: noarch
+Requires: lldb %{python}-lldb
+Requires: %{name}-debugger-common = %{version}-%{release}
+
+%description lldb
+This package includes the rust-lldb script, which allows easier debugging of Rust
+programs.
+
+%package -n cargo
+Summary: Rust's package manager and build tool
+%if %with bundled_libgit2
+Provides: bundled(libgit2) = 1.1.0
+%endif
+BuildRequires: git
+Requires: rust
+Obsoletes: cargo-vendor <= 0.1.23
+Provides: cargo-vendor = %{version}-%{release}
+%description -n cargo
+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 rustfmt
+Summary: Tool to find and fix Rust formatting issues
+Requires: cargo
+Obsoletes: rustfmt-preview < 1.0.0
+Provides: rustfmt-preview = %{version}-%{release}
+Conflicts: rustfmt-preview < 1.0.0
+%description -n rustfmt
+A tool for formatting Rust code according to style guidelines.
+
+%if %{with analyzer}
+%package analyzer
+Summary:Rust implementation of the Language Server Protocol
+Requires: %{name}-src
+# 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~
+Obsoletes: rls-preview < 1.31.6
+
+%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.
+%endif
+
+%package -n clippy
+Summary: Lints to catch common mistakes and improve your Rust code
+Requires: cargo %{name}%{?_isa} = %{version}-%{release}
+Obsoletes: clippy-preview <= 0.0.212
+Provides: clippy-preview = %{version}-%{release}
+Conflicts: clippy-preview <= 0.0.212
+%description -n clippy
+A collection of lints to catch common mistakes and improve your Rust code.
+
+%package src
+Summary: Sources for the Rust standard library
+BuildArch: noarch
+%description src
+This package includes source files for the Rust standard library. It may be
+useful as a reference for code completion tools in various editors.
+
+%package help
+Summary: Help documents for rust
+
+Provides: %{name}-doc = %{version}-%{release} %{name}-cargo-doc = %{version}-%{release}
+Obsoletes: %{name}-doc < %{version}-%{release} %{name}-cargo-doc < %{version}-%{release}
+
+%description help
+Man pages and other related help documents for rust.
+
+%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
+test -f '%{local_rust_root}/bin/cargo'
+test -f '%{local_rust_root}/bin/rustc'
+%endif
+%setup -q -n rustc-%{version}-src
+%if %with disabled_libssh2
+%patch -P 0000 -p1
+%endif
+%if %without curl_http2
+%patch -P 0001 -p1
+rm -rf vendor/libnghttp2-sys*/
+%endif
+%if "%{python}" != "python3"
+sed -i.try-python -e '/^try python3 /i try "%{python}" "$@"' ./configure
+%endif
+%patch -P 0002 -p1
+%patch -P 0003 -p1
+%patch -P 0004 -p1
+%patch -P 0007 -p1
+%patch -P 0008 -p1
+rm -rf vendor/curl-sys*/curl/
+rm -rf vendor/jemalloc-sys/jemalloc/
+rm -rf vendor/libffi-sys*/libffi/
+rm -rf vendor/libssh2-sys*/libssh2/
+rm -rf vendor/libz-sys*/src/zlib{,-ng}/
+rm -rf vendor/lzma-sys*/xz-*/
+rm -rf vendor/openssl-src*/openssl/
+%if %without bundled_libgit2
+rm -rf vendor/libgit2-sys*/libgit2/
+%endif
+%if %with disabled_libssh2
+rm -rf vendor/libssh2-sys*/
+%endif
+sed -i.lzma -e '/LZMA_API_STATIC/d' src/bootstrap/tool.rs
+%if %{without bundled_llvm} && %{with llvm_static}
+sed -i.ffi -e '$a #[link(name = "ffi")] extern {}' \
+ src/librustc_llvm/lib.rs
+%endif
+find vendor -name .cargo-checksum.json \
+ -exec sed -i.uncheck -e 's/"files":{[^}]*}/"files":{ }/' '{}' '+'
+find -name '*.rs' -type f -perm /111 -exec chmod -v -x '{}' '+'
+%global rust_env RUSTFLAGS="%{rustflags}"
+%if 0%{?cmake_path:1}
+%global rust_env %{rust_env} PATH="%{cmake_path}:$PATH"
+%endif
+%if %without bundled_libgit2
+%global rust_env %{rust_env} LIBGIT2_SYS_USE_PKG_CONFIG=1
+%endif
+%if %without disabled_libssh2
+%global rust_env %{rust_env} LIBSSH2_SYS_USE_PKG_CONFIG=1
+%endif
+
+%build
+export %{rust_env}
+%global common_libdir %{_prefix}/lib
+%global rustlibdir %{common_libdir}/rustlib
+%ifarch %{arm} %{ix86} s390x
+%define enable_debuginfo --debuginfo-level=0 --debuginfo-level-std=2
+%else
+%define enable_debuginfo --debuginfo-level=1
+%endif
+%ifnarch %{power64}
+%define codegen_units_std --set rust.codegen-units-std=1
+%endif
+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
+%configure --disable-option-checking \
+ --libdir=%{common_libdir} \
+ %{rust_musl_root}=%{musl_root} \
+ --build=%{rust_triple} --host=%{rust_triple} --target=%{rust_triple},%{rust_musl_triple} \
+ --python=%{python} \
+ --local-rust-root=%{local_rust_root} \
+ %{!?with_bundled_llvm: --llvm-root=%{llvm_root} \
+ %{!?llvm_has_filecheck: --disable-codegen-tests} \
+ %{!?with_llvm_static: --enable-llvm-link-shared } } \
+ --disable-rpath \
+ %{enable_debuginfo} \
+ --enable-extended \
+ --tools=cargo,clippy,%{?with_analyzer:rls,rust-analyzer,}rustfmt,src \
+ --enable-vendor \
+ --enable-verbose-tests \
+ %{?codegen_units_std} \
+ --release-channel=stable
+%{python} ./x.py build -j "$ncpus" --stage 2
+%{python} ./x.py doc --stage 2
+
+%install
+export %{rust_env}
+DESTDIR=%{buildroot} %{python} ./x.py install
+
+# Some of the components duplicate-install binaries, leaving backups we don't want
+rm -f %{buildroot}%{_bindir}/*.old
+
+%if "%{_libdir}" != "%{common_libdir}"
+mkdir -p %{buildroot}%{_libdir}
+find %{buildroot}%{common_libdir} -maxdepth 1 -type f -name '*.so' \
+ -exec mv -v -t %{buildroot}%{_libdir} '{}' '+'
+%endif
+find %{buildroot}%{_libdir} -maxdepth 1 -type f -name '*.so' \
+ -exec chmod -v +x '{}' '+'
+(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} -maxdepth 1 -type f -exec rm -v '{}' '+'
+find %{buildroot}%{rustlibdir} -type f -name '*.orig' -exec rm -v '{}' '+'
+find %{buildroot}%{rustlibdir}/src -type f -name '*.py' -exec rm -v '{}' '+'
+rm -f %{buildroot}%{_docdir}/%{name}/README.md
+rm -f %{buildroot}%{_docdir}/%{name}/COPYRIGHT
+rm -f %{buildroot}%{_docdir}/%{name}/LICENSE
+rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-APACHE
+rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-MIT
+rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-THIRD-PARTY
+rm -f %{buildroot}%{_docdir}/%{name}/*.old
+find %{buildroot}%{_docdir}/%{name}/html -empty -delete
+find %{buildroot}%{_docdir}/%{name}/html -type f -exec chmod -x '{}' '+'
+mkdir -p %{buildroot}%{_datadir}/cargo/registry
+mkdir -p %{buildroot}%{_docdir}/cargo
+ln -sT ../rust/html/cargo/ %{buildroot}%{_docdir}/cargo/html
+
+# install default config for cargo mirror
+install -m 0644 -D -p %{SOURCE1} %{buildroot}%{_sysconfdir}/skel/.cargo/config.toml
+install -m 0644 -D -p %{SOURCE2} %{buildroot}%{_sysconfdir}/profile.d/cargo-config.sh
+install -m 0644 -D -p %{SOURCE3} %{buildroot}%{_sysconfdir}/profile.d/cargo-config.csh
+
+%if %{with analyzer}
+# 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
+%endif
+
+%if %without lldb
+rm -f %{buildroot}%{_bindir}/rust-lldb
+rm -f %{buildroot}%{rustlibdir}/etc/lldb_*
+%endif
+rm -f %{buildroot}%{rustlibdir}/%{rust_triple}/bin/rust-ll*
+
+%check
+export %{rust_env}
+%{python} ./x.py test --no-fail-fast --stage 2 || :
+%{python} ./x.py test --no-fail-fast --stage 2 cargo || :
+%{python} ./x.py test --no-fail-fast --stage 2 clippy || :
+%if %{with analyzer}
+%{python} ./x.py test --no-fail-fast --stage 2 rust-analyzer || :
+%endif
+%{python} ./x.py test --no-fail-fast --stage 2 rustfmt || :
+%ldconfig_scriptlets
+
+%files
+%license COPYRIGHT LICENSE-APACHE LICENSE-MIT
+%license %{_docdir}/%{name}/html/*.txt
+%doc README.md
+%{_bindir}/rustc
+%{_bindir}/rustdoc
+%{_libdir}/*.so
+%dir %{rustlibdir}
+%dir %{rustlibdir}/%{rust_triple}
+%dir %{rustlibdir}/%{rust_triple}/lib
+%if %{with analyzer}
+%{_libexecdir}/rust-analyzer-proc-macro-srv
+%endif
+%{rustlibdir}/%{rust_triple}/lib/*.so
+%dir %{rustlibdir}/%{rust_musl_triple}
+%dir %{rustlibdir}/%{rust_musl_triple}/lib
+
+%files std-static
+%dir %{rustlibdir}
+%dir %{rustlibdir}/%{rust_triple}
+%dir %{rustlibdir}/%{rust_triple}/lib
+%{rustlibdir}/%{rust_triple}/lib/*.rlib
+%dir %{rustlibdir}/%{rust_musl_triple}
+%dir %{rustlibdir}/%{rust_musl_triple}/lib
+%{rustlibdir}/%{rust_musl_triple}/lib/*.rlib
+%{rustlibdir}/%{rust_musl_triple}/lib/self-contained/*.o
+%{rustlibdir}/%{rust_musl_triple}/lib/self-contained/libunwind.a
+%{rustlibdir}/%{rust_musl_triple}/lib/self-contained/libc.a
+
+%files debugger-common
+%dir %{rustlibdir}
+%dir %{rustlibdir}/etc
+%{rustlibdir}/etc/rust_*.py*
+
+%files gdb
+%{_bindir}/rust-gdb
+%{rustlibdir}/etc/gdb_*
+%exclude %{_bindir}/rust-gdbgui
+%if %with lldb
+
+%files lldb
+%{_bindir}/rust-lldb
+%{rustlibdir}/etc/lldb_*
+%endif
+
+%files -n cargo
+%license src/tools/cargo/LICENSE-APACHE src/tools/cargo/LICENSE-MIT src/tools/cargo/LICENSE-THIRD-PARTY
+%doc src/tools/cargo/README.md
+%config(noreplace) %{_sysconfdir}/skel/.cargo/config.toml
+%{_sysconfdir}/profile.d/cargo-config.*
+%{_bindir}/cargo
+%{_libexecdir}/cargo*
+%{_sysconfdir}/bash_completion.d/cargo
+%{_datadir}/zsh/site-functions/_cargo
+%dir %{_datadir}/cargo
+%dir %{_datadir}/cargo/registry
+
+%files -n rustfmt
+%{_bindir}/rustfmt
+%{_bindir}/cargo-fmt
+%doc src/tools/rustfmt/{README,CHANGELOG,Configurations}.md
+%license src/tools/rustfmt/LICENSE-{APACHE,MIT}
+
+%if %{with analyzer}
+%files analyzer
+%{_bindir}/rls
+%{_bindir}/rust-analyzer
+%doc src/tools/rust-analyzer/README.md
+%license src/tools/rust-analyzer/LICENSE-{APACHE,MIT}
+%endif
+
+%files -n clippy
+%{_bindir}/cargo-clippy
+%{_bindir}/clippy-driver
+%doc src/tools/clippy/{README.md,CHANGELOG.md}
+%license src/tools/clippy/LICENSE-{APACHE,MIT}
+
+%files src
+%dir %{rustlibdir}
+%{rustlibdir}/src
+
+%files help
+%dir %{_docdir}/%{name}
+%docdir %{_docdir}/%{name}
+%{_docdir}/%{name}/html
+%dir %{_docdir}/cargo
+%docdir %{_docdir}/cargo
+%{_docdir}/cargo/html
+%{_mandir}/man1/rustc.1*
+%{_mandir}/man1/rustdoc.1*
+%{_mandir}/man1/cargo*.1*
+
+%changelog
+* Mon Aug 7 2023 Funda Wang <fundawang@yeah.net> - 1.71.1-1
+- New version 1.71.1
+
+* Sun Jul 30 2023 Funda Wang <fundawang@yeah.net> - 1.71.0-3
+- Fix release channel name
+
+* Sun Jul 30 2023 Funda Wang <fundawang@yeah.net> - 1.71.0-2
+- Use local mirror for speed up
+
+* Fri Jul 28 2023 jchzhou <zhoujiacheng@iscas.ac.cn> - 1.71.0-1
+- Update to 1.71.0
+
+* Tue Jul 18 2023 xu_ping <707078654@qq.com> - 1.70.0-2
+- Use llvm package instead of llvm15
+
+* Mon Jun 05 2023 jchzhou <zhoujiacheng@iscas.ac.cn> - 1.70.0-1
+- Update to 1.70.0
+- Fix rotten patch
+
+* Mon Apr 24 2023 jchzhou <zhoujiacheng@iscas.ac.cn> - 1.69.0-2
+- Add riscv64 specific changes
+
+* Mon Apr 24 2023 jchzhou <zhoujiacheng@iscas.ac.cn> - 1.69.0-1
+- Update to 1.69.0
+- Obsolete the removed rust-analysis subpackage
+- Switch to xz tarball to save space
+
+* Wed Mar 22 2023 wangkai <wangkai385@h-partners.com> - 1.68.0-1
+- Update to 1.68.0
+
+* Tue Feb 28 2023 wangkai <wangkai385@h-partners.com> - 1.67.1-1
+- Update to 1.67.1
+
+* Tue Apr 19 2022 Liu Zixian <liuzixian4@huawei.com> - 1.60.0-1
+- Update to 1.60.0
+
+* Mon Feb 28 2022 Liu Zixian <liuzixian4@huawei.com> - 1.59.0-1
+- Update to 1.59.0
+
+* Sun Feb 27 2022 Liu Zixian <liuzixian4@huawei.com> - 1.58.1-1
+- Update to 1.58.1
+
+* Wed Feb 09 2022 Li Zheng <lizheng135@huawei.com> - 1.57.0-2
+- Fix build error
+
+* Sat Jan 22 2022 Liu Zixian <liuzixian4@huawei.com> - 1.57.0-1
+- Update to 1.57.0
+
+* Sat Dec 18 2021 sdlzx <hdu_sdlzx@163.com> - 1.56.0-1
+- Update to 1.56.0
+
+* Wed Dec 15 2021 sdlzx <hdu_sdlzx@163.com> - 1.55.0-1
+- Update to 1.55.0
+
+* Thu Oct 14 2021 sdlzx <hdu_sdlzx@163.com> - 1.54.0-1
+- Update to 1.54.0
+
+* Fri Oct 08 2021 donglongtao <donglongtao@huawei.com> - 1.53.0-2
+- Update debuginfo-level config
+
+* Sat Oct 02 2021 sdlzx <hdu_sdlzx@163.com> - 1.53.0-1
+- Update to 1.53.0
+
+* Tue Sep 28 2021 sdlzx <hdu_sdlzx@163.com> - 1.52.1-1
+- Update to 1.52.1
+
+* Fri Sep 17 2021 donglongtao <donglongtao@huawei.com> - 1.51.0-10
+- Fix rustdoc install very slow
+
+* Tue Aug 24 2021 caodongxia <caodongxia@huawei.com> - 1.51.0-9
+- Fix rustdoc error info
+
+* Wed Aug 18 2021 yaoxin <yaoxin30@huawei.com> - 1.51.0-8
+- Fix CVE-2021-29922
+
+* Wed Aug 04 2021 chenyanpanHW <chenyanpan@huawei.com> - 1.51.0-7
+- DESC: delete BuildRequires gdb
+
+* Thu Jul 08 2021 Jiajie Li <lijiajie11@huawei.com> - 1.51.0-6
+- Add build require of ninja and llvm
+
+* Thu Jul 01 2021 Jiajie Li <lijiajie11@huawei.com> - 1.51.0-5
+- Add support for musl target
+
+* Thu Jun 24 2021 sunguoshuai <sunguoshuai@huawei.com> - 1.51.0-4
+- fix a println wrong format
+
+* Thu Jun 24 2021 sunguoshuai <sunguoshuai@huawei.com> - 1.51.0-3
+- cargo help clippy should have description to user
+
+* Wed Jun 23 2021 sunguoshuai <sunguoshuai@huawei.com> - 1.51.0-2
+- clippy-driver usage should user friendly
+
+* Fri May 07 2021 wangyue <wangyue92@huawei.com> - 1.51.0-1
+- Update to 1.51.0
+
+* Mon Nov 30 2020 Jeffery.Gao <gaojianxing@huawei.com> - 1.45.2-2
+- fix upgrade error
+
+* Mon Sep 21 2020 Jeffery.Gao <gaojianxing@huawei.com> - 1.45.2-1
+- Update to 1.45.2
+
+* Fri Apr 17 2020 zhujunhao <zhujunhao8@huawei.com> - 1.29.1-4
+- add llvm in rust
+
+* Thu Dec 5 2019 wutao <wutao61@huawei.com> - 1.29.1-3
+- Package init
diff --git a/rustc-1.70.0-rust-gdb-substitute-path.patch b/rustc-1.70.0-rust-gdb-substitute-path.patch
new file mode 100644
index 0000000..e9e5e2e
--- /dev/null
+++ b/rustc-1.70.0-rust-gdb-substitute-path.patch
@@ -0,0 +1,21 @@
+diff --git a/src/etc/rust-gdb b/src/etc/rust-gdb
+index 9abed30ea6f7..e4bf55df3688 100755
+--- a/src/etc/rust-gdb
++++ b/src/etc/rust-gdb
+@@ -13,8 +13,6 @@ fi
+ # Find out where the pretty printer Python module is
+ RUSTC_SYSROOT="$("$RUSTC" --print=sysroot)"
+ GDB_PYTHON_MODULE_DIRECTORY="$RUSTC_SYSROOT/lib/rustlib/etc"
+-# Get the commit hash for path remapping
+-RUSTC_COMMIT_HASH="$("$RUSTC" -vV | sed -n 's/commit-hash: \([a-zA-Z0-9_]*\)/\1/p')"
+
+ # Run GDB with the additional arguments that load the pretty printers
+ # Set the environment variable `RUST_GDB` to overwrite the call to a
+@@ -23,6 +21,6 @@ RUST_GDB="${RUST_GDB:-gdb}"
+ PYTHONPATH="$PYTHONPATH:$GDB_PYTHON_MODULE_DIRECTORY" exec ${RUST_GDB} \
+ --directory="$GDB_PYTHON_MODULE_DIRECTORY" \
+ -iex "add-auto-load-safe-path $GDB_PYTHON_MODULE_DIRECTORY" \
+- -iex "set substitute-path /rustc/$RUSTC_COMMIT_HASH $RUSTC_SYSROOT/lib/rustlib/src/rust" \
++ -iex "set substitute-path @BUILDDIR@ $RUSTC_SYSROOT/lib/rustlib/src/rust" \
+ "$@"
+
diff --git a/rustc-1.71.0-disable-http2.patch b/rustc-1.71.0-disable-http2.patch
new file mode 100644
index 0000000..34fdab3
--- /dev/null
+++ b/rustc-1.71.0-disable-http2.patch
@@ -0,0 +1,92 @@
+--- rustc-beta-src/src/tools/cargo/Cargo.lock.orig 2023-07-07 17:30:04.817452621 -0700
++++ rustc-beta-src/src/tools/cargo/Cargo.lock 2023-07-07 17:30:27.777988139 -0700
+@@ -734,7 +734,6 @@
+ dependencies = [
+ "cc",
+ "libc",
+- "libnghttp2-sys",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+@@ -1954,16 +1953,6 @@
+ checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb"
+
+ [[package]]
+-name = "libnghttp2-sys"
+-version = "0.1.7+1.45.0"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "57ed28aba195b38d5ff02b9170cbff627e336a20925e43b4945390401c5dc93f"
+-dependencies = [
+- "cc",
+- "libc",
+-]
+-
+-[[package]]
+ name = "libz-sys"
+ version = "1.1.8"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+--- rustc-beta-src/src/tools/cargo/Cargo.toml.orig 2023-07-07 17:30:04.819452581 -0700
++++ rustc-beta-src/src/tools/cargo/Cargo.toml 2023-07-07 17:30:24.133061874 -0700
+@@ -118,7 +118,7 @@
+ cargo-util.workspace = true
+ clap = { workspace = true, features = ["wrap_help"] }
+ crates-io.workspace = true
+-curl = { workspace = true, features = ["http2"] }
++curl = { workspace = true, features = [] }
+ curl-sys.workspace = true
+ env_logger.workspace = true
+ filetime.workspace = true
+--- rustc-beta-src/src/tools/cargo/src/cargo/core/package.rs.orig 2023-06-24 10:27:37.000000000 -0700
++++ rustc-beta-src/src/tools/cargo/src/cargo/core/package.rs 2023-07-07 17:30:04.819452581 -0700
+@@ -407,16 +407,9 @@
+ sources: SourceMap<'cfg>,
+ config: &'cfg Config,
+ ) -> CargoResult<PackageSet<'cfg>> {
+- // We've enabled the `http2` feature of `curl` in Cargo, so treat
+- // failures here as fatal as it would indicate a build-time problem.
+- let mut multi = Multi::new();
+- let multiplexing = config.http_config()?.multiplexing.unwrap_or(true);
+- multi
+- .pipelining(false, multiplexing)
+- .with_context(|| "failed to enable multiplexing/pipelining in curl")?;
+-
+- // let's not flood crates.io with connections
+- multi.set_max_host_connections(2)?;
++ // Multiplexing is disabled because the system libcurl doesn't support it.
++ let multi = Multi::new();
++ let multiplexing = false;
+
+ Ok(PackageSet {
+ packages: package_ids
+--- rustc-beta-src/src/tools/cargo/src/cargo/sources/registry/http_remote.rs.orig 2023-06-24 10:27:37.000000000 -0700
++++ rustc-beta-src/src/tools/cargo/src/cargo/sources/registry/http_remote.rs 2023-07-07 17:30:04.819452581 -0700
+@@ -229,16 +229,8 @@
+ }
+ self.fetch_started = true;
+
+- // We've enabled the `http2` feature of `curl` in Cargo, so treat
+- // failures here as fatal as it would indicate a build-time problem.
+- self.multiplexing = self.config.http_config()?.multiplexing.unwrap_or(true);
+-
+- self.multi
+- .pipelining(false, self.multiplexing)
+- .with_context(|| "failed to enable multiplexing/pipelining in curl")?;
+-
+- // let's not flood the server with connections
+- self.multi.set_max_host_connections(2)?;
++ // Multiplexing is disabled because the system libcurl doesn't support it.
++ self.multiplexing = false;
+
+ if !self.quiet {
+ self.config
+--- rustc-beta-src/src/tools/cargo/src/cargo/util/network/mod.rs.orig 2023-06-24 10:27:37.000000000 -0700
++++ rustc-beta-src/src/tools/cargo/src/cargo/util/network/mod.rs 2023-07-07 17:30:04.819452581 -0700
+@@ -26,7 +26,7 @@
+ macro_rules! try_old_curl {
+ ($e:expr, $msg:expr) => {
+ let result = $e;
+- if cfg!(target_os = "macos") {
++ if cfg!(any(target_os = "linux", target_os = "macos")) {
+ if let Err(e) = result {
+ warn!("ignoring libcurl {} error: {}", $msg, e);
+ }
diff --git a/rustc-1.71.0-disable-libssh2.patch b/rustc-1.71.0-disable-libssh2.patch
new file mode 100644
index 0000000..ba61454
--- /dev/null
+++ b/rustc-1.71.0-disable-libssh2.patch
@@ -0,0 +1,42 @@
+--- rustc-beta-src/src/tools/cargo/Cargo.lock.orig 2023-06-24 10:27:37.000000000 -0700
++++ rustc-beta-src/src/tools/cargo/Cargo.lock 2023-07-07 17:12:23.406932870 -0700
+@@ -1942,7 +1942,6 @@
+ dependencies = [
+ "cc",
+ "libc",
+- "libssh2-sys",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+@@ -1965,20 +1964,6 @@
+ ]
+
+ [[package]]
+-name = "libssh2-sys"
+-version = "0.3.0"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "2dc8a030b787e2119a731f1951d6a773e2280c660f8ec4b0f5e1505a386e71ee"
+-dependencies = [
+- "cc",
+- "libc",
+- "libz-sys",
+- "openssl-sys",
+- "pkg-config",
+- "vcpkg",
+-]
+-
+-[[package]]
+ name = "libz-sys"
+ version = "1.1.8"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+--- rustc-beta-src/src/tools/cargo/Cargo.toml.orig 2023-06-24 10:27:37.000000000 -0700
++++ rustc-beta-src/src/tools/cargo/Cargo.toml 2023-07-07 17:12:00.688392750 -0700
+@@ -31,7 +31,7 @@
+ filetime = "0.2.9"
+ flate2 = { version = "1.0.3", default-features = false, features = ["zlib"] }
+ fwdansi = "1.1.0"
+-git2 = "0.17.1"
++git2 = { version = "0.17.1", default-features = false, features = ["https"] }
+ git2-curl = "0.18.0"
+ gix = { version = "0.44.1", default-features = false, features = ["blocking-http-transport-curl", "progress-tree"] }
+ gix-features-for-configuration-only = { version = "0.29.0", package = "gix-features", features = [ "parallel" ] }
diff --git a/rustc-1.71.1-src.tar.xz b/rustc-1.71.1-src.tar.xz
new file mode 100644
index 0000000..edd7920
--- /dev/null
+++ b/rustc-1.71.1-src.tar.xz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:371af0fbe04051e20a74dbea6d4e4e548f10f15309c49cae2688afb882b6c7f1
+size 151983068
diff --git a/sources b/sources
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/sources