summaryrefslogtreecommitdiff
path: root/lang/rust
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--lang/rust-bootstrap/Makefile2
-rw-r--r--lang/rust-bootstrap/distinfo6
-rw-r--r--lang/rust-nightly/Makefile12
-rw-r--r--lang/rust-nightly/distinfo18
-rw-r--r--lang/rust-nightly/files/patch-vendor_cc.rs12
-rw-r--r--lang/rust/Makefile12
-rw-r--r--lang/rust/distinfo102
-rw-r--r--lang/rust/files/patch-vendor_cc.rs100
-rw-r--r--lang/rust/files/patch-vendor_openssl_crypto_threads__pthread.c16
-rw-r--r--lang/rust188/Makefile283
-rw-r--r--lang/rust188/distinfo51
-rw-r--r--lang/rust188/files/armv7/patch-compiler_rustc__driver__impl_src_signal__handler.rs28
-rw-r--r--lang/rust188/files/armv7/patch-compiler_rustc__target_src_spec_base_freebsd.rs11
-rw-r--r--lang/rust188/files/extra-patch-compiler_rustc__target_src_spec_targets_i686__unknown__freebsd.rs13
-rw-r--r--lang/rust188/files/patch-compiler_rustc__target_src_callconv_powerpc64.rs11
-rw-r--r--lang/rust188/files/patch-library_backtrace_src_backtrace_mod.rs10
-rw-r--r--lang/rust188/files/patch-src_bootstrap_src_core_build__steps_install.rs17
-rw-r--r--lang/rust188/files/patch-src_tools_cargo_src_cargo_sources_git_source.rs36
-rw-r--r--lang/rust188/files/patch-vendor_cc.rs75
-rw-r--r--lang/rust188/files/patch-vendor_git2-0.19.0_src_lib.rs18
-rw-r--r--lang/rust188/files/patch-vendor_libc-0.2.155745
-rw-r--r--lang/rust188/files/patch-vendor_openssl_crypto_threads__pthread.c27
-rw-r--r--lang/rust188/files/riscv64/patch-vendor_rustc__ap__rustc__target_src_spec_riscv64gc__unknown__freebsd.rs21
-rw-r--r--lang/rust188/pkg-descr12
-rw-r--r--lang/rust188/update.sh35
-rw-r--r--lang/rustpython/Makefile2
26 files changed, 1556 insertions, 119 deletions
diff --git a/lang/rust-bootstrap/Makefile b/lang/rust-bootstrap/Makefile
index a41ae66c252f..78b610a43c8b 100644
--- a/lang/rust-bootstrap/Makefile
+++ b/lang/rust-bootstrap/Makefile
@@ -2,7 +2,7 @@
# to upload them to ~/public_distfiles on freefall in preparation
# for the next lang/rust update.
PORTNAME= rust
-PORTVERSION= 1.87.0
+PORTVERSION= 1.89.0
CATEGORIES= lang
MASTER_SITES= https://static.rust-lang.org/dist/
PKGNAMEPREFIX= ${FLAVOR:S/_/-/g}-
diff --git a/lang/rust-bootstrap/distinfo b/lang/rust-bootstrap/distinfo
index 58cd2197093a..7be7ca5ce3b9 100644
--- a/lang/rust-bootstrap/distinfo
+++ b/lang/rust-bootstrap/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1747381480
-SHA256 (rust/rustc-1.87.0-src.tar.xz) = 8623b8651893e8c6aebfa45b6a90645a4f652f7b18189a0992a90d11ac2631f4
-SIZE (rust/rustc-1.87.0-src.tar.xz) = 283604208
+TIMESTAMP = 1755503846
+SHA256 (rust/rustc-1.89.0-src.tar.xz) = 0b9d55610d8270e06c44f459d1e2b7918a5e673809c592abed9b9c600e33d95a
+SIZE (rust/rustc-1.89.0-src.tar.xz) = 267487572
diff --git a/lang/rust-nightly/Makefile b/lang/rust-nightly/Makefile
index 6cd846a30f5e..3d0c2fa874f6 100644
--- a/lang/rust-nightly/Makefile
+++ b/lang/rust-nightly/Makefile
@@ -1,5 +1,5 @@
# Run update.sh to update to the latest nightly
-PORTVERSION= 1.90.0.${NIGHTLY_DATE:C,-,,g}
+PORTVERSION= 1.91.0.${NIGHTLY_DATE:C,-,,g}
# Always set PORTREVISION explicitly as otherwise it is inherited from lang/rust
PORTREVISION= 0
PKGNAMESUFFIX= -nightly
@@ -8,14 +8,18 @@ DISTNAME= rustc-nightly-src
ONLY_FOR_ARCHS= amd64
ONLY_FOR_ARCHS_REASON= upstream does not provide bootstraps for other architectures
-CONFLICTS_INSTALL= rust
+CONFLICTS_INSTALL= rust rust188
MASTERDIR= ${.CURDIR}/../rust
PATCHDIR= ${.CURDIR}/files
DISTINFO_FILE= ${.CURDIR}/distinfo
-NIGHTLY_DATE= 2025-06-24
-BOOTSTRAPS_DATE= 2025-05-26
+NIGHTLY_DATE= 2025-08-05
+BOOTSTRAPS_DATE= 2025-06-24
RUST_BOOTSTRAP_VERSION= beta
+post-configure:
+ # remove after bootstraps are updated to version higher than 2025-07-27
+ @${REINPLACE_CMD} -e '/ccache=/d' ${WRKSRC}/config.toml
+
.include "${MASTERDIR}/Makefile"
diff --git a/lang/rust-nightly/distinfo b/lang/rust-nightly/distinfo
index 73b0291358b9..8dbff4c87479 100644
--- a/lang/rust-nightly/distinfo
+++ b/lang/rust-nightly/distinfo
@@ -1,9 +1,9 @@
-TIMESTAMP = 1750875759
-SHA256 (rust/2025-06-24/rustc-nightly-src.tar.xz) = 35af2264061f8866af45498c153db587a19c583fec6c868f7f46d32b8967d672
-SIZE (rust/2025-06-24/rustc-nightly-src.tar.xz) = 267450664
-SHA256 (rust/2025-05-26/rustc-beta-x86_64-unknown-freebsd.tar.xz) = b8f921568dbca553484936adb267d384b8ce6bfd40efa0b54d22cd98a6638c43
-SIZE (rust/2025-05-26/rustc-beta-x86_64-unknown-freebsd.tar.xz) = 88310892
-SHA256 (rust/2025-05-26/rust-std-beta-x86_64-unknown-freebsd.tar.xz) = 9e7477e05192ce11190e9b1291a5e171a9cd9da9ca2f4c53d08b98025a697255
-SIZE (rust/2025-05-26/rust-std-beta-x86_64-unknown-freebsd.tar.xz) = 27694316
-SHA256 (rust/2025-05-26/cargo-beta-x86_64-unknown-freebsd.tar.xz) = ff50d29e650cf85f6aadee0618ffef15ac4f3c9b30f02f9a678129e9bf8f5ad3
-SIZE (rust/2025-05-26/cargo-beta-x86_64-unknown-freebsd.tar.xz) = 10581172
+TIMESTAMP = 1754482083
+SHA256 (rust/2025-08-05/rustc-nightly-src.tar.xz) = 428963a5586248c0f088dff1dda048060b447c2bf187ca2326b62af47c80f9fc
+SIZE (rust/2025-08-05/rustc-nightly-src.tar.xz) = 272353928
+SHA256 (rust/2025-06-24/rustc-beta-x86_64-unknown-freebsd.tar.xz) = 71e9e3a1d1f5e8dc98403c2a6695c969908ba0cde594c4e20249fe81b67d62d1
+SIZE (rust/2025-06-24/rustc-beta-x86_64-unknown-freebsd.tar.xz) = 88377504
+SHA256 (rust/2025-06-24/rust-std-beta-x86_64-unknown-freebsd.tar.xz) = 7cc4adb3c102eac53916b28c0dad40bd095e19ea3fd0430e84a2e0b094445809
+SIZE (rust/2025-06-24/rust-std-beta-x86_64-unknown-freebsd.tar.xz) = 28253396
+SHA256 (rust/2025-06-24/cargo-beta-x86_64-unknown-freebsd.tar.xz) = be762a368c6dfbe47a0f8c4b09cea1755a6d311f713b57b57a87276c88e5c34d
+SIZE (rust/2025-06-24/cargo-beta-x86_64-unknown-freebsd.tar.xz) = 10790116
diff --git a/lang/rust-nightly/files/patch-vendor_cc.rs b/lang/rust-nightly/files/patch-vendor_cc.rs
index 4a763326e4f6..11682cd5f1f6 100644
--- a/lang/rust-nightly/files/patch-vendor_cc.rs
+++ b/lang/rust-nightly/files/patch-vendor_cc.rs
@@ -99,8 +99,8 @@ https://reviews.llvm.org/D77776
(false, false, true, _, false) | (_, _, _, _, true) => Ok(ToolFamily::Gnu),
(false, false, false, false, false) => {
cargo_output.print_warning(&"Compiler family detection failed since it does not define `__clang__`, `__GNUC__`, `__EMSCRIPTEN__` or `__VXWORKS__`, also does not accept cl style flag `-?`, fallback to treating it as GNU");
---- vendor/cc-1.2.25/src/tool.rs.orig 2025-04-01 18:22:03 UTC
-+++ vendor/cc-1.2.25/src/tool.rs
+--- vendor/cc-1.2.26/src/tool.rs.orig 2025-04-01 18:22:03 UTC
++++ vendor/cc-1.2.26/src/tool.rs
@@ -141,9 +141,7 @@ impl Tool {
match (clang, accepts_cl_style_flags, gcc, emscripten, vxworks) {
@@ -112,8 +112,8 @@ https://reviews.llvm.org/D77776
(false, false, true, _, false) | (_, _, _, _, true) => Ok(ToolFamily::Gnu),
(false, false, false, false, false) => {
cargo_output.print_warning(&"Compiler family detection failed since it does not define `__clang__`, `__GNUC__`, `__EMSCRIPTEN__` or `__VXWORKS__`, also does not accept cl style flag `-?`, fallback to treating it as GNU");
---- vendor/cc-1.2.26/src/tool.rs.orig 2025-04-01 18:22:03 UTC
-+++ vendor/cc-1.2.26/src/tool.rs
+--- vendor/cc-1.2.27/src/tool.rs.orig 2025-04-01 18:22:03 UTC
++++ vendor/cc-1.2.27/src/tool.rs
@@ -141,9 +141,7 @@ impl Tool {
match (clang, accepts_cl_style_flags, gcc, emscripten, vxworks) {
@@ -125,8 +125,8 @@ https://reviews.llvm.org/D77776
(false, false, true, _, false) | (_, _, _, _, true) => Ok(ToolFamily::Gnu),
(false, false, false, false, false) => {
cargo_output.print_warning(&"Compiler family detection failed since it does not define `__clang__`, `__GNUC__`, `__EMSCRIPTEN__` or `__VXWORKS__`, also does not accept cl style flag `-?`, fallback to treating it as GNU");
---- vendor/cc-1.2.27/src/tool.rs.orig 2025-04-01 18:22:03 UTC
-+++ vendor/cc-1.2.27/src/tool.rs
+--- vendor/cc-1.2.31/src/tool.rs.orig 2025-04-01 18:22:03 UTC
++++ vendor/cc-1.2.31/src/tool.rs
@@ -141,9 +141,7 @@ impl Tool {
match (clang, accepts_cl_style_flags, gcc, emscripten, vxworks) {
diff --git a/lang/rust/Makefile b/lang/rust/Makefile
index b3f9e7bcf803..f4f9f1222023 100644
--- a/lang/rust/Makefile
+++ b/lang/rust/Makefile
@@ -1,5 +1,5 @@
PORTNAME= rust
-PORTVERSION?= 1.87.0
+PORTVERSION?= 1.89.0
PORTREVISION?= 0
CATEGORIES= lang
MASTER_SITES= https://static.rust-lang.org/dist/:src \
@@ -38,7 +38,7 @@ MAKE_ENV= DESTDIR=${STAGEDIR} \
TEST_ENV= ${MAKE_ENV} \
ALLOW_NONZERO_RLIMIT_CORE=1
-CONFLICTS_INSTALL?= rust-nightly
+CONFLICTS_INSTALL?= rust-nightly rust188
# rustc stashes intermediary files in TMPDIR (default /tmp) which
# might cause issues for users that for some reason space limit
@@ -63,7 +63,7 @@ DOCS_VARS= _RUST_BUILD_DOCS=true \
_COMPONENTS+="rust-docs-${_PACKAGE_VERS}-${_RUST_TARGET} rust-docs-json-${_PACKAGE_VERS}-${_RUST_TARGET}"
DOCS_VARS_OFF= _RUST_BUILD_DOCS=false
GDB_RUN_DEPENDS= ${LOCALBASE}/bin/gdb:devel/gdb
-PORT_LLVM_USES= llvm:min=18,lib,noexport
+PORT_LLVM_USES= llvm:min=19,lib,noexport
PORT_LLVM_MAKE_ENV= RUSTFLAGS="-Lnative=${LOCALBASE}/lib"
SOURCES_VARS= _COMPONENTS+=rust-src-${_PACKAGE_VERS} \
_RUST_TOOLS+=src
@@ -71,8 +71,8 @@ WASM_VARS= _COMPONENTS+="rust-analysis-${_PACKAGE_VERS}-wasm32-unknown-unknown
_RUST_TARGETS+=wasm32-unknown-unknown
# See WRKSRC/src/stage0 for the date and version values
-BOOTSTRAPS_DATE?= 2025-04-03
-RUST_BOOTSTRAP_VERSION?= 1.86.0
+BOOTSTRAPS_DATE?= 2025-06-26
+RUST_BOOTSTRAP_VERSION?= 1.88.0
CARGO_VENDOR_DIR?= ${WRKSRC}/vendor
@@ -137,7 +137,7 @@ DISTFILES:= ${DISTFILES:M*\:src} \
post-patch:
@${REINPLACE_CMD} 's,gdb,${LOCALBASE}/bin/gdb,' ${WRKSRC}/src/etc/rust-gdb
.if defined(NIGHTLY_DATE)
- @${REINPLACE_CMD} 's/rustfmt/nothx/' ${WRKSRC}/src/stage0
+ @${REINPLACE_CMD} '/rustfmt/d' ${WRKSRC}/src/stage0
.endif
# Disable vendor checksums
@${REINPLACE_CMD} 's,"files":{[^}]*},"files":{},' \
diff --git a/lang/rust/distinfo b/lang/rust/distinfo
index 7749cc6eb420..e4f7c8b1d055 100644
--- a/lang/rust/distinfo
+++ b/lang/rust/distinfo
@@ -1,51 +1,51 @@
-TIMESTAMP = 1747381478
-SHA256 (rust/rustc-1.87.0-src.tar.xz) = 8623b8651893e8c6aebfa45b6a90645a4f652f7b18189a0992a90d11ac2631f4
-SIZE (rust/rustc-1.87.0-src.tar.xz) = 283604208
-SHA256 (rust/2025-04-03/rustc-1.86.0-aarch64-unknown-freebsd.tar.xz) = b49f08bb6781c65121ac56bb4fb75fe309d8614cb54816b53ad2350f3c5341ee
-SIZE (rust/2025-04-03/rustc-1.86.0-aarch64-unknown-freebsd.tar.xz) = 64694524
-SHA256 (rust/2025-04-03/rust-std-1.86.0-aarch64-unknown-freebsd.tar.xz) = 0cbe464bef3c655ee225a6e1c012cb77680c1497d1ff934a7f237606695ef7b6
-SIZE (rust/2025-04-03/rust-std-1.86.0-aarch64-unknown-freebsd.tar.xz) = 25076948
-SHA256 (rust/2025-04-03/cargo-1.86.0-aarch64-unknown-freebsd.tar.xz) = 77c7bc54bb4deeebd57dd7847c3f38b151e79e3ebc21a7f8d68f7ac296a96650
-SIZE (rust/2025-04-03/cargo-1.86.0-aarch64-unknown-freebsd.tar.xz) = 8353556
-SHA256 (rust/2025-04-03/rustc-1.86.0-x86_64-unknown-freebsd.tar.xz) = 762b6de1097c22fa28e59a44c0407c3c065428acffed479c12e4b63ba3e5e20d
-SIZE (rust/2025-04-03/rustc-1.86.0-x86_64-unknown-freebsd.tar.xz) = 59859608
-SHA256 (rust/2025-04-03/rust-std-1.86.0-x86_64-unknown-freebsd.tar.xz) = 06a8b89e1701bc71a1ff3735441cb2be9c77156b980321172f2f1f8b00e7e1c2
-SIZE (rust/2025-04-03/rust-std-1.86.0-x86_64-unknown-freebsd.tar.xz) = 26323648
-SHA256 (rust/2025-04-03/cargo-1.86.0-x86_64-unknown-freebsd.tar.xz) = d8c2bf87027441a950052d8a224ed030cd6134746597e7b868fc115e28188036
-SIZE (rust/2025-04-03/cargo-1.86.0-x86_64-unknown-freebsd.tar.xz) = 9412224
-SHA256 (rust/2025-04-03/rustc-1.86.0-armv7-unknown-freebsd.tar.xz) = 9482c19107d89e4a2ed9f0c14a70a64e277427eab8b411cb8693c5efeb879eaa
-SIZE (rust/2025-04-03/rustc-1.86.0-armv7-unknown-freebsd.tar.xz) = 64784700
-SHA256 (rust/2025-04-03/rust-std-1.86.0-armv7-unknown-freebsd.tar.xz) = aa615f218e1b55cceea6c53c7a6b63e85fdee07d0854aebeab19d53a2f43b4b8
-SIZE (rust/2025-04-03/rust-std-1.86.0-armv7-unknown-freebsd.tar.xz) = 24279348
-SHA256 (rust/2025-04-03/cargo-1.86.0-armv7-unknown-freebsd.tar.xz) = 1d45b5eee9133468f8316c25a7115ebeb95044406554c9c705337697cfe66bfd
-SIZE (rust/2025-04-03/cargo-1.86.0-armv7-unknown-freebsd.tar.xz) = 8436308
-SHA256 (rust/2025-04-03/rustc-1.86.0-i686-unknown-freebsd.tar.xz) = 724095086e992ec5266b1c3360053c09943969cd34741418bd71b348002f1421
-SIZE (rust/2025-04-03/rustc-1.86.0-i686-unknown-freebsd.tar.xz) = 72252364
-SHA256 (rust/2025-04-03/rust-std-1.86.0-i686-unknown-freebsd.tar.xz) = 3f9586f04740463e81a205d4933865d956c307020881578a45f51b41128600a4
-SIZE (rust/2025-04-03/rust-std-1.86.0-i686-unknown-freebsd.tar.xz) = 26001160
-SHA256 (rust/2025-04-03/cargo-1.86.0-i686-unknown-freebsd.tar.xz) = a95e66aa8a81ab2eaf0292b48009214e3ee086e3af5473716faa9b4a103485ee
-SIZE (rust/2025-04-03/cargo-1.86.0-i686-unknown-freebsd.tar.xz) = 10026684
-SHA256 (rust/2025-04-03/rustc-1.86.0-powerpc-unknown-freebsd.tar.xz) = 30ab4a0223263f91a35889c3c963ae1ceb6ae89093c9794579920503cf5e6576
-SIZE (rust/2025-04-03/rustc-1.86.0-powerpc-unknown-freebsd.tar.xz) = 65902536
-SHA256 (rust/2025-04-03/rust-std-1.86.0-powerpc-unknown-freebsd.tar.xz) = 9b435f6356409712e3c3cefb377e096136603f7a12b860d508211f8d1ca423ed
-SIZE (rust/2025-04-03/rust-std-1.86.0-powerpc-unknown-freebsd.tar.xz) = 23515212
-SHA256 (rust/2025-04-03/cargo-1.86.0-powerpc-unknown-freebsd.tar.xz) = 313d4abae5a5f19a300d9f78c045c9e2d32104af99885e1205a859f1f8c93b8a
-SIZE (rust/2025-04-03/cargo-1.86.0-powerpc-unknown-freebsd.tar.xz) = 8682124
-SHA256 (rust/2025-04-03/rustc-1.86.0-powerpc64-unknown-freebsd.tar.xz) = 0524fa2437ace6ed7305dd619c7fb7263cca8fab647307e3e6400d675c50b6ee
-SIZE (rust/2025-04-03/rustc-1.86.0-powerpc64-unknown-freebsd.tar.xz) = 63944028
-SHA256 (rust/2025-04-03/rust-std-1.86.0-powerpc64-unknown-freebsd.tar.xz) = d0a26c184f8f3dcbcc1e3ce1939057d33dff62a41fc24dbfbd8d5a25dfce73ab
-SIZE (rust/2025-04-03/rust-std-1.86.0-powerpc64-unknown-freebsd.tar.xz) = 23494356
-SHA256 (rust/2025-04-03/cargo-1.86.0-powerpc64-unknown-freebsd.tar.xz) = 38f3c952ff10f303f76b7bc3c1bc7ccc00069f9c7b4e850ede8cbf5c54102d37
-SIZE (rust/2025-04-03/cargo-1.86.0-powerpc64-unknown-freebsd.tar.xz) = 8376044
-SHA256 (rust/2025-04-03/rustc-1.86.0-powerpc64le-unknown-freebsd.tar.xz) = 2c89c2605bcf3e8ef1c3e7afbd10223eacd66b9c5d1c863d31eb4f7e57e4b9a9
-SIZE (rust/2025-04-03/rustc-1.86.0-powerpc64le-unknown-freebsd.tar.xz) = 66937772
-SHA256 (rust/2025-04-03/rust-std-1.86.0-powerpc64le-unknown-freebsd.tar.xz) = 263d0632010814ffe8d6a421465d65066941e5b965eb7504377e83d9ba43e0e3
-SIZE (rust/2025-04-03/rust-std-1.86.0-powerpc64le-unknown-freebsd.tar.xz) = 23608152
-SHA256 (rust/2025-04-03/cargo-1.86.0-powerpc64le-unknown-freebsd.tar.xz) = d9b86c14cd5637287d66029f6c8cf12978deabcc4c09b81e67f08a6fd0e4e6bd
-SIZE (rust/2025-04-03/cargo-1.86.0-powerpc64le-unknown-freebsd.tar.xz) = 8789924
-SHA256 (rust/2025-04-03/rustc-1.86.0-riscv64gc-unknown-freebsd.tar.xz) = 9a6881d37845c70079d7eab2a4d06782e1edb754d8c8a61596cff83a50f354fd
-SIZE (rust/2025-04-03/rustc-1.86.0-riscv64gc-unknown-freebsd.tar.xz) = 71372776
-SHA256 (rust/2025-04-03/rust-std-1.86.0-riscv64gc-unknown-freebsd.tar.xz) = ff9b3d3e21ea8919029aead4c1ef50aaefb3e6f6fdd21f29c66f686bd2b9bcf4
-SIZE (rust/2025-04-03/rust-std-1.86.0-riscv64gc-unknown-freebsd.tar.xz) = 23451920
-SHA256 (rust/2025-04-03/cargo-1.86.0-riscv64gc-unknown-freebsd.tar.xz) = d77f8b50bdb875eaa6410ceb0c61df2512ff97fed47e4af5b28a5f266e0bec35
-SIZE (rust/2025-04-03/cargo-1.86.0-riscv64gc-unknown-freebsd.tar.xz) = 10660864
+TIMESTAMP = 1755503845
+SHA256 (rust/rustc-1.89.0-src.tar.xz) = 0b9d55610d8270e06c44f459d1e2b7918a5e673809c592abed9b9c600e33d95a
+SIZE (rust/rustc-1.89.0-src.tar.xz) = 267487572
+SHA256 (rust/2025-06-26/rustc-1.88.0-aarch64-unknown-freebsd.tar.xz) = 67172d0cdc6d52a02f483c46c12e4ba33312974c62db46b43ecd3b1f3b43d132
+SIZE (rust/2025-06-26/rustc-1.88.0-aarch64-unknown-freebsd.tar.xz) = 67731064
+SHA256 (rust/2025-06-26/rust-std-1.88.0-aarch64-unknown-freebsd.tar.xz) = 1575d764a1490626776b4ab2001a4aa16a3e1d89dfdc9f283e42a54e392d1ac6
+SIZE (rust/2025-06-26/rust-std-1.88.0-aarch64-unknown-freebsd.tar.xz) = 25194144
+SHA256 (rust/2025-06-26/cargo-1.88.0-aarch64-unknown-freebsd.tar.xz) = 3babd56a24e9fede664b8f4374eb10455f84336e580dd9bbd43bec30f7edd5bc
+SIZE (rust/2025-06-26/cargo-1.88.0-aarch64-unknown-freebsd.tar.xz) = 8880928
+SHA256 (rust/2025-06-26/rustc-1.88.0-x86_64-unknown-freebsd.tar.xz) = 3ef42208bf53295061c4a058fa480512ea19ecb651266ab6640d5aa453a7083d
+SIZE (rust/2025-06-26/rustc-1.88.0-x86_64-unknown-freebsd.tar.xz) = 63955284
+SHA256 (rust/2025-06-26/rust-std-1.88.0-x86_64-unknown-freebsd.tar.xz) = 8ce82d28c71abfebdcd80cda50fc6ca5e4d275675f7cd9c6948b2695504b7657
+SIZE (rust/2025-06-26/rust-std-1.88.0-x86_64-unknown-freebsd.tar.xz) = 26263140
+SHA256 (rust/2025-06-26/cargo-1.88.0-x86_64-unknown-freebsd.tar.xz) = bc1418734bb07f72941ed013b2362e1728ec1b04bb57310617135ae3c598f559
+SIZE (rust/2025-06-26/cargo-1.88.0-x86_64-unknown-freebsd.tar.xz) = 10114468
+SHA256 (rust/2025-06-26/rustc-1.88.0-armv7-unknown-freebsd.tar.xz) = bd9e99725e5dee3f7f389222e98bacc507fed08d865bc903bb5dfd3662c2dedb
+SIZE (rust/2025-06-26/rustc-1.88.0-armv7-unknown-freebsd.tar.xz) = 68041072
+SHA256 (rust/2025-06-26/rust-std-1.88.0-armv7-unknown-freebsd.tar.xz) = 531e4433569e18481fd786eabf3c321c09e2052eaef3df1c32e962b4cfe29e9c
+SIZE (rust/2025-06-26/rust-std-1.88.0-armv7-unknown-freebsd.tar.xz) = 24377108
+SHA256 (rust/2025-06-26/cargo-1.88.0-armv7-unknown-freebsd.tar.xz) = 78a903b07855caf8c0671516a79f29b1a646f0d1b6147e0cc1930c29ee5dcf13
+SIZE (rust/2025-06-26/cargo-1.88.0-armv7-unknown-freebsd.tar.xz) = 9172844
+SHA256 (rust/2025-06-26/rustc-1.88.0-i686-unknown-freebsd.tar.xz) = 775ad2c77c0a3268ed062503cb5c173a988522e576630aeab7050b7dae2ab225
+SIZE (rust/2025-06-26/rustc-1.88.0-i686-unknown-freebsd.tar.xz) = 76553540
+SHA256 (rust/2025-06-26/rust-std-1.88.0-i686-unknown-freebsd.tar.xz) = af621a50d65c78b84356c0c69cd3b557fc0ed12c653a10c54d23035265bac876
+SIZE (rust/2025-06-26/rust-std-1.88.0-i686-unknown-freebsd.tar.xz) = 25898736
+SHA256 (rust/2025-06-26/cargo-1.88.0-i686-unknown-freebsd.tar.xz) = 21c27c8b3c8d17b0ba5b6dbba3800944d8a88c36e7437f527fc391019c2b2e58
+SIZE (rust/2025-06-26/cargo-1.88.0-i686-unknown-freebsd.tar.xz) = 10724288
+SHA256 (rust/2025-06-26/rustc-1.88.0-powerpc-unknown-freebsd.tar.xz) = e0a65f62a77c1dc566a1207a3f7c1ef6086b5f288c6fd512a6726648d6618bb3
+SIZE (rust/2025-06-26/rustc-1.88.0-powerpc-unknown-freebsd.tar.xz) = 69209400
+SHA256 (rust/2025-06-26/rust-std-1.88.0-powerpc-unknown-freebsd.tar.xz) = a0c153d21656da59a6e9dedc6823e7ea3443a63b20a5c5cafc5cbaca1aed3fea
+SIZE (rust/2025-06-26/rust-std-1.88.0-powerpc-unknown-freebsd.tar.xz) = 23355452
+SHA256 (rust/2025-06-26/cargo-1.88.0-powerpc-unknown-freebsd.tar.xz) = cdd57cca7f144245c836a86a59bdb823792f58c0192af398854de0ee8115c04b
+SIZE (rust/2025-06-26/cargo-1.88.0-powerpc-unknown-freebsd.tar.xz) = 9289100
+SHA256 (rust/2025-06-26/rustc-1.88.0-powerpc64-unknown-freebsd.tar.xz) = 4e5fee68df5d3a4f5bab892f6174af9d8da9394c9964c436578faf428cbd5bbd
+SIZE (rust/2025-06-26/rustc-1.88.0-powerpc64-unknown-freebsd.tar.xz) = 67654832
+SHA256 (rust/2025-06-26/rust-std-1.88.0-powerpc64-unknown-freebsd.tar.xz) = 2c714953eff5dcd21c858d898f6e252e40ab9693a09ffabdcd66fcb36d0e7d37
+SIZE (rust/2025-06-26/rust-std-1.88.0-powerpc64-unknown-freebsd.tar.xz) = 23401704
+SHA256 (rust/2025-06-26/cargo-1.88.0-powerpc64-unknown-freebsd.tar.xz) = 57e9aa16c4ee7fe284e54ec01a84caf08ef3139fd4f22c2f05e13f810dae76af
+SIZE (rust/2025-06-26/cargo-1.88.0-powerpc64-unknown-freebsd.tar.xz) = 9336784
+SHA256 (rust/2025-06-26/rustc-1.88.0-powerpc64le-unknown-freebsd.tar.xz) = 1cb12bc1f6edb054b3656a7439a76c88cf80cdb6eb1695f9de89b1c4aa05bf14
+SIZE (rust/2025-06-26/rustc-1.88.0-powerpc64le-unknown-freebsd.tar.xz) = 70776456
+SHA256 (rust/2025-06-26/rust-std-1.88.0-powerpc64le-unknown-freebsd.tar.xz) = 994fc09c860c757b1c1fcb0c1bf340d03a57f50e2c01f90fec06c81b053bc37f
+SIZE (rust/2025-06-26/rust-std-1.88.0-powerpc64le-unknown-freebsd.tar.xz) = 23532512
+SHA256 (rust/2025-06-26/cargo-1.88.0-powerpc64le-unknown-freebsd.tar.xz) = 0da207963f267df74448c3d5ac88c0b190db9984dc1acc9db8e21cab4e1913b9
+SIZE (rust/2025-06-26/cargo-1.88.0-powerpc64le-unknown-freebsd.tar.xz) = 9845780
+SHA256 (rust/2025-06-26/rustc-1.88.0-riscv64gc-unknown-freebsd.tar.xz) = 06270fe10241b8aa7e50cee4c35372afb2f05f073aa4a7d2b2f9ab2a1a74d1c7
+SIZE (rust/2025-06-26/rustc-1.88.0-riscv64gc-unknown-freebsd.tar.xz) = 77696432
+SHA256 (rust/2025-06-26/rust-std-1.88.0-riscv64gc-unknown-freebsd.tar.xz) = cb2f7535dde028a80630e7af8de74121e5c0fe61239fbd46b91fa0b9ce7dd793
+SIZE (rust/2025-06-26/rust-std-1.88.0-riscv64gc-unknown-freebsd.tar.xz) = 23559976
+SHA256 (rust/2025-06-26/cargo-1.88.0-riscv64gc-unknown-freebsd.tar.xz) = fcc3c82e832d7561e7de38d84f5415fc4d2d246f7b1ee5cf21567fb2ca296d90
+SIZE (rust/2025-06-26/cargo-1.88.0-riscv64gc-unknown-freebsd.tar.xz) = 11619296
diff --git a/lang/rust/files/patch-vendor_cc.rs b/lang/rust/files/patch-vendor_cc.rs
index 4bc3a7b24e42..4a763326e4f6 100644
--- a/lang/rust/files/patch-vendor_cc.rs
+++ b/lang/rust/files/patch-vendor_cc.rs
@@ -8,21 +8,8 @@ until LLVM can be updated to use libc++ by default.
https://reviews.llvm.org/D77776
---- vendor/cc-1.0.99/src/tool.rs.orig 2024-05-09 18:20:47 UTC
-+++ vendor/cc-1.0.99/src/tool.rs
-@@ -151,9 +151,7 @@ impl Tool {
-
- match (clang, accepts_cl_style_flags, gcc) {
- (clang_cl, true, _) => Ok(ToolFamily::Msvc { clang_cl }),
-- (true, false, _) => Ok(ToolFamily::Clang {
-- zig_cc: is_zig_cc(path, cargo_output),
-- }),
-+ (true, false, _) => Ok(ToolFamily::Gnu),
- (false, false, true) => Ok(ToolFamily::Gnu),
- (false, false, false) => {
- cargo_output.print_warning(&"Compiler family detection failed since it does not define `__clang__`, `__GNUC__` or `_MSC_VER`, fallback to treating it as GNU");
---- vendor/cc-1.1.22/src/tool.rs.orig 2024-05-09 18:20:47 UTC
-+++ vendor/cc-1.1.22/src/tool.rs
+--- vendor/cc-1.1.18/src/tool.rs.orig 2025-06-08 20:17:28 UTC
++++ vendor/cc-1.1.18/src/tool.rs
@@ -174,9 +174,7 @@ impl Tool {
match (clang, accepts_cl_style_flags, gcc, emscripten, vxworks) {
@@ -34,7 +21,7 @@ https://reviews.llvm.org/D77776
(false, false, true, _, false) | (_, _, _, _, true) => Ok(ToolFamily::Gnu),
(false, false, false, false, false) => {
cargo_output.print_warning(&"Compiler family detection failed since it does not define `__clang__`, `__GNUC__`, `__EMSCRIPTEN__` or `__VXWORKS__`, also does not accept cl style flag `-?`, fallback to treating it as GNU");
---- vendor/cc-1.2.0/src/tool.rs.orig 2024-05-09 18:20:47 UTC
+--- vendor/cc-1.2.0/src/tool.rs.orig 2024-12-10 13:16:09 UTC
+++ vendor/cc-1.2.0/src/tool.rs
@@ -174,9 +174,7 @@ impl Tool {
@@ -47,9 +34,9 @@ https://reviews.llvm.org/D77776
(false, false, true, _, false) | (_, _, _, _, true) => Ok(ToolFamily::Gnu),
(false, false, false, false, false) => {
cargo_output.print_warning(&"Compiler family detection failed since it does not define `__clang__`, `__GNUC__`, `__EMSCRIPTEN__` or `__VXWORKS__`, also does not accept cl style flag `-?`, fallback to treating it as GNU");
---- vendor/cc-1.2.10/src/tool.rs.orig 2024-05-09 18:20:47 UTC
-+++ vendor/cc-1.2.10/src/tool.rs
-@@ -174,9 +174,7 @@ impl Tool {
+--- vendor/cc-1.2.13/src/tool.rs.orig 2025-04-01 18:22:03 UTC
++++ vendor/cc-1.2.13/src/tool.rs
+@@ -141,9 +141,7 @@ impl Tool {
match (clang, accepts_cl_style_flags, gcc, emscripten, vxworks) {
(clang_cl, true, _, false, false) => Ok(ToolFamily::Msvc { clang_cl }),
@@ -60,9 +47,9 @@ https://reviews.llvm.org/D77776
(false, false, true, _, false) | (_, _, _, _, true) => Ok(ToolFamily::Gnu),
(false, false, false, false, false) => {
cargo_output.print_warning(&"Compiler family detection failed since it does not define `__clang__`, `__GNUC__`, `__EMSCRIPTEN__` or `__VXWORKS__`, also does not accept cl style flag `-?`, fallback to treating it as GNU");
---- vendor/cc-1.2.16/src/tool.rs.orig 2024-05-09 18:20:47 UTC
+--- vendor/cc-1.2.16/src/tool.rs.orig 2025-04-01 18:22:03 UTC
+++ vendor/cc-1.2.16/src/tool.rs
-@@ -174,9 +174,7 @@ impl Tool {
+@@ -141,9 +141,7 @@ impl Tool {
match (clang, accepts_cl_style_flags, gcc, emscripten, vxworks) {
(clang_cl, true, _, false, false) => Ok(ToolFamily::Msvc { clang_cl }),
@@ -73,9 +60,74 @@ https://reviews.llvm.org/D77776
(false, false, true, _, false) | (_, _, _, _, true) => Ok(ToolFamily::Gnu),
(false, false, false, false, false) => {
cargo_output.print_warning(&"Compiler family detection failed since it does not define `__clang__`, `__GNUC__`, `__EMSCRIPTEN__` or `__VXWORKS__`, also does not accept cl style flag `-?`, fallback to treating it as GNU");
---- vendor/cc-1.2.17/src/tool.rs.orig 2024-05-09 18:20:47 UTC
-+++ vendor/cc-1.2.17/src/tool.rs
-@@ -174,9 +174,7 @@ impl Tool {
+--- vendor/cc-1.2.19/src/tool.rs.orig 2025-04-01 18:22:03 UTC
++++ vendor/cc-1.2.19/src/tool.rs
+@@ -141,9 +141,7 @@ impl Tool {
+
+ match (clang, accepts_cl_style_flags, gcc, emscripten, vxworks) {
+ (clang_cl, true, _, false, false) => Ok(ToolFamily::Msvc { clang_cl }),
+- (true, _, _, _, false) | (_, _, _, true, false) => Ok(ToolFamily::Clang {
+- zig_cc: is_zig_cc(path, cargo_output),
+- }),
++ (true, _, _, _, false) | (_, _, _, true, false) => Ok(ToolFamily::Gnu),
+ (false, false, true, _, false) | (_, _, _, _, true) => Ok(ToolFamily::Gnu),
+ (false, false, false, false, false) => {
+ cargo_output.print_warning(&"Compiler family detection failed since it does not define `__clang__`, `__GNUC__`, `__EMSCRIPTEN__` or `__VXWORKS__`, also does not accept cl style flag `-?`, fallback to treating it as GNU");
+--- vendor/cc-1.2.20/src/tool.rs.orig 2025-04-01 18:22:03 UTC
++++ vendor/cc-1.2.20/src/tool.rs
+@@ -141,9 +141,7 @@ impl Tool {
+
+ match (clang, accepts_cl_style_flags, gcc, emscripten, vxworks) {
+ (clang_cl, true, _, false, false) => Ok(ToolFamily::Msvc { clang_cl }),
+- (true, _, _, _, false) | (_, _, _, true, false) => Ok(ToolFamily::Clang {
+- zig_cc: is_zig_cc(path, cargo_output),
+- }),
++ (true, _, _, _, false) | (_, _, _, true, false) => Ok(ToolFamily::Gnu),
+ (false, false, true, _, false) | (_, _, _, _, true) => Ok(ToolFamily::Gnu),
+ (false, false, false, false, false) => {
+ cargo_output.print_warning(&"Compiler family detection failed since it does not define `__clang__`, `__GNUC__`, `__EMSCRIPTEN__` or `__VXWORKS__`, also does not accept cl style flag `-?`, fallback to treating it as GNU");
+--- vendor/cc-1.2.23/src/tool.rs.orig 2025-04-01 18:22:03 UTC
++++ vendor/cc-1.2.23/src/tool.rs
+@@ -141,9 +141,7 @@ impl Tool {
+
+ match (clang, accepts_cl_style_flags, gcc, emscripten, vxworks) {
+ (clang_cl, true, _, false, false) => Ok(ToolFamily::Msvc { clang_cl }),
+- (true, _, _, _, false) | (_, _, _, true, false) => Ok(ToolFamily::Clang {
+- zig_cc: is_zig_cc(path, cargo_output),
+- }),
++ (true, _, _, _, false) | (_, _, _, true, false) => Ok(ToolFamily::Gnu),
+ (false, false, true, _, false) | (_, _, _, _, true) => Ok(ToolFamily::Gnu),
+ (false, false, false, false, false) => {
+ cargo_output.print_warning(&"Compiler family detection failed since it does not define `__clang__`, `__GNUC__`, `__EMSCRIPTEN__` or `__VXWORKS__`, also does not accept cl style flag `-?`, fallback to treating it as GNU");
+--- vendor/cc-1.2.25/src/tool.rs.orig 2025-04-01 18:22:03 UTC
++++ vendor/cc-1.2.25/src/tool.rs
+@@ -141,9 +141,7 @@ impl Tool {
+
+ match (clang, accepts_cl_style_flags, gcc, emscripten, vxworks) {
+ (clang_cl, true, _, false, false) => Ok(ToolFamily::Msvc { clang_cl }),
+- (true, _, _, _, false) | (_, _, _, true, false) => Ok(ToolFamily::Clang {
+- zig_cc: is_zig_cc(path, cargo_output),
+- }),
++ (true, _, _, _, false) | (_, _, _, true, false) => Ok(ToolFamily::Gnu),
+ (false, false, true, _, false) | (_, _, _, _, true) => Ok(ToolFamily::Gnu),
+ (false, false, false, false, false) => {
+ cargo_output.print_warning(&"Compiler family detection failed since it does not define `__clang__`, `__GNUC__`, `__EMSCRIPTEN__` or `__VXWORKS__`, also does not accept cl style flag `-?`, fallback to treating it as GNU");
+--- vendor/cc-1.2.26/src/tool.rs.orig 2025-04-01 18:22:03 UTC
++++ vendor/cc-1.2.26/src/tool.rs
+@@ -141,9 +141,7 @@ impl Tool {
+
+ match (clang, accepts_cl_style_flags, gcc, emscripten, vxworks) {
+ (clang_cl, true, _, false, false) => Ok(ToolFamily::Msvc { clang_cl }),
+- (true, _, _, _, false) | (_, _, _, true, false) => Ok(ToolFamily::Clang {
+- zig_cc: is_zig_cc(path, cargo_output),
+- }),
++ (true, _, _, _, false) | (_, _, _, true, false) => Ok(ToolFamily::Gnu),
+ (false, false, true, _, false) | (_, _, _, _, true) => Ok(ToolFamily::Gnu),
+ (false, false, false, false, false) => {
+ cargo_output.print_warning(&"Compiler family detection failed since it does not define `__clang__`, `__GNUC__`, `__EMSCRIPTEN__` or `__VXWORKS__`, also does not accept cl style flag `-?`, fallback to treating it as GNU");
+--- vendor/cc-1.2.27/src/tool.rs.orig 2025-04-01 18:22:03 UTC
++++ vendor/cc-1.2.27/src/tool.rs
+@@ -141,9 +141,7 @@ impl Tool {
match (clang, accepts_cl_style_flags, gcc, emscripten, vxworks) {
(clang_cl, true, _, false, false) => Ok(ToolFamily::Msvc { clang_cl }),
diff --git a/lang/rust/files/patch-vendor_openssl_crypto_threads__pthread.c b/lang/rust/files/patch-vendor_openssl_crypto_threads__pthread.c
index 87c398a91538..03afdc6902f8 100644
--- a/lang/rust/files/patch-vendor_openssl_crypto_threads__pthread.c
+++ b/lang/rust/files/patch-vendor_openssl_crypto_threads__pthread.c
@@ -1,9 +1,7 @@
/usr/ports/security/openssl34/files/patch-crypto_threads__pthread.c
-+ fix dup IMPL_fallback_atomic_exchange_n (this code was removed in
-https://github.com/openssl/openssl/commit/65787e2dc219685c30539c6f60eb6b64b890bf6f)
---- vendor/openssl-src-300.4.2+3.4.1/openssl/crypto/threads_pthread.c.orig 2025-05-09 22:37:37.000000000 +0200
-+++ vendor/openssl-src-300.4.2+3.4.1/openssl/crypto/threads_pthread.c 2025-05-21 14:44:18.563852000 +0200
+--- vendor/openssl-src-300.5.0+3.5.0/openssl/crypto/threads_pthread.c.orig 2025-05-09 22:37:37.000000000 +0200
++++ vendor/openssl-src-300.5.0+3.5.0/openssl/crypto/threads_pthread.c 2025-05-21 14:44:18.563852000 +0200
@@ -50,6 +50,10 @@ __tsan_mutex_post_lock((x), 0, 0)
# define BROKEN_CLANG_ATOMICS
#endif
@@ -15,13 +13,3 @@ https://github.com/openssl/openssl/commit/65787e2dc219685c30539c6f60eb6b64b890bf
#if defined(OPENSSL_THREADS) && !defined(CRYPTO_TDEBUG) && !defined(OPENSSL_SYS_WINDOWS)
# if defined(OPENSSL_SYS_UNIX)
-@@ -210,8 +214,7 @@ IMPL_fallback_atomic_exchange_n(prcu_cb_item)
- pthread_mutex_unlock(&atomic_sim_lock); \
- return ret; \
- }
--
--IMPL_fallback_atomic_exchange_n(uint64_t)
-+IMPL_fallback_atomic_compare_exchange_n(uint64_t)
-
- # define ATOMIC_COMPARE_EXCHANGE_N(t, p, e, d, s, f) fallback_atomic_compare_exchange_n_##t(p, e, d, s, f)
-
diff --git a/lang/rust188/Makefile b/lang/rust188/Makefile
new file mode 100644
index 000000000000..46a547ad2130
--- /dev/null
+++ b/lang/rust188/Makefile
@@ -0,0 +1,283 @@
+PORTNAME= rust
+PORTVERSION?= 1.88.0
+PORTREVISION?= 0
+CATEGORIES= lang
+MASTER_SITES= https://static.rust-lang.org/dist/:src \
+ https://dev-static.rust-lang.org/dist/:src \
+ LOCAL/rust:bootstrap \
+ https://static.rust-lang.org/dist/:bootstrap
+DISTNAME?= ${PORTNAME}c-${PORTVERSION}-src
+DISTFILES?= ${NIGHTLY_DATE:D${NIGHTLY_DATE}/}${DISTNAME}${EXTRACT_SUFX}:src \
+ ${_RUSTC_BOOTSTRAP}${EXTRACT_SUFX}:bootstrap \
+ ${_RUST_STD_BOOTSTRAP}${EXTRACT_SUFX}:bootstrap \
+ ${_CARGO_BOOTSTRAP}${EXTRACT_SUFX}:bootstrap
+DIST_SUBDIR?= rust
+PKGNAMESUFFIX= 188
+
+MAINTAINER= rust@FreeBSD.org
+COMMENT= Language with a focus on memory safety and concurrency (deprecated 1.88.* series)
+WWW= https://www.rust-lang.org/
+
+LICENSE= APACHE20 MIT
+LICENSE_COMB= dual
+LICENSE_FILE_APACHE20= ${WRKSRC}/LICENSE-APACHE
+LICENSE_FILE_MIT= ${WRKSRC}/LICENSE-MIT
+
+ONLY_FOR_ARCHS= aarch64 amd64
+ONLY_FOR_ARCHS_REASON= unused by games/veloren-weekly
+
+LIB_DEPENDS= libcurl.so:ftp/curl
+
+USES= cmake:indirect cpe ninja:build pkgconfig python:build ssl tar:xz
+
+CPE_VENDOR= rust-lang
+
+MAKE_ENV= DESTDIR=${STAGEDIR} \
+ LIBGIT2_NO_PKG_CONFIG=1 \
+ OPENSSL_DIR="${OPENSSLBASE}"
+TEST_ENV= ${MAKE_ENV} \
+ ALLOW_NONZERO_RLIMIT_CORE=1
+
+PORTSCOUT= limit:^1\.88\.
+CONFLICTS_INSTALL?= rust rust-nightly
+
+# rustc stashes intermediary files in TMPDIR (default /tmp) which
+# might cause issues for users that for some reason space limit
+# their /tmp. WRKDIR should have plenty of space.
+# ?= to allow users to still overwrite it in make.conf.
+TMPDIR?= ${WRKDIR}
+
+OPTIONS_DEFINE= DOCS GDB LTO PORT_LLVM SOURCES WASM
+OPTIONS_DEFAULT= SOURCES WASM
+OPTIONS_DEFINE_i386= SSE2
+OPTIONS_DEFAULT_i386= SSE2
+
+GDB_DESC= Install ports gdb (necessary for debugging rust programs)
+PORT_LLVM_DESC= Build against devel/llvm instead of bundled copy (experimental)
+SSE2_DESC= Enable SSE2 instructions
+SOURCES_DESC= Install source files
+WASM_DESC= Build the WebAssembly target (wasm32-unknown-unknown)
+
+SSE2_EXTRA_PATCHES_OFF+= ${FILESDIR}/extra-patch-compiler_rustc__target_src_spec_targets_i686__unknown__freebsd.rs
+
+DOCS_VARS= _RUST_BUILD_DOCS=true \
+ _COMPONENTS+="rust-docs-${_PACKAGE_VERS}-${_RUST_TARGET} rust-docs-json-${_PACKAGE_VERS}-${_RUST_TARGET}"
+DOCS_VARS_OFF= _RUST_BUILD_DOCS=false
+GDB_RUN_DEPENDS= ${LOCALBASE}/bin/gdb:devel/gdb
+PORT_LLVM_USES= llvm:min=19,lib,noexport
+PORT_LLVM_MAKE_ENV= RUSTFLAGS="-Lnative=${LOCALBASE}/lib"
+SOURCES_VARS= _COMPONENTS+=rust-src-${_PACKAGE_VERS} \
+ _RUST_TOOLS+=src
+WASM_VARS= _COMPONENTS+="rust-analysis-${_PACKAGE_VERS}-wasm32-unknown-unknown rust-std-${_PACKAGE_VERS}-wasm32-unknown-unknown" \
+ _RUST_TARGETS+=wasm32-unknown-unknown
+
+# See WRKSRC/src/stage0 for the date and version values
+BOOTSTRAPS_DATE?= 2025-05-15
+RUST_BOOTSTRAP_VERSION?= 1.87.0
+
+CARGO_VENDOR_DIR?= ${WRKSRC}/vendor
+
+# Rust's target arch string might be different from *BSD arch strings
+_RUST_ARCH_amd64= x86_64
+_RUST_ARCH_i386= i686
+_RUST_ARCH_riscv64= riscv64gc
+_RUST_TARGET= ${_RUST_ARCH_${ARCH}:U${ARCH}}-unknown-${OPSYS:tl}
+_RUST_TARGETS= ${_RUST_TARGET}
+_RUST_TOOLS= analysis cargo clippy rust-analyzer rustdoc rustfmt
+
+_RUSTC_BOOTSTRAP= ${BOOTSTRAPS_DATE_${ARCH}:U${BOOTSTRAPS_DATE}}/rustc-${RUST_BOOTSTRAP_VERSION_${ARCH}:U${RUST_BOOTSTRAP_VERSION}}-${_RUST_TARGET}
+_RUST_STD_BOOTSTRAP= ${BOOTSTRAPS_DATE_${ARCH}:U${BOOTSTRAPS_DATE}}/rust-std-${RUST_BOOTSTRAP_VERSION_${ARCH}:U${RUST_BOOTSTRAP_VERSION}}-${_RUST_TARGET}
+_CARGO_BOOTSTRAP= ${BOOTSTRAPS_DATE_${ARCH}:U${BOOTSTRAPS_DATE}}/cargo-${RUST_BOOTSTRAP_VERSION_${ARCH}:U${RUST_BOOTSTRAP_VERSION}}-${_RUST_TARGET}
+
+_PACKAGE_VERS= ${NIGHTLY_DATE:?nightly:${PORTVERSION}}
+_COMPONENTS+= cargo-${_PACKAGE_VERS}-${_RUST_TARGET} \
+ clippy-${_PACKAGE_VERS}-${_RUST_TARGET} \
+ rustc-${_PACKAGE_VERS}-${_RUST_TARGET} \
+ rustfmt-${_PACKAGE_VERS}-${_RUST_TARGET} \
+ rust-analysis-${_PACKAGE_VERS}-${_RUST_TARGET} \
+ rust-std-${_PACKAGE_VERS}-${_RUST_TARGET}
+
+.include <bsd.port.pre.mk>
+
+.if ${OPSYS} != FreeBSD
+IGNORE= is only for FreeBSD
+.endif
+
+.if ${ARCH} == powerpc
+LIB_DEPENDS+= libatomic.so:lang/gcc${GCC_DEFAULT}
+MAKE_ENV+= RUSTFLAGS="-L/usr/local/lib/gcc${GCC_DEFAULT}"
+.endif
+
+.if ${ARCH} != powerpc64le
+MAKE_ENV+= RUST_BACKTRACE=1
+.endif
+
+# per https://rust-lang.github.io/rustup/concepts/components.html
+# rustc-dev is only usefull on nightly
+.if defined(NIGHTLY_DATE)
+_COMPONENTS+= rustc-dev-${_PACKAGE_VERS}-${_RUST_TARGET}
+.endif
+
+.if ${PORT_OPTIONS:MWASM} && ${PORT_OPTIONS:MDOCS}
+_COMPONENTS+= rust-docs-${_PACKAGE_VERS}-wasm32-unknown-unknown rust-docs-json-${_PACKAGE_VERS}-wasm32-unknown-unknown
+.endif
+
+.if exists(${PATCHDIR}/${ARCH}${BOOTSTRAPS_SUFFIX})
+EXTRA_PATCHES+= ${PATCHDIR}/${ARCH}${BOOTSTRAPS_SUFFIX}
+.endif
+
+.ifdef QEMU_EMULATING
+IGNORE= fails to build with qemu-user-static
+.endif
+
+.if make(makesum)
+DISTFILES:= ${DISTFILES:M*\:src} \
+ ${ONLY_FOR_ARCHS:O:@_arch@${:!${MAKE} ARCH=${_arch} -V'DISTFILES:N*\:src'!}@}
+.endif
+
+post-patch:
+ @${REINPLACE_CMD} 's,gdb,${LOCALBASE}/bin/gdb,' ${WRKSRC}/src/etc/rust-gdb
+.if defined(NIGHTLY_DATE)
+ @${REINPLACE_CMD} '/rustfmt/d' ${WRKSRC}/src/stage0
+.endif
+# Disable vendor checksums
+ @${REINPLACE_CMD} 's,"files":{[^}]*},"files":{},' \
+ ${CARGO_VENDOR_DIR}/*/.cargo-checksum.json
+
+post-patch-PORT_LLVM-on:
+# WASM target hardcodes bundled lld
+ @${REINPLACE_CMD} 's|"rust-lld"|"wasm-ld${LLVM_VERSION}"|' \
+ ${WRKSRC}/compiler/rustc_target/src/spec/base/wasm.rs
+
+do-configure:
+# Check that the running kernel has COMPAT_FREEBSD11 required by lang/rust post-ino64
+ @${SETENV} CC="${CC}" OPSYS="${OPSYS}" OSVERSION="${OSVERSION}" WRKDIR="${WRKDIR}" \
+ ${SH} ${SCRIPTSDIR}/rust-compat11-canary.sh
+.for _component in cargo rust-std rustc
+ @cd ${WRKDIR}/${_component}-*-${OPSYS:tl} && \
+ ${SH} install.sh --prefix=${WRKDIR}/bootstrap --verbose
+.endfor
+ @${ECHO_CMD} '[build]' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} 'build-dir="${WRKDIR}/_build"' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} 'build-stage=2' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} 'doc-stage=2' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} 'test-stage=2' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} 'vendor=true' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} 'extended=true' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} 'python="${PYTHON_CMD}"' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} 'docs=${_RUST_BUILD_DOCS}' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} 'verbose=2' >> ${WRKSRC}/config.toml
+.if defined(NIGHTLY_DATE)
+ @${ECHO_CMD} 'profiler=true' >> ${WRKSRC}/config.toml
+.endif
+ @${ECHO_CMD} 'target=[${_RUST_TARGETS:@.target.@"${.target.}"@:ts,}]' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} 'cargo="${WRKDIR}/bootstrap/bin/cargo"' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} 'rustc="${WRKDIR}/bootstrap/bin/rustc"' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} 'tools=[${_RUST_TOOLS:@.tool.@"${.tool.}"@:ts,}]' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} '[install]' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} 'prefix="${PREFIX}"' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} 'sysconfdir="${PREFIX}/etc"' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} '[rust]' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} 'channel="stable"' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} 'default-linker="${CC}"' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} 'deny-warnings=false' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} 'verbose-tests=true' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} 'download-rustc=false' >> ${WRKSRC}/config.toml
+.if ${PORT_OPTIONS:MWASM} && !${PORT_OPTIONS:MPORT_LLVM}
+ @${ECHO_CMD} 'lld=true' >> ${WRKSRC}/config.toml
+.else
+ @${ECHO_CMD} 'lld=false' >> ${WRKSRC}/config.toml
+.endif
+.if ${PORT_OPTIONS:MLTO}
+ @${ECHO_CMD} 'lto="thin"' >> ${WRKSRC}/config.toml
+.endif
+ @${ECHO_CMD} 'remap-debuginfo=true' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} '[llvm]' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} 'download-ci-llvm=false' >> ${WRKSRC}/config.toml
+.if ${PORT_OPTIONS:MLTO}
+ @${ECHO_CMD} 'thin-lto=true' >> ${WRKSRC}/config.toml
+.endif
+.if defined(WITH_CCACHE_BUILD) && !defined(NO_CCACHE)
+ @${ECHO_CMD} 'ccache="${CCACHE_BIN}"' >> ${WRKSRC}/config.toml
+.else
+ @${ECHO_CMD} 'ccache=false' >> ${WRKSRC}/config.toml
+.endif
+ @${ECHO_CMD} 'ninja=true' >> ${WRKSRC}/config.toml
+.if ${ARCH} == powerpc
+# Rust doesn't call the system compiler with the full version of the target.
+# This makes powerpc miscompile due to the secure-plt ABI change.
+# Additionally, force using ld.bfd to work around a linking problem in rustc_mir
+ @${PRINTF} '#!/bin/sh\nexec ${CC} "$$@" --target=powerpc-unknown-freebsd13.2' > ${WRKDIR}/cc-wrapper
+ @${CHMOD} +x ${WRKDIR}/cc-wrapper
+ @${PRINTF} '#!/bin/sh\nexec ${CXX} "$$@" --target=powerpc-unknown-freebsd13.2' > ${WRKDIR}/cxx-wrapper
+ @${CHMOD} +x ${WRKDIR}/cxx-wrapper
+.endif
+.for _target in ${_RUST_TARGETS}
+ @${ECHO_CMD} '[target.${_target}]' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} 'ar="${AR}"' >> ${WRKSRC}/config.toml
+.if ${ARCH} == powerpc
+ @${ECHO_CMD} 'cc="${WRKDIR}/cc-wrapper"' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} 'cxx="${WRKDIR}/cxx-wrapper"' >> ${WRKSRC}/config.toml
+.else
+ @${ECHO_CMD} 'cc="${CC}"' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} 'cxx="${CXX}"' >> ${WRKSRC}/config.toml
+.endif
+ @${ECHO_CMD} 'linker="${CC}"' >> ${WRKSRC}/config.toml
+.if ${PORT_OPTIONS:MPORT_LLVM}
+ @${ECHO_CMD} 'llvm-config="${LOCALBASE}/bin/${LLVM_CONFIG}"' >> ${WRKSRC}/config.toml
+.endif
+.endfor
+ @${ECHO_CMD} '[dist]' >> ${WRKSRC}/config.toml
+ @${ECHO_CMD} 'src-tarball=false' >> ${WRKSRC}/config.toml
+
+do-build:
+ @cd ${WRKSRC} && \
+ ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} x.py dist --jobs=${MAKE_JOBS_NUMBER}
+
+do-install:
+ ${RM} -r ${WRKDIR}/_extractdist
+.for _c in ${_COMPONENTS}
+ ${MKDIR} ${WRKDIR}/_extractdist
+ ${TAR} xf ${WRKDIR}/_build/dist/${_c}.tar.xz -C ${WRKDIR}/_extractdist
+ cd ${WRKDIR}/_extractdist/${_c} && \
+ ${SH} install.sh \
+ --docdir="${STAGEDIR}${DOCSDIR}" \
+ --mandir="${STAGEDIR}${PREFIX}/share/man" \
+ --prefix="${STAGEDIR}${PREFIX}"
+ ${RM} -r ${WRKDIR}/_extractdist
+.endfor
+
+# We autogenerate the plist file. We do that, instead of the
+# regular pkg-plist, because several libraries have a computed
+# filename based on the absolute path of the source files. As it
+# is user-specific, we cannot know their filename in advance.
+ @${RM} ${STAGEDIR}${DOCSDIR}/*.old \
+ ${STAGEDIR}${PREFIX}/lib/rustlib/components \
+ ${STAGEDIR}${PREFIX}/lib/rustlib/install.log \
+ ${STAGEDIR}${PREFIX}/lib/rustlib/manifest-* \
+ ${STAGEDIR}${PREFIX}/lib/rustlib/rust-installer-version \
+ ${STAGEDIR}${PREFIX}/lib/rustlib/uninstall.sh
+ @${FIND} ${STAGEDIR}${PREFIX}/bin ${STAGEDIR}${PREFIX}/lib \
+ ${STAGEDIR}${PREFIX}/libexec -exec ${FILE} -i {} + | \
+ ${AWK} -F: '/executable|sharedlib/ { print $$1 }' | ${XARGS} ${STRIP_CMD}
+ @${FIND} ${STAGEDIR}${PREFIX} -not -type d | \
+ ${SED} -E -e 's,^${STAGEDIR}${PREFIX}/,,' \
+ -e 's,(share/man/man[1-9]/.*\.[0-9]),\1.gz,' >> ${TMPPLIST}
+
+post-install-DOCS-on:
+# Ignore any left behind empty directories in case some docs fail
+# to build (failures are ignored due to deny-warnings=false).
+ @${FIND} ${STAGEDIR}${DOCSDIR}/html -empty -type d | \
+ ${SED} 's,^${STAGEDIR},@comment @dir ,' >> ${TMPPLIST}
+
+post-install-SOURCES-on:
+# Silence stage-qa warnings by sanitizing permissions on sources
+ @${FIND} ${STAGEDIR}${PREFIX}/lib/rustlib/src -type f -exec ${CHMOD} \
+ ${SHAREMODE} {} +
+
+# Note that make test does not work when rust is already installed.
+do-test:
+ @cd ${WRKSRC} && \
+ ${SETENV} ${TEST_ENV} ${PYTHON_CMD} x.py test --jobs=${MAKE_JOBS_NUMBER}
+
+.include <bsd.port.post.mk>
diff --git a/lang/rust188/distinfo b/lang/rust188/distinfo
new file mode 100644
index 000000000000..833397cfa5cc
--- /dev/null
+++ b/lang/rust188/distinfo
@@ -0,0 +1,51 @@
+TIMESTAMP = 1751532290
+SHA256 (rust/rustc-1.88.0-src.tar.xz) = 0c1dcbb4f762513d021e1a282c0ac58c0a423642b3a6bf581cafb5414df4193e
+SIZE (rust/rustc-1.88.0-src.tar.xz) = 283294344
+SHA256 (rust/2025-05-15/rustc-1.87.0-aarch64-unknown-freebsd.tar.xz) = 6d7a7fe409d84019a6681a7c5bbe804c2a71444dffa482c277f7303afbbac1bb
+SIZE (rust/2025-05-15/rustc-1.87.0-aarch64-unknown-freebsd.tar.xz) = 68494832
+SHA256 (rust/2025-05-15/rust-std-1.87.0-aarch64-unknown-freebsd.tar.xz) = 85fbfeab2bee94cddc8f237324de6ac0b65511b61427611bb600f589cd83269f
+SIZE (rust/2025-05-15/rust-std-1.87.0-aarch64-unknown-freebsd.tar.xz) = 25085332
+SHA256 (rust/2025-05-15/cargo-1.87.0-aarch64-unknown-freebsd.tar.xz) = f6fad164c4b3107c531036c9f4aea79f1d5b3138a9212839082068ec14e8069a
+SIZE (rust/2025-05-15/cargo-1.87.0-aarch64-unknown-freebsd.tar.xz) = 8864360
+SHA256 (rust/2025-05-15/rustc-1.87.0-x86_64-unknown-freebsd.tar.xz) = 37f413c5af70d678598844e206329f24c3047d38cc43f162a0c6db14b6a5de0c
+SIZE (rust/2025-05-15/rustc-1.87.0-x86_64-unknown-freebsd.tar.xz) = 63790236
+SHA256 (rust/2025-05-15/rust-std-1.87.0-x86_64-unknown-freebsd.tar.xz) = 037b982e3cdf2af304647a8dbaf83c310605cbd131b2fd2c436f0a4284581325
+SIZE (rust/2025-05-15/rust-std-1.87.0-x86_64-unknown-freebsd.tar.xz) = 26183840
+SHA256 (rust/2025-05-15/cargo-1.87.0-x86_64-unknown-freebsd.tar.xz) = 9cdffc039d2b449619b81dcd494c399180507faee2b7b5a18ff8fd59aa6215d3
+SIZE (rust/2025-05-15/cargo-1.87.0-x86_64-unknown-freebsd.tar.xz) = 10021928
+SHA256 (rust/2025-05-15/rustc-1.87.0-armv7-unknown-freebsd.tar.xz) = 0115525ad2c7df25ef25338a986e42a0c028ae53cf0c6dbf31a9313197c96832
+SIZE (rust/2025-05-15/rustc-1.87.0-armv7-unknown-freebsd.tar.xz) = 68671404
+SHA256 (rust/2025-05-15/rust-std-1.87.0-armv7-unknown-freebsd.tar.xz) = d37a4ede26f8334b96982321dfa94dbefe50da2cc39fae4ddbeae077e8aded1a
+SIZE (rust/2025-05-15/rust-std-1.87.0-armv7-unknown-freebsd.tar.xz) = 24274380
+SHA256 (rust/2025-05-15/cargo-1.87.0-armv7-unknown-freebsd.tar.xz) = 86a86b4661fbbd70ff9c052c4729c01132767785597599f818d6607dc6544b1c
+SIZE (rust/2025-05-15/cargo-1.87.0-armv7-unknown-freebsd.tar.xz) = 9116332
+SHA256 (rust/2025-05-15/rustc-1.87.0-i686-unknown-freebsd.tar.xz) = eda4511359f500204726fdca40bd88292c83144d2a4f566c083ac41f8121358a
+SIZE (rust/2025-05-15/rustc-1.87.0-i686-unknown-freebsd.tar.xz) = 76629816
+SHA256 (rust/2025-05-15/rust-std-1.87.0-i686-unknown-freebsd.tar.xz) = dfe0645c3913a1852561ab141f01dd90ec678080400d112361c5ade6b324fba2
+SIZE (rust/2025-05-15/rust-std-1.87.0-i686-unknown-freebsd.tar.xz) = 25965172
+SHA256 (rust/2025-05-15/cargo-1.87.0-i686-unknown-freebsd.tar.xz) = a536712e4fd1919b397a2427b5d2080f06d4e9d3f9ef96a4e0ffae8497a3cd6c
+SIZE (rust/2025-05-15/cargo-1.87.0-i686-unknown-freebsd.tar.xz) = 10599524
+SHA256 (rust/2025-05-15/rustc-1.87.0-powerpc-unknown-freebsd.tar.xz) = 55eb2f9e15ae7ef4ef8df383f578048e13d81f587ea3689bd708908bf9d4af97
+SIZE (rust/2025-05-15/rustc-1.87.0-powerpc-unknown-freebsd.tar.xz) = 69260664
+SHA256 (rust/2025-05-15/rust-std-1.87.0-powerpc-unknown-freebsd.tar.xz) = bdcaab8444e42a645815b92fe0ea9eb3718c63a42e15eba4f481a13996bb79d0
+SIZE (rust/2025-05-15/rust-std-1.87.0-powerpc-unknown-freebsd.tar.xz) = 23412632
+SHA256 (rust/2025-05-15/cargo-1.87.0-powerpc-unknown-freebsd.tar.xz) = c605ad5c7e73b38c575989796a4dca24bac92f3034703bbed5f4b5d954aa9739
+SIZE (rust/2025-05-15/cargo-1.87.0-powerpc-unknown-freebsd.tar.xz) = 9219908
+SHA256 (rust/2025-05-15/rustc-1.87.0-powerpc64-unknown-freebsd.tar.xz) = 04b22a1eacb30dc7d16d9751baca92a2cec72010c85fc4927267e3b42c0094d3
+SIZE (rust/2025-05-15/rustc-1.87.0-powerpc64-unknown-freebsd.tar.xz) = 67746940
+SHA256 (rust/2025-05-15/rust-std-1.87.0-powerpc64-unknown-freebsd.tar.xz) = a21922d860f19e0b4c642207274c588df1341c6ff622050a0653bb82be40bda6
+SIZE (rust/2025-05-15/rust-std-1.87.0-powerpc64-unknown-freebsd.tar.xz) = 23282608
+SHA256 (rust/2025-05-15/cargo-1.87.0-powerpc64-unknown-freebsd.tar.xz) = 07aca5c0e8dcc8aaea3b7b16751d6191373105d445f73e46139eb16066a146ca
+SIZE (rust/2025-05-15/cargo-1.87.0-powerpc64-unknown-freebsd.tar.xz) = 9295388
+SHA256 (rust/2025-05-15/rustc-1.87.0-powerpc64le-unknown-freebsd.tar.xz) = a99e6b9e9713c530337633a5e36d214ae687ba638b7f04c07a9cf659c245c781
+SIZE (rust/2025-05-15/rustc-1.87.0-powerpc64le-unknown-freebsd.tar.xz) = 71448916
+SHA256 (rust/2025-05-15/rust-std-1.87.0-powerpc64le-unknown-freebsd.tar.xz) = 8bd9ba04fe0cf194a1004abca0bc9420a47d0491131c4f6c0b0d8a89ad5b96ea
+SIZE (rust/2025-05-15/rust-std-1.87.0-powerpc64le-unknown-freebsd.tar.xz) = 23330908
+SHA256 (rust/2025-05-15/cargo-1.87.0-powerpc64le-unknown-freebsd.tar.xz) = 9a67120c2776d181c1f32e68f8e55a0d05543f439feeb08c1d8ce6d96a1771da
+SIZE (rust/2025-05-15/cargo-1.87.0-powerpc64le-unknown-freebsd.tar.xz) = 9794732
+SHA256 (rust/2025-05-15/rustc-1.87.0-riscv64gc-unknown-freebsd.tar.xz) = b4b5c71211e2873461b4fd3108668dfd108e220d7012ed9e2b962912d91a9f19
+SIZE (rust/2025-05-15/rustc-1.87.0-riscv64gc-unknown-freebsd.tar.xz) = 78845668
+SHA256 (rust/2025-05-15/rust-std-1.87.0-riscv64gc-unknown-freebsd.tar.xz) = e79ac7a4449f934b0b6d5699e3080aef3d2d665a128f701a786e847634dd8abf
+SIZE (rust/2025-05-15/rust-std-1.87.0-riscv64gc-unknown-freebsd.tar.xz) = 23480648
+SHA256 (rust/2025-05-15/cargo-1.87.0-riscv64gc-unknown-freebsd.tar.xz) = 316fac9c44a37d85ae18a40290f5ce3b064e5326fff3574119322ba191109205
+SIZE (rust/2025-05-15/cargo-1.87.0-riscv64gc-unknown-freebsd.tar.xz) = 11690508
diff --git a/lang/rust188/files/armv7/patch-compiler_rustc__driver__impl_src_signal__handler.rs b/lang/rust188/files/armv7/patch-compiler_rustc__driver__impl_src_signal__handler.rs
new file mode 100644
index 000000000000..07a775d26727
--- /dev/null
+++ b/lang/rust188/files/armv7/patch-compiler_rustc__driver__impl_src_signal__handler.rs
@@ -0,0 +1,28 @@
+error[E0308]: mismatched types
+ --> compiler/rustc_driver_impl/src/signal_handler.rs:43:63
+ |
+43 | let depth = libc::backtrace(STACK_TRACE.as_mut_ptr(), MAX_FRAMES as i32);
+ | --------------- ^^^^^^^^^^^^^^^^^ expected `usize`, found `i32`
+ | |
+ | arguments to this function are incorrect
+ |
+note: function defined here
+ --> /wrkdirs/usr/ports/lang/rust-bootstrap/work-armv7/rustc-1.78.0-src/vendor/libc/src/unix/bsd/freebsdlike/mod.rs:1861:12
+ |
+1861 | pub fn backtrace(addrlist: *mut *mut ::c_void, len: ::size_t) -> ::size_t;
+ | ^^^^^^^^^
+help: you can convert an `i32` to a `usize` and panic if the converted value doesn't fit
+ |
+43 | let depth = libc::backtrace(STACK_TRACE.as_mut_ptr(), (MAX_FRAMES as i32).try_into().unwrap());
+
+--- compiler/rustc_driver_impl/src/signal_handler.rs.orig 2024-05-06 16:00:17 UTC
++++ compiler/rustc_driver_impl/src/signal_handler.rs
+@@ -46,7 +46,7 @@ unsafe extern "C" fn print_stack_trace(_: libc::c_int)
+ // in incredibly undesirable and unexpected ways due to e.g. the allocator deadlocking
+ static mut STACK_TRACE: [*mut libc::c_void; MAX_FRAMES] = [ptr::null_mut(); MAX_FRAMES];
+ // Collect return addresses
+- let depth = libc::backtrace(&raw mut STACK_TRACE as _, MAX_FRAMES as i32);
++ let depth = libc::backtrace(&raw mut STACK_TRACE as _, (MAX_FRAMES as i32).try_into().unwrap());
+ if depth == 0 {
+ return;
+ }
diff --git a/lang/rust188/files/armv7/patch-compiler_rustc__target_src_spec_base_freebsd.rs b/lang/rust188/files/armv7/patch-compiler_rustc__target_src_spec_base_freebsd.rs
new file mode 100644
index 000000000000..6bbfec294be6
--- /dev/null
+++ b/lang/rust188/files/armv7/patch-compiler_rustc__target_src_spec_base_freebsd.rs
@@ -0,0 +1,11 @@
+--- compiler/rustc_target/src/spec/base/freebsd.rs.orig 2024-11-16 UTC
++++ compiler/rustc_target/src/spec/base/freebsd.rs
+@@ -9,7 +9,7 @@ pub fn opts() -> TargetOptions {
+ crt_static_respected: true,
+ position_independent_executables: true,
+ relro_level: RelroLevel::Full,
+- has_thread_local: true,
++ has_thread_local: false,
+ abi_return_struct_as_int: true,
+ default_dwarf_version: 2,
+ ..Default::default()
diff --git a/lang/rust188/files/extra-patch-compiler_rustc__target_src_spec_targets_i686__unknown__freebsd.rs b/lang/rust188/files/extra-patch-compiler_rustc__target_src_spec_targets_i686__unknown__freebsd.rs
new file mode 100644
index 000000000000..45d479133343
--- /dev/null
+++ b/lang/rust188/files/extra-patch-compiler_rustc__target_src_spec_targets_i686__unknown__freebsd.rs
@@ -0,0 +1,13 @@
+i386 should be pentiumpro (no SSE2, no ...)
+
+--- compiler/rustc_target/src/spec/targets/i686_unknown_freebsd.rs.orig 2023-12-22 11:18:00 UTC
++++ compiler/rustc_target/src/spec/targets/i686_unknown_freebsd.rs
+@@ -2,7 +2,7 @@ pub fn target() -> Target {
+
+ pub fn target() -> Target {
+ let mut base = base::freebsd::opts();
+- base.cpu = "pentium4".into();
++ base.cpu = "pentiumpro".into();
+ base.max_atomic_width = Some(64);
+ base.add_pre_link_args(LinkerFlavor::Gnu(Cc::Yes, Lld::No), &["-m32", "-Wl,-znotext"]);
+ base.stack_probes = StackProbeType::X86;
diff --git a/lang/rust188/files/patch-compiler_rustc__target_src_callconv_powerpc64.rs b/lang/rust188/files/patch-compiler_rustc__target_src_callconv_powerpc64.rs
new file mode 100644
index 000000000000..9a31c92a74a7
--- /dev/null
+++ b/lang/rust188/files/patch-compiler_rustc__target_src_callconv_powerpc64.rs
@@ -0,0 +1,11 @@
+--- compiler/rustc_target/src/callconv/powerpc64.rs.orig 2020-03-09 22:11:17 UTC
++++ compiler/rustc_target/src/callconv/powerpc64.rs
+@@ -95,7 +95,7 @@ where
+ ELFv2
+ } else {
+ match cx.data_layout().endian {
+- Endian::Big => ELFv1,
++ Endian::Big => ELFv2,
+ Endian::Little => ELFv2,
+ }
+ };
diff --git a/lang/rust188/files/patch-library_backtrace_src_backtrace_mod.rs b/lang/rust188/files/patch-library_backtrace_src_backtrace_mod.rs
new file mode 100644
index 000000000000..f4f618ac6bf1
--- /dev/null
+++ b/lang/rust188/files/patch-library_backtrace_src_backtrace_mod.rs
@@ -0,0 +1,10 @@
+--- library/backtrace/src/backtrace/mod.rs.orig 2021-11-29 19:27:28 UTC
++++ library/backtrace/src/backtrace/mod.rs
+@@ -176,6 +176,7 @@ cfg_if::cfg_if! {
+ unix,
+ not(target_os = "emscripten"),
+ not(all(target_os = "ios", target_arch = "arm")),
++ not(all(target_os = "freebsd", target_arch = "riscv64")),
+ ),
+ all(
+ target_env = "sgx",
diff --git a/lang/rust188/files/patch-src_bootstrap_src_core_build__steps_install.rs b/lang/rust188/files/patch-src_bootstrap_src_core_build__steps_install.rs
new file mode 100644
index 000000000000..6d7f6d612496
--- /dev/null
+++ b/lang/rust188/files/patch-src_bootstrap_src_core_build__steps_install.rs
@@ -0,0 +1,17 @@
+Only install docs for the host target
+
+It otherwise wastes significant time (there are a lot of individual
+files) and stages host docs, wasm docs, which unstages the host
+docs first.
+
+--- src/bootstrap/src/core/build_steps/install.rs.orig 2022-05-01 20:28:31 UTC
++++ src/bootstrap/src/core/build_steps/install.rs
+@@ -138,7 +138,7 @@ macro_rules! install {
+ }
+
+ install!((self, builder, _config),
+- Docs, path = "src/doc", _config.docs, only_hosts: false, {
++ Docs, path = "src/doc", _config.docs, only_hosts: true, {
+ let tarball = builder.ensure(dist::Docs { host: self.target }).expect("missing docs");
+ install_sh(builder, "docs", self.compiler.stage, Some(self.target), &tarball);
+ };
diff --git a/lang/rust188/files/patch-src_tools_cargo_src_cargo_sources_git_source.rs b/lang/rust188/files/patch-src_tools_cargo_src_cargo_sources_git_source.rs
new file mode 100644
index 000000000000..3add18d71b22
--- /dev/null
+++ b/lang/rust188/files/patch-src_tools_cargo_src_cargo_sources_git_source.rs
@@ -0,0 +1,36 @@
+We run cargo update during USES=cargo ports builds to update specific
+crates and patch Cargo.lock for us. For normal crates this is based
+on what's available in the vendor dir. For Git sources this pulls
+new changes from the net instead even if we replace the source with
+a static path in a patch section in the config file. Add a hack
+to skip this.
+
+This is for experimentation to solve [1]. For this to maybe be
+useful for USES=cargo, the patch-in-config feature also needs to
+be stabilized first. It will be available in Rust 1.56.
+
+[1] https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=256581
+
+--- src/tools/cargo/src/cargo/sources/git/source.rs.orig 2021-10-04 20:59:57 UTC
++++ src/tools/cargo/src/cargo/sources/git/source.rs
+@@ -205,6 +205,9 @@ impl<'cfg> Source for GitSource<'cfg> {
+ kind: QueryKind,
+ f: &mut dyn FnMut(IndexSummary),
+ ) -> Poll<CargoResult<()>> {
++ if std::env::var("CARGO_FREEBSD_PORTS_SKIP_GIT_UPDATE").is_ok() {
++ return Poll::Ready(Ok(()));
++ }
+ if let Some(src) = self.path_source.as_mut() {
+ src.query(dep, kind, f)
+ } else {
+@@ -228,6 +231,10 @@ impl<'cfg> Source for GitSource<'cfg> {
+ if self.path_source.is_some() {
+ self.mark_used(None)?;
+ return Ok(());
++ }
++
++ if std::env::var("CARGO_FREEBSD_PORTS_SKIP_GIT_UPDATE").is_ok() {
++ return Ok(());
+ }
+
+ let git_fs = self.config.git_path();
diff --git a/lang/rust188/files/patch-vendor_cc.rs b/lang/rust188/files/patch-vendor_cc.rs
new file mode 100644
index 000000000000..dbcbe5771fdd
--- /dev/null
+++ b/lang/rust188/files/patch-vendor_cc.rs
@@ -0,0 +1,75 @@
+When the compiler has "clang" in its name the cc crate will pass
+an LLVM target triple to it. Rust uses a triple that lacks the OS
+version and LLVM will default to FreeBSD 9 behavior, i.e., it will
+default to libstdc++ which is no longer available in newer releases.
+
+To avoid this issue assume we have a GNU compatible toolchain instead
+until LLVM can be updated to use libc++ by default.
+
+https://reviews.llvm.org/D77776
+
+--- vendor/cc-1.0.99/src/tool.rs.orig 2024-05-09 18:20:47 UTC
++++ vendor/cc-1.0.99/src/tool.rs
+@@ -151,9 +151,7 @@ impl Tool {
+
+ match (clang, accepts_cl_style_flags, gcc) {
+ (clang_cl, true, _) => Ok(ToolFamily::Msvc { clang_cl }),
+- (true, false, _) => Ok(ToolFamily::Clang {
+- zig_cc: is_zig_cc(path, cargo_output),
+- }),
++ (true, false, _) => Ok(ToolFamily::Gnu),
+ (false, false, true) => Ok(ToolFamily::Gnu),
+ (false, false, false) => {
+ cargo_output.print_warning(&"Compiler family detection failed since it does not define `__clang__`, `__GNUC__` or `_MSC_VER`, fallback to treating it as GNU");
+--- vendor/cc-1.2.0/src/tool.rs.orig 2024-05-09 18:20:47 UTC
++++ vendor/cc-1.2.0/src/tool.rs
+@@ -174,9 +174,7 @@ impl Tool {
+
+ match (clang, accepts_cl_style_flags, gcc, emscripten, vxworks) {
+ (clang_cl, true, _, false, false) => Ok(ToolFamily::Msvc { clang_cl }),
+- (true, _, _, _, false) | (_, _, _, true, false) => Ok(ToolFamily::Clang {
+- zig_cc: is_zig_cc(path, cargo_output),
+- }),
++ (true, _, _, _, false) | (_, _, _, true, false) => Ok(ToolFamily::Gnu),
+ (false, false, true, _, false) | (_, _, _, _, true) => Ok(ToolFamily::Gnu),
+ (false, false, false, false, false) => {
+ cargo_output.print_warning(&"Compiler family detection failed since it does not define `__clang__`, `__GNUC__`, `__EMSCRIPTEN__` or `__VXWORKS__`, also does not accept cl style flag `-?`, fallback to treating it as GNU");
+--- vendor/cc-1.2.16/src/tool.rs.orig 2024-05-09 18:20:47 UTC
++++ vendor/cc-1.2.16/src/tool.rs
+@@ -174,9 +174,7 @@ impl Tool {
+
+ match (clang, accepts_cl_style_flags, gcc, emscripten, vxworks) {
+ (clang_cl, true, _, false, false) => Ok(ToolFamily::Msvc { clang_cl }),
+- (true, _, _, _, false) | (_, _, _, true, false) => Ok(ToolFamily::Clang {
+- zig_cc: is_zig_cc(path, cargo_output),
+- }),
++ (true, _, _, _, false) | (_, _, _, true, false) => Ok(ToolFamily::Gnu),
+ (false, false, true, _, false) | (_, _, _, _, true) => Ok(ToolFamily::Gnu),
+ (false, false, false, false, false) => {
+ cargo_output.print_warning(&"Compiler family detection failed since it does not define `__clang__`, `__GNUC__`, `__EMSCRIPTEN__` or `__VXWORKS__`, also does not accept cl style flag `-?`, fallback to treating it as GNU");
+--- vendor/cc-1.2.17/src/tool.rs.orig 2024-05-09 18:20:47 UTC
++++ vendor/cc-1.2.17/src/tool.rs
+@@ -174,9 +174,7 @@ impl Tool {
+
+ match (clang, accepts_cl_style_flags, gcc, emscripten, vxworks) {
+ (clang_cl, true, _, false, false) => Ok(ToolFamily::Msvc { clang_cl }),
+- (true, _, _, _, false) | (_, _, _, true, false) => Ok(ToolFamily::Clang {
+- zig_cc: is_zig_cc(path, cargo_output),
+- }),
++ (true, _, _, _, false) | (_, _, _, true, false) => Ok(ToolFamily::Gnu),
+ (false, false, true, _, false) | (_, _, _, _, true) => Ok(ToolFamily::Gnu),
+ (false, false, false, false, false) => {
+ cargo_output.print_warning(&"Compiler family detection failed since it does not define `__clang__`, `__GNUC__`, `__EMSCRIPTEN__` or `__VXWORKS__`, also does not accept cl style flag `-?`, fallback to treating it as GNU");
+--- vendor/cc-1.2.21/src/tool.rs.orig 2024-05-09 18:20:47 UTC
++++ vendor/cc-1.2.21/src/tool.rs
+@@ -174,9 +174,7 @@ impl Tool {
+
+ match (clang, accepts_cl_style_flags, gcc, emscripten, vxworks) {
+ (clang_cl, true, _, false, false) => Ok(ToolFamily::Msvc { clang_cl }),
+- (true, _, _, _, false) | (_, _, _, true, false) => Ok(ToolFamily::Clang {
+- zig_cc: is_zig_cc(path, cargo_output),
+- }),
++ (true, _, _, _, false) | (_, _, _, true, false) => Ok(ToolFamily::Gnu),
+ (false, false, true, _, false) | (_, _, _, _, true) => Ok(ToolFamily::Gnu),
+ (false, false, false, false, false) => {
+ cargo_output.print_warning(&"Compiler family detection failed since it does not define `__clang__`, `__GNUC__`, `__EMSCRIPTEN__` or `__VXWORKS__`, also does not accept cl style flag `-?`, fallback to treating it as GNU");
diff --git a/lang/rust188/files/patch-vendor_git2-0.19.0_src_lib.rs b/lang/rust188/files/patch-vendor_git2-0.19.0_src_lib.rs
new file mode 100644
index 000000000000..1676f0c23188
--- /dev/null
+++ b/lang/rust188/files/patch-vendor_git2-0.19.0_src_lib.rs
@@ -0,0 +1,18 @@
+--- vendor/git2-0.20.0/src/lib.rs.orig 2025-02-21 20:02:44 UTC
++++ vendor/git2-0.20.0/src/lib.rs
+@@ -759,6 +759,7 @@ fn init() {
+ unix,
+ not(target_os = "macos"),
+ not(target_os = "ios"),
++ not(target_os = "freebsd"),
+ feature = "https"
+ ))]
+ fn openssl_env_init() {
+@@ -880,6 +881,7 @@ fn openssl_env_init() {
+ windows,
+ target_os = "macos",
+ target_os = "ios",
++ target_os = "freebsd",
+ not(feature = "https")
+ ))]
+ fn openssl_env_init() {}
diff --git a/lang/rust188/files/patch-vendor_libc-0.2.155 b/lang/rust188/files/patch-vendor_libc-0.2.155
new file mode 100644
index 000000000000..69c2a03f7062
--- /dev/null
+++ b/lang/rust188/files/patch-vendor_libc-0.2.155
@@ -0,0 +1,745 @@
+https://github.com/rust-lang/rust/issues/130677
+
+From 9049542fabce9eea669d1fe3d4d973931c9d7d23 Mon Sep 17 00:00:00 2001
+From: Alan Somers <asomers@gmail.com>
+Date: Mon, 23 Sep 2024 10:22:32 -0600
+Subject: [PATCH] Fix the definition of ino_t on 32-bit FreeBSD 12+
+
+Commit 7437d0a6f1 erroneously defined it as "ulong" instead of u64.
+Nobody noticed the mistake, probably because it was only tested on
+64-bit architectures, where those are equivalent. But it's a problem
+now, after #3723 , which switched the standard library to a FreeBSD 12
+ABI.
+
+Issue https://github.com/rust-lang/rust/issues/130677
+---
+ src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs | 2 +-
+ src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs | 2 +-
+ src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs | 2 +-
+ src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs | 2 +-
+ src/unix/bsd/freebsdlike/freebsd/freebsd15/mod.rs | 2 +-
+ 5 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs
+index de34069eabdf2..68a8364194607 100644
+--- vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs
++++ vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs
+@@ -4,7 +4,7 @@
+ pub type nlink_t = u16;
+ // Type of `dev_t` changed from `u32` to `u64` in FreeBSD 12:
+ pub type dev_t = u32;
+-// Type of `ino_t` changed from `unsigned int` to `unsigned long` in FreeBSD 12:
++// Type of `ino_t` changed from `__uint32_t` to `__uint64_t` in FreeBSD 12:
+ pub type ino_t = u32;
+
+ s! {
+diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs
+index 10fcaa03a4ef6..197400ffb4e28 100644
+--- vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs
++++ vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs
+@@ -2,7 +2,7 @@
+
+ pub type nlink_t = u64;
+ pub type dev_t = u64;
+-pub type ino_t = ::c_ulong;
++pub type ino_t = u64;
+ pub type shmatt_t = ::c_uint;
+
+ s! {
+diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs
+index ec6bce2a03091..d3a77d03c48d0 100644
+--- vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs
++++ vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs
+@@ -2,7 +2,7 @@
+
+ pub type nlink_t = u64;
+ pub type dev_t = u64;
+-pub type ino_t = ::c_ulong;
++pub type ino_t = u64;
+ pub type shmatt_t = ::c_uint;
+ pub type kpaddr_t = u64;
+ pub type kssize_t = i64;
+diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs
+index 160a4baae481b..9d65317d29cb4 100644
+--- vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs
++++ vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs
+@@ -2,7 +2,7 @@
+
+ pub type nlink_t = u64;
+ pub type dev_t = u64;
+-pub type ino_t = ::c_ulong;
++pub type ino_t = u64;
+ pub type shmatt_t = ::c_uint;
+ pub type kpaddr_t = u64;
+ pub type kssize_t = i64;
+diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd15/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd15/mod.rs
+index d73215a68ec33..f76208400f324 100644
+--- vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd15/mod.rs
++++ vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd15/mod.rs
+@@ -2,7 +2,7 @@
+
+ pub type nlink_t = u64;
+ pub type dev_t = u64;
+-pub type ino_t = ::c_ulong;
++pub type ino_t = u64;
+ pub type shmatt_t = ::c_uint;
+ pub type kpaddr_t = u64;
+ pub type kssize_t = i64;
+
+
+From 8aca9c0126f3aa5a7dce1ad7fc016b4a0d6af70a Mon Sep 17 00:00:00 2001
+From: Alan Somers <asomers@gmail.com>
+Date: Mon, 23 Sep 2024 10:44:13 -0600
+Subject: [PATCH] Fix the definition of "struct stat" on 32-bit FreeBSD 12+
+
+The original definitions were never correct. But nobody noticed because
+we don't do CI on 32-bit FreeBSD. The problem is apparent now due to
+ #3723 , which caused the nightly toolchain to switch to a FreeBSD 12
+ABI.
+
+Fixes https://github.com/rust-lang/rust/issues/130677
+---
+ .../{freebsd12/b64.rs => freebsd11/b32.rs} | 13 +++---
+ .../bsd/freebsdlike/freebsd/freebsd11/mod.rs | 7 +--
+ .../bsd/freebsdlike/freebsd/freebsd12/mod.rs | 43 +++++++++++++++----
+ .../bsd/freebsdlike/freebsd/freebsd13/b64.rs | 34 ---------------
+ .../bsd/freebsdlike/freebsd/freebsd13/mod.rs | 43 +++++++++++++++----
+ .../bsd/freebsdlike/freebsd/freebsd14/b64.rs | 34 ---------------
+ .../bsd/freebsdlike/freebsd/freebsd14/mod.rs | 43 +++++++++++++++----
+ .../bsd/freebsdlike/freebsd/freebsd15/b64.rs | 34 ---------------
+ .../bsd/freebsdlike/freebsd/freebsd15/mod.rs | 43 +++++++++++++++----
+ src/unix/bsd/freebsdlike/freebsd/x86.rs | 25 -----------
+ 10 files changed, 146 insertions(+), 173 deletions(-)
+ rename src/unix/bsd/freebsdlike/freebsd/{freebsd12/b64.rs => freebsd11/b32.rs} (89%)
+ delete mode 100644 src/unix/bsd/freebsdlike/freebsd/freebsd13/b64.rs
+ delete mode 100644 src/unix/bsd/freebsdlike/freebsd/freebsd14/b64.rs
+ delete mode 100644 src/unix/bsd/freebsdlike/freebsd/freebsd15/b64.rs
+
+diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd12/b64.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd11/b32.rs
+similarity index 89%
+rename from src/unix/bsd/freebsdlike/freebsd/freebsd12/b64.rs
+rename to src/unix/bsd/freebsdlike/freebsd/freebsd11/b32.rs
+
+--- vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd11/b32.rs.orig 2024-10-24 17:21:07.154172000 +0200
++++ vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd11/b32.rs 2024-10-24 17:21:02.029962000 +0200
+@@ -0,0 +1,34 @@
++#[repr(C)]
++#[cfg_attr(feature = "extra_traits", derive(Debug, Eq, Hash, PartialEq))]
++pub struct stat {
++ pub st_dev: ::dev_t,
++ pub st_ino: ::ino_t,
++ pub st_nlink: ::nlink_t,
++ pub st_mode: ::mode_t,
++ st_padding0: i16,
++ pub st_uid: ::uid_t,
++ pub st_gid: ::gid_t,
++ st_padding1: i32,
++ pub st_rdev: ::dev_t,
++ pub st_atime: ::time_t,
++ pub st_atime_nsec: ::c_long,
++ pub st_mtime: ::time_t,
++ pub st_mtime_nsec: ::c_long,
++ pub st_ctime: ::time_t,
++ pub st_ctime_nsec: ::c_long,
++ pub st_birthtime: ::time_t,
++ pub st_birthtime_nsec: ::c_long,
++ pub st_size: ::off_t,
++ pub st_blocks: ::blkcnt_t,
++ pub st_blksize: ::blksize_t,
++ pub st_flags: ::fflags_t,
++ pub st_gen: u64,
++ pub st_spare: [u64; 10],
++}
++
++impl ::Copy for ::stat {}
++impl ::Clone for ::stat {
++ fn clone(&self) -> ::stat {
++ *self
++ }
++}
+
+
+index 80c6fa1684530..5c1156581fd61 100644
+--- vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd12/b64.rs
++++ vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd11/b32.rs
+@@ -3,12 +3,10 @@
+ pub struct stat {
+ pub st_dev: ::dev_t,
+ pub st_ino: ::ino_t,
+- pub st_nlink: ::nlink_t,
+ pub st_mode: ::mode_t,
+- st_padding0: i16,
++ pub st_nlink: ::nlink_t,
+ pub st_uid: ::uid_t,
+ pub st_gid: ::gid_t,
+- st_padding1: i32,
+ pub st_rdev: ::dev_t,
+ pub st_atime: ::time_t,
+ pub st_atime_nsec: ::c_long,
+@@ -16,14 +14,15 @@ pub struct stat {
+ pub st_mtime_nsec: ::c_long,
+ pub st_ctime: ::time_t,
+ pub st_ctime_nsec: ::c_long,
+- pub st_birthtime: ::time_t,
+- pub st_birthtime_nsec: ::c_long,
+ pub st_size: ::off_t,
+ pub st_blocks: ::blkcnt_t,
+ pub st_blksize: ::blksize_t,
+ pub st_flags: ::fflags_t,
+- pub st_gen: u64,
+- pub st_spare: [u64; 10],
++ pub st_gen: u32,
++ pub st_lspare: i32,
++ pub st_birthtime: ::time_t,
++ pub st_birthtime_nsec: ::c_long,
++ __unused: [u8; 8],
+ }
+
+ impl ::Copy for ::stat {}
+diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs
+index 68a8364194607..e416ebf745841 100644
+--- vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs
++++ vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs
+@@ -479,10 +479,11 @@ extern "C" {
+ }
+
+ cfg_if! {
+- if #[cfg(any(target_arch = "x86_64",
+- target_arch = "aarch64",
+- target_arch = "riscv64"))] {
++ if #[cfg(target_pointer_width = "64")] {
+ mod b64;
+ pub use self::b64::*;
++ } else {
++ mod b32;
++ pub use self::b32::*;
+ }
+ }
+diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs
+index 197400ffb4e28..c4431a6458e8f 100644
+--- vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs
++++ vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs
+@@ -218,6 +218,40 @@ s! {
+ /// kthread flag.
+ pub ki_tdflags: ::c_long,
+ }
++
++ pub struct stat {
++ pub st_dev: ::dev_t,
++ pub st_ino: ::ino_t,
++ pub st_nlink: ::nlink_t,
++ pub st_mode: ::mode_t,
++ st_padding0: i16,
++ pub st_uid: ::uid_t,
++ pub st_gid: ::gid_t,
++ st_padding1: i32,
++ pub st_rdev: ::dev_t,
++ #[cfg(target_arch = "x86")]
++ st_atim_ext: i32,
++ pub st_atime: ::time_t,
++ pub st_atime_nsec: ::c_long,
++ #[cfg(target_arch = "x86")]
++ st_mtim_ext: i32,
++ pub st_mtime: ::time_t,
++ pub st_mtime_nsec: ::c_long,
++ #[cfg(target_arch = "x86")]
++ st_ctim_ext: i32,
++ pub st_ctime: ::time_t,
++ pub st_ctime_nsec: ::c_long,
++ #[cfg(target_arch = "x86")]
++ st_btim_ext: i32,
++ pub st_birthtime: ::time_t,
++ pub st_birthtime_nsec: ::c_long,
++ pub st_size: ::off_t,
++ pub st_blocks: ::blkcnt_t,
++ pub st_blksize: ::blksize_t,
++ pub st_flags: ::fflags_t,
++ pub st_gen: u64,
++ pub st_spare: [u64; 10],
++ }
+ }
+
+ s_no_extra_traits! {
+@@ -488,15 +522,6 @@ extern "C" {
+ pub fn basename(path: *mut ::c_char) -> *mut ::c_char;
+ }
+
+-cfg_if! {
+- if #[cfg(any(target_arch = "x86_64",
+- target_arch = "aarch64",
+- target_arch = "riscv64"))] {
+- mod b64;
+- pub use self::b64::*;
+- }
+-}
+-
+ cfg_if! {
+ if #[cfg(target_arch = "x86_64")] {
+ mod x86_64;
+diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd13/b64.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd13/b64.rs
+deleted file mode 100644
+index 80c6fa1684530..0000000000000
+--- vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd13/b64.rs
++++ /dev/null
+@@ -1,34 +0,0 @@
+-#[repr(C)]
+-#[cfg_attr(feature = "extra_traits", derive(Debug, Eq, Hash, PartialEq))]
+-pub struct stat {
+- pub st_dev: ::dev_t,
+- pub st_ino: ::ino_t,
+- pub st_nlink: ::nlink_t,
+- pub st_mode: ::mode_t,
+- st_padding0: i16,
+- pub st_uid: ::uid_t,
+- pub st_gid: ::gid_t,
+- st_padding1: i32,
+- pub st_rdev: ::dev_t,
+- pub st_atime: ::time_t,
+- pub st_atime_nsec: ::c_long,
+- pub st_mtime: ::time_t,
+- pub st_mtime_nsec: ::c_long,
+- pub st_ctime: ::time_t,
+- pub st_ctime_nsec: ::c_long,
+- pub st_birthtime: ::time_t,
+- pub st_birthtime_nsec: ::c_long,
+- pub st_size: ::off_t,
+- pub st_blocks: ::blkcnt_t,
+- pub st_blksize: ::blksize_t,
+- pub st_flags: ::fflags_t,
+- pub st_gen: u64,
+- pub st_spare: [u64; 10],
+-}
+-
+-impl ::Copy for ::stat {}
+-impl ::Clone for ::stat {
+- fn clone(&self) -> ::stat {
+- *self
+- }
+-}
+diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs
+index d3a77d03c48d0..118404e8b089b 100644
+--- vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs
++++ vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs
+@@ -228,6 +228,40 @@ s! {
+ /// kthread flag.
+ pub ki_tdflags: ::c_long,
+ }
++
++ pub struct stat {
++ pub st_dev: ::dev_t,
++ pub st_ino: ::ino_t,
++ pub st_nlink: ::nlink_t,
++ pub st_mode: ::mode_t,
++ st_padding0: i16,
++ pub st_uid: ::uid_t,
++ pub st_gid: ::gid_t,
++ st_padding1: i32,
++ pub st_rdev: ::dev_t,
++ #[cfg(target_arch = "x86")]
++ st_atim_ext: i32,
++ pub st_atime: ::time_t,
++ pub st_atime_nsec: ::c_long,
++ #[cfg(target_arch = "x86")]
++ st_mtim_ext: i32,
++ pub st_mtime: ::time_t,
++ pub st_mtime_nsec: ::c_long,
++ #[cfg(target_arch = "x86")]
++ st_ctim_ext: i32,
++ pub st_ctime: ::time_t,
++ pub st_ctime_nsec: ::c_long,
++ #[cfg(target_arch = "x86")]
++ st_btim_ext: i32,
++ pub st_birthtime: ::time_t,
++ pub st_birthtime_nsec: ::c_long,
++ pub st_size: ::off_t,
++ pub st_blocks: ::blkcnt_t,
++ pub st_blksize: ::blksize_t,
++ pub st_flags: ::fflags_t,
++ pub st_gen: u64,
++ pub st_spare: [u64; 10],
++ }
+ }
+
+ s_no_extra_traits! {
+@@ -529,15 +563,6 @@ extern "C" {
+ pub fn kvm_kerndisp(kd: *mut ::kvm_t) -> ::kssize_t;
+ }
+
+-cfg_if! {
+- if #[cfg(any(target_arch = "x86_64",
+- target_arch = "aarch64",
+- target_arch = "riscv64"))] {
+- mod b64;
+- pub use self::b64::*;
+- }
+-}
+-
+ cfg_if! {
+ if #[cfg(target_arch = "x86_64")] {
+ mod x86_64;
+diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd14/b64.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd14/b64.rs
+deleted file mode 100644
+index 80c6fa1684530..0000000000000
+--- vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd14/b64.rs
++++ /dev/null
+@@ -1,34 +0,0 @@
+-#[repr(C)]
+-#[cfg_attr(feature = "extra_traits", derive(Debug, Eq, Hash, PartialEq))]
+-pub struct stat {
+- pub st_dev: ::dev_t,
+- pub st_ino: ::ino_t,
+- pub st_nlink: ::nlink_t,
+- pub st_mode: ::mode_t,
+- st_padding0: i16,
+- pub st_uid: ::uid_t,
+- pub st_gid: ::gid_t,
+- st_padding1: i32,
+- pub st_rdev: ::dev_t,
+- pub st_atime: ::time_t,
+- pub st_atime_nsec: ::c_long,
+- pub st_mtime: ::time_t,
+- pub st_mtime_nsec: ::c_long,
+- pub st_ctime: ::time_t,
+- pub st_ctime_nsec: ::c_long,
+- pub st_birthtime: ::time_t,
+- pub st_birthtime_nsec: ::c_long,
+- pub st_size: ::off_t,
+- pub st_blocks: ::blkcnt_t,
+- pub st_blksize: ::blksize_t,
+- pub st_flags: ::fflags_t,
+- pub st_gen: u64,
+- pub st_spare: [u64; 10],
+-}
+-
+-impl ::Copy for ::stat {}
+-impl ::Clone for ::stat {
+- fn clone(&self) -> ::stat {
+- *self
+- }
+-}
+diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs
+index 9d65317d29cb4..e624dd7201b0a 100644
+--- vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs
++++ vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs
+@@ -228,6 +228,40 @@ s! {
+ /// kthread flag.
+ pub ki_tdflags: ::c_long,
+ }
++
++ pub struct stat {
++ pub st_dev: ::dev_t,
++ pub st_ino: ::ino_t,
++ pub st_nlink: ::nlink_t,
++ pub st_mode: ::mode_t,
++ st_padding0: i16,
++ pub st_uid: ::uid_t,
++ pub st_gid: ::gid_t,
++ st_padding1: i32,
++ pub st_rdev: ::dev_t,
++ #[cfg(target_arch = "x86")]
++ st_atim_ext: i32,
++ pub st_atime: ::time_t,
++ pub st_atime_nsec: ::c_long,
++ #[cfg(target_arch = "x86")]
++ st_mtim_ext: i32,
++ pub st_mtime: ::time_t,
++ pub st_mtime_nsec: ::c_long,
++ #[cfg(target_arch = "x86")]
++ st_ctim_ext: i32,
++ pub st_ctime: ::time_t,
++ pub st_ctime_nsec: ::c_long,
++ #[cfg(target_arch = "x86")]
++ st_btim_ext: i32,
++ pub st_birthtime: ::time_t,
++ pub st_birthtime_nsec: ::c_long,
++ pub st_size: ::off_t,
++ pub st_blocks: ::blkcnt_t,
++ pub st_blksize: ::blksize_t,
++ pub st_flags: ::fflags_t,
++ pub st_gen: u64,
++ pub st_spare: [u64; 10],
++ }
+ }
+
+ s_no_extra_traits! {
+@@ -529,15 +563,6 @@ extern "C" {
+ pub fn kvm_kerndisp(kd: *mut ::kvm_t) -> ::kssize_t;
+ }
+
+-cfg_if! {
+- if #[cfg(any(target_arch = "x86_64",
+- target_arch = "aarch64",
+- target_arch = "riscv64"))] {
+- mod b64;
+- pub use self::b64::*;
+- }
+-}
+-
+ cfg_if! {
+ if #[cfg(target_arch = "x86_64")] {
+ mod x86_64;
+diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd15/b64.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd15/b64.rs
+deleted file mode 100644
+index 80c6fa1684530..0000000000000
+--- vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd15/b64.rs
++++ /dev/null
+@@ -1,34 +0,0 @@
+-#[repr(C)]
+-#[cfg_attr(feature = "extra_traits", derive(Debug, Eq, Hash, PartialEq))]
+-pub struct stat {
+- pub st_dev: ::dev_t,
+- pub st_ino: ::ino_t,
+- pub st_nlink: ::nlink_t,
+- pub st_mode: ::mode_t,
+- st_padding0: i16,
+- pub st_uid: ::uid_t,
+- pub st_gid: ::gid_t,
+- st_padding1: i32,
+- pub st_rdev: ::dev_t,
+- pub st_atime: ::time_t,
+- pub st_atime_nsec: ::c_long,
+- pub st_mtime: ::time_t,
+- pub st_mtime_nsec: ::c_long,
+- pub st_ctime: ::time_t,
+- pub st_ctime_nsec: ::c_long,
+- pub st_birthtime: ::time_t,
+- pub st_birthtime_nsec: ::c_long,
+- pub st_size: ::off_t,
+- pub st_blocks: ::blkcnt_t,
+- pub st_blksize: ::blksize_t,
+- pub st_flags: ::fflags_t,
+- pub st_gen: u64,
+- pub st_spare: [u64; 10],
+-}
+-
+-impl ::Copy for ::stat {}
+-impl ::Clone for ::stat {
+- fn clone(&self) -> ::stat {
+- *self
+- }
+-}
+diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd15/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd15/mod.rs
+index f76208400f324..a299af7d5d53e 100644
+--- vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd15/mod.rs
++++ vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/freebsd15/mod.rs
+@@ -228,6 +228,40 @@ s! {
+ /// kthread flag.
+ pub ki_tdflags: ::c_long,
+ }
++
++ pub struct stat {
++ pub st_dev: ::dev_t,
++ pub st_ino: ::ino_t,
++ pub st_nlink: ::nlink_t,
++ pub st_mode: ::mode_t,
++ st_padding0: i16,
++ pub st_uid: ::uid_t,
++ pub st_gid: ::gid_t,
++ st_padding1: i32,
++ pub st_rdev: ::dev_t,
++ #[cfg(target_arch = "x86")]
++ st_atim_ext: i32,
++ pub st_atime: ::time_t,
++ pub st_atime_nsec: ::c_long,
++ #[cfg(target_arch = "x86")]
++ st_mtim_ext: i32,
++ pub st_mtime: ::time_t,
++ pub st_mtime_nsec: ::c_long,
++ #[cfg(target_arch = "x86")]
++ st_ctim_ext: i32,
++ pub st_ctime: ::time_t,
++ pub st_ctime_nsec: ::c_long,
++ #[cfg(target_arch = "x86")]
++ st_btim_ext: i32,
++ pub st_birthtime: ::time_t,
++ pub st_birthtime_nsec: ::c_long,
++ pub st_size: ::off_t,
++ pub st_blocks: ::blkcnt_t,
++ pub st_blksize: ::blksize_t,
++ pub st_flags: ::fflags_t,
++ pub st_gen: u64,
++ pub st_spare: [u64; 10],
++ }
+ }
+
+ s_no_extra_traits! {
+@@ -529,15 +563,6 @@ extern "C" {
+ pub fn kvm_kerndisp(kd: *mut ::kvm_t) -> ::kssize_t;
+ }
+
+-cfg_if! {
+- if #[cfg(any(target_arch = "x86_64",
+- target_arch = "aarch64",
+- target_arch = "riscv64"))] {
+- mod b64;
+- pub use self::b64::*;
+- }
+-}
+-
+ cfg_if! {
+ if #[cfg(target_arch = "x86_64")] {
+ mod x86_64;
+diff --git a/src/unix/bsd/freebsdlike/freebsd/x86.rs b/src/unix/bsd/freebsdlike/freebsd/x86.rs
+index c3c576ed66681..31a660e7d0a22 100644
+--- vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/x86.rs
++++ vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/x86.rs
+@@ -42,31 +42,6 @@ s_no_extra_traits! {
+ }
+
+ s! {
+- pub struct stat {
+- pub st_dev: ::dev_t,
+- pub st_ino: ::ino_t,
+- pub st_mode: ::mode_t,
+- pub st_nlink: ::nlink_t,
+- pub st_uid: ::uid_t,
+- pub st_gid: ::gid_t,
+- pub st_rdev: ::dev_t,
+- pub st_atime: ::time_t,
+- pub st_atime_nsec: ::c_long,
+- pub st_mtime: ::time_t,
+- pub st_mtime_nsec: ::c_long,
+- pub st_ctime: ::time_t,
+- pub st_ctime_nsec: ::c_long,
+- pub st_size: ::off_t,
+- pub st_blocks: ::blkcnt_t,
+- pub st_blksize: ::blksize_t,
+- pub st_flags: ::fflags_t,
+- pub st_gen: u32,
+- pub st_lspare: i32,
+- pub st_birthtime: ::time_t,
+- pub st_birthtime_nsec: ::c_long,
+- __unused: [u8; 8],
+- }
+-
+ pub struct ucontext_t {
+ pub uc_sigmask: ::sigset_t,
+ pub uc_mcontext: ::mcontext_t,
+
+
+From f381e010b2439579c9f548ef86fb06409c2c55d2 Mon Sep 17 00:00:00 2001
+From: Alan Somers <asomers@gmail.com>
+Date: Mon, 23 Sep 2024 16:03:48 -0600
+Subject: [PATCH] fixup: fix build on powerpc, powerpc64, and arm
+
+---
+ src/unix/bsd/freebsdlike/freebsd/arm.rs | 30 -------------------
+ src/unix/bsd/freebsdlike/freebsd/powerpc.rs | 26 ----------------
+ src/unix/bsd/freebsdlike/freebsd/powerpc64.rs | 26 ----------------
+ 3 files changed, 82 deletions(-)
+
+diff --git a/src/unix/bsd/freebsdlike/freebsd/arm.rs b/src/unix/bsd/freebsdlike/freebsd/arm.rs
+index 300b3dd45ca9d..8ff500c65981c 100644
+--- vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/arm.rs
++++ vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/arm.rs
+@@ -6,36 +6,6 @@ pub type time_t = i64;
+ pub type suseconds_t = i32;
+ pub type register_t = i32;
+
+-s! {
+- pub struct stat {
+- pub st_dev: ::dev_t,
+- pub st_ino: ::ino_t,
+- pub st_mode: ::mode_t,
+- pub st_nlink: ::nlink_t,
+- pub st_uid: ::uid_t,
+- pub st_gid: ::gid_t,
+- pub st_rdev: ::dev_t,
+- pub st_atime: ::time_t,
+- pub st_atime_nsec: ::c_long,
+- pub st_atime_pad: ::c_long,
+- pub st_mtime: ::time_t,
+- pub st_mtime_nsec: ::c_long,
+- pub st_mtime_pad: ::c_long,
+- pub st_ctime: ::time_t,
+- pub st_ctime_nsec: ::c_long,
+- pub st_ctime_pad: ::c_long,
+- pub st_size: ::off_t,
+- pub st_blocks: ::blkcnt_t,
+- pub st_blksize: ::blksize_t,
+- pub st_flags: ::fflags_t,
+- pub st_gen: u32,
+- pub st_lspare: i32,
+- pub st_birthtime: ::time_t,
+- pub st_birthtime_nsec: ::c_long,
+- pub st_birthtime_pad: ::c_long,
+- }
+-}
+-
+ // should be pub(crate), but that requires Rust 1.18.0
+ cfg_if! {
+ if #[cfg(libc_const_size_of)] {
+diff --git a/src/unix/bsd/freebsdlike/freebsd/powerpc.rs b/src/unix/bsd/freebsdlike/freebsd/powerpc.rs
+index a0120c337e0ad..f84062ba34b93 100644
+--- vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/powerpc.rs
++++ vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/powerpc.rs
+@@ -6,32 +6,6 @@ pub type time_t = i64;
+ pub type suseconds_t = i32;
+ pub type register_t = i32;
+
+-s! {
+- pub struct stat {
+- pub st_dev: ::dev_t,
+- pub st_ino: ::ino_t,
+- pub st_mode: ::mode_t,
+- pub st_nlink: ::nlink_t,
+- pub st_uid: ::uid_t,
+- pub st_gid: ::gid_t,
+- pub st_rdev: ::dev_t,
+- pub st_atime: ::time_t,
+- pub st_atime_nsec: ::c_long,
+- pub st_mtime: ::time_t,
+- pub st_mtime_nsec: ::c_long,
+- pub st_ctime: ::time_t,
+- pub st_ctime_nsec: ::c_long,
+- pub st_size: ::off_t,
+- pub st_blocks: ::blkcnt_t,
+- pub st_blksize: ::blksize_t,
+- pub st_flags: ::fflags_t,
+- pub st_gen: u32,
+- pub st_lspare: i32,
+- pub st_birthtime: ::time_t,
+- pub st_birthtime_nsec: ::c_long,
+- }
+-}
+-
+ // should be pub(crate), but that requires Rust 1.18.0
+ cfg_if! {
+ if #[cfg(libc_const_size_of)] {
+diff --git a/src/unix/bsd/freebsdlike/freebsd/powerpc64.rs b/src/unix/bsd/freebsdlike/freebsd/powerpc64.rs
+index 7f5b9752264e3..69cf4c5fc88c7 100644
+--- vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/powerpc64.rs
++++ vendor/libc-0.2.155/src/unix/bsd/freebsdlike/freebsd/powerpc64.rs
+@@ -6,32 +6,6 @@ pub type time_t = i64;
+ pub type suseconds_t = i64;
+ pub type register_t = i64;
+
+-s! {
+- pub struct stat {
+- pub st_dev: ::dev_t,
+- pub st_ino: ::ino_t,
+- pub st_mode: ::mode_t,
+- pub st_nlink: ::nlink_t,
+- pub st_uid: ::uid_t,
+- pub st_gid: ::gid_t,
+- pub st_rdev: ::dev_t,
+- pub st_atime: ::time_t,
+- pub st_atime_nsec: ::c_long,
+- pub st_mtime: ::time_t,
+- pub st_mtime_nsec: ::c_long,
+- pub st_ctime: ::time_t,
+- pub st_ctime_nsec: ::c_long,
+- pub st_size: ::off_t,
+- pub st_blocks: ::blkcnt_t,
+- pub st_blksize: ::blksize_t,
+- pub st_flags: ::fflags_t,
+- pub st_gen: u32,
+- pub st_lspare: i32,
+- pub st_birthtime: ::time_t,
+- pub st_birthtime_nsec: ::c_long,
+- }
+-}
+-
+ // should be pub(crate), but that requires Rust 1.18.0
+ cfg_if! {
+ if #[cfg(libc_const_size_of)] {
diff --git a/lang/rust188/files/patch-vendor_openssl_crypto_threads__pthread.c b/lang/rust188/files/patch-vendor_openssl_crypto_threads__pthread.c
new file mode 100644
index 000000000000..87c398a91538
--- /dev/null
+++ b/lang/rust188/files/patch-vendor_openssl_crypto_threads__pthread.c
@@ -0,0 +1,27 @@
+/usr/ports/security/openssl34/files/patch-crypto_threads__pthread.c
++ fix dup IMPL_fallback_atomic_exchange_n (this code was removed in
+https://github.com/openssl/openssl/commit/65787e2dc219685c30539c6f60eb6b64b890bf6f)
+
+--- vendor/openssl-src-300.4.2+3.4.1/openssl/crypto/threads_pthread.c.orig 2025-05-09 22:37:37.000000000 +0200
++++ vendor/openssl-src-300.4.2+3.4.1/openssl/crypto/threads_pthread.c 2025-05-21 14:44:18.563852000 +0200
+@@ -50,6 +50,10 @@ __tsan_mutex_post_lock((x), 0, 0)
+ # define BROKEN_CLANG_ATOMICS
+ #endif
+
++#if defined(__FreeBSD__) && (defined(__i386__) || (defined(__powerpc__) && defined(__ILP32__)))
++#define BROKEN_CLANG_ATOMICS
++#endif
++
+ #if defined(OPENSSL_THREADS) && !defined(CRYPTO_TDEBUG) && !defined(OPENSSL_SYS_WINDOWS)
+
+ # if defined(OPENSSL_SYS_UNIX)
+@@ -210,8 +214,7 @@ IMPL_fallback_atomic_exchange_n(prcu_cb_item)
+ pthread_mutex_unlock(&atomic_sim_lock); \
+ return ret; \
+ }
+-
+-IMPL_fallback_atomic_exchange_n(uint64_t)
++IMPL_fallback_atomic_compare_exchange_n(uint64_t)
+
+ # define ATOMIC_COMPARE_EXCHANGE_N(t, p, e, d, s, f) fallback_atomic_compare_exchange_n_##t(p, e, d, s, f)
+
diff --git a/lang/rust188/files/riscv64/patch-vendor_rustc__ap__rustc__target_src_spec_riscv64gc__unknown__freebsd.rs b/lang/rust188/files/riscv64/patch-vendor_rustc__ap__rustc__target_src_spec_riscv64gc__unknown__freebsd.rs
new file mode 100644
index 000000000000..5faf5e2aacf8
--- /dev/null
+++ b/lang/rust188/files/riscv64/patch-vendor_rustc__ap__rustc__target_src_spec_riscv64gc__unknown__freebsd.rs
@@ -0,0 +1,21 @@
+--- vendor/rustc-ap-rustc_target/src/spec/riscv64gc_unknown_freebsd.rs.orig 2021-11-04 11:22:10 UTC
++++ vendor/rustc-ap-rustc_target/src/spec/riscv64gc_unknown_freebsd.rs
+@@ -0,0 +1,18 @@
++use crate::spec::{CodeModel, Target, TargetOptions};
++
++pub fn target() -> Target {
++ Target {
++ llvm_target: "riscv64-unknown-freebsd".to_string(),
++ pointer_width: 64,
++ data_layout: "e-m:e-p:64:64-i64:64-i128:128-n64-S128".to_string(),
++ arch: "riscv64".to_string(),
++ options: TargetOptions {
++ code_model: Some(CodeModel::Medium),
++ cpu: "generic-rv64".to_string(),
++ features: "+m,+a,+f,+d,+c".to_string(),
++ llvm_abiname: "lp64d".to_string(),
++ max_atomic_width: Some(64),
++ ..super::freebsd_base::opts()
++ },
++ }
++}
diff --git a/lang/rust188/pkg-descr b/lang/rust188/pkg-descr
new file mode 100644
index 000000000000..828174df19f7
--- /dev/null
+++ b/lang/rust188/pkg-descr
@@ -0,0 +1,12 @@
+Rust is an open-source systems programming language that runs blazingly
+fast, prevents almost all crashes, and eliminates data races.
+Some of its features:
+
+ - Algebraic data types, type inference
+ - Pattern matching and closures
+ - Concurrency without data races
+ - Guaranteed memory safety
+ - Optional garbage collection
+ - Zero-cost abstractions
+ - Minimal runtime
+ - Efficient C bindings
diff --git a/lang/rust188/update.sh b/lang/rust188/update.sh
new file mode 100644
index 000000000000..f169891c53d7
--- /dev/null
+++ b/lang/rust188/update.sh
@@ -0,0 +1,35 @@
+#!/bin/sh
+# Requires: pkg install portfmt yq
+# Run in lang/rust
+set -eu
+
+fetch -qo /tmp/channel-rust-stable.toml https://dev-static.rust-lang.org/dist/channel-rust-stable.toml
+version=$(</tmp/channel-rust-stable.toml tomlq -r '.pkg.rustc.version | split(" ")[0]')
+new_commit=$(</tmp/channel-rust-stable.toml tomlq -r '.pkg.rustc.git_commit_hash')
+rm /tmp/channel-rust-stable.toml
+
+fetch -qo /tmp/stage0 https://raw.githubusercontent.com/rust-lang/rust/${new_commit}/src/stage0
+BOOTSTRAPS_DATE=$(awk -F "=" /^compiler_date/'{print $2}' /tmp/stage0)
+RUST_BOOTSTRAP_VERSION=$(awk -F "=" /^compiler_version/'{print $2}' /tmp/stage0)
+echo "BOOTSTRAPS_DATE=${BOOTSTRAPS_DATE}" | portedit merge -i .
+echo "RUST_BOOTSTRAP_VERSION=${RUST_BOOTSTRAP_VERSION}" | portedit merge -i .
+
+cat <<EOF | sed -i '' -E -f - ../../Mk/Uses/cargo.mk ../../Mk/bsd.gecko.mk
+1,/\\$\\{RUST_DEFAULT\\}>=/ {
+ s,(\\$\\{RUST_DEFAULT\\}>=).*(:lang/\\$\\{RUST_DEFAULT\\}),\\1${version}\\2,
+}
+EOF
+
+portedit set-version -i "${version}" .
+portedit set-version -i "${version}" ../rust-bootstrap
+
+make makesum
+make -C ../rust-bootstrap makesum
+
+echo "lang/rust: Update to ${version}
+
+https://blog.rust-lang.org/FIXME/Rust-${version}.html
+
+PR: FIXME
+Exp-run by: antoine
+Differential Revision: FIXME" >rust.msg
diff --git a/lang/rustpython/Makefile b/lang/rustpython/Makefile
index c5caba7f86f0..5122795b8cb2 100644
--- a/lang/rustpython/Makefile
+++ b/lang/rustpython/Makefile
@@ -1,6 +1,6 @@
PORTNAME= rustpython
DISTVERSION= 0.4.0
-PORTREVISION= 4
+PORTREVISION= 6
CATEGORIES= lang
PATCH_SITES= https://github.com/${GH_ACCOUNT}/${GH_PROJECT}/commit/