From 6333e633b06f17390138604211a6031cf74c63ed Mon Sep 17 00:00:00 2001 From: CoprDistGit Date: Sat, 17 Jan 2026 10:02:05 +0000 Subject: automatic import of rust --- 0001-Use-lld-provided-by-system.patch | 80 +++ 0001-add-support-for-ppc64le.patch | 165 +++++ cargo-config | 5 + cargo-config.csh | 5 + cargo-config.sh | 5 + cargo_vendor.attr | 2 + cargo_vendor.prov | 127 ++++ rust-1.92.0-aarch64-unknown-linux-gnu.tar.xz | 3 + rust-1.92.0-loongarch64-unknown-linux-gnu.tar.xz | 3 + rust-1.92.0-riscv64gc-unknown-linux-gnu.tar.xz | 3 + rust-1.92.0-x86_64-unknown-linux-gnu.tar.xz | 3 + rust-key.gpg.ascii | 86 +++ rust.spec | 798 +++++++++++++++++++++++ rustc-1.70.0-rust-gdb-substitute-path.patch | 21 + rustc-1.90.0-disable-libssh2.patch | 44 ++ rustc-1.92.0-src.tar.xz | 3 + rustc-1.92.0-src.tar.xz.asc | 16 + sources | 0 18 files changed, 1369 insertions(+) create mode 100644 0001-Use-lld-provided-by-system.patch create mode 100644 0001-add-support-for-ppc64le.patch create mode 100644 cargo-config create mode 100644 cargo-config.csh create mode 100644 cargo-config.sh create mode 100644 cargo_vendor.attr create mode 100644 cargo_vendor.prov create mode 100644 rust-1.92.0-aarch64-unknown-linux-gnu.tar.xz create mode 100644 rust-1.92.0-loongarch64-unknown-linux-gnu.tar.xz create mode 100644 rust-1.92.0-riscv64gc-unknown-linux-gnu.tar.xz create mode 100644 rust-1.92.0-x86_64-unknown-linux-gnu.tar.xz create mode 100644 rust-key.gpg.ascii create mode 100644 rust.spec create mode 100644 rustc-1.70.0-rust-gdb-substitute-path.patch create mode 100644 rustc-1.90.0-disable-libssh2.patch create mode 100644 rustc-1.92.0-src.tar.xz create mode 100644 rustc-1.92.0-src.tar.xz.asc create mode 100644 sources diff --git a/0001-Use-lld-provided-by-system.patch b/0001-Use-lld-provided-by-system.patch new file mode 100644 index 0000000..1f077f7 --- /dev/null +++ b/0001-Use-lld-provided-by-system.patch @@ -0,0 +1,80 @@ +From 0641fdd833785914f1ead6e1ab374beea5b55437 Mon Sep 17 00:00:00 2001 +From: Josh Stone +Date: Fri, 16 Aug 2024 10:12:58 -0700 +Subject: [PATCH] Use lld provided by system + +--- + compiler/rustc_target/src/spec/base/wasm.rs | 3 +-- + .../src/spec/targets/aarch64_unknown_none_softfloat.rs | 2 +- + compiler/rustc_target/src/spec/targets/aarch64_unknown_uefi.rs | 1 + + compiler/rustc_target/src/spec/targets/x86_64_unknown_none.rs | 2 +- + compiler/rustc_target/src/spec/targets/x86_64_unknown_uefi.rs | 1 + + 5 files changed, 5 insertions(+), 4 deletions(-) + +diff --git a/compiler/rustc_target/src/spec/base/wasm.rs b/compiler/rustc_target/src/spec/base/wasm.rs +index 88e7af5e669..14100a683f9 100644 +--- a/compiler/rustc_target/src/spec/base/wasm.rs ++++ b/compiler/rustc_target/src/spec/base/wasm.rs +@@ -86,8 +86,7 @@ macro_rules! args { + // threaded model which will legalize atomics to normal operations. + singlethread: true, + +- // 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, +diff --git a/compiler/rustc_target/src/spec/targets/aarch64_unknown_none_softfloat.rs b/compiler/rustc_target/src/spec/targets/aarch64_unknown_none_softfloat.rs +index 35a4dd72b86..a9c8fc5edb8 100644 +--- a/compiler/rustc_target/src/spec/targets/aarch64_unknown_none_softfloat.rs ++++ b/compiler/rustc_target/src/spec/targets/aarch64_unknown_none_softfloat.rs +@@ -15,7 +15,7 @@ pub(crate) fn target() -> Target { + let opts = TargetOptions { + abi: "softfloat".into(), + linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes), +- linker: Some("rust-lld".into()), ++ linker: Some("lld".into()), + features: "+v8a,+strict-align,-neon,-fp-armv8".into(), + relocation_model: RelocModel::Static, + disable_redzone: true, +diff --git a/compiler/rustc_target/src/spec/targets/aarch64_unknown_uefi.rs b/compiler/rustc_target/src/spec/targets/aarch64_unknown_uefi.rs +index 327b52389b9..17313d7e8b3 100644 +--- a/compiler/rustc_target/src/spec/targets/aarch64_unknown_uefi.rs ++++ b/compiler/rustc_target/src/spec/targets/aarch64_unknown_uefi.rs +@@ -9,6 +9,7 @@ pub(crate) fn target() -> Target { + base.max_atomic_width = Some(128); + base.add_pre_link_args(LinkerFlavor::Msvc(Lld::No), &["/machine:arm64"]); + base.features = "+v8a".into(); ++ base.linker = Some("lld".into()); + + Target { + llvm_target: "aarch64-unknown-windows".into(), +diff --git a/compiler/rustc_target/src/spec/targets/x86_64_unknown_none.rs b/compiler/rustc_target/src/spec/targets/x86_64_unknown_none.rs +index 1a6343595f5..8015b082cd1 100644 +--- a/compiler/rustc_target/src/spec/targets/x86_64_unknown_none.rs ++++ b/compiler/rustc_target/src/spec/targets/x86_64_unknown_none.rs +@@ -19,7 +19,7 @@ pub(crate) fn target() -> Target { + static_position_independent_executables: true, + relro_level: RelroLevel::Full, + linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes), +- linker: Some("rust-lld".into()), ++ linker: Some("lld".into()), + rustc_abi: Some(RustcAbi::X86Softfloat), + features: "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float".into(), + supported_sanitizers: SanitizerSet::KCFI | SanitizerSet::KERNELADDRESS, +diff --git a/compiler/rustc_target/src/spec/targets/x86_64_unknown_uefi.rs b/compiler/rustc_target/src/spec/targets/x86_64_unknown_uefi.rs +index 0cf6a879462..3677fc662de 100644 +--- a/compiler/rustc_target/src/spec/targets/x86_64_unknown_uefi.rs ++++ b/compiler/rustc_target/src/spec/targets/x86_64_unknown_uefi.rs +@@ -15,6 +15,7 @@ pub(crate) fn target() -> Target { + base.plt_by_default = false; + base.max_atomic_width = Some(64); + base.entry_abi = CanonAbi::X86(X86Call::Win64); ++ base.linker = Some("lld".into()); + + // We disable MMX and SSE for now, even though UEFI allows using them. Problem is, you have to + // enable these CPU features explicitly before their first use, otherwise their instructions +-- +2.49.0 + diff --git a/0001-add-support-for-ppc64le.patch b/0001-add-support-for-ppc64le.patch new file mode 100644 index 0000000..30b86e1 --- /dev/null +++ b/0001-add-support-for-ppc64le.patch @@ -0,0 +1,165 @@ +From 85c7f9262e9d4fbfdaa5d7bc22a85eb5300fcca0 Mon Sep 17 00:00:00 2001 +From: jcf +Date: Wed, 12 Jun 2024 09:14:32 +0000 +Subject: [PATCH] add support for ppc64le + +--- + compiler/rustc_target/src/spec/mod.rs | 2 ++ + .../spec/targets/ppc64le_unknown_freebsd.rs | 23 +++++++++++++++++++ + .../spec/targets/ppc64le_unknown_linux_gnu.rs | 23 +++++++++++++++++++ + .../targets/ppc64le_unknown_linux_musl.rs | 23 +++++++++++++++++++ + src/bootstrap/configure.py | 5 ++++ + vendor/openssl-src-300.5.0+3.5.0/src/lib.rs | 3 +++ + vendor/target-lexicon-0.13.1/src/targets.rs | 3 +++ + 7 files changed, 82 insertions(+) + create mode 100644 compiler/rustc_target/src/spec/targets/ppc64le_unknown_freebsd.rs + create mode 100644 compiler/rustc_target/src/spec/targets/ppc64le_unknown_linux_gnu.rs + create mode 100644 compiler/rustc_target/src/spec/targets/ppc64le_unknown_linux_musl.rs + +diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs +index 7234d1dc6..70d44f815 100644 +--- a/compiler/rustc_target/src/spec/mod.rs ++++ b/compiler/rustc_target/src/spec/mod.rs +@@ -1760,6 +1760,8 @@ supported_targets! { + ("powerpc64-unknown-linux-musl", powerpc64_unknown_linux_musl), + ("powerpc64le-unknown-linux-gnu", powerpc64le_unknown_linux_gnu), + ("powerpc64le-unknown-linux-musl", powerpc64le_unknown_linux_musl), ++ ("ppc64le-unknown-linux-gnu", ppc64le_unknown_linux_gnu), ++ ("ppc64le-unknown-linux-musl", ppc64le_unknown_linux_musl), + ("s390x-unknown-linux-gnu", s390x_unknown_linux_gnu), + ("s390x-unknown-linux-musl", s390x_unknown_linux_musl), + ("sparc-unknown-linux-gnu", sparc_unknown_linux_gnu), +diff --git a/compiler/rustc_target/src/spec/targets/ppc64le_unknown_freebsd.rs b/compiler/rustc_target/src/spec/targets/ppc64le_unknown_freebsd.rs +new file mode 100644 +index 000000000..c02321db7 +--- /dev/null ++++ b/compiler/rustc_target/src/spec/targets/ppc64le_unknown_freebsd.rs +@@ -0,0 +1,23 @@ ++use crate::spec::{base, Cc, LinkerFlavor, Lld, StackProbeType, Target, TargetOptions}; ++ ++pub(crate) fn target() -> Target { ++ let mut base = base::freebsd::opts(); ++ base.cpu = "ppc64le".into(); ++ base.add_pre_link_args(LinkerFlavor::Gnu(Cc::Yes, Lld::No), &["-m64"]); ++ base.max_atomic_width = Some(64); ++ base.stack_probes = StackProbeType::Inline; ++ ++ Target { ++ llvm_target: "ppc64le-unknown-freebsd".into(), ++ metadata: crate::spec::TargetMetadata { ++ description: None, ++ tier: None, ++ host_tools: None, ++ std: None, ++ }, ++ pointer_width: 64, ++ data_layout: "e-m:e-Fn32-i64:64-n32:64".into(), ++ arch: "powerpc64".into(), ++ options: TargetOptions { mcount: "_mcount".into(), ..base }, ++ } ++} +diff --git a/compiler/rustc_target/src/spec/targets/ppc64le_unknown_linux_gnu.rs b/compiler/rustc_target/src/spec/targets/ppc64le_unknown_linux_gnu.rs +new file mode 100644 +index 000000000..13423b9c5 +--- /dev/null ++++ b/compiler/rustc_target/src/spec/targets/ppc64le_unknown_linux_gnu.rs +@@ -0,0 +1,23 @@ ++use crate::spec::{base, Cc, LinkerFlavor, Lld, StackProbeType, Target, TargetOptions}; ++ ++pub(crate) fn target() -> Target { ++ let mut base = base::linux_gnu::opts(); ++ base.cpu = "ppc64le".into(); ++ base.add_pre_link_args(LinkerFlavor::Gnu(Cc::Yes, Lld::No), &["-m64"]); ++ base.max_atomic_width = Some(64); ++ base.stack_probes = StackProbeType::Inline; ++ ++ Target { ++ llvm_target: "ppc64le-unknown-linux-gnu".into(), ++ metadata: crate::spec::TargetMetadata { ++ description: None, ++ tier: None, ++ host_tools: None, ++ std: None, ++ }, ++ pointer_width: 64, ++ data_layout: "e-m:e-Fn32-i64:64-n32:64-S128-v256:256:256-v512:512:512".into(), ++ arch: "powerpc64".into(), ++ options: TargetOptions { mcount: "_mcount".into(), ..base }, ++ } ++} +diff --git a/compiler/rustc_target/src/spec/targets/ppc64le_unknown_linux_musl.rs b/compiler/rustc_target/src/spec/targets/ppc64le_unknown_linux_musl.rs +new file mode 100644 +index 000000000..3f8a02be7 +--- /dev/null ++++ b/compiler/rustc_target/src/spec/targets/ppc64le_unknown_linux_musl.rs +@@ -0,0 +1,23 @@ ++use crate::spec::{base, Cc, LinkerFlavor, Lld, StackProbeType, Target, TargetOptions}; ++ ++pub(crate) fn target() -> Target { ++ let mut base = base::linux_musl::opts(); ++ base.cpu = "ppc64le".into(); ++ base.add_pre_link_args(LinkerFlavor::Gnu(Cc::Yes, Lld::No), &["-m64"]); ++ base.max_atomic_width = Some(64); ++ base.stack_probes = StackProbeType::Inline; ++ ++ Target { ++ llvm_target: "ppc64le-unknown-linux-musl".into(), ++ metadata: crate::spec::TargetMetadata { ++ description: None, ++ tier: None, ++ host_tools: None, ++ std: None, ++ }, ++ pointer_width: 64, ++ data_layout: "e-m:e-Fn32-i64:64-n32:64-S128-v256:256:256-v512:512:512".into(), ++ arch: "powerpc64".into(), ++ options: TargetOptions { mcount: "_mcount".into(), ..base }, ++ } ++} +diff --git a/src/bootstrap/configure.py b/src/bootstrap/configure.py +index 0d4d6e0ff..5d0e213b3 100755 +--- a/src/bootstrap/configure.py ++++ b/src/bootstrap/configure.py +@@ -259,6 +259,11 @@ v( + "target.powerpc64le-unknown-linux-musl.musl-root", + "powerpc64le-unknown-linux-musl install directory", + ) ++v( ++ "musl-root-ppc64le", ++ "target.ppc64le-unknown-linux-musl.musl-root", ++ "ppc64le-unknown-linux-musl install directory", ++) + v( + "musl-root-riscv32gc", + "target.riscv32gc-unknown-linux-musl.musl-root", +diff --git a/vendor/openssl-src-300.5.0+3.5.0/src/lib.rs b/vendor/openssl-src-300.5.0+3.5.0/src/lib.rs +index f7d19d95d..9b574b1e5 100644 +--- a/vendor/openssl-src-300.5.0+3.5.0/src/lib.rs ++++ b/vendor/openssl-src-300.5.0+3.5.0/src/lib.rs +@@ -368,6 +368,9 @@ impl Build { + "powerpc64le-unknown-freebsd" => "BSD-ppc64le", + "powerpc64le-unknown-linux-gnu" => "linux-ppc64le", + "powerpc64le-unknown-linux-musl" => "linux-ppc64le", ++ "ppc64le-unknown-freebsd" => "BSD-ppc64le", ++ "ppc64le-unknown-linux-gnu" => "linux-ppc64le", ++ "ppc64le-unknown-linux-musl" => "linux-ppc64le", + "powerpc64le-alpine-linux-musl" => "linux-ppc64le", + "powerpc64le-chimera-linux-musl" => "linux-ppc64le", + "riscv64gc-unknown-freebsd" => "BSD-riscv64", +diff --git a/vendor/target-lexicon-0.13.1/src/targets.rs b/vendor/target-lexicon-0.13.1/src/targets.rs +index 83c0eac8c..61b7fcc33 100644 +--- a/vendor/target-lexicon-0.13.1/src/targets.rs ++++ b/vendor/target-lexicon-0.13.1/src/targets.rs +@@ -1811,6 +1811,9 @@ mod tests { + "powerpc64le-unknown-freebsd", + "powerpc64le-unknown-linux-gnu", + "powerpc64le-unknown-linux-musl", ++ "ppc64le-unknown-freebsd", ++ "ppc64le-unknown-linux-gnu", ++ "ppc64le-unknown-linux-musl", + "powerpc64-unknown-freebsd", + "powerpc64-unknown-linux-gnu", + "powerpc64-unknown-linux-musl", +-- +2.49.0 + 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_vendor.attr b/cargo_vendor.attr new file mode 100644 index 0000000..be2d48f --- /dev/null +++ b/cargo_vendor.attr @@ -0,0 +1,2 @@ +%__cargo_vendor_path ^%{_defaultlicensedir}(/[^/]+)+/cargo-vendor.txt$ +%__cargo_vendor_provides %{_rpmconfigdir}/cargo_vendor.prov diff --git a/cargo_vendor.prov b/cargo_vendor.prov new file mode 100644 index 0000000..6efca18 --- /dev/null +++ b/cargo_vendor.prov @@ -0,0 +1,127 @@ +#! /usr/bin/python3 -s +# Stripped down replacement for cargo2rpm parse-vendor-manifest + +import re +import subprocess +import sys +from typing import Optional + + +VERSION_REGEX = re.compile( + r""" + ^ + (?P0|[1-9]\d*) + \.(?P0|[1-9]\d*) + \.(?P0|[1-9]\d*) + (?:-(?P
(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?
+    (?:\+(?P[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$
+    """,
+    re.VERBOSE,
+)
+
+
+class Version:
+    """
+    Version that adheres to the "semantic versioning" format.
+    """
+
+    def __init__(self, major: int, minor: int, patch: int, pre: Optional[str] = None, build: Optional[str] = None):
+        self.major: int = major
+        self.minor: int = minor
+        self.patch: int = patch
+        self.pre: Optional[str] = pre
+        self.build: Optional[str] = build
+
+    @staticmethod
+    def parse(version: str) -> "Version":
+        """
+        Parses a version string and return a `Version` object.
+        Raises a `ValueError` if the string does not match the expected format.
+        """
+
+        match = VERSION_REGEX.match(version)
+        if not match:
+            raise ValueError(f"Invalid version: {version!r}")
+
+        matches = match.groupdict()
+
+        major_str = matches["major"]
+        minor_str = matches["minor"]
+        patch_str = matches["patch"]
+        pre = matches["pre"]
+        build = matches["build"]
+
+        major = int(major_str)
+        minor = int(minor_str)
+        patch = int(patch_str)
+
+        return Version(major, minor, patch, pre, build)
+
+    def to_rpm(self) -> str:
+        """
+        Formats the `Version` object as an equivalent RPM version string.
+        Characters that are invalid in RPM versions are replaced ("-" -> "_")
+
+        Build metadata (the optional `Version.build` attribute) is dropped, so
+        the conversion is not lossless for versions where this attribute is not
+        `None`. However, build metadata is not intended to be part of the
+        version (and is not even considered when doing version comparison), so
+        dropping it when converting to the RPM version format is correct.
+        """
+
+        s = f"{self.major}.{self.minor}.{self.patch}"
+        if self.pre:
+            s += f"~{self.pre.replace('-', '_')}"
+        return s
+
+
+def break_the_build(error: str):
+    """
+    This function writes a string that is an invalid RPM dependency specifier,
+    which causes dependency generators to fail and break the build. The
+    additional error message is printed to stderr.
+    """
+
+    print("*** FATAL ERROR ***")
+    print(error, file=sys.stderr)
+
+ 
+def get_cargo_vendor_txt_paths_from_stdin() -> set[str]:  # pragma nocover
+    """
+    Read lines from standard input and filter out lines that look like paths
+    to `cargo-vendor.txt` files. This is how RPM generators pass lists of files.
+    """
+
+    lines = {line.rstrip("\n") for line in sys.stdin.readlines()}
+    return {line for line in lines if line.endswith("/cargo-vendor.txt")}
+
+
+def action_parse_vendor_manifest():
+    paths = get_cargo_vendor_txt_paths_from_stdin()
+
+    for path in paths:
+        with open(path) as file:
+            manifest = file.read()
+
+        for line in manifest.strip().splitlines():
+            crate, version = line.split(" v")
+            print(f"bundled(crate({crate})) = {Version.parse(version).to_rpm()}")
+
+
+def main():
+    try:
+        action_parse_vendor_manifest()
+        exit(0)
+
+    # print an error message that is not a valid RPM dependency
+    # to cause the generator to break the build
+    except (IOError, ValueError) as exc:
+        break_the_build(str(exc))
+        exit(1)
+
+    break_the_build("Uncaught exception: This should not happen, please report a bug.")
+    exit(1)
+
+
+if __name__ == "__main__":
+    main()
diff --git a/rust-1.92.0-aarch64-unknown-linux-gnu.tar.xz b/rust-1.92.0-aarch64-unknown-linux-gnu.tar.xz
new file mode 100644
index 0000000..c11d548
--- /dev/null
+++ b/rust-1.92.0-aarch64-unknown-linux-gnu.tar.xz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3e383f8b4fca710d0600d0c1de97b78281672be2cda6575ecbe1c183a12e3822
+size 169667388
diff --git a/rust-1.92.0-loongarch64-unknown-linux-gnu.tar.xz b/rust-1.92.0-loongarch64-unknown-linux-gnu.tar.xz
new file mode 100644
index 0000000..026445b
--- /dev/null
+++ b/rust-1.92.0-loongarch64-unknown-linux-gnu.tar.xz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bd7d8d94709e5a6320f655cf469fd5ecd0b596e29247cd4f46ce0fbef2a21072
+size 260244032
diff --git a/rust-1.92.0-riscv64gc-unknown-linux-gnu.tar.xz b/rust-1.92.0-riscv64gc-unknown-linux-gnu.tar.xz
new file mode 100644
index 0000000..23ac4af
--- /dev/null
+++ b/rust-1.92.0-riscv64gc-unknown-linux-gnu.tar.xz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5492105083990bc0fd91008b1dc66b748b9687bbaf16719b5b37b1f09bf59458
+size 248195844
diff --git a/rust-1.92.0-x86_64-unknown-linux-gnu.tar.xz b/rust-1.92.0-x86_64-unknown-linux-gnu.tar.xz
new file mode 100644
index 0000000..e448e86
--- /dev/null
+++ b/rust-1.92.0-x86_64-unknown-linux-gnu.tar.xz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d2ccef59dd9f7439f2c694948069f789a044dc1addcc0803613232af8f88ee0c
+size 192171372
diff --git a/rust-key.gpg.ascii b/rust-key.gpg.ascii
new file mode 100644
index 0000000..93e2282
--- /dev/null
+++ b/rust-key.gpg.ascii
@@ -0,0 +1,86 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1
+
+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
+Mve696B5tlHyc1KxjHR6w9GRsh4=
+=5FXw
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/rust.spec b/rust.spec
new file mode 100644
index 0000000..d73c5d0
--- /dev/null
+++ b/rust.spec
@@ -0,0 +1,798 @@
+%define _lto_cflags %{nil}
+%global bootstrap_rust 1.92.0
+%global bootstrap_cargo 1.92.0
+%global bootstrap_channel 1.92.0
+%global bootstrap_date 2025-12-12
+%global bootstrap_arches x86_64 aarch64 riscv64 loongarch64
+%bcond_with llvm_static
+%ifarch x86_64 aarch64 riscv64
+%bcond_with bundled_llvm
+%else
+%bcond_without bundled_llvm
+%endif
+%bcond_without bundled_libgit2
+%bcond_with disabled_libssh2
+%bcond_without lldb
+# disable rust-lld (enabled by default on x86 since 1.80.0 via pull/124129) for
+# building with system llvm (17.0.6)
+# https://github.com/rust-lang/rust/issues/131291
+%ifarch %{ix86} x86_64
+%bcond_with rust_lld
+%endif
+
+%ifnarch riscv64 loongarch64
+%bcond_without musl_target
+%endif
+
+Name:                rust
+Version:             1.92.0
+Release:             1
+Summary:             The Rust Programming Language
+License:             Apache-2.0 OR MIT
+URL:                 https://www.rust-lang.org
+Source0:             https://static.rust-lang.org/dist/rustc-%{version}-src.tar.xz
+Source1:             https://static.rust-lang.org/dist/rustc-%{version}-src.tar.xz.asc
+Source2:             https://static.rust-lang.org/rust-key.gpg.ascii
+# SOURCE3-5: use local mirror for speed up
+Source3:             cargo-config
+Source4:             cargo-config.sh
+Source5:             cargo-config.csh
+# Simple rpm macros for rust-toolset
+Source102:           cargo_vendor.attr
+Source103:           cargo_vendor.prov
+
+Patch0000:           rustc-1.90.0-disable-libssh2.patch
+# By default, rust tries to use "rust-lld" as a linker for some targets.
+Patch0001:           0001-Use-lld-provided-by-system.patch
+# Set a substitute-path in rust-gdb for standard library sources.
+Patch0002:           rustc-1.70.0-rust-gdb-substitute-path.patch
+Patch0003:           0001-add-support-for-ppc64le.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"
+  elseif arch == "loongarch64" then
+    arch = "loongarch64"
+  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+5, base, rust_triple(arch)))
+    if arch == target_arch then
+      rpm.define("bootstrap_source "..i+5)
+    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
+%if %{with musl_target}
+BuildRequires:       make gcc gcc-c++ ncurses-devel curl curl-devel musl-libc-static musl-gcc pkgconfig(libcurl) pkgconfig(liblzma)
+%else
+BuildRequires:       make gcc gcc-c++ ncurses-devel curl curl-devel pkgconfig(libcurl) pkgconfig(liblzma)
+%endif
+BuildRequires:       pkgconfig(openssl) pkgconfig(zlib) pkgconfig(libssh2) >= 1.6.0 gnupg2 wget
+%global python python3
+BuildRequires:       %{python}
+%if %with bundled_llvm
+BuildRequires:       cmake3 >= 3.20.3
+Provides:            bundled(llvm) = 20.1.8
+%else
+BuildRequires:       cmake >= 3.5.1
+%if %defined llvm
+%global llvm_root %{_libdir}/%{llvm}
+%else
+%ifarch x86_64 aarch64 riscv64 loongarch64
+%global llvm_toolset llvm-toolset-20
+%global llvm %{llvm_toolset}-llvm
+%global llvm_root /opt/%{_vendor}/%{llvm_toolset}/root%{_prefix}
+%global clang_maj_ver %(echo "%{llvm_toolset}" | cut -d '-' -f3)
+%else
+%global llvm llvm
+%global llvm_root %{_prefix}
+%global clang_maj_ver 17
+%endif
+%endif
+# Minimum external LLVM for rust 1.92
+# https://github.com/rust-lang/rust/pull/139275
+BuildRequires:       %{llvm} >= 20.0.0
+BuildRequires:       %{llvm}-devel >= 20.0.0
+%if %with llvm_static
+BuildRequires:       %{llvm}-static libffi-devel
+%endif
+%endif
+BuildRequires:       procps-ng
+BuildRequires:       ninja-build
+%ifarch x86_64 aarch64 riscv64 loongarch64
+BuildRequires:       %{llvm_toolset}-compiler-rt
+BuildRequires:       %{llvm_toolset}-clang
+%else
+BuildRequires:       compiler-rt
+BuildRequires:       clang
+%endif
+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.9.1
+%endif
+BuildRequires:       git
+Requires:            %{name} = %{version}-%{release}
+Obsoletes:           cargo-vendor <= 0.1.23
+Provides:            cargo-vendor = %{version}-%{release}
+Conflicts:           cargo-rpm-macros < 1:23
+%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
+# /usr/bin/rustfmt is dynamically linked against internal rustc libs
+Requires:            %{name}%{?_isa} = %{version}-%{release}
+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.
+
+%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
+Requires:           %{name} = %{version}-%{release}
+
+%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
+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
+# gpg check
+gpg --import %{SOURCE2}
+gpg --verify %{SOURCE1} %{SOURCE0}
+
+%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 "%{python}" != "python3"
+sed -i.try-python -e '/^try python3 /i try "%{python}" "$@"' ./configure
+%endif
+%patch -P 0001 -p1
+%patch -P 0002 -p1
+%patch -P 0003 -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
+
+# 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/src/core/build_steps/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)
+%if %{with bundled_llvm}
+max_cpus=$(( ($(free -g | awk '/^Mem:/{print $2}') + 1) / 4 ))
+%else
+max_cpus=$(( ($(free -g | awk '/^Mem:/{print $2}') + 1) / 2 ))
+%endif
+if [ "$max_cpus" -ge 1 -a "$max_cpus" -lt "$ncpus" ]; then
+  ncpus="$max_cpus"
+fi
+# Find the compiler-rt library for the Rust profiler_builtins crate.
+# But there are two versions in openEuler. Why?
+# We don't have macros.clang so we need clang version here
+# This is for avoiding rpm syntax error
+%ifarch ppc64le
+%global _arch powerpc64le
+%endif
+%if 0%{?clang_maj_ver} >= 17
+# This is the new one, used on openEuler 24.03 LTS or later
+%define profiler %(echo %{llvm_root}/%{_lib}/clang/%{clang_maj_ver}/lib/%{_arch}-%{_vendor}-linux-gnu/libclang_rt.profile.a)
+%else
+# This is used before openEuler 23.09
+%global clang_full_ver %%(clang --version | awk '/clang version/{print $3}')
+%define profiler %(echo %{_prefix}/%{_lib}/clang/%{clang_full_ver}/lib/libclang_rt.profile-%{_arch}.a)
+%endif
+test -r "%{profiler}"
+
+%configure --disable-option-checking \
+  --docdir=%{_pkgdocdir} \
+  --libdir=%{common_libdir} \
+  %{?with_musl_target:%{rust_musl_root}=%{musl_root}} \
+  --build=%{rust_triple} --host=%{rust_triple} --target=%{rust_triple}%{?with_musl_target:,%{rust_musl_triple}} \
+  --set target.%{rust_triple}.profiler="%{profiler}" \
+  %{!?with_rust_lld: --set rust.lld=false} \
+  --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,rust-analyzer,rustdoc,rustfmt,src \
+  --enable-vendor \
+  --enable-verbose-tests \
+  %{?codegen_units_std} \
+  --release-channel=stable
+%ifarch loongarch64
+	%{python} ./x.py build -j "$((($ncpus + 3) / 4))" --stage 2
+%else
+	%{python} ./x.py build -j "$ncpus" --stage 2
+%endif
+%{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}%{_pkgdocdir}/README.md
+rm -f %{buildroot}%{_pkgdocdir}/COPYRIGHT
+rm -f %{buildroot}%{_pkgdocdir}/LICENSE
+rm -f %{buildroot}%{_pkgdocdir}/LICENSE-APACHE
+rm -f %{buildroot}%{_pkgdocdir}/LICENSE-MIT
+rm -f %{buildroot}%{_pkgdocdir}/LICENSE-THIRD-PARTY
+rm -f %{buildroot}%{_pkgdocdir}/*.old
+find %{buildroot}%{_pkgdocdir}/html -empty -delete
+find %{buildroot}%{_pkgdocdir}/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 %{SOURCE3} %{buildroot}%{_sysconfdir}/skel/.cargo/config.toml
+install -m 0644 -D -p %{SOURCE4} %{buildroot}%{_sysconfdir}/profile.d/cargo-config.sh
+install -m 0644 -D -p %{SOURCE5} %{buildroot}%{_sysconfdir}/profile.d/cargo-config.csh
+
+# This allows users to build packages using Rust Toolset.
+%{__install} -D -m 644 %{S:102} %{buildroot}%{_fileattrsdir}/cargo_vendor.attr
+%{__install} -D -m 755 %{S:103} %{buildroot}%{_rpmconfigdir}/cargo_vendor.prov
+
+%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 || :
+%ifarch aarch64
+# https://github.com/rust-lang/rust/issues/123733
+%define cargo_test_skip --test-args "--skip panic_abort_doc_tests"
+%endif
+%{python} ./x.py test --no-fail-fast --stage 2 cargo %{?cargo_test_skip} || :
+%{python} ./x.py test --no-fail-fast --stage 2 clippy || :
+%{python} ./x.py test --no-fail-fast --stage 2 rust-analyzer || :
+%{python} ./x.py test --no-fail-fast --stage 2 rustfmt || :
+%ldconfig_scriptlets
+
+%files
+%license COPYRIGHT LICENSE-APACHE LICENSE-MIT
+%license %{_pkgdocdir}/html/*.txt
+%license %{_pkgdocdir}/COPYRIGHT.html
+%license %{_pkgdocdir}/licenses/
+%exclude %{_sysconfdir}/target-spec-json-schema.json
+%doc README.md
+%{_bindir}/rustc
+%{_bindir}/rustdoc
+%{_libdir}/*.so
+%dir %{rustlibdir}
+%dir %{rustlibdir}/%{rust_triple}
+%dir %{rustlibdir}/%{rust_triple}/lib
+%{_libexecdir}/rust-analyzer-proc-macro-srv
+%{rustlibdir}/%{rust_triple}/lib/*.so
+%if %{with musl_target}
+%dir %{rustlibdir}/%{rust_musl_triple}
+%dir %{rustlibdir}/%{rust_musl_triple}/lib
+%endif
+
+%files std-static
+%license %{_pkgdocdir}/COPYRIGHT-library.html
+%dir %{rustlibdir}
+%dir %{rustlibdir}/%{rust_triple}
+%dir %{rustlibdir}/%{rust_triple}/lib
+%{rustlibdir}/%{rust_triple}/lib/*.rlib
+%{rustlibdir}/%{rust_triple}/bin/rust-objcopy
+%if %{with musl_target}
+%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
+%endif
+
+%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
+%{_sysconfdir}/bash_completion.d/cargo
+%{_datadir}/zsh/site-functions/_cargo
+%dir %{_datadir}/cargo
+%dir %{_datadir}/cargo/registry
+%{_fileattrsdir}/cargo_vendor.attr
+%{_rpmconfigdir}/cargo_vendor.prov
+
+%files -n rustfmt
+%{_bindir}/rustfmt
+%{_bindir}/cargo-fmt
+%doc src/tools/rustfmt/{README,CHANGELOG,Configurations}.md
+%license src/tools/rustfmt/LICENSE-{APACHE,MIT}
+
+%files analyzer
+%{_bindir}/rust-analyzer
+%doc src/tools/rust-analyzer/README.md
+%license src/tools/rust-analyzer/LICENSE-{APACHE,MIT}
+
+%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 %{_pkgdocdir}
+%docdir %{_pkgdocdir}
+%{_pkgdocdir}/html
+%dir %{_docdir}/cargo
+%docdir %{_docdir}/cargo
+%{_docdir}/cargo/html
+%{_mandir}/man1/rustc.1*
+%{_mandir}/man1/rustdoc.1*
+%{_mandir}/man1/cargo*.1*
+
+%changelog
+* Fri Dec 12 2025 Funda Wang  - 1.92.0-1
+- update to 1.92.0
+
+* Tue Nov 11 2025 Funda Wang  - 1.91.1-1
+- update to 1.91.1
+
+* Tue Nov 04 2025 wangkai <13474090681@163.com> - 1.91.0-2
+- Fix syntax error for rust
+
+* Fri Oct 31 2025 Funda Wang  - 1.91.0-1
+- update to 1.91.0
+
+* Thu Oct 23 2025 Funda Wang  - 1.90.0-2
+- add conflicts on older version of cargo-rpm-macros
+
+* Thu Sep 25 2025 jchzhou  - 1.90.0-1
+- Update to 1.90.0
+
+* Wed Sep 24 2025 wangkai <13474090681@163.com> - 1.89.0-2
+- Remove rls command
+- Cleanup spec
+
+* Sun Aug 10 2025 Funda Wang  - 1.89.0-1
+- update to 1.89.0
+
+* Wed Jul 09 2025 wangkai <13474090681@163.com> - 1.88.0-1
+- Update to 1.88.0
+
+* Wed Jun 11 2025 Peng Haitao  - 1.87.0-2
+- Modify openEuler to %{vendor}
+
+* Fri May 16 2025 jchzhou  - 1.87.0-1
+- Update to 1.87.0
+
+* Mon Apr 07 2025 wangkai <13474090681@163.com> - 1.86.0-1
+- Update to 1.86.0
+
+* Tue Apr 01 2025 wangkai <13474090681@163.com> - 1.85.1-1
+- Update to 1.85.1
+
+* Fri Mar 07 2025 jchzhou  - 1.85.0-1
+- Update to 1.85.0
+
+* Fri Feb 21 2025 laokz  - 1.84.0-3
+- Switch to unbundled llvm for riscv64 building
+
+* Mon Feb 17 2025 wangkai <13474090681@163.com> - 1.84.0-2
+- Switch to unbundled llvm for x86_64 aarch64 building
+
+* Wed Jan 15 2025 wangkai <13474090681@163.com> - 1.84.0-1
+- Update to 1.84.0
+
+* Mon Dec 09 2024 wangkai <13474090681@163.com> - 1.83.0-1
+- Update to 1.83.0
+- Switch loongarch64 arch to bootstrap
+
+* Fri Dec 06 2024 jchzhou  - 1.82.0-6
+- Co-authored-by: misaka00251 
+- Add a switch for the musl target & disable it for loongarch64 & riscv64
+
+* Fri Nov 29 2024 Wenlong Zhang  - 1.82.0-5
+- fix build error for loongarch64
+
+* Fri Nov 29 2024 jchzhou  - 1.82.0-4
+- Fix a minor unpackaged file issue
+
+* Wed Nov 20 2024 Wenl4ng  - 1.82.0-3
+- use lfs-server
+
+* Wed Nov 13 2024 jchzhou  - 1.82.0-2
+- Switch to bundled llvm for building, halve the 'max_cpus' in this case
+
+* Wed Oct 23 2024 jchzhou  - 1.82.0-1
+- Update to 1.82.0
+
+* Tue Oct 22 2024 zhangwenlong  - 1.80.0-2
+- disable musl for loongarch64
+
+* Wed Aug 07 2024 wangkai <13474090681@163.com> - 1.80.0-1
+- Update to 1.80.0
+
+* Wed Jul 24 2024 wangkai <13474090681@163.com> - 1.79.0-3
+- Switch to bootstrap compilation
+
+* Thu Jul 18 2024 jchzhou  - 1.79.0-2
+- Drop obsolete patch for riscv64 (rust-lang/rust#123612 landed in 1.79.0)
+
+* Wed Jun 19 2024 wangkai <13474090681@163.com> - 1.79.0-1
+- Update to 1.79.0
+
+* Tue May 07 2024 wangkai <13474090681@163.com> - 1.78.0-1
+- Update to 1.78.0
+
+* Thu Jun 13 2024 jianchunfu  - 1.77.0-5
+- spec: Add support for ppc64le
+
+* Wed Jun 05 2024 Wenlong Zhang  - 1.77.0-4
+- disable musl for loongarch64
+
+* Mon Apr 22 2024 panchenbo  - 1.77.0-3
+- Modify openEuler to vendor
+
+* Thu Apr 11 2024 misaka00251  - 1.77.0-2
+- Enable profiler builtin
+
+* Wed Apr 03 2024 wangkai <13474090681@163.com> - 1.77.0-1
+- Update to 1.77.0
+
+* Tue Feb 20 2024 wangkai <13474090681@163.com> - 1.76.0-1
+- Update to 1.76.0
+
+* Sat Feb 17 2024 wangkai <13474090681@163.com> - 1.75.0-2
+- Fix CVE-2024-24575,CVE-2024-24577
+
+* Wed Jan 10 2024 wangkai <13474090681@163.com> - 1.75.0-1
+- Update to 1.75.0
+
+* Fri Nov 24 2023 wangkai <13474090681@163.com> - 1.74.0-1
+- Update to 1.74.0
+
+* Mon Nov 13 2023 wangkai <13474090681@163.com> - 1.73.0-2
+- Remove git lfs tar and change to user-repo
+- Add gpg verification to Source0
+
+* Mon Oct 09 2023 wangkai <13474090681@163.com> - 1.73.0-1
+- Update to 1.73.0
+
+* Mon Aug 28 2023 jchzhou  - 1.72.0-1
+- Update to 1.72.0
+
+* Mon Aug 7 2023 Funda Wang  - 1.71.1-1
+- New version 1.71.1
+
+* Sun Jul 30 2023 Funda Wang  - 1.71.0-3
+- Fix release channel name
+
+* Sun Jul 30 2023 Funda Wang  - 1.71.0-2
+- Use local mirror for speed up
+
+* Fri Jul 28 2023 jchzhou  - 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  - 1.70.0-1
+- Update to 1.70.0
+- Fix rotten patch
+
+* Mon Apr 24 2023 jchzhou  - 1.69.0-2
+- Add riscv64 specific changes
+
+* Mon Apr 24 2023 jchzhou  - 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  - 1.68.0-1
+- Update to 1.68.0
+
+* Tue Feb 28 2023 wangkai  - 1.67.1-1
+- Update to 1.67.1
+
+* Tue Apr 19 2022 Liu Zixian  - 1.60.0-1
+- Update to 1.60.0
+
+* Mon Feb 28 2022 Liu Zixian  - 1.59.0-1
+- Update to 1.59.0
+
+* Sun Feb 27 2022 Liu Zixian  - 1.58.1-1
+- Update to 1.58.1
+
+* Wed Feb 09 2022 Li Zheng  - 1.57.0-2
+- Fix build error
+
+* Sat Jan 22 2022 Liu Zixian  - 1.57.0-1
+- Update to 1.57.0
+
+* Sat Dec 18 2021 sdlzx  - 1.56.0-1
+- Update to 1.56.0
+
+* Wed Dec 15 2021 sdlzx  - 1.55.0-1
+- Update to 1.55.0
+
+* Thu Oct 14 2021 sdlzx  - 1.54.0-1
+- Update to 1.54.0
+
+* Fri Oct 08 2021 donglongtao  - 1.53.0-2
+- Update debuginfo-level config
+
+* Sat Oct 02 2021 sdlzx  - 1.53.0-1
+- Update to 1.53.0
+
+* Tue Sep 28 2021 sdlzx  - 1.52.1-1
+- Update to 1.52.1
+
+* Fri Sep 17 2021 donglongtao  - 1.51.0-10
+- Fix rustdoc install very slow
+
+* Tue Aug 24 2021 caodongxia  - 1.51.0-9
+- Fix rustdoc error info 
+
+* Wed Aug 18 2021 yaoxin  - 1.51.0-8
+- Fix CVE-2021-29922
+
+* Wed Aug 04 2021 chenyanpanHW  - 1.51.0-7
+- DESC: delete BuildRequires gdb
+
+* Thu Jul 08 2021 Jiajie Li  - 1.51.0-6
+- Add build require of ninja and llvm
+
+* Thu Jul 01 2021 Jiajie Li  - 1.51.0-5
+- Add support for musl target
+
+* Thu Jun 24 2021 sunguoshuai  - 1.51.0-4
+- fix a println wrong format
+
+* Thu Jun 24 2021 sunguoshuai  - 1.51.0-3
+- cargo help clippy should have description to user
+
+* Wed Jun 23 2021 sunguoshuai  - 1.51.0-2
+- clippy-driver usage should user friendly
+
+* Fri May 07 2021 wangyue  - 1.51.0-1
+- Update to 1.51.0
+
+* Mon Nov 30 2020 Jeffery.Gao  - 1.45.2-2
+- fix upgrade error
+
+* Mon Sep 21 2020 Jeffery.Gao  - 1.45.2-1
+- Update to 1.45.2
+
+* Fri Apr 17 2020 zhujunhao  - 1.29.1-4
+- add llvm in rust
+
+* Thu Dec 5 2019 wutao  - 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.90.0-disable-libssh2.patch b/rustc-1.90.0-disable-libssh2.patch
new file mode 100644
index 0000000..23dc6d8
--- /dev/null
+++ b/rustc-1.90.0-disable-libssh2.patch
@@ -0,0 +1,44 @@
+diff -up rustc-beta-src/src/tools/cargo/Cargo.lock.orig rustc-beta-src/src/tools/cargo/Cargo.lock
+--- rustc-beta-src/src/tools/cargo/Cargo.lock.orig	2025-08-16 15:47:14.000000000 -0700
++++ rustc-beta-src/src/tools/cargo/Cargo.lock	2025-08-18 17:31:39.554771554 -0700
+@@ -2800,7 +2800,6 @@ checksum = "1c42fe03df2bd3c53a3a9c7317ad
+ dependencies = [
+  "cc",
+  "libc",
+- "libssh2-sys",
+  "libz-sys",
+  "openssl-sys",
+  "pkg-config",
+@@ -2847,20 +2846,6 @@ dependencies = [
+  "pkg-config",
+  "vcpkg",
+ ]
+-
+-[[package]]
+-name = "libssh2-sys"
+-version = "0.3.1"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "220e4f05ad4a218192533b300327f5150e809b54c4ec83b5a1d91833601811b9"
+-dependencies = [
+- "cc",
+- "libc",
+- "libz-sys",
+- "openssl-sys",
+- "pkg-config",
+- "vcpkg",
+-]
+ 
+ [[package]]
+ name = "libz-rs-sys"
+diff -up rustc-beta-src/src/tools/cargo/Cargo.toml.orig rustc-beta-src/src/tools/cargo/Cargo.toml
+--- rustc-beta-src/src/tools/cargo/Cargo.toml.orig	2025-08-16 15:47:14.000000000 -0700
++++ rustc-beta-src/src/tools/cargo/Cargo.toml	2025-08-18 17:33:02.401743230 -0700
+@@ -46,7 +46,7 @@ curl = "0.4.48"
+ curl-sys = "0.4.82"
+ filetime = "0.2.25"
+ flate2 = { version = "1.1.2", default-features = false, features = ["zlib-rs"] }
+-git2 = "0.20.2"
++git2 = { version = "0.20.2", default-features = false, features = ["https"] }
+ git2-curl = "0.21.0"
+ # When updating this, also see if `gix-transport` further down needs updating or some auth-related tests will fail.
+ gix = { version = "0.73.0", default-features = false, features = ["progress-tree", "parallel", "dirwalk", "status"] }
diff --git a/rustc-1.92.0-src.tar.xz b/rustc-1.92.0-src.tar.xz
new file mode 100644
index 0000000..b83b596
--- /dev/null
+++ b/rustc-1.92.0-src.tar.xz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ebee170bfe4c4dfc59521a101de651e5534f4dae889756a5c97ca9ea40d0c307
+size 271887480
diff --git a/rustc-1.92.0-src.tar.xz.asc b/rustc-1.92.0-src.tar.xz.asc
new file mode 100644
index 0000000..f54f9d9
--- /dev/null
+++ b/rustc-1.92.0-src.tar.xz.asc
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNATURE-----
+
+wsFcBAABCgAQBQJpOtg7CRCFq5bm+hvl/gAA4pYP/3GCAzLuuLFic+mRciE3LtF4
+9NsYFYsMCFD6Guv/wNzw1MbpJkhTrc3/cG5SV9N16xgbgtTh4v2HgmkEYrNbFrxy
+OjaWFXjlJfbeTmhzPMV74yzWsP/RCNklDrJhj/RJDwr8OXgnratX95oVnmSFHcU1
+0e/EqjuL5BmAXjeLvgR9AnfFIrOp3GwF3SdOtHW68HpilbyHx1/mcZWyf8cftybE
+2OM0UqVmeDeH+WV7bHrsqVLpOWEAFALCnQRvT8yIzk2cjqwtGIjZEKmMUJ9INsbs
+TXBDIMH4lZQSOJQ5+0cKks7tPEx6a1n6JHx+D7L3l4EjnDdLpmLavyDpwO3hZFqX
+VtdFGBe2b8G4ENHUv9TwHo2w0zRFl9zKAuuVDFcXn21kJ2tRbumM3mrob/e26qKn
+C7ksrzYfxptKHb89WNle5G3LrSN+7uTbz+BymBSbxRrabZ+jrKNVh/UUzQnvwBGi
+GQvjEi3dOX6KGKP8/0WkeQDx+R8Vc0I2CZAxsKw6Na/i0giBffCcs6RY7fLRTvwO
+Ty+J+ZMl9xRgIqhJ+EfsyNWgFacJmqS5cANIWjluyYQhNAmZ9Li3YoFGbROtR2r8
+L1Fluy9PQ00JUiH9gIZud/Sgjy6rWnrx/1DDXC5sZ5cfRFjXEMs8Ur+HZ14ftV1e
+1M9qv04o0o0iSJDgdF+n
+=8XTv
+-----END PGP SIGNATURE-----
diff --git a/sources b/sources
new file mode 100644
index 0000000..e69de29
-- 
cgit v1.2.3