commit 72182b7cf5fd060bb36132a68e9d238429edca7f Author: MSVSphere Packaging Team Date: Wed Apr 3 18:24:53 2024 +0300 import rust-1.75.0-1.module+el8.10.0+21160+cc6a0df8 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cd447ec --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +SOURCES/rustc-1.75.0-src.tar.xz +SOURCES/wasi-libc-bd950eb128bff337153de217b11270f948d04bb4.tar.gz diff --git a/.rust.metadata b/.rust.metadata new file mode 100644 index 0000000..f65d0ce --- /dev/null +++ b/.rust.metadata @@ -0,0 +1,2 @@ +9ad7bb54dc9572c103b855cdcc823addbb34d15d SOURCES/rustc-1.75.0-src.tar.xz +55eaa32c99cc8ec970f2db2d340a605724589f9b SOURCES/wasi-libc-bd950eb128bff337153de217b11270f948d04bb4.tar.gz diff --git a/SOURCES/0001-Let-environment-variables-override-some-default-CPUs.patch b/SOURCES/0001-Let-environment-variables-override-some-default-CPUs.patch new file mode 100644 index 0000000..dc8be55 --- /dev/null +++ b/SOURCES/0001-Let-environment-variables-override-some-default-CPUs.patch @@ -0,0 +1,53 @@ +From 184d61d2c12aa2db01de9a14ccb2be0cfae5039b Mon Sep 17 00:00:00 2001 +From: Josh Stone +Date: Fri, 9 Jun 2023 15:23:08 -0700 +Subject: [PATCH] Let environment variables override some default CPUs + +--- + .../src/spec/targets/powerpc64le_unknown_linux_gnu.rs | 2 +- + .../rustc_target/src/spec/targets/s390x_unknown_linux_gnu.rs | 2 +- + .../rustc_target/src/spec/targets/x86_64_unknown_linux_gnu.rs | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/compiler/rustc_target/src/spec/targets/powerpc64le_unknown_linux_gnu.rs b/compiler/rustc_target/src/spec/targets/powerpc64le_unknown_linux_gnu.rs +index 194c3170e683..9806ca78297c 100644 +--- a/compiler/rustc_target/src/spec/targets/powerpc64le_unknown_linux_gnu.rs ++++ b/compiler/rustc_target/src/spec/targets/powerpc64le_unknown_linux_gnu.rs +@@ -2,7 +2,7 @@ + + pub fn target() -> Target { + let mut base = base::linux_gnu::opts(); +- base.cpu = "ppc64le".into(); ++ base.cpu = option_env!("RUSTC_TARGET_CPU_PPC64LE").unwrap_or("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; +diff --git a/compiler/rustc_target/src/spec/targets/s390x_unknown_linux_gnu.rs b/compiler/rustc_target/src/spec/targets/s390x_unknown_linux_gnu.rs +index 6fc410eb2235..c8f84edb9715 100644 +--- a/compiler/rustc_target/src/spec/targets/s390x_unknown_linux_gnu.rs ++++ b/compiler/rustc_target/src/spec/targets/s390x_unknown_linux_gnu.rs +@@ -5,7 +5,7 @@ pub fn target() -> Target { + let mut base = base::linux_gnu::opts(); + base.endian = Endian::Big; + // z10 is the oldest CPU supported by LLVM +- base.cpu = "z10".into(); ++ base.cpu = option_env!("RUSTC_TARGET_CPU_S390X").unwrap_or("z10").into(); + // FIXME: The ABI implementation in cabi_s390x.rs is for now hard-coded to assume the no-vector + // ABI. Pass the -vector feature string to LLVM to respect this assumption. On LLVM < 16, we + // also strip v128 from the data_layout below to match the older LLVM's expectation. +diff --git a/compiler/rustc_target/src/spec/targets/x86_64_unknown_linux_gnu.rs b/compiler/rustc_target/src/spec/targets/x86_64_unknown_linux_gnu.rs +index 80e267c163fa..8436a00e66d5 100644 +--- a/compiler/rustc_target/src/spec/targets/x86_64_unknown_linux_gnu.rs ++++ b/compiler/rustc_target/src/spec/targets/x86_64_unknown_linux_gnu.rs +@@ -2,7 +2,7 @@ + + pub fn target() -> Target { + let mut base = base::linux_gnu::opts(); +- base.cpu = "x86-64".into(); ++ base.cpu = option_env!("RUSTC_TARGET_CPU_X86_64").unwrap_or("x86-64").into(); + base.plt_by_default = false; + base.max_atomic_width = Some(64); + base.add_pre_link_args(LinkerFlavor::Gnu(Cc::Yes, Lld::No), &["-m64"]); +-- +2.41.0 + diff --git a/SOURCES/0001-Use-lld-provided-by-system.patch b/SOURCES/0001-Use-lld-provided-by-system.patch new file mode 100644 index 0000000..bee8e16 --- /dev/null +++ b/SOURCES/0001-Use-lld-provided-by-system.patch @@ -0,0 +1,53 @@ +From 61b5cc96337da2121221dd1bcdb63fd36551d065 Mon Sep 17 00:00:00 2001 +From: Josh Stone +Date: Wed, 1 Nov 2023 15:21:15 -0700 +Subject: [PATCH] Use lld provided by system + +--- + compiler/rustc_target/src/spec/base/wasm.rs | 3 +-- + compiler/rustc_target/src/spec/targets/x86_64_unknown_none.rs | 2 +- + compiler/rustc_target/src/spec/targets/x86_64_unknown_uefi.rs | 1 + + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/compiler/rustc_target/src/spec/base/wasm.rs b/compiler/rustc_target/src/spec/base/wasm.rs +index 87ade9e58cf4..2ddff95febab 100644 +--- a/compiler/rustc_target/src/spec/base/wasm.rs ++++ b/compiler/rustc_target/src/spec/base/wasm.rs +@@ -91,8 +91,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, +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 9aa95a35f8e5..a9172f9441b7 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 +@@ -17,7 +17,7 @@ pub 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()), + features: + "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-3dnow,-3dnowa,-avx,-avx2,+soft-float" + .into(), +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 5abfb8162f70..13cb43bda1a4 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 +@@ -16,6 +16,7 @@ pub fn target() -> Target { + base.plt_by_default = false; + base.max_atomic_width = Some(64); + base.entry_abi = Conv::X86_64Win64; ++ 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.41.0 + diff --git a/SOURCES/0001-bootstrap-allow-disabling-target-self-contained.patch b/SOURCES/0001-bootstrap-allow-disabling-target-self-contained.patch new file mode 100644 index 0000000..2a3cbd7 --- /dev/null +++ b/SOURCES/0001-bootstrap-allow-disabling-target-self-contained.patch @@ -0,0 +1,102 @@ +From df0d6f1d8b46db82d7599ca8eff6e8f844cf52f2 Mon Sep 17 00:00:00 2001 +From: Josh Stone +Date: Thu, 28 Sep 2023 18:14:28 -0700 +Subject: [PATCH 1/2] bootstrap: allow disabling target self-contained + +--- + config.example.toml | 5 +++++ + src/bootstrap/src/core/build_steps/compile.rs | 4 ++++ + src/bootstrap/src/core/config/config.rs | 8 ++++++++ + src/bootstrap/src/lib.rs | 5 +++++ + 4 files changed, 22 insertions(+) + +diff --git a/config.example.toml b/config.example.toml +index e5df28a49af6..2fcd8b8cb057 100644 +--- a/config.example.toml ++++ b/config.example.toml +@@ -807,6 +807,11 @@ change-id = 116881 + # target triples containing `-none`, `nvptx`, `switch`, or `-uefi`. + #no-std = (bool) + ++# Copy libc and CRT objects into the target lib/self-contained/ directory. ++# Enabled by default on `musl`, `wasi`, and `windows-gnu` targets. Other ++# targets may ignore this setting if they have nothing to be contained. ++#self-contained = (bool) ++ + # ============================================================================= + # Distribution options + # +diff --git a/src/bootstrap/src/core/build_steps/compile.rs b/src/bootstrap/src/core/build_steps/compile.rs +index 7021a9543582..11555c65ca87 100644 +--- a/src/bootstrap/src/core/build_steps/compile.rs ++++ b/src/bootstrap/src/core/build_steps/compile.rs +@@ -302,6 +302,10 @@ fn copy_self_contained_objects( + compiler: &Compiler, + target: TargetSelection, + ) -> Vec<(PathBuf, DependencyType)> { ++ if builder.self_contained(target) != Some(true) { ++ return vec![]; ++ } ++ + let libdir_self_contained = builder.sysroot_libdir(*compiler, target).join("self-contained"); + t!(fs::create_dir_all(&libdir_self_contained)); + let mut target_deps = vec![]; +diff --git a/src/bootstrap/src/core/config/config.rs b/src/bootstrap/src/core/config/config.rs +index 0a9175aa3ea5..a2e028b25036 100644 +--- a/src/bootstrap/src/core/config/config.rs ++++ b/src/bootstrap/src/core/config/config.rs +@@ -533,6 +533,7 @@ pub struct Target { + pub wasi_root: Option, + pub qemu_rootfs: Option, + pub no_std: bool, ++ pub self_contained: bool, + } + + impl Target { +@@ -541,6 +542,9 @@ pub fn from_triple(triple: &str) -> Self { + if triple.contains("-none") || triple.contains("nvptx") || triple.contains("switch") { + target.no_std = true; + } ++ if triple.contains("-musl") || triple.contains("-wasi") || triple.contains("-windows-gnu") { ++ target.self_contained = true; ++ } + target + } + } +@@ -1051,6 +1055,7 @@ struct TomlTarget { + wasi_root: Option = "wasi-root", + qemu_rootfs: Option = "qemu-rootfs", + no_std: Option = "no-std", ++ self_contained: Option = "self-contained", + } + } + +@@ -1600,6 +1605,9 @@ fn get_table(option: &str) -> Result { + if let Some(s) = cfg.no_std { + target.no_std = s; + } ++ if let Some(s) = cfg.self_contained { ++ target.self_contained = s; ++ } + target.cc = cfg.cc.map(PathBuf::from); + target.cxx = cfg.cxx.map(PathBuf::from); + target.ar = cfg.ar.map(PathBuf::from); +diff --git a/src/bootstrap/src/lib.rs b/src/bootstrap/src/lib.rs +index 33b8f1a7ce72..f36e53187576 100644 +--- a/src/bootstrap/src/lib.rs ++++ b/src/bootstrap/src/lib.rs +@@ -1335,6 +1335,11 @@ fn no_std(&self, target: TargetSelection) -> Option { + self.config.target_config.get(&target).map(|t| t.no_std) + } + ++ /// Returns `true` if this is a self-contained `target`, if defined ++ fn self_contained(&self, target: TargetSelection) -> Option { ++ self.config.target_config.get(&target).map(|t| t.self_contained) ++ } ++ + /// Returns `true` if the target will be tested using the `remote-test-client` + /// and `remote-test-server` binaries. + fn remote_tested(&self, target: TargetSelection) -> bool { +-- +2.41.0 + diff --git a/SOURCES/0001-bootstrap-only-show-PGO-warnings-when-verbose.patch b/SOURCES/0001-bootstrap-only-show-PGO-warnings-when-verbose.patch new file mode 100644 index 0000000..ca36844 --- /dev/null +++ b/SOURCES/0001-bootstrap-only-show-PGO-warnings-when-verbose.patch @@ -0,0 +1,33 @@ +From 776146e9ebb6bbe17a37bfad955f3dac95317275 Mon Sep 17 00:00:00 2001 +From: Josh Stone +Date: Thu, 16 Nov 2023 10:42:23 -0800 +Subject: [PATCH] bootstrap: only show PGO warnings when verbose + +Building rustc with `--rust-profile-use` is currently dumping a lot of +warnings of "no profile data available for function" from `rustc_smir` +and `stable_mir`. These simply aren't exercised by the current profile- +gathering steps, but that's to be expected for new or experimental +functionality. I think for most people, these warnings will be just +noise, so it makes sense to only have them in verbose builds. +--- + src/bootstrap/src/core/build_steps/compile.rs | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/bootstrap/src/core/build_steps/compile.rs b/src/bootstrap/src/core/build_steps/compile.rs +index af69860df1c5..51e4195827fc 100644 +--- a/src/bootstrap/src/core/build_steps/compile.rs ++++ b/src/bootstrap/src/core/build_steps/compile.rs +@@ -887,7 +887,9 @@ fn run(self, builder: &Builder<'_>) { + } else if let Some(path) = &builder.config.rust_profile_use { + if compiler.stage == 1 { + cargo.rustflag(&format!("-Cprofile-use={path}")); +- cargo.rustflag("-Cllvm-args=-pgo-warn-missing-function"); ++ if builder.is_verbose() { ++ cargo.rustflag("-Cllvm-args=-pgo-warn-missing-function"); ++ } + true + } else { + false +-- +2.43.0 + diff --git a/SOURCES/0002-set-an-external-library-path-for-wasm32-wasi.patch b/SOURCES/0002-set-an-external-library-path-for-wasm32-wasi.patch new file mode 100644 index 0000000..e2da2fe --- /dev/null +++ b/SOURCES/0002-set-an-external-library-path-for-wasm32-wasi.patch @@ -0,0 +1,78 @@ +From 79bb610c8fc5d9df7dd4720ae847b8f17e7b1ad4 Mon Sep 17 00:00:00 2001 +From: Josh Stone +Date: Thu, 28 Sep 2023 18:18:16 -0700 +Subject: [PATCH 2/2] set an external library path for wasm32-wasi + +--- + compiler/rustc_codegen_ssa/src/back/link.rs | 9 +++++++++ + compiler/rustc_target/src/spec/mod.rs | 2 ++ + compiler/rustc_target/src/spec/targets/wasm32_wasi.rs | 6 +++++- + 3 files changed, 16 insertions(+), 1 deletion(-) + +diff --git a/compiler/rustc_codegen_ssa/src/back/link.rs b/compiler/rustc_codegen_ssa/src/back/link.rs +index dd9d277fb775..3d0f0502f255 100644 +--- a/compiler/rustc_codegen_ssa/src/back/link.rs ++++ b/compiler/rustc_codegen_ssa/src/back/link.rs +@@ -1496,6 +1496,12 @@ fn get_object_file_path(sess: &Session, name: &str, self_contained: bool) -> Pat + return file_path; + } + } ++ if let Some(lib_path) = &sess.target.options.external_lib_path { ++ let file_path = Path::new(lib_path.as_ref()).join(name); ++ if file_path.exists() { ++ return file_path; ++ } ++ } + for search_path in fs.search_paths() { + let file_path = search_path.dir.join(name); + if file_path.exists() { +@@ -1982,6 +1988,9 @@ fn add_library_search_dirs(cmd: &mut dyn Linker, sess: &Session, self_contained: + let lib_path = sess.target_filesearch(PathKind::All).get_self_contained_lib_path(); + cmd.include_path(&fix_windows_verbatim_for_gcc(&lib_path)); + } ++ if let Some(lib_path) = &sess.target.options.external_lib_path { ++ cmd.include_path(Path::new(lib_path.as_ref())); ++ } + } + + /// Add options making relocation sections in the produced ELF files read-only +diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs +index f04799482c83..25410b37ba24 100644 +--- a/compiler/rustc_target/src/spec/mod.rs ++++ b/compiler/rustc_target/src/spec/mod.rs +@@ -1874,6 +1874,7 @@ pub struct TargetOptions { + /// Objects to link before and after all other object code. + pub pre_link_objects: CrtObjects, + pub post_link_objects: CrtObjects, ++ pub external_lib_path: Option>, + /// Same as `(pre|post)_link_objects`, but when self-contained linking mode is enabled. + pub pre_link_objects_self_contained: CrtObjects, + pub post_link_objects_self_contained: CrtObjects, +@@ -2352,6 +2353,7 @@ fn default() -> TargetOptions { + relro_level: RelroLevel::None, + pre_link_objects: Default::default(), + post_link_objects: Default::default(), ++ external_lib_path: None, + pre_link_objects_self_contained: Default::default(), + post_link_objects_self_contained: Default::default(), + link_self_contained: LinkSelfContainedDefault::False, +diff --git a/compiler/rustc_target/src/spec/targets/wasm32_wasi.rs b/compiler/rustc_target/src/spec/targets/wasm32_wasi.rs +index 6dbcb01ea436..2151f86d0648 100644 +--- a/compiler/rustc_target/src/spec/targets/wasm32_wasi.rs ++++ b/compiler/rustc_target/src/spec/targets/wasm32_wasi.rs +@@ -86,7 +86,11 @@ pub fn target() -> Target { + options.post_link_objects_self_contained = crt_objects::post_wasi_self_contained(); + + // FIXME: Figure out cases in which WASM needs to link with a native toolchain. +- options.link_self_contained = LinkSelfContainedDefault::True; ++ options.link_self_contained = LinkSelfContainedDefault::False; ++ ++ options.pre_link_objects = options.pre_link_objects_self_contained.clone(); ++ options.post_link_objects = options.post_link_objects_self_contained.clone(); ++ options.external_lib_path = Some("/usr/wasm32-wasi/lib/wasm32-wasi".into()); + + // Right now this is a bit of a workaround but we're currently saying that + // the target by default has a static crt which we're taking as a signal +-- +2.41.0 + diff --git a/SOURCES/macros.rust-toolset b/SOURCES/macros.rust-toolset new file mode 100644 index 0000000..31cd56d --- /dev/null +++ b/SOURCES/macros.rust-toolset @@ -0,0 +1,181 @@ +# Explicitly use bindir tools, in case others are in the PATH, +# like the rustup shims in a user's ~/.cargo/bin/. +# +# Since cargo 1.31, install only uses $CARGO_HOME/config, ignoring $PWD. +# https://github.com/rust-lang/cargo/issues/6397 +# But we can set CARGO_HOME locally, which is a good idea anyway to make sure +# it never writes to ~/.cargo during rpmbuild. +%__cargo /usr/bin/env CARGO_HOME=.cargo RUSTFLAGS='%{build_rustflags}' /usr/bin/cargo +%__rustc /usr/bin/rustc +%__rustdoc /usr/bin/rustdoc + +# rustflags_opt_level: default optimization level +# +# It corresponds to the "-Copt-level" rustc command line option. +%rustflags_opt_level 3 + +# rustflags_debuginfo: default verbosity of debug information +# +# It corresponds to the "-Cdebuginfo" rustc command line option. +# In some cases, it might be required to override this macro with "1" or even +# "0", if memory usage gets too high during builds on some resource-constrained +# architectures (most likely on 32-bit architectures), which will however +# reduce the quality of the produced debug symbols. +%rustflags_debuginfo 2 + +# rustflags_codegen_units: default number of parallel code generation units +# +# The default value of "1" results in generation of better code, but comes at +# the cost of longer build times. +%rustflags_codegen_units 1 + +# build_rustflags: default compiler flags for rustc (RUSTFLAGS) +# +# -Copt-level: set optimization level (default: highest optimization level) +# -Cdebuginfo: set debuginfo verbosity (default: full debug information) +# -Ccodegen-units: set number of parallel code generation units (default: 1) +# +# ref. https://doc.rust-lang.org/rustc/codegen-options/index.html +%build_rustflags %{shrink: + -Copt-level=%rustflags_opt_level + -Cdebuginfo=%rustflags_debuginfo + -Ccodegen-units=%rustflags_codegen_units +} + +# __cargo_common_opts: common command line flags for cargo +# +# _smp_mflags: run builds and tests in parallel +%__cargo_common_opts %{?_smp_mflags} + +%cargo_prep(V:) (\ +%{__mkdir} -p .cargo \ +cat > .cargo/config << EOF \ +[build]\ +rustc = "%{__rustc}"\ +rustdoc = "%{__rustdoc}"\ +\ +[env]\ +CFLAGS = "%{build_cflags}"\ +CXXFLAGS = "%{build_cxxflags}"\ +LDFLAGS = "%{build_ldflags}"\ +\ +[install]\ +root = "%{buildroot}%{_prefix}"\ +\ +[term]\ +verbose = true\ +EOF\ +%if 0%{-V:1}\ +%{__tar} -xoaf %{S:%{-V*}}\ +cat >> .cargo/config << EOF \ +\ +[source.crates-io]\ +replace-with = "vendored-sources"\ +\ +[source.vendored-sources]\ +directory = "./vendor"\ +EOF\ +%endif\ +) + +# __cargo_parse_opts: function-like macro which parses common flags into the +# equivalent command-line flags for cargo +%__cargo_parse_opts(naf:) %{shrink:\ +%{-f:%{-a:%{error:Can't specify both -f(%{-f*}) and -a}}} \ + %{-n:--no-default-features} \ + %{-a:--all-features} \ + %{-f:--features %{-f*}} \ + %{nil} +} + +# NB: cargo_build/test/install do not use the -n/-a/-f argument parsing like +# Fedora's rust-packaging, because that change would break anyone that's +# already passing arguments directly to cargo after the macro. Instead, one can +# explicitly use --no-default-features, --all-features, or --features XYZ. + +# cargo_build: builds the crate with cargo +%cargo_build \ +%{shrink:\ + %{__cargo} build \ + %{__cargo_common_opts} \ + --release \ +} + +# cargo_test: runs the test suite with cargo +# +# To pass command-line arguments to the cargo test runners directly (for +# example, to skip certain tests during package builds), the +# "cargo test" argument parsing need to be bypassed, +# i.e. "%%cargo_test -- --skip foo" for skipping all tests with names that +# match "foo". +%cargo_test \ +%{shrink:\ + %{__cargo} test \ + %{__cargo_common_opts} \ + --release \ + --no-fail-fast \ +} + +# cargo_install: install files into the buildroot +# +# For "binary" crates, this macro installs all "bin" build targets to _bindir +# inside the buildroot. The "--no-track" option prevents the creation of the +# "$CARGO_HOME/.crates.toml" file, which is used to keep track of which version +# of a specific binary has been installed, but which conflicts between builds +# of different Rust applications and is not needed when building RPM packages. +%cargo_install \ +%{shrink: \ + %{__cargo} install \ + %{__cargo_common_opts} \ + --no-track \ + --path . \ +} \ + +# cargo_license: print license information for all crate dependencies +# +# The "no-build,no-dev,no-proc-macro" argument results in only crates which are +# linked into the final binary to be considered. +# +# Additionally, deprecated SPDX syntax ("/" instead of "OR") is normalized +# before sorting the results to ensure reproducible output of this macro. +# +# This macro must be called with the same feature flags as other cargo macros, +# in particular, "cargo_build", otherwise its output will be incomplete. +# +# The "cargo tree" command called by this macro will fail if there are missing +# (optional) dependencies. +%cargo_license(naf:)\ +%{shrink:\ + %{__cargo} tree \ + --workspace \ + --offline \ + --edges no-build,no-dev,no-proc-macro \ + --no-dedupe \ + --target all \ + %{__cargo_parse_opts %{-n} %{-a} %{-f:-f%{-f*}}} \ + --prefix none \ + --format "{l}: {p}" \ + | sed -e "s: ($(pwd)[^)]*)::g" -e "s: / :/:g" -e "s:/: OR :g" \ + | sort -u +} + +# cargo_license_summary: print license summary for all crate dependencies +# +# This macro works in the same way as cargo_license, except that it only prints +# a list of licenses, and not the complete license information for every crate +# in the dependency tree. This is useful for determining the correct License +# tag for packages that contain compiled Rust binaries. +%cargo_license_summary(naf:)\ +%{shrink:\ + %{__cargo} tree \ + --workspace \ + --offline \ + --edges no-build,no-dev,no-proc-macro \ + --no-dedupe \ + --target all \ + %{__cargo_parse_opts %{-n} %{-a} %{-f:-f%{-f*}}} \ + --prefix none \ + --format "# {l}" \ + | sed -e "s: / :/:g" -e "s:/: OR :g" \ + | sort -u \ +} diff --git a/SOURCES/rustc-1.70.0-rust-gdb-substitute-path.patch b/SOURCES/rustc-1.70.0-rust-gdb-substitute-path.patch new file mode 100644 index 0000000..e9e5e2e --- /dev/null +++ b/SOURCES/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/SOURCES/rustc-1.75.0-disable-libssh2.patch b/SOURCES/rustc-1.75.0-disable-libssh2.patch new file mode 100644 index 0000000..2b06046 --- /dev/null +++ b/SOURCES/rustc-1.75.0-disable-libssh2.patch @@ -0,0 +1,42 @@ +--- ./rustc-beta-src/src/tools/cargo/Cargo.lock.orig 2023-11-12 12:24:35.000000000 -0800 ++++ rustc-beta-src/src/tools/cargo/Cargo.lock 2023-11-14 17:01:32.010125953 -0800 +@@ -2027,7 +2027,6 @@ + dependencies = [ + "cc", + "libc", +- "libssh2-sys", + "libz-sys", + "openssl-sys", + "pkg-config", +@@ -2060,20 +2059,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.9" + source = "registry+https://github.com/rust-lang/crates.io-index" +--- ./rustc-beta-src/src/tools/cargo/Cargo.toml.orig 2023-11-14 17:01:32.010125953 -0800 ++++ rustc-beta-src/src/tools/cargo/Cargo.toml 2023-11-14 17:02:44.645097701 -0800 +@@ -40,7 +40,7 @@ + curl-sys = "0.4.68" + filetime = "0.2.22" + flate2 = { version = "1.0.28", default-features = false, features = ["zlib"] } +-git2 = "0.18.1" ++git2 = { version = "0.18.1", default-features = false, features = ["https"] } + git2-curl = "0.19.0" + gix = { version = "0.55.2", default-features = false, features = ["blocking-http-transport-curl", "progress-tree", "revision"] } + gix-features-for-configuration-only = { version = "0.35.0", package = "gix-features", features = [ "parallel" ] } diff --git a/SPECS/rust.spec b/SPECS/rust.spec new file mode 100644 index 0000000..4dd18e8 --- /dev/null +++ b/SPECS/rust.spec @@ -0,0 +1,1315 @@ +Name: rust +Version: 1.75.0 +Release: 1%{?dist} +Summary: The Rust Programming Language +License: (Apache-2.0 OR MIT) AND (Artistic-2.0 AND BSD-3-Clause AND ISC AND MIT AND MPL-2.0 AND Unicode-DFS-2016) +# ^ written as: (rust itself) and (bundled libraries) +URL: https://www.rust-lang.org + +# Only x86_64, i686, and aarch64 are Tier 1 platforms at this time. +# https://doc.rust-lang.org/nightly/rustc/platform-support.html +%global rust_arches x86_64 i686 aarch64 ppc64le s390x +ExclusiveArch: %{rust_arches} + +# To bootstrap from scratch, set the channel and date from src/stage0.json +# e.g. 1.59.0 wants rustc: 1.58.0-2022-01-13 +# or nightly wants some beta-YYYY-MM-DD +%global bootstrap_version 1.74.0 +%global bootstrap_channel 1.74.0 +%global bootstrap_date 2023-11-16 + +# Only the specified arches will use bootstrap binaries. +# NOTE: Those binaries used to be uploaded with every new release, but that was +# a waste of lookaside cache space when they're most often unused. +# Run "spectool -g rust.spec" after changing this and then "fedpkg upload" to +# add them to sources. Remember to remove them again after the bootstrap build! +#global bootstrap_arches %%{rust_arches} + +# Define a space-separated list of targets to ship rust-std-static-$triple for +# cross-compilation. The packages are noarch, but they're not fully +# reproducible between hosts, so only x86_64 actually builds it. +#ifarch x86_64 +# FIX: Except on RHEL8 modules, we can't filter a noarch package from shipping +# on certain arches, namely s390x for its lack of lld. So we need to make it an +# arch-specific package only for the supported arches. +%ifnarch s390x +%if 0%{?fedora} +%global mingw_targets i686-pc-windows-gnu x86_64-pc-windows-gnu +%endif +%global wasm_targets wasm32-unknown-unknown wasm32-wasi +%if 0%{?fedora} || 0%{?rhel} >= 10 +%global extra_targets x86_64-unknown-none x86_64-unknown-uefi +%endif +%endif +%global all_targets %{?mingw_targets} %{?wasm_targets} %{?extra_targets} +%define target_enabled() %{lua: + print(string.find(rpm.expand(" %{all_targets} "), rpm.expand(" %1 "), 1, true) or 0) +} + +# We need CRT files for *-wasi targets, at least as new as the commit in +# src/ci/docker/host-x86_64/dist-various-2/build-wasi-toolchain.sh +# (updated per https://github.com/rust-lang/rust/pull/96907) +%global wasi_libc_url https://github.com/WebAssembly/wasi-libc +#global wasi_libc_ref wasi-sdk-20 +%global wasi_libc_ref bd950eb128bff337153de217b11270f948d04bb4 +%global wasi_libc_name wasi-libc-%{wasi_libc_ref} +%global wasi_libc_source %{wasi_libc_url}/archive/%{wasi_libc_ref}/%{wasi_libc_name}.tar.gz +%global wasi_libc_dir %{_builddir}/%{wasi_libc_name} +%if 0%{?fedora} +%bcond_with bundled_wasi_libc +%else +%bcond_without bundled_wasi_libc +%endif + +# Using llvm-static may be helpful as an opt-in, e.g. to aid LLVM rebases. +%bcond_with llvm_static + +# We can also choose to just use Rust's bundled LLVM, in case the system LLVM +# is insufficient. Rust currently requires LLVM 15.0+. +%global min_llvm_version 15.0.0 +%global bundled_llvm_version 17.0.5 +%bcond_with bundled_llvm + +# Requires stable libgit2 1.7, and not the next minor soname change. +# This needs to be consistent with the bindings in vendor/libgit2-sys. +%global min_libgit2_version 1.7.1 +%global next_libgit2_version 1.8.0~ +%global bundled_libgit2_version 1.7.1 +%if 0%{?fedora} >= 39 +%bcond_with bundled_libgit2 +%else +%bcond_without bundled_libgit2 +%endif + +%if 0%{?rhel} +# Disable cargo->libgit2->libssh2 on RHEL, as it's not approved for FIPS (rhbz1732949) +%bcond_without disabled_libssh2 +%else +%bcond_with disabled_libssh2 +%endif + +%if 0%{?__isa_bits} == 32 +# Disable PGO on 32-bit to reduce build memory +%bcond_with rustc_pgo +%else +%bcond_without rustc_pgo +%endif + +# Detect non-stable channels from the version, like 1.74.0~beta.1 +%{lua: do + local version = rpm.expand("%{version}") + local version_channel, subs = string.gsub(version, "^.*~(%w+).*$", "%1", 1) + rpm.define("channel " .. (subs ~= 0 and version_channel or "stable")) + rpm.define("rustc_package rustc-" .. version_channel .. "-src") +end} +Source0: https://static.rust-lang.org/dist/%{rustc_package}.tar.xz +Source1: %{wasi_libc_source} +# Sources for bootstrap_arches are inserted by lua below + +# By default, rust tries to use "rust-lld" as a linker for some targets. +Patch1: 0001-Use-lld-provided-by-system.patch + +# Set a substitute-path in rust-gdb for standard library sources. +Patch2: rustc-1.70.0-rust-gdb-substitute-path.patch + +# Override default target CPUs to match distro settings +# TODO: upstream this ability into the actual build configuration +Patch3: 0001-Let-environment-variables-override-some-default-CPUs.patch + +# Override the default self-contained system libraries +# TODO: the first can probably be upstreamed, but the second is hard-coded, +# and we're only applying that if not with bundled_wasi_libc. +Patch4: 0001-bootstrap-allow-disabling-target-self-contained.patch +Patch5: 0002-set-an-external-library-path-for-wasm32-wasi.patch + +# https://github.com/rust-lang/rust/pull/117982 +Patch6: 0001-bootstrap-only-show-PGO-warnings-when-verbose.patch + +### RHEL-specific patches below ### + +# Simple rpm macros for rust-toolset (as opposed to full rust-packaging) +Source100: macros.rust-toolset + +# Disable cargo->libgit2->libssh2 on RHEL, as it's not approved for FIPS (rhbz1732949) +Patch100: rustc-1.75.0-disable-libssh2.patch + +# Get the Rust triple for any arch. +%{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} + +%global rust_triple %{lua: print(rust_triple(rpm.expand("%{_target_cpu}")))} + +# Get the environment form of the Rust triple +%global rust_triple_env %{lua: + print(string.upper(string.gsub(rpm.expand("%{rust_triple}"), "-", "_"))) +} + +%if %defined bootstrap_arches +# For each bootstrap arch, add an additional binary Source. +# Also define bootstrap_source just for the current target. +%{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}") + local channel = rpm.expand("%{bootstrap_channel}") + local target_arch = rpm.expand("%{_target_cpu}") + for i, arch in ipairs(bootstrap_arches) do + i = 1000 + i * 3 + local suffix = channel.."-"..rust_triple(arch) + print(string.format("Source%d: %s/cargo-%s.tar.xz\n", i, base, suffix)) + print(string.format("Source%d: %s/rustc-%s.tar.xz\n", i+1, base, suffix)) + print(string.format("Source%d: %s/rust-std-%s.tar.xz\n", i+2, base, suffix)) + if arch == target_arch then + rpm.define("bootstrap_source_cargo "..i) + rpm.define("bootstrap_source_rustc "..i+1) + rpm.define("bootstrap_source_std "..i+2) + rpm.define("bootstrap_suffix "..suffix) + end + end +end} +%endif + +%ifarch %{bootstrap_arches} +%global local_rust_root %{_builddir}/rust-%{bootstrap_suffix} +Provides: bundled(%{name}-bootstrap) = %{bootstrap_version} +%else +BuildRequires: cargo >= %{bootstrap_version} +BuildRequires: (%{name} >= %{bootstrap_version} with %{name} <= %{version}) +%global local_rust_root %{_prefix} +%endif + +BuildRequires: make +BuildRequires: gcc +BuildRequires: gcc-c++ +BuildRequires: ncurses-devel +# explicit curl-devel to avoid httpd24-curl (rhbz1540167) +BuildRequires: curl-devel +BuildRequires: pkgconfig(libcurl) +BuildRequires: pkgconfig(liblzma) +BuildRequires: pkgconfig(openssl) +BuildRequires: pkgconfig(zlib) + +%if %{without bundled_libgit2} +BuildRequires: (pkgconfig(libgit2) >= %{min_libgit2_version} with pkgconfig(libgit2) < %{next_libgit2_version}) +%endif + +%if %{without disabled_libssh2} +BuildRequires: pkgconfig(libssh2) +%endif + +%if 0%{?rhel} == 8 +BuildRequires: platform-python +%else +BuildRequires: python3 +%endif +BuildRequires: python3-rpm-macros + +%if %with bundled_llvm +BuildRequires: cmake >= 3.20.0 +BuildRequires: ninja-build +Provides: bundled(llvm) = %{bundled_llvm_version} +%else +BuildRequires: cmake >= 3.5.1 +%if %defined llvm +%global llvm_root %{_libdir}/%{llvm} +%else +%global llvm llvm +%global llvm_root %{_prefix} +%endif +BuildRequires: %{llvm}-devel >= %{min_llvm_version} +%if %with llvm_static +BuildRequires: %{llvm}-static +BuildRequires: libffi-devel +%endif +%endif + +# make check needs "ps" for src/test/ui/wait-forked-but-failed-child.rs +BuildRequires: procps-ng + +# debuginfo-gdb tests need gdb +BuildRequires: gdb + +# For src/test/run-make/static-pie +BuildRequires: glibc-static + +# Virtual provides for folks who attempt "dnf install rustc" +Provides: rustc = %{version}-%{release} +Provides: rustc%{?_isa} = %{version}-%{release} + +# Always require our exact standard library +Requires: %{name}-std-static%{?_isa} = %{version}-%{release} + +# The C compiler is needed at runtime just for linking. Someday rustc might +# invoke the linker directly, and then we'll only need binutils. +# https://github.com/rust-lang/rust/issues/11937 +Requires: /usr/bin/cc + +%global __ranlib %{_bindir}/ranlib + +# ALL Rust libraries are private, because they don't keep an ABI. +%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)/.*$ + +# While we don't want to encourage dynamic linking to Rust shared libraries, as +# there's no stable ABI, we still need the unallocated metadata (.rustc) to +# support custom-derive plugins like #[proc_macro_derive(Foo)]. +%global _find_debuginfo_opts --keep-section .rustc + +%if %{without bundled_llvm} +%if "%{llvm_root}" == "%{_prefix}" || 0%{?scl:1} +%global llvm_has_filecheck 1 +%endif +%endif + +# We're going to override --libdir when configuring to get rustlib into a +# common path, but we'll fix the shared libraries during install. +%global common_libdir %{_prefix}/lib +%global rustlibdir %{common_libdir}/rustlib + +%if %defined mingw_targets +BuildRequires: mingw32-filesystem >= 95 +BuildRequires: mingw64-filesystem >= 95 +BuildRequires: mingw32-crt +BuildRequires: mingw64-crt +BuildRequires: mingw32-gcc +BuildRequires: mingw64-gcc +BuildRequires: mingw32-winpthreads-static +BuildRequires: mingw64-winpthreads-static +%endif + +%if %defined wasm_targets +%if %with bundled_wasi_libc +BuildRequires: clang +%else +BuildRequires: wasi-libc-static +%endif +BuildRequires: lld +# brp-strip-static-archive breaks the archive index for wasm +%global __os_install_post \ +%__os_install_post \ +find '%{buildroot}%{rustlibdir}'/wasm*/lib -type f -regex '.*\\.\\(a\\|rlib\\)' -print -exec '%{llvm_root}/bin/llvm-ranlib' '{}' ';' \ +%{nil} +%endif + +# For profiler_builtins +BuildRequires: compiler-rt + +# This component was removed as of Rust 1.69.0. +# 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 +Provides: %{name}-std-static-%{rust_triple} = %{version}-%{release} +Requires: %{name} = %{version}-%{release} +Requires: glibc-devel%{?_isa} >= 2.17 + +%description std-static +This package includes the standard libraries for building applications +written in Rust. + +%global target_package() \ +%package std-static-%1 \ +Summary: Standard library for Rust %1 \ +Requires: %{name} = %{version}-%{release} + +%global target_description() \ +%description std-static-%1 \ +This package includes the standard libraries for building applications \ +written in Rust for the %2 target %1. + +%if %target_enabled i686-pc-windows-gnu +%target_package i686-pc-windows-gnu +Requires: mingw32-crt +Requires: mingw32-gcc +Requires: mingw32-winpthreads-static +Provides: mingw32-rust = %{version}-%{release} +Provides: mingw32-rustc = %{version}-%{release} +BuildArch: noarch +%target_description i686-pc-windows-gnu MinGW +%endif + +%if %target_enabled x86_64-pc-windows-gnu +%target_package x86_64-pc-windows-gnu +Requires: mingw64-crt +Requires: mingw64-gcc +Requires: mingw64-winpthreads-static +Provides: mingw64-rust = %{version}-%{release} +Provides: mingw64-rustc = %{version}-%{release} +BuildArch: noarch +%target_description x86_64-pc-windows-gnu MinGW +%endif + +%if %target_enabled wasm32-unknown-unknown +%target_package wasm32-unknown-unknown +Requires: lld >= 8.0 +# FIX: we can't be noarch while excluding s390x for lack of lld +# BuildArch: noarch +%target_description wasm32-unknown-unknown WebAssembly +%endif + +%if %target_enabled wasm32-wasi +%target_package wasm32-wasi +Requires: lld >= 8.0 +%if %with bundled_wasi_libc +Provides: bundled(wasi-libc) +%else +Requires: wasi-libc-static +%endif +# FIX: we can't be noarch while excluding s390x for lack of lld +# BuildArch: noarch +%target_description wasm32-wasi WebAssembly +%endif + +%if %target_enabled x86_64-unknown-none +%target_package x86_64-unknown-none +Requires: lld +%target_description x86_64-unknown-none embedded +%endif + +%if %target_enabled x86_64-unknown-uefi +%target_package x86_64-unknown-uefi +Requires: lld +%target_description x86_64-unknown-uefi embedded +%endif + + +%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 +Requires: %{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 +Requires: python3-lldb +Requires: %{name}-debugger-common = %{version}-%{release} + +%description lldb +This package includes the rust-lldb script, which allows easier debugging of Rust +programs. + + +%package doc +Summary: Documentation for Rust +# NOT BuildArch: noarch +# Note, while docs are mostly noarch, some things do vary by target_arch. +# Koji will fail the build in rpmdiff if two architectures build a noarch +# subpackage differently, so instead we have to keep its arch. + +# Cargo no longer builds its own documentation +# https://github.com/rust-lang/cargo/pull/4904 +# We used to keep a shim cargo-doc package, but now that's merged too. +Obsoletes: cargo-doc < 1.65.0~ +Provides: cargo-doc = %{version}-%{release} + +%description doc +This package includes HTML documentation for the Rust programming language and +its standard library. + + +%package -n cargo +Summary: Rust's package manager and build tool +%if %with bundled_libgit2 +Provides: bundled(libgit2) = %{bundled_libgit2_version} +%endif +# For tests: +BuildRequires: git-core +# Cargo is not much use without Rust +Requires: %{name} + +# "cargo vendor" is a builtin command starting with 1.37. The Obsoletes and +# Provides are mostly relevant to RHEL, but harmless to have on Fedora/etc. too +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 + +# /usr/bin/rustfmt is dynamically linked against internal rustc libs +Requires: %{name}%{?_isa} = %{version}-%{release} + +# The component/package was rustfmt-preview until Rust 1.31. +Obsoletes: rustfmt-preview < 1.0.0 +Provides: rustfmt-preview = %{version}-%{release} + +%description -n rustfmt +A tool for formatting Rust code according to style guidelines. + + +%package analyzer +Summary: Rust implementation of the Language Server Protocol + +# The standard library sources are needed for most functionality. +Recommends: %{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~ +# The component/package was rls-preview until Rust 1.31. +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. + + +%package -n clippy +Summary: Lints to catch common mistakes and improve your Rust code +Requires: cargo +# /usr/bin/clippy-driver is dynamically linked against internal rustc libs +Requires: %{name}%{?_isa} = %{version}-%{release} + +# The component/package was clippy-preview until Rust 1.31. +Obsoletes: clippy-preview <= 0.0.212 +Provides: clippy-preview = %{version}-%{release} + +%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 +Recommends: %{name}-std-static = %{version}-%{release} + +%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. + + +%if 0%{?rhel} + +%package toolset +Summary: Rust Toolset +BuildArch: noarch +Requires: rust = %{version}-%{release} +Requires: cargo = %{version}-%{release} + +%description toolset +This is the metapackage for Rust Toolset, bringing in the Rust compiler, +the Cargo package manager, and a few convenience macros for rpm builds. + +%endif + + +%prep + +%ifarch %{bootstrap_arches} +rm -rf %{local_rust_root} +%setup -q -n cargo-%{bootstrap_suffix} -T -b %{bootstrap_source_cargo} +./install.sh --prefix=%{local_rust_root} --disable-ldconfig +%setup -q -n rustc-%{bootstrap_suffix} -T -b %{bootstrap_source_rustc} +./install.sh --prefix=%{local_rust_root} --disable-ldconfig +%setup -q -n rust-std-%{bootstrap_suffix} -T -b %{bootstrap_source_std} +./install.sh --prefix=%{local_rust_root} --disable-ldconfig +test -f '%{local_rust_root}/bin/cargo' +test -f '%{local_rust_root}/bin/rustc' +%endif + +%if %{defined wasm_targets} && %{with bundled_wasi_libc} +%setup -q -n %{wasi_libc_name} -T -b 1 +rm -rf %{wasi_libc_dir}/dlmalloc/ +%endif + +%setup -q -n %{rustc_package} + +%patch -P1 -p1 +%patch -P2 -p1 +%patch -P3 -p1 +%patch -P4 -p1 +%if %without bundled_wasi_libc +%patch -P5 -p1 +%endif +%patch -P6 -p1 + +%if %with disabled_libssh2 +%patch -P100 -p1 +%endif + +# Use our explicit python3 first +sed -i.try-python -e '/^try python3 /i try "%{__python3}" "$@"' ./configure + +# Set a substitute-path in rust-gdb for standard library sources. +sed -i.rust-src -e "s#@BUILDDIR@#$PWD#" ./src/etc/rust-gdb + +%if %without bundled_llvm +rm -rf src/llvm-project/ +mkdir -p src/llvm-project/libunwind/ +%endif + + +# Remove other unused vendored libraries. This leaves the directory in place, +# because some build scripts watch them, e.g. "cargo:rerun-if-changed=curl". +%define clear_dir() find ./%1 -mindepth 1 -delete +%clear_dir vendor/curl-sys*/curl/ +%clear_dir vendor/*jemalloc-sys*/jemalloc/ +%clear_dir vendor/libffi-sys*/libffi/ +%clear_dir vendor/libmimalloc-sys*/c_src/mimalloc/ +%clear_dir vendor/libssh2-sys*/libssh2/ +%clear_dir vendor/libz-sys*/src/zlib{,-ng}/ +%clear_dir vendor/lzma-sys*/xz-*/ +%clear_dir vendor/openssl-src*/openssl/ + +%if %without bundled_libgit2 +%clear_dir 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} +# Static linking to distro LLVM needs to add -lffi +# https://github.com/rust-lang/rust/issues/34486 +sed -i.ffi -e '$a #[link(name = "ffi")] extern {}' \ + compiler/rustc_llvm/src/lib.rs +%endif + +# The configure macro will modify some autoconf-related files, which upsets +# cargo when it tries to verify checksums in those files. If we just truncate +# that file list, cargo won't have anything to complain about. +find vendor -name .cargo-checksum.json \ + -exec sed -i.uncheck -e 's/"files":{[^}]*}/"files":{ }/' '{}' '+' + +# Sometimes Rust sources start with #![...] attributes, and "smart" editors think +# it's a shebang and make them executable. Then brp-mangle-shebangs gets upset... +find -name '*.rs' -type f -perm /111 -exec chmod -v -x '{}' '+' + +# The distro flags are only appropriate for the host, not our cross-targets, +# and they're not as fine-grained as the settings we choose for std vs rustc. +%if %defined build_rustflags +%global build_rustflags %{nil} +%endif + +# These are similar to __cflags_arch_* in /usr/lib/rpm/redhat/macros +%global rustc_target_cpus %{lua: do + local fedora = tonumber(rpm.expand("0%{?fedora}")) + local rhel = tonumber(rpm.expand("0%{?rhel}")) + local env = + " RUSTC_TARGET_CPU_X86_64=x86-64" .. ((rhel >= 10) and "-v3" or (rhel == 9) and "-v2" or "") + .. " RUSTC_TARGET_CPU_PPC64LE=" .. ((rhel >= 9) and "pwr9" or "pwr8") + .. " RUSTC_TARGET_CPU_S390X=" .. + ((rhel >= 9) and "z14" or (rhel == 8 or fedora >= 38) and "z13" or + (fedora >= 26) and "zEC12" or (rhel == 7) and "z196" or "z10") + print(env) +end} + +# Set up shared environment variables for build/install/check +%global rust_env %{?rustflags:RUSTFLAGS="%{rustflags}"} %{rustc_target_cpus} +%if %without disabled_libssh2 +# convince libssh2-sys to use the distro libssh2 +%global rust_env %{?rust_env} LIBSSH2_SYS_USE_PKG_CONFIG=1 +%endif +%global export_rust_env %{?rust_env:export %{rust_env}} + +%build +%{export_rust_env} + +%ifarch %{arm} %{ix86} +# full debuginfo and compiler opts are exhausting memory; just do libstd for now +# https://github.com/rust-lang/rust/issues/45854 +%define enable_debuginfo --debuginfo-level=0 --debuginfo-level-std=2 +%define enable_rust_opts --set rust.codegen-units-std=1 +%else +%define enable_debuginfo --debuginfo-level=2 +%define enable_rust_opts --set rust.codegen-units=1 --set rust.lto=thin +%endif + +# Some builders have relatively little memory for their CPU count. +# At least 2GB per CPU is a good rule of thumb for building rustc. +ncpus=$(/usr/bin/getconf _NPROCESSORS_ONLN) +max_cpus=$(( ($(free -g | awk '/^Mem:/{print $2}') + 1) / 2 )) +if [ "$max_cpus" -ge 1 -a "$max_cpus" -lt "$ncpus" ]; then + ncpus="$max_cpus" +fi + +%if %defined mingw_targets +%define mingw_target_config %{shrink: + --set target.i686-pc-windows-gnu.linker=%{mingw32_cc} + --set target.i686-pc-windows-gnu.cc=%{mingw32_cc} + --set target.i686-pc-windows-gnu.ar=%{mingw32_ar} + --set target.i686-pc-windows-gnu.ranlib=%{mingw32_ranlib} + --set target.i686-pc-windows-gnu.self-contained=false + --set target.x86_64-pc-windows-gnu.linker=%{mingw64_cc} + --set target.x86_64-pc-windows-gnu.cc=%{mingw64_cc} + --set target.x86_64-pc-windows-gnu.ar=%{mingw64_ar} + --set target.x86_64-pc-windows-gnu.ranlib=%{mingw64_ranlib} + --set target.x86_64-pc-windows-gnu.self-contained=false +} +%endif + +%if %defined wasm_targets +%if %with bundled_wasi_libc +%make_build --quiet -C %{wasi_libc_dir} MALLOC_IMPL=emmalloc CC=clang AR=llvm-ar NM=llvm-nm +%define wasm_target_config --set target.wasm32-wasi.wasi-root=%{wasi_libc_dir}/sysroot +%else +%define wasm_target_config %{shrink: + --set target.wasm32-wasi.wasi-root=%{_prefix}/wasm32-wasi + --set target.wasm32-wasi.self-contained=false +} +%endif +%endif + +# Find the compiler-rt library for the Rust profiler_builtins crate. +%if 0%{?clang_major_version} >= 17 +%define profiler %{clang_resource_dir}/lib/%{_arch}-redhat-linux-gnu/libclang_rt.profile.a +%else +# The exact profiler path is version dependent.. +%define profiler %(echo %{_libdir}/clang/??/lib/libclang_rt.profile-*.a) +%endif +test -r "%{profiler}" + +%configure --disable-option-checking \ + --libdir=%{common_libdir} \ + --build=%{rust_triple} --host=%{rust_triple} --target=%{rust_triple} \ + --set target.%{rust_triple}.linker=%{__cc} \ + --set target.%{rust_triple}.cc=%{__cc} \ + --set target.%{rust_triple}.cxx=%{__cxx} \ + --set target.%{rust_triple}.ar=%{__ar} \ + --set target.%{rust_triple}.ranlib=%{__ranlib} \ + --set target.%{rust_triple}.profiler="%{profiler}" \ + %{?mingw_target_config} \ + %{?wasm_target_config} \ + --python=%{__python3} \ + --local-rust-root=%{local_rust_root} \ + --set build.rustfmt=/bin/true \ + %{!?with_bundled_llvm: --llvm-root=%{llvm_root} \ + %{!?llvm_has_filecheck: --disable-codegen-tests} \ + %{!?with_llvm_static: --enable-llvm-link-shared } } \ + --disable-llvm-static-stdcpp \ + --disable-rpath \ + %{enable_debuginfo} \ + %{enable_rust_opts} \ + --set build.build-stage=2 \ + --set build.doc-stage=2 \ + --set build.install-stage=2 \ + --set build.test-stage=2 \ + --enable-extended \ + --tools=cargo,clippy,rls,rust-analyzer,rustfmt,src \ + --enable-vendor \ + --enable-verbose-tests \ + --dist-compression-formats=gz \ + --release-channel=%{channel} \ + --release-description="%{?fedora:Fedora }%{?rhel:Red Hat }%{version}-%{release}" + +%global __x %{__python3} ./x.py +%global __xk %{__x} --keep-stage=0 --keep-stage=1 + +%if %with rustc_pgo +# Build the compiler with profile instrumentation +PROFRAW="$PWD/build/profiles" +PROFDATA="$PWD/build/rustc.profdata" +mkdir -p "$PROFRAW" +%{__x} build -j "$ncpus" sysroot --rust-profile-generate="$PROFRAW" +# Build cargo as a workload to generate compiler profiles +env LLVM_PROFILE_FILE="$PROFRAW/default_%%m_%%p.profraw" %{__xk} build cargo +llvm-profdata merge -o "$PROFDATA" "$PROFRAW" +rm -r "$PROFRAW" build/%{rust_triple}/stage2*/ +# Rebuild the compiler using the profile data +%{__x} build -j "$ncpus" sysroot --rust-profile-use="$PROFDATA" +%else +# Build the compiler without PGO +%{__x} build -j "$ncpus" sysroot +%endif + +# Build everything else normally +%{__xk} build +%{__xk} doc + +for triple in %{?all_targets} ; do + %{__xk} build --target=$triple std +done + +%install +%if 0%{?rhel} && 0%{?rhel} <= 9 +%{?set_build_flags} +%endif +%{export_rust_env} + +DESTDIR=%{buildroot} %{__xk} install + +for triple in %{?all_targets} ; do + DESTDIR=%{buildroot} %{__xk} install --target=$triple std +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 +rm -rf ./build/dist/ ./build/tmp/ + +# Some of the components duplicate-install binaries, leaving backups we don't want +rm -f %{buildroot}%{_bindir}/*.old + +# Make sure the shared libraries are in the proper libdir +%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 + +# The shared libraries should be executable for debuginfo extraction. +find %{buildroot}%{_libdir} -maxdepth 1 -type f -name '*.so' \ + -exec chmod -v +x '{}' '+' + +# The libdir libraries are identical to those under rustlib/. It's easier on +# library loading if we keep them in libdir, but we do need them in rustlib/ +# to support dynamic linking for compiler plugins, so we'll symlink. +find %{buildroot}%{rustlibdir}/%{rust_triple}/lib/ -maxdepth 1 -type f -name '*.so' | +while read lib; do + lib2="%{buildroot}%{_libdir}/${lib##*/}" + if [ -f "$lib2" ]; then + # make sure they're actually identical! + cmp "$lib" "$lib2" + ln -v -f -r -s -T "$lib2" "$lib" + fi +done + +# Remove installer artifacts (manifests, uninstall scripts, etc.) +find %{buildroot}%{rustlibdir} -maxdepth 1 -type f -exec rm -v '{}' '+' + +# Remove backup files from %%configure munging +find %{buildroot}%{rustlibdir} -type f -name '*.orig' -exec rm -v '{}' '+' + +# https://fedoraproject.org/wiki/Changes/Make_ambiguous_python_shebangs_error +# We don't actually need to ship any of those python scripts in rust-src anyway. +find %{buildroot}%{rustlibdir}/src -type f -name '*.py' -exec rm -v '{}' '+' + +# FIXME: __os_install_post will strip the rlibs +# -- should we find a way to preserve debuginfo? + +# Remove unwanted documentation files (we already package them) +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 + +# Sanitize the HTML documentation +find %{buildroot}%{_docdir}/%{name}/html -empty -delete +find %{buildroot}%{_docdir}/%{name}/html -type f -exec chmod -x '{}' '+' + +# Create the path for crate-devel packages +mkdir -p %{buildroot}%{_datadir}/cargo/registry + +# Cargo no longer builds its own documentation +# https://github.com/rust-lang/cargo/pull/4904 +mkdir -p %{buildroot}%{_docdir}/cargo +ln -sT ../rust/html/cargo/ %{buildroot}%{_docdir}/cargo/html + +# We don't want Rust copies of LLVM tools (rust-lld, rust-llvm-dwp) +rm -f %{buildroot}%{rustlibdir}/%{rust_triple}/bin/rust-ll* + +%if 0%{?rhel} +# This allows users to build packages using Rust Toolset. +%{__install} -D -m 644 %{S:100} %{buildroot}%{rpmmacrodir}/macros.rust-toolset +%endif + + +%check +%if 0%{?rhel} && 0%{?rhel} <= 9 +%{?set_build_flags} +%endif +%{export_rust_env} + +# Sanity-check the installed binaries, debuginfo-stripped and all. +TMP_HELLO=$(mktemp -d) +( + cd "$TMP_HELLO" + export RUSTC=%{buildroot}%{_bindir}/rustc \ + LD_LIBRARY_PATH="%{buildroot}%{_libdir}:$LD_LIBRARY_PATH" + %{buildroot}%{_bindir}/cargo init --name hello-world + %{buildroot}%{_bindir}/cargo run --verbose + + # Sanity-check that code-coverage builds and runs + env RUSTFLAGS="-Cinstrument-coverage" %{buildroot}%{_bindir}/cargo run --verbose + test -r default_*.profraw + + # Try a build sanity-check for other std-enabled targets + for triple in %{?mingw_targets} %{?wasm_targets}; do + %{buildroot}%{_bindir}/cargo build --verbose --target=$triple + done +) +rm -rf "$TMP_HELLO" + +# 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. + +# Bootstrap is excluded because it's not something we ship, and a lot of its +# tests are geared toward the upstream CI environment. +timeout -v 90m %{__xk} test --no-fail-fast --skip src/bootstrap || : +rm -rf "./build/%{rust_triple}/test/" + +timeout -v 30m %{__xk} test --no-fail-fast cargo || : +rm -rf "./build/%{rust_triple}/stage2-tools/%{rust_triple}/cit/" + +timeout -v 30m %{__xk} test --no-fail-fast clippy || : + +timeout -v 30m %{__xk} test --no-fail-fast rust-analyzer || : + +timeout -v 30m %{__xk} test --no-fail-fast rustfmt || : + + +%ldconfig_scriptlets + + +%files +%license COPYRIGHT LICENSE-APACHE LICENSE-MIT +%doc README.md +%{_bindir}/rustc +%{_bindir}/rustdoc +%{_libdir}/*.so +%{_libexecdir}/rust-analyzer-proc-macro-srv +%{_mandir}/man1/rustc.1* +%{_mandir}/man1/rustdoc.1* +%dir %{rustlibdir} +%dir %{rustlibdir}/%{rust_triple} +%dir %{rustlibdir}/%{rust_triple}/lib +%{rustlibdir}/%{rust_triple}/lib/*.so + + +%files std-static +%dir %{rustlibdir} +%dir %{rustlibdir}/%{rust_triple} +%dir %{rustlibdir}/%{rust_triple}/lib +%{rustlibdir}/%{rust_triple}/lib/*.rlib + +%global target_files() \ +%files std-static-%1 \ +%dir %{rustlibdir} \ +%dir %{rustlibdir}/%1 \ +%dir %{rustlibdir}/%1/lib \ +%{rustlibdir}/%1/lib/*.rlib + +%if %target_enabled i686-pc-windows-gnu +%target_files i686-pc-windows-gnu +%{rustlibdir}/i686-pc-windows-gnu/lib/rs*.o +%exclude %{rustlibdir}/i686-pc-windows-gnu/lib/*.dll +%exclude %{rustlibdir}/i686-pc-windows-gnu/lib/*.dll.a +%endif + +%if %target_enabled x86_64-pc-windows-gnu +%target_files x86_64-pc-windows-gnu +%{rustlibdir}/x86_64-pc-windows-gnu/lib/rs*.o +%exclude %{rustlibdir}/x86_64-pc-windows-gnu/lib/*.dll +%exclude %{rustlibdir}/x86_64-pc-windows-gnu/lib/*.dll.a +%endif + +%if %target_enabled wasm32-unknown-unknown +%target_files wasm32-unknown-unknown +%endif + +%if %target_enabled wasm32-wasi +%target_files wasm32-wasi +%if %with bundled_wasi_libc +%dir %{rustlibdir}/wasm32-wasi/lib/self-contained +%{rustlibdir}/wasm32-wasi/lib/self-contained/crt*.o +%{rustlibdir}/wasm32-wasi/lib/self-contained/libc.a +%endif +%endif + +%if %target_enabled x86_64-unknown-none +%target_files x86_64-unknown-none +%endif + +%if %target_enabled x86_64-unknown-uefi +%target_files x86_64-unknown-uefi +%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 + + +%files lldb +%{_bindir}/rust-lldb +%{rustlibdir}/etc/lldb_* + + +%files doc +%docdir %{_docdir}/%{name} +%dir %{_docdir}/%{name} +%{_docdir}/%{name}/html +# former cargo-doc +%docdir %{_docdir}/cargo +%dir %{_docdir}/cargo +%{_docdir}/cargo/html + + +%files -n cargo +%license src/tools/cargo/LICENSE-{APACHE,MIT,THIRD-PARTY} +%doc src/tools/cargo/README.md +%{_bindir}/cargo +%{_mandir}/man1/cargo*.1* +%{_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} + + +%files analyzer +%{_bindir}/rls +%{_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 + + +%if 0%{?rhel} +%files toolset +%{rpmmacrodir}/macros.rust-toolset +%endif + + +%changelog +* Wed Apr 03 2024 MSVSphere Packaging Team - 1.75.0-1 +- Rebuilt for MSVSphere 8.10 beta + +* Fri Jan 05 2024 Josh Stone - 1.75.0-1 +- Update to 1.75.0. + +* Wed Jan 03 2024 Josh Stone - 1.74.1-1 +- Update to 1.74.1. + +* Tue Oct 17 2023 Josh Stone - 1.73.0-1 +- Update to 1.73.0. +- Use emmalloc instead of CC0 dlmalloc when bundling wasi-libc + +* Thu Oct 12 2023 Josh Stone - 1.72.1-1 +- Update to 1.72.1. +- Migrated to SPDX license + +* Tue Aug 08 2023 Josh Stone - 1.71.1-1 +- Update to 1.71.1. +- Security fix for CVE-2023-38497 + +* Wed Jul 26 2023 Josh Stone - 1.71.0-2 +- Relax the suspicious_double_ref_op lint (rhbz2225471) +- Enable the profiler runtime for native hosts (rhbz2213875) + +* Thu Jul 20 2023 Josh Stone - 1.71.0-1 +- Update to 1.71.0. + +* Tue Jul 18 2023 Josh Stone - 1.70.0-1 +- Update to 1.70.0. + +* Fri May 26 2023 Josh Stone - 1.69.0-1 +- Update to 1.69.0. +- Obsolete rust-analysis. + +* Fri May 19 2023 Josh Stone - 1.68.2-1 +- Update to 1.68.2. + +* Thu May 18 2023 Josh Stone - 1.67.1-1 +- Update to 1.67.1. + +* Wed Jan 11 2023 Josh Stone - 1.66.1-1 +- Update to 1.66.1. + +* Fri Jan 06 2023 Josh Stone - 1.65.0-1 +- Update to 1.65.0. +- rust-analyzer now obsoletes rls. + +* Thu Sep 22 2022 Josh Stone - 1.64.0-1 +- Update to 1.64.0. +- Add rust-analyzer. + +* Wed Sep 07 2022 Josh Stone - 1.63.0-1 +- Update to 1.63.0. + +* Tue Jul 19 2022 Josh Stone - 1.62.1-1 +- Update to 1.62.1. + +* Wed Jul 13 2022 Josh Stone - 1.62.0-2 +- Prevent unsound coercions from functions with opaque return types. + +* Thu Jun 30 2022 Josh Stone - 1.62.0-1 +- Update to 1.62.0. + +* Fri Jun 03 2022 Josh Stone - 1.61.0-1 +- Update to 1.61.0. +- Add rust-toolset as a subpackage. + +* Wed Apr 20 2022 Josh Stone - 1.60.0-1 +- Update to 1.60.0. + +* Tue Apr 19 2022 Josh Stone - 1.59.0-1 +- Update to 1.59.0. + +* Thu Jan 20 2022 Josh Stone - 1.58.1-1 +- Update to 1.58.1. + +* Thu Jan 13 2022 Josh Stone - 1.58.0-1 +- Update to 1.58.0. + +* Wed Dec 15 2021 Josh Stone - 1.57.0-1 +- Update to 1.57.0. + +* Thu Dec 02 2021 Josh Stone - 1.56.1-2 +- Add rust-std-static-wasm32-wasi + Resolves: rhbz#1980080 + +* Tue Nov 02 2021 Josh Stone - 1.56.0-1 +- Update to 1.56.1. + +* Fri Oct 29 2021 Josh Stone - 1.55.0-1 +- Update to 1.55.0. +- Backport support for LLVM 13. + +* Tue Aug 17 2021 Josh Stone - 1.54.0-2 +- Make std-static-wasm* arch-specific to avoid s390x. + +* Thu Jul 29 2021 Josh Stone - 1.54.0-1 +- Update to 1.54.0. + +* Tue Jul 20 2021 Josh Stone - 1.53.0-2 +- Use llvm-ranlib to fix wasm archives. + +* Mon Jun 21 2021 Josh Stone - 1.53.0-1 +- Update to 1.53.0. + +* Tue Jun 15 2021 Josh Stone - 1.52.1-2 +- Set rust.codegen-units-std=1 for all targets again. +- Add rust-std-static-wasm32-unknown-unknown. + +* Tue May 25 2021 Josh Stone - 1.52.1-1 +- Update to 1.52.1. Includes security fixes for CVE-2020-36323, + CVE-2021-28876, CVE-2021-28878, CVE-2021-28879, and CVE-2021-31162. + +* Mon May 24 2021 Josh Stone - 1.51.0-1 +- Update to 1.51.0. Update to 1.51.0. Includes security fixes for + CVE-2021-28875 and CVE-2021-28877. + +* Mon May 24 2021 Josh Stone - 1.50.0-1 +- Update to 1.50.0. + +* Wed Jan 13 2021 Josh Stone - 1.49.0-1 +- Update to 1.49.0. + +* Tue Jan 12 2021 Josh Stone - 1.48.0-1 +- Update to 1.48.0. + +* Thu Oct 22 2020 Josh Stone - 1.47.0-1 +- Update to 1.47.0. + +* Wed Oct 14 2020 Josh Stone - 1.46.0-1 +- Update to 1.46.0. + +* Tue Aug 04 2020 Josh Stone - 1.45.2-1 +- Update to 1.45.2. + +* Thu Jul 16 2020 Josh Stone - 1.45.0-1 +- Update to 1.45.0. + +* Tue Jul 14 2020 Josh Stone - 1.44.1-1 +- Update to 1.44.1. + +* Thu May 07 2020 Josh Stone - 1.43.1-1 +- Update to 1.43.1. + +* Thu Apr 23 2020 Josh Stone - 1.43.0-1 +- Update to 1.43.0. + +* Thu Mar 12 2020 Josh Stone - 1.42.0-1 +- Update to 1.42.0. + +* Thu Feb 27 2020 Josh Stone - 1.41.1-1 +- Update to 1.41.1. + +* Thu Jan 30 2020 Josh Stone - 1.41.0-1 +- Update to 1.41.0. + +* Thu Jan 16 2020 Josh Stone - 1.40.0-1 +- Update to 1.40.0. +- Fix compiletest with newer (local-rebuild) libtest +- Build compiletest with in-tree libtest +- Fix ARM EHABI unwinding + +* Tue Nov 12 2019 Josh Stone - 1.39.0-2 +- Fix a couple build and test issues with rustdoc. + +* Thu Nov 07 2019 Josh Stone - 1.39.0-1 +- Update to 1.39.0. + +* Thu Sep 26 2019 Josh Stone - 1.38.0-1 +- Update to 1.38.0. + +* Thu Aug 15 2019 Josh Stone - 1.37.0-1 +- Update to 1.37.0. +- Disable libssh2 (git+ssh support). + +* Thu Jul 04 2019 Josh Stone - 1.36.0-1 +- Update to 1.36.0. + +* Wed May 29 2019 Josh Stone - 1.35.0-2 +- Fix compiletest for rebuild testing. + +* Thu May 23 2019 Josh Stone - 1.35.0-1 +- Update to 1.35.0. + +* Tue May 14 2019 Josh Stone - 1.34.2-1 +- Update to 1.34.2 -- fixes CVE-2019-12083. + +* Thu May 09 2019 Josh Stone - 1.34.1-1 +- Update to 1.34.1. + +* Thu Apr 11 2019 Josh Stone - 1.34.0-1 +- Update to 1.34.0. + +* Wed Apr 10 2019 Josh Stone - 1.33.0-1 +- Update to 1.33.0. + +* Tue Apr 09 2019 Josh Stone - 1.32.0-1 +- Update to 1.32.0. + +* Fri Dec 14 2018 Josh Stone - 1.31.0-5 +- Restore rust-lldb. + +* Thu Dec 13 2018 Josh Stone - 1.31.0-4 +- Backport fixes for rls. + +* Thu Dec 13 2018 Josh Stone - 1.31.0-3 +- Update to 1.31.0 -- Rust 2018! +- clippy/rls/rustfmt are no longer -preview + +* Wed Dec 12 2018 Josh Stone - 1.30.1-2 +- Update to 1.30.1. + +* Tue Nov 06 2018 Josh Stone - 1.29.2-1 +- Update to 1.29.2. + +* Thu Nov 01 2018 Josh Stone - 1.28.0-1 +- Update to 1.28.0. + +* Thu Nov 01 2018 Josh Stone - 1.27.2-1 +- Update to 1.27.2. + +* Wed Oct 10 2018 Josh Stone - 1.26.2-12 +- Fix "fp" target feature for AArch64 (#1632880) + +* Mon Oct 08 2018 Josh Stone - 1.26.2-11 +- Security fix for str::repeat (pending CVE). + +* Fri Oct 05 2018 Josh Stone - 1.26.2-10 +- Rebuild without bootstrap binaries. + +* Thu Oct 04 2018 Josh Stone - 1.26.2-9 +- Bootstrap without SCL packaging. (rhbz1635067) + +* Tue Aug 28 2018 Tom Stellard - 1.26.2-8 +- Use python3 prefix for lldb Requires + +* Mon Aug 13 2018 Josh Stone - 1.26.2-7 +- Build with platform-python + +* Tue Aug 07 2018 Josh Stone - 1.26.2-6 +- Exclude rust-src from auto-requires + +* Thu Aug 02 2018 Josh Stone - 1.26.2-5 +- Rebuild without bootstrap binaries. + +* Tue Jul 31 2018 Josh Stone - 1.26.2-4 +- Bootstrap as a module. + +* Mon Jun 04 2018 Josh Stone - 1.26.2-3 +- Update to 1.26.2. + +* Wed May 30 2018 Josh Stone - 1.26.1-2 +- Update to 1.26.1. + +* Fri May 18 2018 Josh Stone - 1.26.0-1 +- Update to 1.26.0. + +* Tue Apr 10 2018 Josh Stone - 1.25.0-2 +- Filter codegen-backends from Provides too. + +* Tue Apr 03 2018 Josh Stone - 1.25.0-1 +- Update to 1.25.0. +- Add rustfmt-preview as a subpackage. + +* Thu Feb 22 2018 Josh Stone - 1.24.0-1 +- Update to 1.24.0. + +* Tue Jan 16 2018 Josh Stone - 1.23.0-2 +- Rebuild without bootstrap binaries. + +* Mon Jan 15 2018 Josh Stone - 1.23.0-1 +- Bootstrap 1.23 on el8.