Merge updates from master

This commit is contained in:
Repository mirror & CI
2024-12-02 09:05:33 +00:00
19 changed files with 1695 additions and 118 deletions

View File

@@ -1,3 +1,37 @@
DIST rust-1.54.0-aarch64-unknown-linux-gnu.tar.xz 231424908 BLAKE2B 6c403acd4b6b27208f95eb3fbfee5c8e7a63f3314f29ea7498dc0a4ae720d77c249c9ebc02a95d50278ac7f07b8d943b1c9c5e1561858f72ad1d8cdb29b779cc SHA512 3e6f638a35ed391f5393be7c92ef2560ed6bb26af1ea6ebf784bfadd3e153d1effd88fe49128eb98f5ec2ced7a65f3f4a596db71b9c4eca90429e50a8f168d11
DIST rust-1.54.0-aarch64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B f655d6f53a580041642871abd10993b771835770bebb6de1ff1dcc9b250ae52f862212feece533a9932c6efb0c3d02769cbbb03114d941c7e8d3117e1e23ce75 SHA512 d9508ae502e26694f83c04bbea3f95aeeee7990e703c8bb8be9ba098e0df86a39272022e1a94f8852ed23b8378ecb338dbd87ef226da444e29ccf7fb1f44e5f6
DIST rust-1.54.0-aarch64-unknown-linux-musl.tar.xz 231629132 BLAKE2B 339e341eadd2cb0c763eb00b5a6750a1082da26bcae1b3c06459c99c64b4babf4aec5173222187eed7271e3c5847da47b49e6ab75674161b6e28297bb62ec781 SHA512 f0e20c079e4351fac5e8d635a37502e833a56fd216fd015117fb12be8b72e022bce946ec8e1612b320530dd186b1702b4384e74d64a479099db4562bcfc68453
DIST rust-1.54.0-aarch64-unknown-linux-musl.tar.xz.asc 801 BLAKE2B 5aa9872ad96668d392c1aecf7f54c171e7bef6e17f65efc6c3fff7eee8dd7fc3eacee03e6544cdc27c5d34ea946d1a61aca6298c91812e9f35c391211b563506 SHA512 07694566ae33492df31083887fe9b7d43fb9f7c469ccd2fe9c77d3c8d3bd6b58ddc5e185462e982f78d63db39703a60986acaad51f953ea7434bcd9432a96946
DIST rust-1.54.0-arm-unknown-linux-gnueabi.tar.xz 209386412 BLAKE2B f33b802bdfa3cbafdd86eff2d43e0af99e54777b1a26f1106016a8bdc4c06b5cdac8810ac68785f6da4cbe6a6d7fa74c13a855a5ef9c5703b16a2100ef60f2df SHA512 5f68879abd5da5d37b555b0b6ca5850d68663878bd23b5f6a31efd0a9dd43809c4d413154f8f343688eca23a96adbd08fcb3132831b848690261964d6a24e160
DIST rust-1.54.0-arm-unknown-linux-gnueabi.tar.xz.asc 801 BLAKE2B 7b90cdac8d068bcd565b42bed2289deff1490ae51cb65bbf2f0c308f6187e4fcfd98898e8e590ade2c2af7f10080821a417445e5c3046b4e39e0099c32e62624 SHA512 35bc49bc4140207af140e561023826e565751e47bbee6c1fd374bd7a992b6499051f4d84ca12e17101ea552bcafd6b96b111af888cd891f6dc18fceda11c83c8
DIST rust-1.54.0-arm-unknown-linux-gnueabihf.tar.xz 209102396 BLAKE2B 1190da5c96336a121b4d4f92dba36c52c5f2bb0b26fdd92ca92ae4954256aaa375ea174c9669a285365ff02d4f3cadbf2d2ac92b847b00e10606e3832629a864 SHA512 ca38f1948b02008c1e9355c12f6d1fd3721ae9c06e686a09a7eea48670d889879ac0f81c462d21f467d600fc0972b920219e7378f7ba438e756cbc9b419a5f43
DIST rust-1.54.0-arm-unknown-linux-gnueabihf.tar.xz.asc 801 BLAKE2B 9f01100804d72dc7afb7660277daa5a0f0cd96e478a7dc5a242360d07b25a22c5769727a67a46d63f3283e22e89ef5a6f6f6c48ac46f01075e2d908bf681be5d SHA512 316662676cf52a2e58c6cbeb46152da3919e54b0385c33a8fd1d46c25e71604f7803174278f80d4cb72cae54829ba00e3c4ba58001b43cc1148347f1788fdb02
DIST rust-1.54.0-armv7-unknown-linux-gnueabihf.tar.xz 217891252 BLAKE2B 657f366344fe911c5d93585ee0b1063815fb158069136c742512f21d3b47c64e42555d4e52ba305e5ddebbb1fb37fa8ba8ebc36f9a9e5fe5fe7ffdb31472e012 SHA512 0f4f4e075299cd369b4b53a425e9b290cd9cedca6a88878c6a4ae0487fe976b15bea0c8b92e7e376f77dc370552d95d738e99b7fa184a8e2c0e5ab94d65e7595
DIST rust-1.54.0-armv7-unknown-linux-gnueabihf.tar.xz.asc 801 BLAKE2B c23e12a70df5e58dfca0e9c66432844424dc166cbc7dfeef4f692ba076ba687fd871bbbb5d37ed82ed5662ada170520c56c426f89be4fa07a0c88cfb773fe91b SHA512 14a5674ed5862b6cd3ddcd3efff4ab1298285bc0d5604a869e74e055a319401b9bf48a60d44583ddeb2230dcfab2e5584e5149947fbc40d97c112a6dae51745a
DIST rust-1.54.0-i686-unknown-linux-gnu.tar.xz 226774108 BLAKE2B c56fb6ef24cda0c89b76403a38893a32382b09be8a8d08b066fbd437ac0a73a7d00af175c59bb7af6e6f5d8a74324e10afed2ea35d830f9f96f5ceaa4ec345d6 SHA512 15bc0c31a306aa1e2b16fec7f97963ca291b2632664c49add4281d3244054b2e2f51b0ade86a9d63db87124071fa25bd7d5e662acf4c30cf3267eb56da4a1f1f
DIST rust-1.54.0-i686-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 4d53a7760abd54973ef8ce95c10671db41136d7031a25ea0c0362feb65ce5755223d60a01c3418b69b902feebf75651bc4379ea66f98c862a573a8774a5e99c2 SHA512 e3dcef4d17bea43a1b0858da52e899d7a14db8ee7b9e3f506e9297dd0aba910d3808c25163a3f95698f32d25a3f128bb1759a808c84b8c75404300f60198fbd5
DIST rust-1.54.0-mips-unknown-linux-gnu.tar.xz 147938432 BLAKE2B 38e7b768773cef9e3cfe707a716ba59ed67e2bbefe59db5531b06489131df219eba6a46eeb5c06bfd6d943fa4453f3d6f4b869725108fd2e069ab6ebbfa3d08b SHA512 aab52c26bd80b058772e0cd815bbd5ca0ab0fb10fa0ba43c07fc6151ec6e99d7ab48613a3e5cbdcb8f00b83108a716bd8b9f5d6f2c8518499b2482aa4d423a91
DIST rust-1.54.0-mips-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 05f4c8ee719ff857aa0a53661f6483c450a561905150217f886c25cf5c3e8dc3a36ebe2da38c75f843e3de4274d92c0c274906af40a94a6ecb122a9d38703e7f SHA512 6ba884e92b0ead2049f639405308ab6363268a8b42f827c9ecbfc5b16a0755bd1d345d989243f28662ce8c53611fb5984104001b3edec7b2dc22cc914970a7e5
DIST rust-1.54.0-mips64-unknown-linux-gnuabi64.tar.xz 157458264 BLAKE2B cd68d03e058922a020665a35765913f3405b0c0d5c7e252da1dc63b4b6af27d31fa5ce7eee562635241baea422c84d7e2a9539a79e6ae152794aeb9636e97a46 SHA512 74a85d869141fc941bf4f9821945ce0efd0169415fc209cc2288015d4e358716380cf91e41342a231cd34ce88321f24c4d20fffec3be702498cec3846a14298b
DIST rust-1.54.0-mips64-unknown-linux-gnuabi64.tar.xz.asc 801 BLAKE2B aaca9b8e5007e0efc459a04ab95e6a3d76ab6cf177964acd4bb148f09ffac4f9c9bfba4ca4834e1ccc9505c259511f45ed1830285307388d79ac66b8dcddbbc5 SHA512 8d5d2a1200af550cdbc85b2dc847e524ada7f16fbc5f4c29d0e9e4e8c0067e04daaa273a99c14e6ad1a7d622e4f9d3da720b41f4ee75ff50cf2153cc190642e5
DIST rust-1.54.0-mips64el-unknown-linux-gnuabi64.tar.xz 159901680 BLAKE2B d6ef3d514dce43878cb1f305ac0be9d2558c709adb61668ac8685964b663b08cd81793df893d1b5cd7edbf539823a9976dce75ac5bb1bf340246d33e03a0e7fe SHA512 9470fd938cb6b4c0ddb728428fa7d1d86b4bb2ca43563fbee9b21b82bc76f3350620b36a988ac0d9e274dd987c91ff0dc0a99ec5085cc8999257da8813889445
DIST rust-1.54.0-mips64el-unknown-linux-gnuabi64.tar.xz.asc 801 BLAKE2B 618073a30586c640ca3df15b377c16ae95e6599de68107f260b728dfeef4d95c13a07923550722e61b1afeffb89e8adc01047de32e60c3b40ee7ab4e2700e0b0 SHA512 29e35ba575441dc441529f154496e99e9db83ac6f7c19129085091f33cf5c7882235f60f27d9922d9873a1476cecbe70e7694cf6b865315c022758ba80959738
DIST rust-1.54.0-mipsel-unknown-linux-gnu.tar.xz 154497208 BLAKE2B 40ab905d6088cb2e4364e2e6a0e4fb257365af05302abab81604d78b62bc255377ff7088884d9222f2997312befbf8efcd7f1821fd4bcf2dbae149c70cfa1224 SHA512 c61abff1df5e787d330abe4b3cbe8c3e67f02974dba3eb0fa4cbfeb0a74a956abb48199301e7f9af915b9be5a0d6ff7771198414458da52af18e9a74cab52620
DIST rust-1.54.0-mipsel-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B f525e1849a0c753a077ffadb7dd0b1d67b5fb369c061ec895878fbbd8d377572db2b5bb1fb5e1a24bcef61eb3f80b6f6bbb3d93b611e6b00e535b2e516ae0681 SHA512 d55ac3c329b20bd4e7f095ee2c710bd5c5be825ae517561bf670b96626427db39d362be553c3b92c90710ab8d9b677d2367aa85a397a4568c1146e0dff10cda6
DIST rust-1.54.0-powerpc-unknown-linux-gnu.tar.xz 164089736 BLAKE2B a4e3c0b6f78444a2f48e842468e828e517d32fb1b62b2ad0c0000bee97ac5730977c8dacdc614ea2182fabf25e23804efed53b493ec611dd5d4d5d8ec237feb4 SHA512 ae8ba40e5843bd3ecc25156521f7e7cc7c869457151896371fd5faa3bc565ff9a6b7d437e3587dd9f1e87e9fa19463259ec18fe03badbd89372c11ddc7b577ee
DIST rust-1.54.0-powerpc-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B ac59496efd850b618b4013d0cbe09172f5828e60ae07afd0b233749ff3c1699e524e3a4fa93fea906f79dbc44f1d94ad52bf3952c2a4014d9d2653702d86349f SHA512 daf5da203c079cfca365990b0111d9df16defb49e1bc9c24407e423873992a9920d88fc2a097e1df8d2b03e05d1118bb3786e908d4f46fb282357c62d24df88c
DIST rust-1.54.0-powerpc64-unknown-linux-gnu.tar.xz 178088044 BLAKE2B e059572d2044aa05683d29370c395b714f25d0c7ec820bcb133d29667e9066b82e62e11000a3183a66cbeb87625517284d12263c2ea0eec60dc537ba3c78e6b9 SHA512 543dcaf3bab3343e796b3535a3b4e12d77227006e64e91b885f599fd94ffc9c1cc8d8c5ce3b788df0399c79dc785ff7c8dc375ae20d3b4156d1b16a7dec5a371
DIST rust-1.54.0-powerpc64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 663a3f7027c61f4a7e38bd0a72ffa55b9de2673cc0d48e94bb964e950b8a356b01011e94904efb3525c0ee2cd57e82ce8af50d2360a7e5b200b6eefeb4580927 SHA512 f0d03c2c3da60731cc05b9370df53766d6fc14ea3d49edbe0a7e809e35560a7cf06c4d8291896a604fdaddb665d117c53ec93671a0402dc093442ed3cbf4c596
DIST rust-1.54.0-powerpc64le-unknown-linux-gnu.tar.xz 187058704 BLAKE2B bd90f56b50024cfce5bbfb5e84d28c06687b6a5524b1964064b1e53111b49805815d3dec47fd035f9e1d78c426d0b0689ac7c8baa1044cfbb9343da452d77694 SHA512 9d13d53a1ef106b190161096122da1bc9090dc495604c8ddbb9d6b02323e6b7c9b8bec82dfe33ae6cf1820e986811a701f7a4d4c3eb7c297c777fe3563b8e9ee
DIST rust-1.54.0-powerpc64le-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 3cfdbc8958b7025b6b3b76a6aef603820418c3aa2ee63c0a257dcd36004ca90203abb1b60a921310a9aea10545e32a11291a9d9baf3caf3e2b5a27ab4724bd9f SHA512 3ece925a1e3797cc6bf6ce44a3ca4768f57bc9bc3bb1261d6a82905907c635bb20ea7f5eeed062ff02582b035a22508990bfe83640006fe77fde8e699d5d55cc
DIST rust-1.54.0-riscv64gc-unknown-linux-gnu.tar.xz 180939260 BLAKE2B 856a431c22f286d42069dcd34101cc6e539004024619ba061a39d3bcc48834ce0002e2499466f976b81a7aa7d47f1c3249f2b21c69233df4d7d0940d80f5761c SHA512 5af3bbd68706bff03d51daf76551830810a8e225e8f0a9a394fd29a4fe9f0389bed3e0d94333483e089b4cce375c0320cc6ae360ddc4f08fca0ae80e671ba2a4
DIST rust-1.54.0-riscv64gc-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 366ef8f21801cc510b22217c4d974343ccb9f941faf08fba584b3f068a9d3128e3a15f5dc1400ed3749166afb622bb3aaafcf15381a0f2a5b60767db6ca9d3f2 SHA512 fdafdedb8f667124cb71eb44a6a61b1cef1df0baab385d2f5c674d900cd24139e555aa30df99f9d496b5fb30031bb86a43b118fafa083a24e2be10126e68df67
DIST rust-1.54.0-s390x-unknown-linux-gnu.tar.xz 186478732 BLAKE2B 3d3ef6c37e0c24a4622814c51bfe1a5093f261e393a3dbb9c5eda023f8d0a63ebf0080cba5d43c8448b79503aecc62f04ccc18f040562db57dcd2ff1cb243124 SHA512 5033e3f61af7de144c3ed441f9fdf9f0c00a837d018ec3c0d4ef67f032e7f808d2dcc586e7b85b733ff9bc2196c2e05fcd104b3daa85698cc0e4e9ab69b870bd
DIST rust-1.54.0-s390x-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B b375bf65d9bef4a54792f93ac52fa408c85407d6aa646b64ee85d9220fdd9d7dda76c1e118def5262f5ab8fd9b7637c5d681d37c50d9e917eb6ba0d5b25e42fc SHA512 3bd16cdc61033d6e38de595ac145f0e7cebf3c3455491325ba89de8067cf6096beac7f00b3e4dc942cf4bf0f5ab59f6233b5d24f0ebf97ab3562260182baae4c
DIST rust-1.54.0-x86_64-unknown-linux-gnu.tar.xz 136593024 BLAKE2B 2f10b636982f335a200149d11c6cf212adb3e27f7d3eda9069881565a07f29aa6f2010ca786c3746190a3bbb8b8d79d531bee906e21e21f2c132f6c1e4198e17 SHA512 d2aad46556b164dac54be76a2459789fc686781b157f0c7d647464db3b03cbb902c8c4de5c6ef2e0811a94bdbba2973c93698c4f3a7c6ba294c0e652994e3fdc
DIST rust-1.54.0-x86_64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B cdfb03b6a75cd86e565b0b502cbd72636b67a92f9039fb148ca19fbef3d0775616ff03420cebeffe36db3d1d1db75e7e77ac473841a399dc2a218df09598b2eb SHA512 144ec35e82194d16cbf4e56c34dc25aa83d8ec8021052cc471ec85f169b74bd9394ec52c21c898d3ac0b966fd7463cd567d729eec9152f5fb8307c87eb02877d
DIST rust-1.54.0-x86_64-unknown-linux-musl.tar.xz 267840732 BLAKE2B 32e50467c4ee88cc502ea7e3e8cda9cbd89bcb6b7fac0c84b1509abf0a5c551d43f6522d148f54e4af65e0738b1dd13bfebaaba7e863909047fd53cac03bbbac SHA512 131f4743e5990c3e1ec2b7a0d1eb107a0e5264e6ce387cf4aa6db9a1693d0fe4a42de5722072708d72d580500d566f7772513974ce5589ea07997374fbdefdb9
DIST rust-1.54.0-x86_64-unknown-linux-musl.tar.xz.asc 801 BLAKE2B 8b9194ce2b172cdd1fecbe064ddaa0047d30ddeafeaa903637e65775b139207c47da7eb17475ed17b1792b7c872ae71058c1f2cb7d59bd2d42a78cc590f9ec03 SHA512 2aaa42cab5272b6ee2ad0d3cd67b7dc648af68c5b9b5fd8f816688c0ebcc2cb0a24ac8c2a23dda5f17f7ba04f544625b3b03b22882c9122852bba680d8155afc
DIST rust-1.71.1-aarch64-unknown-linux-gnu.tar.xz 209839296 BLAKE2B da65e966a6bd8c6a8a13e5ab747da2a8d9b55f90fc20c1bd041ccc1a2f4e2d11d50d2ed9cc7f3a470e7f886ec8b891ef98ea1295491414d5afeae7f83fa3a555 SHA512 a2ea1383a6ea965e4b0c3a7c648bb357fb531a6984418756abcff3c526ccd9221a28aeedd11b65180fd166575e07a00151460dbc15e3b132a0bcac643911d242
DIST rust-1.71.1-aarch64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 52d1fbdba32db7ac2578615fd10a3db1da84441274bb190624e517aec67279c7330f7c6b7fa0835d8e1cd8f578d34952813228a6a221e41c4193e9a079cc6fb6 SHA512 63cbbdd9a73f0223444565b60f59765a734633ef8e93843639969b96fb67550b85fe58079d486a927174f95619f0d6fdfe3f3b84d871f776bc48986be7965238
DIST rust-1.71.1-aarch64-unknown-linux-musl.tar.xz 193170880 BLAKE2B 26384119108f4503d35f79fc5401c46e1eee326eca4dc6cc282949d2f195928fda5d3bf56c0509b04fdaa3e7c3c47f4ba44b2b82a60b02f7bc520360b0433efe SHA512 3e79692cd4dba512516eb48970dc9711448c33e1d7a5ebe7c5fadaed7f053ae9c1a8e6efcd1713f87dd84107a37b0fb21b1246e0d5c3e0dab677e5c7ed210825

View File

@@ -0,0 +1,188 @@
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit prefix rust-toolchain toolchain-funcs verify-sig multilib multilib-minimal
MY_P="rust-${PV}"
DESCRIPTION="Systems programming language from Mozilla"
HOMEPAGE="https://www.rust-lang.org/"
SRC_URI="$(rust_all_arch_uris ${MY_P})"
LICENSE="|| ( MIT Apache-2.0 ) BSD-1 BSD-2 BSD-4 UoI-NCSA"
SLOT="${PV}"
KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~riscv ~x86"
IUSE="big-endian clippy cpu_flags_x86_sse2 doc prefix rustfmt"
RDEPEND=">=app-eselect/eselect-rust-20190311"
BDEPEND="
prefix? ( dev-util/patchelf )
verify-sig? ( sec-keys/openpgp-keys-rust )
"
REQUIRED_USE="x86? ( cpu_flags_x86_sse2 )"
QA_PREBUILT="
opt/${P}/bin/.*
opt/${P}/lib/.*.so
opt/${P}/libexec/.*
opt/${P}/lib/rustlib/.*/bin/.*
opt/${P}/lib/rustlib/.*/lib/.*
"
# An rmeta file is custom binary format that contains the metadata for the crate.
# rmeta files do not support linking, since they do not contain compiled object files.
# so we can safely silence the warning for this QA check.
QA_EXECSTACK="opt/${P}/lib/rustlib/*/lib*.rlib:lib.rmeta"
VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/rust.asc
pkg_pretend() {
if [[ "$(tc-is-softfloat)" != "no" ]] && [[ ${CHOST} == armv7* ]]; then
die "${CHOST} is not supported by upstream Rust. You must use a hard float version."
fi
}
src_unpack() {
verify-sig_src_unpack
mv "${WORKDIR}/${MY_P}-$(rust_abi)" "${S}" || die
}
patchelf_for_bin() {
local filetype=$(file -b ${1})
if [[ ${filetype} == *ELF*interpreter* ]]; then
einfo "${1}'s interpreter changed"
patchelf ${1} --set-interpreter ${2} || die
elif [[ ${filetype} == *script* ]]; then
hprefixify ${1}
fi
}
multilib_src_install() {
if multilib_is_native_abi; then
# start native abi install
pushd "${S}" >/dev/null || die
local analysis std
analysis="$(grep 'analysis' ./components)"
std="$(grep 'std' ./components)"
local components="rustc,cargo,${std},rls-preview,${analysis}"
use doc && components="${components},rust-docs"
use clippy && components="${components},clippy-preview"
use rustfmt && components="${components},rustfmt-preview"
./install.sh \
--components="${components}" \
--disable-verify \
--prefix="${ED}/opt/${P}" \
--mandir="${ED}/opt/${P}/man" \
--disable-ldconfig \
|| die
if use prefix; then
local interpreter=$(patchelf --print-interpreter "${EPREFIX}/bin/bash")
ebegin "Changing interpreter to ${interpreter} for Gentoo prefix at ${ED}/opt/${P}/bin"
find "${ED}/opt/${P}/bin" -type f -print0 | \
while IFS= read -r -d '' filename; do
patchelf_for_bin ${filename} ${interpreter} \; || die
done
eend $?
fi
local symlinks=(
cargo
rls
rust-gdb
rust-gdbgui
rust-lldb
rustc
rustdoc
)
use clippy && symlinks+=( clippy-driver cargo-clippy )
use rustfmt && symlinks+=( rustfmt cargo-fmt )
einfo "installing eselect-rust symlinks and paths"
local i
for i in "${symlinks[@]}"; do
# we need realpath on /usr/bin/* symlink return version-appended binary path.
# so /usr/bin/rustc should point to /opt/rust-bin-<ver>/bin/rustc-<ver>
local ver_i="${i}-bin-${PV}"
ln -v "${ED}/opt/${P}/bin/${i}" "${ED}/opt/${P}/bin/${ver_i}"
dosym "../../opt/${P}/bin/${ver_i}" "/usr/bin/${ver_i}"
done
# symlinks to switch components to active rust in eselect
dosym "../../../opt/${P}/lib" "/usr/lib/rust/lib-bin-${PV}"
dosym "../../../opt/${P}/man" "/usr/lib/rust/man-bin-${PV}"
dosym "../../opt/${P}/lib/rustlib" "/usr/lib/rustlib-bin-${PV}"
dosym "../../../opt/${P}/share/doc/rust" "/usr/share/doc/${P}"
# musl logic can be improved a bit, but fine as is for now
cat <<-_EOF_ > "${T}/50${P}"
LDPATH="${EPREFIX}/usr/lib/rust/lib"
MANPATH="${EPREFIX}/usr/lib/rust/man"
$(use amd64 && usex elibc_musl 'CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_RUSTFLAGS="-C target-feature=-crt-static"' '')
$(use arm64 && usex elibc_musl 'CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUSTFLAGS="-C target-feature=-crt-static"' '')
_EOF_
doenvd "${T}/50${P}"
# note: eselect-rust adds EROOT to all paths below
cat <<-_EOF_ > "${T}/provider-${P}"
/usr/bin/cargo
/usr/bin/rustdoc
/usr/bin/rust-gdb
/usr/bin/rust-gdbgui
/usr/bin/rust-lldb
/usr/lib/rustlib
/usr/lib/rust/lib
/usr/lib/rust/man
/usr/share/doc/rust
/usr/bin/rls
_EOF_
if use clippy; then
echo /usr/bin/clippy-driver >> "${T}/provider-${P}"
echo /usr/bin/cargo-clippy >> "${T}/provider-${P}"
fi
if use rustfmt; then
echo /usr/bin/rustfmt >> "${T}/provider-${P}"
echo /usr/bin/cargo-fmt >> "${T}/provider-${P}"
fi
insinto /etc/env.d/rust
doins "${T}/provider-${P}"
popd >/dev/null || die
#end native abi install
else
local rust_target
rust_target="$(rust_abi $(get_abi_CHOST ${v##*.}))"
dodir "/opt/${P}/lib/rustlib"
cp -vr "${WORKDIR}/rust-${PV}-${rust_target}/rust-std-${rust_target}/lib/rustlib/${rust_target}"\
"${ED}/opt/${P}/lib/rustlib" || die
fi
# BUG: installs x86_64 binary on other arches
rm -f "${ED}/opt/${P}/lib/rustlib/"*/bin/rust-llvm-dwp || die
}
pkg_postinst() {
eselect rust update
elog "Rust installs a helper script for calling GDB now,"
elog "for your convenience it is installed under /usr/bin/rust-gdb-bin-${PV}."
if has_version app-editors/emacs; then
elog "install app-emacs/rust-mode to get emacs support for rust."
fi
if has_version app-editors/gvim || has_version app-editors/vim; then
elog "install app-vim/rust-vim to get vim support for rust."
fi
}
pkg_postrm() {
eselect rust cleanup
}

View File

@@ -1,3 +1,5 @@
DIST openssl-0.10.35.crate 204462 BLAKE2B fb58a3be883bac3d5aa3e971172a281a80e9e100c51585db3d2828ecfd89d0b3b19edfacba2039056fa3aefb79717e03cd2ecbf932afb1acac2e74e1c29d3551 SHA512 5ebe4626a894ccc6e5c159cef72357654aa1a20dcc863fdab495f10a574b49b0b9d4e85a069b8b9297544ea0d09fd88a976396c3a8e8faaee9d01d79d943126f
DIST openssl-sys-0.9.65.crate 54405 BLAKE2B f0e09accf076653f172199d36bfe0b7547a738f962e9ee8c15563c4d27587aade3e44830022a1787dfc932ae1f162336e3a110a34b1459656631c7ea50e58b75 SHA512 4c14ff5258a35b86e35d352c5702c90e1f70954c8f33d17160694b63305057b97da3ac6846d3e8f8e7293c40f15b76effd1e34fad4be613b8d815b90148406f7
DIST rust-1.70.0-aarch64-unknown-linux-gnu.tar.xz 212261108 BLAKE2B 56e15d01ea0e84c51ca3d4fc292c124536472e9c3e6d9ae13ab524e520865117b36621eca5072b961831ee6ad3077abd84afa9e092483095234b7ab2ddcae769 SHA512 d64eb19417a03452f591bb779042b2b3ff16d2ac48a9a74d293bc7265980280801784f92cdd0ae0dbc21743433388149557da7642871c72f3bb4b3061cf7eeba
DIST rust-1.70.0-aarch64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 435383da02632d404ce95ecfc0b0690f18447f22cd82e67cd08e6e8aab072539b33a49c2712bdc35f34a811f8e66bda6bcf9505b41dcdaf4cc66e358df9d7f02 SHA512 634c35b52d85c524a954d0663b6f1507c5aec826768c1a51394bf72bae585afadd3d3af985a9d165a65d178e04813fd592a78d058ed1400bb0fc43b0a1614a27
DIST rust-1.70.0-aarch64-unknown-linux-musl.tar.xz 195626092 BLAKE2B df5ca11b64513c86dbcab93bbc5eee37a1f2c6307ca479c07ef62d683ec1b1f56bd596284b11695d80c8483ba5ffaacb0bf060d7618f5e79f3957bfe8bae042b SHA512 5bcc47e2e791603b419c2d1f3503a60cc9a4a7351d3e8a61e6f3823c53195f58795cfcdc56c0c2011ae40a21ec7819d7dad32f5f9981f3d39e5f28ba85083d07
@@ -228,6 +230,8 @@ DIST rust-1.81.0-x86_64-unknown-linux-gnu.tar.xz 170439044 BLAKE2B 5377d8972a729
DIST rust-1.81.0-x86_64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 9f39dedf33efd6fe4d66e10e3cb064851b1637a50e97d3bc19c48bf989e1e94d694df493eb437d2c2e58989933dbb05a7d25c276b26331475f44ea2d9d52909c SHA512 37908051e511cf223e92379ecf577ee1644d6aa13583b622b78d445367ca9e8a4253d77a5237831eeef15607c71e99ae3ef42451803466fad303bb523e13475c
DIST rust-1.81.0-x86_64-unknown-linux-musl.tar.xz 251142276 BLAKE2B da30177914f8574ff896b64a60279913d48330818c6e96e10d3180964ed542697f29c6ca7e7c81fb1b814e1d9ceb8bbf6e119596b59564a64a08e30ce72ce4b8 SHA512 3b772269362556bebbff72a13abf05f745fd88128367ab1e5879ed3c0f3f5a1f7370faec1b2bce521a38662d58d94a8e4eb6b085c8e0f166979af490492e17c8
DIST rust-1.81.0-x86_64-unknown-linux-musl.tar.xz.asc 801 BLAKE2B e13afc29a5a06bd9453db22a6bc6894d8fb671ad9e3989852c9348ded5a22c908ec58ddc20b0f2d94e6bd291eb0e9fec09277f95ba9528bb7d333748ebb79959 SHA512 da0689376503be19af92d88e2731296c6a5286cec60d42dcebd4738b23e3e1a1bb303982e2a9e6bc14a8f7a8872321b9e9c25915cde43fa1772ddfdb149997c7
DIST rustc-1.54.0-src.tar.xz 116286856 BLAKE2B 5ac47822646a0b6205f09282168b4d4ddcace9f6bc8f242c890327ca4074626f129514f8bcae5c5556015745f718990cce490658076f5cd3526623439540416b SHA512 5162f85b43ca2c5af93fdbfb2597d75df8a838f7fcc025a5298499ce1043db50f1ea2fbba753e47ce5daad3d80d4b612acf6527ef902c34117763e687fdbbcfa
DIST rustc-1.54.0-src.tar.xz.asc 801 BLAKE2B 5ee9166eaa00e4ffec10fb82b18946d403bc2030c6e04de6449311cbccc2ef1b017044f451a1c19be3a0a9640c4a9a9e4bd22d28e2115509f333ae38eb25e9d4 SHA512 5ad91f43515de14114964db0348cd28c08adc6dc935f110bf339053414b8eab8a40f1074ceffa44ed2df61254f8368d867479400618c44efaa0333642ab49d07
DIST rustc-1.71.1-src.tar.xz 151983068 BLAKE2B 3dfdbc246feb84a79ae94c2de978c5585ee06cf6b683d2245869b62e28f7c79f89cc589f5431537713bf088236a0b824acefc1b68e418e9eb72e1eea98054e3f SHA512 fd0e5a16bdbeb539184513583089e55f681cb772810df357b6b1464853f7022ac02edab3dd155b2262ed0047e2a25dea3808dd078dcdfce9d399384465009db4
DIST rustc-1.71.1-src.tar.xz.asc 801 BLAKE2B a88c073a70552d73e2d7695eceabdaa478f34501b7271fabf7f4a09f3efa545181f34353e45776b05918e6aeba88adb02f9731454f7085a7abf1602fc6589983 SHA512 9dd0406cf22f1daa7fcfd015fc1c6f8d36586aa99bf14c1491ee464c1f892ab759feb83e8b55b64713170fb777fdbe038fb5fd01a59c911b6599223baaba0677
DIST rustc-1.74.1-src.tar.xz 155968724 BLAKE2B e05f2379ac94b286f85791a138e1928e5b5b5a7749f0981d82c40c2a12860f55bf96bb2f0e924e35a0f8b2447b13052d38adea909aaa3199105787bb5a4861b3 SHA512 14c7e7ed2f38ab60299d8c7d41d78f042b6b57ef822d577b5138e60bdde31cf141eccd4332a25bc5da3d58eb5313d63c1448b5dfe9e11b8055bb8ea133a9038d

View File

@@ -0,0 +1,75 @@
From 1879d1d1a284bf51c752e47db284ce22701ed5d0 Mon Sep 17 00:00:00 2001
From: Samuel Holland <samuel@sholland.org>
Date: Sun, 16 Sep 2018 16:38:48 +0000
Subject: [PATCH 12/15] Ignore broken and non-applicable tests
c-link-to-rust-va-list-fn: unstable feature, broken on aarch64, #56475
env-funky-keys: can't handle LD_PRELOAD (e.g. sandbox)
long-linker-command-lines: takes >10 minutes to run (but still passes)
simd-intrinsic-generic-bitmask.rs: broken on BE, #59356
sparc-struct-abi: no sparc target
sysroot-crates-are-unstable: can't run rustc without RPATH
---
src/test/codegen/sparc-struct-abi.rs | 1 +
src/test/run-make-fulldeps/c-link-to-rust-va-list-fn/Makefile | 2 ++
src/test/run-make-fulldeps/long-linker-command-lines/Makefile | 2 ++
src/test/run-make-fulldeps/sysroot-crates-are-unstable/Makefile | 2 ++
src/test/ui/env-funky-keys.rs | 1 +
6 files changed, 10 insertions(+)
diff --git a/src/test/codegen/sparc-struct-abi.rs b/src/test/codegen/sparc-struct-abi.rs
index 78e5b14a212..6f93e93286b 100644
--- a/src/test/codegen/sparc-struct-abi.rs
+++ b/src/test/codegen/sparc-struct-abi.rs
@@ -4,6 +4,7 @@
// only-sparc64
// compile-flags: -O --target=sparc64-unknown-linux-gnu --crate-type=rlib
+// ignore-test
#![feature(no_core, lang_items)]
#![no_core]
diff --git a/src/test/run-make-fulldeps/c-link-to-rust-va-list-fn/Makefile b/src/test/run-make-fulldeps/c-link-to-rust-va-list-fn/Makefile
index f124ca2ab61..363b18f0985 100644
--- a/src/test/run-make-fulldeps/c-link-to-rust-va-list-fn/Makefile
+++ b/src/test/run-make-fulldeps/c-link-to-rust-va-list-fn/Makefile
@@ -1,3 +1,5 @@
+# ignore-aarch64
+
-include ../tools.mk
all:
diff --git a/src/test/run-make-fulldeps/long-linker-command-lines/Makefile b/src/test/run-make-fulldeps/long-linker-command-lines/Makefile
index 5876fbc94bc..5f167ece1a2 100644
--- a/src/test/run-make-fulldeps/long-linker-command-lines/Makefile
+++ b/src/test/run-make-fulldeps/long-linker-command-lines/Makefile
@@ -1,3 +1,5 @@
+# ignore-test
+
-include ../tools.mk
all:
diff --git a/src/test/run-make-fulldeps/sysroot-crates-are-unstable/Makefile b/src/test/run-make-fulldeps/sysroot-crates-are-unstable/Makefile
index 9e770706857..6d92ec5cec8 100644
--- a/src/test/run-make-fulldeps/sysroot-crates-are-unstable/Makefile
+++ b/src/test/run-make-fulldeps/sysroot-crates-are-unstable/Makefile
@@ -1,1 +1,3 @@
+# ignore-test
+
all:
python2.7 test.py
diff --git a/src/test/ui/env-funky-keys.rs b/src/test/ui/env-funky-keys.rs
index c5c824ac58d..f3fe047a79c 100644
--- a/src/test/ui/env-funky-keys.rs
+++ b/src/test/ui/env-funky-keys.rs
@@ -1,6 +1,7 @@
// run-pass
// Ignore this test on Android, because it segfaults there.
+// ignore-test
// ignore-android
// ignore-windows
// ignore-cloudabi no execve
--
2.24.1

View File

@@ -0,0 +1,164 @@
From 671ef2d1c228aed031b4232b8bea96f17b825263 Mon Sep 17 00:00:00 2001
From: Georgy Yakovlev <gyakovlev@gentoo.org>
Date: Mon, 23 Nov 2020 14:52:04 -0800
Subject: [PATCH] add gentoo musl target specs
---
.../src/spec/aarch64_gentoo_linux_musl.rs | 11 +++++++++++
.../src/spec/armv7_gentoo_linux_musleabihf.rs | 11 +++++++++++
.../rustc_target/src/spec/i686_gentoo_linux_musl.rs | 11 +++++++++++
compiler/rustc_target/src/spec/mod.rs | 8 ++++++++
.../src/spec/powerpc64_gentoo_linux_musl.rs | 11 +++++++++++
.../src/spec/powerpc64le_gentoo_linux_musl.rs | 11 +++++++++++
.../src/spec/powerpc_gentoo_linux_musl.rs | 11 +++++++++++
.../rustc_target/src/spec/x86_64_gentoo_linux_musl.rs | 11 +++++++++++
8 files changed, 85 insertions(+)
create mode 100644 compiler/rustc_target/src/spec/aarch64_gentoo_linux_musl.rs
create mode 100644 compiler/rustc_target/src/spec/armv7_gentoo_linux_musleabihf.rs
create mode 100644 compiler/rustc_target/src/spec/i686_gentoo_linux_musl.rs
create mode 100644 compiler/rustc_target/src/spec/powerpc64_gentoo_linux_musl.rs
create mode 100644 compiler/rustc_target/src/spec/powerpc64le_gentoo_linux_musl.rs
create mode 100644 compiler/rustc_target/src/spec/powerpc_gentoo_linux_musl.rs
create mode 100644 compiler/rustc_target/src/spec/x86_64_gentoo_linux_musl.rs
diff --git a/compiler/rustc_target/src/spec/aarch64_gentoo_linux_musl.rs b/compiler/rustc_target/src/spec/aarch64_gentoo_linux_musl.rs
new file mode 100644
index 0000000..420fe7c
--- /dev/null
+++ b/compiler/rustc_target/src/spec/aarch64_gentoo_linux_musl.rs
@@ -0,0 +1,11 @@
+use crate::spec::Target;
+
+pub fn target() -> Target {
+ let mut base = super::aarch64_unknown_linux_musl::target();
+
+ base.llvm_target = "aarch64-gentoo-linux-musl".to_string();
+ base.options.vendor = "gentoo".to_string();
+ base.options.crt_static_default = false;
+
+ base
+}
diff --git a/compiler/rustc_target/src/spec/armv7_gentoo_linux_musleabihf.rs b/compiler/rustc_target/src/spec/armv7_gentoo_linux_musleabihf.rs
new file mode 100644
index 0000000..067e2d6
--- /dev/null
+++ b/compiler/rustc_target/src/spec/armv7_gentoo_linux_musleabihf.rs
@@ -0,0 +1,11 @@
+use crate::spec::Target;
+
+pub fn target() -> Target {
+ let mut base = super::armv7_unknown_linux_musleabihf::target();
+
+ base.llvm_target = "armv7-gentoo-linux-musleabihf".to_string();
+ base.options.vendor = "gentoo".to_string();
+ base.options.crt_static_default = false;
+
+ base
+}
diff --git a/compiler/rustc_target/src/spec/i686_gentoo_linux_musl.rs b/compiler/rustc_target/src/spec/i686_gentoo_linux_musl.rs
new file mode 100644
index 0000000..1cd39cd
--- /dev/null
+++ b/compiler/rustc_target/src/spec/i686_gentoo_linux_musl.rs
@@ -0,0 +1,11 @@
+use crate::spec::Target;
+
+pub fn target() -> Target {
+ let mut base = super::i686_unknown_linux_musl::target();
+
+ base.llvm_target = "i686-gentoo-linux-musl".to_string();
+ base.options.vendor = "gentoo".to_string();
+ base.options.crt_static_default = false;
+
+ base
+}
diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs
index f1e8330..d8c0ba0 100644
--- a/compiler/rustc_target/src/spec/mod.rs
+++ b/compiler/rustc_target/src/spec/mod.rs
@@ -490,6 +490,14 @@ macro_rules! supported_targets {
}
supported_targets! {
+ ("aarch64-gentoo-linux-musl", aarch64_gentoo_linux_musl),
+ ("armv7-gentoo-linux-musleabihf", armv7_gentoo_linux_musleabihf),
+ ("i686-gentoo-linux-musl", i686_gentoo_linux_musl),
+ ("powerpc-gentoo-linux-musl", powerpc_gentoo_linux_musl),
+ ("powerpc64-gentoo-linux-musl", powerpc64_gentoo_linux_musl),
+ ("powerpc64le-gentoo-linux-musl", powerpc64le_gentoo_linux_musl),
+ ("x86_64-gentoo-linux-musl", x86_64_gentoo_linux_musl),
+
("x86_64-unknown-linux-gnu", x86_64_unknown_linux_gnu),
("x86_64-unknown-linux-gnux32", x86_64_unknown_linux_gnux32),
("i686-unknown-linux-gnu", i686_unknown_linux_gnu),
diff --git a/compiler/rustc_target/src/spec/powerpc64_gentoo_linux_musl.rs b/compiler/rustc_target/src/spec/powerpc64_gentoo_linux_musl.rs
new file mode 100644
index 0000000..e840bb2
--- /dev/null
+++ b/compiler/rustc_target/src/spec/powerpc64_gentoo_linux_musl.rs
@@ -0,0 +1,11 @@
+use crate::spec::Target;
+
+pub fn target() -> Target {
+ let mut base = super::powerpc64_unknown_linux_musl::target();
+
+ base.llvm_target = "powerpc64-gentoo-linux-musl".to_string();
+ base.options.vendor = "gentoo".to_string();
+ base.options.crt_static_default = false;
+
+ base
+}
diff --git a/compiler/rustc_target/src/spec/powerpc64le_gentoo_linux_musl.rs b/compiler/rustc_target/src/spec/powerpc64le_gentoo_linux_musl.rs
new file mode 100644
index 0000000..1037d82
--- /dev/null
+++ b/compiler/rustc_target/src/spec/powerpc64le_gentoo_linux_musl.rs
@@ -0,0 +1,11 @@
+use crate::spec::Target;
+
+pub fn target() -> Target {
+ let mut base = super::powerpc64le_unknown_linux_musl::target();
+
+ base.llvm_target = "powerpc64le-gentoo-linux-musl".to_string();
+ base.options.vendor = "gentoo".to_string();
+ base.options.crt_static_default = false;
+
+ base
+}
diff --git a/compiler/rustc_target/src/spec/powerpc_gentoo_linux_musl.rs b/compiler/rustc_target/src/spec/powerpc_gentoo_linux_musl.rs
new file mode 100644
index 0000000..a623ffe
--- /dev/null
+++ b/compiler/rustc_target/src/spec/powerpc_gentoo_linux_musl.rs
@@ -0,0 +1,11 @@
+use crate::spec::Target;
+
+pub fn target() -> Target {
+ let mut base = super::powerpc_unknown_linux_musl::target();
+
+ base.llvm_target = "powerpc-gentoo-linux-musl".to_string();
+ base.options.vendor = "gentoo".to_string();
+ base.options.crt_static_default = false;
+
+ base
+}
diff --git a/compiler/rustc_target/src/spec/x86_64_gentoo_linux_musl.rs b/compiler/rustc_target/src/spec/x86_64_gentoo_linux_musl.rs
new file mode 100644
index 0000000..f330473
--- /dev/null
+++ b/compiler/rustc_target/src/spec/x86_64_gentoo_linux_musl.rs
@@ -0,0 +1,11 @@
+use crate::spec::Target;
+
+pub fn target() -> Target {
+ let mut base = super::x86_64_unknown_linux_musl::target();
+
+ base.llvm_target = "x86_64-gentoo-linux-musl".to_string();
+ base.options.vendor = "gentoo".to_string();
+ base.options.crt_static_default = false;
+
+ base
+}
--
2.29.2

View File

@@ -0,0 +1,234 @@
From 12efa21eb88cb43d3b927952da0c5635373ac92b Mon Sep 17 00:00:00 2001
From: David Tolnay <dtolnay@gmail.com>
Date: Thu, 17 Jun 2021 22:34:55 -0700
Subject: [PATCH] Update rustversion to 1.0.5
---
Cargo.lock | 4 +--
vendor/rustversion/.cargo-checksum.json | 2 +-
vendor/rustversion/Cargo.toml | 2 +-
vendor/rustversion/build/build.rs | 6 ++++
vendor/rustversion/build/rustc.rs | 30 +++++++++-----------
vendor/rustversion/src/lib.rs | 15 ++++++++++
vendor/rustversion/src/time.rs | 13 +++++++--
vendor/rustversion/tests/test_parse.rs | 10 +++++++
vendor/rustversion/tests/ui/bad-bound.stderr | 4 +--
vendor/rustversion/tests/ui/bad-date.stderr | 4 +--
10 files changed, 63 insertions(+), 27 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index 0939f19cdfe..26a89caf050 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -4582,9 +4582,9 @@ dependencies = [
[[package]]
name = "rustversion"
-version = "1.0.4"
+version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb5d2a036dc6d2d8fd16fde3498b04306e29bd193bf306a57427019b823d5acd"
+checksum = "61b3909d758bb75c79f23d4736fac9433868679d3ad2ea7a61e3c25cfda9a088"
[[package]]
name = "ryu"
diff --git a/vendor/rustversion/.cargo-checksum.json b/vendor/rustversion/.cargo-checksum.json
index e1277df7b59..0a134695aaf 100644
--- a/vendor/rustversion/.cargo-checksum.json
+++ b/vendor/rustversion/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"1a91782510461d54726e816ae776042b95c79c9949d49c11b8782caefc22ead2","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"01dc6a1bf499a12bd0bfbbfe4db2ca8460b2c151235bcf2aad2356de4c2ec50a","build/build.rs":"481daf363b7004c90ffc3e012863a4102e9f26b9aaa2a4a295c2dd78f690be28","build/rustc.rs":"4dc8f1764672137bd15758cc19242740b0d6ab99e4a69171ad0999f9112a15a6","src/attr.rs":"9301cd4aff5a9648c057d5d8de9eb66921f0c3a715c51ada4459576bd49c8b19","src/bound.rs":"44bda74d3aacfeeeac9dae2f7eef3acc844d4c3c7eaa9d3e6288e5aeff269dff","src/constfn.rs":"613b8f53b21cc06b4f619fce9000993d3e7873b650701ca01cef1e53bed5b40a","src/date.rs":"454c749a60db8144a706a813e06fe3ae39c981920ba9832ef82f3f9debe1f052","src/error.rs":"cb37102f03ebbaca313d80f9714fe08dfef92fe956789ee87d93eb6121705f4f","src/expr.rs":"8e8ca76f4f5838436d9d7273f499c698bb41f6c15bc07d32ec5c1cb8bd3dd731","src/iter.rs":"8d4b817b9abc4e817105b673e15f29ef9bb8284a010ce01ac2d83387fe136947","src/lib.rs":"f8347832d8072058dbb4af6b8d67a834a02fe9c5460bbaa26defec4b66317f1b","src/release.rs":"abb8ddd877c39a023bf5e7bd67063d6e4144e79758a8bafa338167f9d15b89f1","src/time.rs":"45fb48ff0a0046a5a1b108b9ce53b14885637ad868ede1d66970379c2b7f16ef","src/token.rs":"824ce765f692db73afa02d3ebb0281c750748035efc98fa547be29d3072665ce","src/version.rs":"afdb048bba95bbb885945eba5527b6bf0eca0105642bfc304c2f82a8b7d556df","tests/compiletest.rs":"0a52a44786aea1c299c695bf948b2ed2081e4cc344e5c2cadceab4eb03d0010d","tests/test_const.rs":"a8297ca6559f895a3b2664964a42b6f82bbbc3c8faa9556a513006e6e1827995","tests/test_eval.rs":"6f0ee3f49c9a0d0c374a4d0e9a9dce753cd9fc2ca7725e000a435dbd5f4a9ce3","tests/test_parse.rs":"fbf9695f4208263743715e6c8b6294dfffee21462a65dfeb9339a70c0e18dbc6","tests/ui/bad-bound.rs":"25bde278fcaabf62868417148a5e5f2006bf589d7ebd7bf6004fb8d78e47594f","tests/ui/bad-bound.stderr":"bc9297f758c2541fb0a8b48d5785f4bbcd0d2a07d876ba0baf2fc9de9275e7e6","tests/ui/bad-date.rs":"6e23714dae8b6346fefe50dacd4abba3265248bbadfdd60c739138aa8a0037ba","tests/ui/bad-date.stderr":"1ac3cab13ee900fc8344e8fab21ff4d9cad476aca44925a4c1b2293a6b59b742","tests/ui/bad-not.rs":"f003df8bd245e9dd8edc3a6d94078ee5162fac7a98db881271f0f5b6db98d45d","tests/ui/bad-not.stderr":"d4ef78fae4a82419e737757158796cb103a5920df498956eaf57ed201797b463","tests/ui/bad-version.rs":"f4ea2cd038e6c63deb9c2e3ceffce93dbf179d9ce18c16d88f3b6cd7138a8c8e","tests/ui/bad-version.stderr":"60ed51c62f4c2fb6ff95cff7523cfca379ed434f319da9d82704318588792338","tests/ui/const-not-fn.rs":"10bbe38f0d89391fff0698756e4cfd4e72a41090360393a0c951b67df14d1c35","tests/ui/const-not-fn.stderr":"9551f7f222445b31d7af2415d467301c332d55bb3d5a143846484f2f00047a01"},"package":"cb5d2a036dc6d2d8fd16fde3498b04306e29bd193bf306a57427019b823d5acd"}
\ No newline at end of file
+{"files":{"Cargo.toml":"a09ee758f816eddff8a8c7fb5be54dd95e74caad18a207251faedd251ecfaf1c","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"01dc6a1bf499a12bd0bfbbfe4db2ca8460b2c151235bcf2aad2356de4c2ec50a","build/build.rs":"bae427f344972e6e0e348ec48dce0947274b3ec6cac0938497a8d3da5c9834e5","build/rustc.rs":"3e4acf7ea679f9331dd4e8dbe42a08a312f58379ea1eee5898793a9848d06d8c","src/attr.rs":"9301cd4aff5a9648c057d5d8de9eb66921f0c3a715c51ada4459576bd49c8b19","src/bound.rs":"44bda74d3aacfeeeac9dae2f7eef3acc844d4c3c7eaa9d3e6288e5aeff269dff","src/constfn.rs":"613b8f53b21cc06b4f619fce9000993d3e7873b650701ca01cef1e53bed5b40a","src/date.rs":"454c749a60db8144a706a813e06fe3ae39c981920ba9832ef82f3f9debe1f052","src/error.rs":"cb37102f03ebbaca313d80f9714fe08dfef92fe956789ee87d93eb6121705f4f","src/expr.rs":"8e8ca76f4f5838436d9d7273f499c698bb41f6c15bc07d32ec5c1cb8bd3dd731","src/iter.rs":"8d4b817b9abc4e817105b673e15f29ef9bb8284a010ce01ac2d83387fe136947","src/lib.rs":"5652f6f84fc80136bd29b2125f7676e80e0df7d40aac274b0658c99cecbd871d","src/release.rs":"abb8ddd877c39a023bf5e7bd67063d6e4144e79758a8bafa338167f9d15b89f1","src/time.rs":"bdd05a743b07a6bbfa0dbc9d4e415e051aba4a51a430c3be1e23447eae298c8b","src/token.rs":"824ce765f692db73afa02d3ebb0281c750748035efc98fa547be29d3072665ce","src/version.rs":"afdb048bba95bbb885945eba5527b6bf0eca0105642bfc304c2f82a8b7d556df","tests/compiletest.rs":"0a52a44786aea1c299c695bf948b2ed2081e4cc344e5c2cadceab4eb03d0010d","tests/test_const.rs":"a8297ca6559f895a3b2664964a42b6f82bbbc3c8faa9556a513006e6e1827995","tests/test_eval.rs":"6f0ee3f49c9a0d0c374a4d0e9a9dce753cd9fc2ca7725e000a435dbd5f4a9ce3","tests/test_parse.rs":"cdfe376020b9391330292968046117b0935c828d73385e8faeb2e333ec897088","tests/ui/bad-bound.rs":"25bde278fcaabf62868417148a5e5f2006bf589d7ebd7bf6004fb8d78e47594f","tests/ui/bad-bound.stderr":"a03dc78b380191c10d3b3406b1fd3208bb2609d4c26b9c33ccd335721e3cd072","tests/ui/bad-date.rs":"6e23714dae8b6346fefe50dacd4abba3265248bbadfdd60c739138aa8a0037ba","tests/ui/bad-date.stderr":"3a607fb950a69f7dc1b503295bce53541f9dee9f4674edc5d13ee3a69ff0e8cd","tests/ui/bad-not.rs":"f003df8bd245e9dd8edc3a6d94078ee5162fac7a98db881271f0f5b6db98d45d","tests/ui/bad-not.stderr":"d4ef78fae4a82419e737757158796cb103a5920df498956eaf57ed201797b463","tests/ui/bad-version.rs":"f4ea2cd038e6c63deb9c2e3ceffce93dbf179d9ce18c16d88f3b6cd7138a8c8e","tests/ui/bad-version.stderr":"60ed51c62f4c2fb6ff95cff7523cfca379ed434f319da9d82704318588792338","tests/ui/const-not-fn.rs":"10bbe38f0d89391fff0698756e4cfd4e72a41090360393a0c951b67df14d1c35","tests/ui/const-not-fn.stderr":"9551f7f222445b31d7af2415d467301c332d55bb3d5a143846484f2f00047a01"},"package":"61b3909d758bb75c79f23d4736fac9433868679d3ad2ea7a61e3c25cfda9a088"}
\ No newline at end of file
diff --git a/vendor/rustversion/Cargo.toml b/vendor/rustversion/Cargo.toml
index 56995ff0792..c72b1b2b343 100644
--- a/vendor/rustversion/Cargo.toml
+++ b/vendor/rustversion/Cargo.toml
@@ -13,7 +13,7 @@
[package]
edition = "2018"
name = "rustversion"
-version = "1.0.4"
+version = "1.0.5"
authors = ["David Tolnay <dtolnay@gmail.com>"]
build = "build/build.rs"
description = "Conditional compilation according to rustc compiler version"
diff --git a/vendor/rustversion/build/build.rs b/vendor/rustversion/build/build.rs
index 2a8bc4af39f..15312510d68 100644
--- a/vendor/rustversion/build/build.rs
+++ b/vendor/rustversion/build/build.rs
@@ -1,3 +1,9 @@
+#![allow(
+ clippy::enum_glob_use,
+ clippy::must_use_candidate,
+ clippy::single_match_else
+)]
+
mod rustc;
use std::env;
diff --git a/vendor/rustversion/build/rustc.rs b/vendor/rustversion/build/rustc.rs
index 723e6bdd0e2..dfc6a05166f 100644
--- a/vendor/rustversion/build/rustc.rs
+++ b/vendor/rustversion/build/rustc.rs
@@ -48,23 +48,21 @@ pub fn parse(string: &str) -> Option<Version> {
Some(channel) if channel == "dev" => Dev,
Some(channel) if channel.starts_with("beta") => Beta,
Some(channel) if channel == "nightly" => match words.next() {
- Some(hash) => {
- if !hash.starts_with('(') {
- return None;
+ Some(hash) if hash.starts_with('(') => match words.next() {
+ None if hash.ends_with(')') => Dev,
+ Some(date) if date.ends_with(')') => {
+ let mut date = date[..date.len() - 1].split('-');
+ let year = date.next()?.parse().ok()?;
+ let month = date.next()?.parse().ok()?;
+ let day = date.next()?.parse().ok()?;
+ match date.next() {
+ None => Nightly(Date { year, month, day }),
+ Some(_) => return None,
+ }
}
- let date = words.next()?;
- if !date.ends_with(')') {
- return None;
- }
- let mut date = date[..date.len() - 1].split('-');
- let year = date.next()?.parse().ok()?;
- let month = date.next()?.parse().ok()?;
- let day = date.next()?.parse().ok()?;
- match date.next() {
- None => Nightly(Date { year, month, day }),
- Some(_) => return None,
- }
- }
+ None | Some(_) => return None,
+ },
+ Some(_) => return None,
None => Dev,
},
Some(_) => return None,
diff --git a/vendor/rustversion/src/lib.rs b/vendor/rustversion/src/lib.rs
index 2614105dd1a..172eb89382f 100644
--- a/vendor/rustversion/src/lib.rs
+++ b/vendor/rustversion/src/lib.rs
@@ -145,6 +145,21 @@
//!
//! <br>
+#![allow(
+ clippy::cast_lossless,
+ clippy::cast_possible_truncation,
+ clippy::doc_markdown,
+ clippy::enum_glob_use,
+ clippy::from_iter_instead_of_collect,
+ clippy::module_name_repetitions,
+ clippy::must_use_candidate,
+ clippy::needless_doctest_main,
+ clippy::needless_pass_by_value,
+ clippy::redundant_else,
+ clippy::toplevel_ref_arg,
+ clippy::unreadable_literal
+)]
+
extern crate proc_macro;
mod attr;
diff --git a/vendor/rustversion/src/time.rs b/vendor/rustversion/src/time.rs
index 1e6dd9066b4..3c21463dd80 100644
--- a/vendor/rustversion/src/time.rs
+++ b/vendor/rustversion/src/time.rs
@@ -1,4 +1,5 @@
use crate::date::Date;
+use std::env;
use std::time::{SystemTime, UNIX_EPOCH};
// Timestamp of 2016-03-01 00:00:00 in UTC.
@@ -13,14 +14,20 @@
pub fn today() -> Date {
let default = Date {
- year: 2019,
- month: 1,
- day: 1,
+ year: 2020,
+ month: 2,
+ day: 25,
};
try_today().unwrap_or(default)
}
fn try_today() -> Option<Date> {
+ if let Some(pkg_name) = env::var_os("CARGO_PKG_NAME") {
+ if pkg_name.to_str() == Some("rustversion-tests") {
+ return None; // Stable date for ui testing.
+ }
+ }
+
let now = SystemTime::now();
let since_epoch = now.duration_since(UNIX_EPOCH).ok()?;
let secs = since_epoch.as_secs();
diff --git a/vendor/rustversion/tests/test_parse.rs b/vendor/rustversion/tests/test_parse.rs
index 843bd73d3e5..cb39b3179f5 100644
--- a/vendor/rustversion/tests/test_parse.rs
+++ b/vendor/rustversion/tests/test_parse.rs
@@ -1,3 +1,5 @@
+#![allow(clippy::enum_glob_use, clippy::must_use_candidate)]
+
include!("../build/rustc.rs");
#[test]
@@ -76,6 +78,14 @@ fn test_parse() {
}),
},
),
+ (
+ "rustc 1.52.1-nightly (gentoo)",
+ Version {
+ minor: 52,
+ patch: 1,
+ channel: Dev,
+ },
+ ),
];
for (string, expected) in cases {
diff --git a/vendor/rustversion/tests/ui/bad-bound.stderr b/vendor/rustversion/tests/ui/bad-bound.stderr
index f8c498c8577..2c56acbdb33 100644
--- a/vendor/rustversion/tests/ui/bad-bound.stderr
+++ b/vendor/rustversion/tests/ui/bad-bound.stderr
@@ -1,10 +1,10 @@
-error: expected rustc release number like 1.31, or nightly date like 2020-10-26
+error: expected rustc release number like 1.31, or nightly date like 2020-02-25
--> $DIR/bad-bound.rs:1:22
|
1 | #[rustversion::since(stable)]
| ^^^^^^
-error: expected rustc release number like 1.31, or nightly date like 2020-10-26
+error: expected rustc release number like 1.31, or nightly date like 2020-02-25
--> $DIR/bad-bound.rs:4:26
|
4 | #[rustversion::any(since(stable))]
diff --git a/vendor/rustversion/tests/ui/bad-date.stderr b/vendor/rustversion/tests/ui/bad-date.stderr
index 734d7889075..c523ccc02bf 100644
--- a/vendor/rustversion/tests/ui/bad-date.stderr
+++ b/vendor/rustversion/tests/ui/bad-date.stderr
@@ -1,10 +1,10 @@
-error: expected nightly date, like 2020-10-26
+error: expected nightly date, like 2020-02-25
--> $DIR/bad-date.rs:1:24
|
1 | #[rustversion::nightly(stable)]
| ^^^^^^
-error: expected nightly date, like 2020-10-26
+error: expected nightly date, like 2020-02-25
--> $DIR/bad-date.rs:4:28
|
4 | #[rustversion::any(nightly(stable))]
--
2.32.0

View File

@@ -0,0 +1,43 @@
From a789b49e4c0e7d742cc39713484596293d844537 Mon Sep 17 00:00:00 2001
From: hyd-dev <yd-huang@outlook.com>
Date: Fri, 30 Jul 2021 21:28:34 +0800
Subject: [PATCH] Use `Lrc` instead of `Rc` in `MiriCompilerCalls::config()`
---
src/bin/miri.rs | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/tools/miri/src/bin/miri.rs b/src/tools/miri/src/bin/miri.rs
index 5a8f07263..18c393815 100644
--- a/src/tools/miri/src/bin/miri.rs
+++ b/src/tools/miri/src/bin/miri.rs
@@ -1,5 +1,6 @@
#![feature(rustc_private, bool_to_option, stmt_expr_attributes)]
+extern crate rustc_data_structures;
extern crate rustc_driver;
extern crate rustc_errors;
extern crate rustc_hir;
@@ -12,12 +13,12 @@ use std::convert::TryFrom;
use std::env;
use std::num::NonZeroU64;
use std::path::PathBuf;
-use std::rc::Rc;
use std::str::FromStr;
use hex::FromHexError;
use log::debug;
+use rustc_data_structures::sync::Lrc;
use rustc_driver::Compilation;
use rustc_errors::emitter::{ColorConfig, HumanReadableErrorType};
use rustc_hir::{self as hir, def_id::LOCAL_CRATE, Node};
@@ -42,7 +43,7 @@ impl rustc_driver::Callbacks for MiriCompilerCalls {
// HACK: rustc will emit "crate ... required to be available in rlib format, but
// was not found in this form" errors once we use `tcx.dependency_formats()` if
// there's no rlib provided, so setting a dummy path here to workaround those errors.
- Rc::make_mut(&mut crate_source).rlib = Some((PathBuf::new(), PathKind::All));
+ Lrc::make_mut(&mut crate_source).rlib = Some((PathBuf::new(), PathKind::All));
crate_source
};
});

View File

@@ -0,0 +1,24 @@
https://gitweb.gentoo.org/fork/llvm-project.git/commit/llvm/include/llvm/Support/Signals.h?h=gentoo-15.0.7-r7&id=ff1681ddb303223973653f7f5f3f3435b48a1983
From: Sergei Trofimovich <slyich@gmail.com>
Date: Mon, 23 May 2022 08:03:23 +0100
Subject: [Support] Add missing <cstdint> header to Signals.h
Without the change llvm build fails on this week's gcc-13 snapshot as:
[ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Signals.cpp.o
In file included from llvm/lib/Support/Signals.cpp:14:
llvm/include/llvm/Support/Signals.h:119:8: error: variable or field 'CleanupOnSignal' declared void
119 | void CleanupOnSignal(uintptr_t Context);
| ^~~~~~~~~~~~~~~
--- a/src/llvm-project/llvm/include/llvm/Support/Signals.h
+++ b/src/llvm-project/llvm/include/llvm/Support/Signals.h
@@ -14,6 +14,7 @@
#ifndef LLVM_SUPPORT_SIGNALS_H
#define LLVM_SUPPORT_SIGNALS_H
+#include <cstdint>
#include <string>
namespace llvm {
--
cgit v1.2.3-65-gdbad

View File

@@ -0,0 +1,559 @@
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
PYTHON_COMPAT=( python3_{10..13} )
CARGO_BOOTSTRAP="yes"
RUST_MAX_VER=${PV}
RUST_MIN_VER="$(ver_cut 1).$(($(ver_cut 2) - 1)).0"
# Requried to build against openssl-3.*
CRATE_PATHS_OVERRIDE="
openssl@0.10.35
openssl-sys@0.9.65
"
inherit cargo check-reqs estack flag-o-matic multiprocessing \
multilib multilib-build python-any-r1 rust-toolchain toolchain-funcs verify-sig
DESCRIPTION="Systems programming language from Mozilla"
HOMEPAGE="https://www.rust-lang.org/"
SRC_URI="
https://static.rust-lang.org/dist/rustc-${PV}-src.tar.xz
${CARGO_CRATE_URIS}
verify-sig? (
https://static.rust-lang.org/dist/rustc-${PV}-src.tar.xz.asc
)
"
S="${WORKDIR}/rustc-${PV}-src"
ALL_LLVM_TARGETS=( AArch64 AMDGPU ARM AVR BPF Hexagon Lanai Mips MSP430
NVPTX PowerPC RISCV Sparc SystemZ WebAssembly X86 XCore )
ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/(-)?}
LICENSE="|| ( MIT Apache-2.0 ) BSD-1 BSD-2 BSD-4 UoI-NCSA"
SLOT="${PV}"
KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~riscv ~x86"
IUSE="clippy cpu_flags_x86_sse2 debug doc miri nightly parallel-compiler rustfmt test wasm ${ALL_LLVM_TARGETS[*]}"
BDEPEND="${PYTHON_DEPS}
app-eselect/eselect-rust
|| (
>=sys-devel/gcc-4.7
>=sys-devel/clang-3.5
)
>=dev-build/cmake-3.13.4
dev-build/ninja
test? ( dev-debug/gdb )
verify-sig? ( sec-keys/openpgp-keys-rust )
"
DEPEND="
>=app-arch/xz-utils-5.2
net-misc/curl:=[http2,ssl]
sys-libs/zlib:=
dev-libs/openssl:0=
elibc_musl? ( sys-libs/libunwind:= )
"
RDEPEND="${DEPEND}
app-eselect/eselect-rust
!dev-lang/rust:stable
!dev-lang/rust-bin:stable
"
REQUIRED_USE="|| ( ${ALL_LLVM_TARGETS[*]} )
miri? ( nightly )
parallel-compiler? ( nightly )
test? ( ${ALL_LLVM_TARGETS[*]} )
wasm? ( llvm_targets_WebAssembly )
x86? ( cpu_flags_x86_sse2 )
"
# we don't use cmake.eclass, but can get a warnings
CMAKE_WARN_UNUSED_CLI=no
QA_FLAGS_IGNORED="
usr/lib/${PN}/${PV}/bin/.*
usr/lib/${PN}/${PV}/libexec/.*
usr/lib/${PN}/${PV}/lib/lib.*.so
usr/lib/${PN}/${PV}/lib/rustlib/.*/bin/.*
usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/lib.*.so
"
QA_SONAME="
usr/lib/${PN}/${PV}/lib/lib.*.so.*
usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/lib.*.so
"
# An rmeta file is custom binary format that contains the metadata for the crate.
# rmeta files do not support linking, since they do not contain compiled object files.
# so we can safely silence the warning for this QA check.
QA_EXECSTACK="usr/lib/${PN}/${PV}/lib/rustlib/*/lib*.rlib:lib.rmeta"
# causes double bootstrap
RESTRICT="test"
VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/rust.asc
PATCHES=(
"${FILESDIR}"/1.47.0-ignore-broken-and-non-applicable-tests.patch
"${FILESDIR}"/1.49.0-gentoo-musl-target-specs.patch
"${FILESDIR}"/1.53.0-rustversion-1.0.5.patch # https://github.com/rust-lang/rust/pull/86425
"${FILESDIR}"/1.54.0-parallel-miri.patch # https://github.com/rust-lang/miri/pull/1863
"${FILESDIR}/llvm/12/cstdint-signals-h.patch"
)
toml_usex() {
usex "${1}" true false
}
pre_build_checks() {
local M=7680
# multiply requirements by 1.5 if we are doing x86-multilib
if use amd64; then
M=$(( $(usex abi_x86_32 15 10) * ${M} / 10 ))
fi
M=$(( $(usex clippy 128 0) + ${M} ))
M=$(( $(usex miri 128 0) + ${M} ))
M=$(( $(usex rustfmt 256 0) + ${M} ))
local ltarget
for ltarget in ${ALL_LLVM_TARGETS[@]}; do
M=$(( $(usex ${ltarget} 256 0) + ${M} ))
done
M=$(( $(usex wasm 256 0) + ${M} ))
M=$(( $(usex debug 2 1) * ${M} ))
eshopts_push -s extglob
if is-flagq '-g?(gdb)?([1-9])'; then
M=$(( 15 * ${M} / 10 ))
fi
eshopts_pop
M=$(( $(usex doc 256 0) + ${M} ))
CHECKREQS_DISK_BUILD=${M}M check-reqs_pkg_${EBUILD_PHASE}
}
pkg_pretend() {
pre_build_checks
}
pkg_setup() {
pre_build_checks
python-any-r1_pkg_setup
export LIBGIT2_NO_PKG_CONFIG=1 #749381
rust_pkg_setup
}
src_unpack() {
verify-sig_src_unpack
cargo_src_unpack
# Vendored sources here override crates-io sources (repo) from cargo eclass.
sed -i '/\[source.crates-io\]/,+2d' "${ECARGO_HOME}"/config.toml
}
src_configure() {
local rust_target="" rust_targets="" arch_cflags
# Collect rust target names to compile standard libs for all ABIs.
for v in $(multilib_get_enabled_abi_pairs); do
rust_targets="${rust_targets},\"$(rust_abi $(get_abi_CHOST ${v##*.}))\""
done
if use wasm; then
rust_targets="${rust_targets},\"wasm32-unknown-unknown\""
fi
rust_targets="${rust_targets#,}"
local tools="\"cargo\",\"rls\",\"analysis\",\"src\","
if use clippy; then
tools="\"clippy\",$tools"
fi
if use miri; then
tools="\"miri\",$tools"
fi
if use rustfmt; then
tools="\"rustfmt\",$tools"
fi
local rust_stage0_root
rust_stage0_root="$(rustc --print sysroot || die "Can't determine rust's sysroot")"
# in case of prefix it will be already prefixed, as --print sysroot returns full path
[[ -d ${rust_stage0_root} ]] || die "${rust_stage0_root} is not a directory"
rust_target="$(rust_abi)"
cat <<- _EOF_ > "${S}"/config.toml
changelog-seen = 2
[llvm]
download-ci-llvm = false
optimize = $(toml_usex !debug)
release-debuginfo = $(toml_usex debug)
assertions = $(toml_usex debug)
ninja = true
targets = "${LLVM_TARGETS// /;}"
experimental-targets = ""
link-shared = false
[build]
build-stage = 2
test-stage = 2
doc-stage = 2
build = "${rust_target}"
host = ["${rust_target}"]
target = [${rust_targets}]
cargo = "${rust_stage0_root}/bin/cargo"
rustc = "${rust_stage0_root}/bin/rustc"
rustfmt = "${rust_stage0_root}/bin/rustfmt"
docs = $(toml_usex doc)
compiler-docs = false
submodules = false
python = "${EPYTHON}"
locked-deps = true
vendor = true
extended = true
tools = [${tools}]
verbose = 2
sanitizers = false
profiler = false
cargo-native-static = false
[install]
prefix = "${EPREFIX}/usr/lib/${PN}/${PV}"
sysconfdir = "etc"
docdir = "share/doc/rust"
bindir = "bin"
libdir = "lib"
mandir = "share/man"
[rust]
# https://github.com/rust-lang/rust/issues/54872
codegen-units-std = 1
optimize = true
debug = $(toml_usex debug)
debug-assertions = $(toml_usex debug)
debug-assertions-std = $(toml_usex debug)
debuginfo-level = $(usex debug 2 0)
debuginfo-level-rustc = $(usex debug 2 0)
debuginfo-level-std = $(usex debug 2 0)
debuginfo-level-tools = $(usex debug 2 0)
debuginfo-level-tests = 0
backtrace = true
incremental = false
default-linker = "$(tc-getCC)"
parallel-compiler = $(toml_usex parallel-compiler)
channel = "$(usex nightly nightly stable)"
description = "gentoo"
rpath = false
verbose-tests = true
optimize-tests = $(toml_usex !debug)
codegen-tests = true
dist-src = false
remap-debuginfo = true
lld = $(toml_usex wasm)
# only deny warnings if doc+wasm are NOT requested, documenting stage0 wasm std fails without it
# https://github.com/rust-lang/rust/issues/74976
# https://github.com/rust-lang/rust/issues/76526
deny-warnings = $(usex wasm $(usex doc false true) true)
backtrace-on-ice = true
jemalloc = false
[dist]
src-tarball = false
compression-formats = ["gz"]
_EOF_
for v in $(multilib_get_enabled_abi_pairs); do
rust_target=$(rust_abi $(get_abi_CHOST ${v##*.}))
arch_cflags="$(get_abi_CFLAGS ${v##*.})"
cat <<- _EOF_ >> "${S}"/config.env
CFLAGS_${rust_target}=${arch_cflags}
_EOF_
cat <<- _EOF_ >> "${S}"/config.toml
[target.${rust_target}]
cc = "$(tc-getBUILD_CC)"
cxx = "$(tc-getBUILD_CXX)"
linker = "$(tc-getCC)"
ar = "$(tc-getAR)"
_EOF_
# librustc_target/spec/linux_musl_base.rs sets base.crt_static_default = true;
if use elibc_musl; then
cat <<- _EOF_ >> "${S}"/config.toml
crt-static = false
_EOF_
fi
done
if use wasm; then
cat <<- _EOF_ >> "${S}"/config.toml
[target.wasm32-unknown-unknown]
linker = "rust-lld"
_EOF_
fi
if [[ -n ${I_KNOW_WHAT_I_AM_DOING_CROSS} ]]; then # whitespace intentionally shifted below
# experimental cross support
# discussion: https://bugs.gentoo.org/679878
# TODO: c*flags, clang, cargo.eclass target support
# it would be much better if we could split out stdlib
# complilation to separate ebuild and abuse CATEGORY to
# just install to /usr/lib/rustlib/<target>
# extra targets defined as a bash array
# spec format: <LLVM target>:<rust-target>:<CTARGET>
# best place would be /etc/portage/env/dev-lang/rust
# Example:
# RUST_CROSS_TARGETS=(
# "AArch64:aarch64-unknown-linux-gnu:aarch64-unknown-linux-gnu"
# )
# no extra hand holding is done, no target transformations, all
# values are passed as-is with just basic checks, so it's up to user to supply correct values
# valid rust targets can be obtained with
# rustc --print target-list
# matching cross toolchain has to be installed
# matching LLVM_TARGET has to be enabled for both rust and llvm (if using system one)
# only gcc toolchains installed with crossdev are checked for now.
# BUG: we can't pass host flags to cross compiler, so just filter for now
# BUG: this should be more fine-grained.
filter-flags '-mcpu=*' '-march=*' '-mtune=*'
local cross_target_spec
for cross_target_spec in "${RUST_CROSS_TARGETS[@]}";do
# extracts first element form <LLVM target>:<rust-target>:<CTARGET>
local cross_llvm_target="${cross_target_spec%%:*}"
# extracts toolchain triples, <rust-target>:<CTARGET>
local cross_triples="${cross_target_spec#*:}"
# extracts first element after before : separator
local cross_rust_target="${cross_triples%%:*}"
# extracts last element after : separator
local cross_toolchain="${cross_triples##*:}"
use llvm_targets_${cross_llvm_target} || die "need llvm_targets_${cross_llvm_target} target enabled"
command -v ${cross_toolchain}-gcc > /dev/null 2>&1 || die "need ${cross_toolchain} cross toolchain"
cat <<- _EOF_ >> "${S}"/config.toml
[target.${cross_rust_target}]
cc = "${cross_toolchain}-gcc"
cxx = "${cross_toolchain}-g++"
linker = "${cross_toolchain}-gcc"
ar = "${cross_toolchain}-ar"
_EOF_
if [[ "${cross_toolchain}" == *-musl* ]]; then
cat <<- _EOF_ >> "${S}"/config.toml
musl-root = "$(${cross_toolchain}-gcc -print-sysroot)/usr"
_EOF_
fi
# append cross target to "normal" target list
# example 'target = ["powerpc64le-unknown-linux-gnu"]'
# becomes 'target = ["powerpc64le-unknown-linux-gnu","aarch64-unknown-linux-gnu"]'
rust_targets="${rust_targets},\"${cross_rust_target}\""
sed -i "/^target = \[/ s#\[.*\]#\[${rust_targets}\]#" config.toml || die
ewarn
ewarn "Enabled ${cross_rust_target} rust target"
ewarn "Using ${cross_toolchain} cross toolchain"
ewarn
if ! has_version -b 'sys-devel/binutils[multitarget]' ; then
ewarn "'sys-devel/binutils[multitarget]' is not installed"
ewarn "'strip' will be unable to strip cross libraries"
ewarn "cross targets will be installed with full debug information"
ewarn "enable 'multitarget' USE flag for binutils to be able to strip object files"
ewarn
ewarn "Alternatively llvm-strip can be used, it supports stripping any target"
ewarn "define STRIP=\"llvm-strip\" to use it (experimental)"
ewarn
fi
done
fi # I_KNOW_WHAT_I_AM_DOING_CROSS
einfo "Rust configured with the following flags:"
echo
echo RUSTFLAGS="${RUSTFLAGS:-}"
echo RUSTFLAGS_BOOTSTRAP="${RUSTFLAGS_BOOTSTRAP:-}"
echo RUSTFLAGS_NOT_BOOTSTRAP="${RUSTFLAGS_NOT_BOOTSTRAP:-}"
env | grep "CARGO_TARGET_.*_RUSTFLAGS="
cat "${S}"/config.env || die
echo
einfo "config.toml contents:"
cat "${S}"/config.toml || die
echo
}
src_compile() {
# we need \n IFS to have config.env with spaces loaded properly. #734018
(
IFS=$'\n'
env $(cat "${S}"/config.env) RUST_BACKTRACE=1\
"${EPYTHON}" ./x.py build -vv --config="${S}"/config.toml -j$(makeopts_jobs) || die
)
}
src_test() {
# https://rustc-dev-guide.rust-lang.org/tests/intro.html
# those are basic and codegen tests.
local tests=(
assembly
codegen
codegen-units
compile-fail
incremental
mir-opt
pretty
run-make
)
# fragile/expensive/less important tests
# or tests that require extra builds
# TODO: instead of skipping, just make some nonfatal.
if [[ ${ERUST_RUN_EXTRA_TESTS:-no} != no ]]; then
tests+=(
rustdoc
rustdoc-js
rustdoc-js-std
rustdoc-ui
run-make-fulldeps
ui
ui-fulldeps
)
fi
local i failed=()
einfo "rust_src_test: enabled tests ${tests[@]/#/src/test/}"
for i in "${tests[@]}"; do
local t="src/test/${i}"
einfo "rust_src_test: running ${t}"
if ! (
IFS=$'\n'
env $(cat "${S}"/config.env) RUST_BACKTRACE=1 \
"${EPYTHON}" ./x.py test -vv --config="${S}"/config.toml \
-j$(makeopts_jobs) --no-doc --no-fail-fast "${t}"
)
then
failed+=( "${t}" )
eerror "rust_src_test: ${t} failed"
fi
done
if [[ ${#failed[@]} -ne 0 ]]; then
eerror "rust_src_test: failure summary: ${failed[@]}"
die "aborting due to test failures"
fi
}
src_install() {
(
IFS=$'\n'
env $(cat "${S}"/config.env) DESTDIR="${D}" \
"${EPYTHON}" ./x.py install -vv --config="${S}"/config.toml -j$(makeopts_jobs) || die
)
# bug #689562, #689160
rm -v "${ED}/usr/lib/${PN}/${PV}/etc/bash_completion.d/cargo" || die
rmdir -v "${ED}/usr/lib/${PN}/${PV}"/etc{/bash_completion.d,} || die
local symlinks=(
cargo
rls
rust-gdb
rust-gdbgui
rust-lldb
rustc
rustdoc
)
use clippy && symlinks+=( clippy-driver cargo-clippy )
use miri && symlinks+=( miri cargo-miri )
use rustfmt && symlinks+=( rustfmt cargo-fmt )
einfo "installing eselect-rust symlinks and paths: ${symlinks[@]}"
local i
for i in "${symlinks[@]}"; do
# we need realpath on /usr/bin/* symlink return version-appended binary path.
# so /usr/bin/rustc should point to /usr/lib/rust/<ver>/bin/rustc-<ver>
# need to fix eselect-rust to remove this hack.
local ver_i="${i}-${PV}"
if [[ -f "${ED}/usr/lib/${PN}/${PV}/bin/${i}" ]]; then
einfo "Installing ${i} symlink"
ln -v "${ED}/usr/lib/${PN}/${PV}/bin/${i}" "${ED}/usr/lib/${PN}/${PV}/bin/${ver_i}" || die
else
ewarn "${i} symlink requested, but source file not found"
ewarn "please report this"
fi
dosym "../lib/${PN}/${PV}/bin/${ver_i}" "/usr/bin/${ver_i}"
done
# symlinks to switch components to active rust in eselect
dosym "${PV}/lib" "/usr/lib/${PN}/lib-${PV}"
dosym "${PV}/libexec" "/usr/lib/${PN}/libexec-${PV}"
dosym "${PV}/share/man" "/usr/lib/${PN}/man-${PV}"
dosym "rust/${PV}/lib/rustlib" "/usr/lib/rustlib-${PV}"
dosym "../../lib/${PN}/${PV}/share/doc/rust" "/usr/share/doc/${P}"
newenvd - "50${P}" <<-_EOF_
LDPATH="${EPREFIX}/usr/lib/rust/lib-${PV}"
MANPATH="${EPREFIX}/usr/lib/rust/man-${PV}"
$(use amd64 && usex elibc_musl 'CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_RUSTFLAGS="-C target-feature=-crt-static"' '')
$(use arm64 && usex elibc_musl 'CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUSTFLAGS="-C target-feature=-crt-static"' '')
_EOF_
rm -rf "${ED}/usr/lib/${PN}/${PV}"/*.old || die
rm -rf "${ED}/usr/lib/${PN}/${PV}/doc"/*.old || die
# note: eselect-rust adds EROOT to all paths below
cat <<-_EOF_ > "${T}/provider-${P}"
/usr/bin/cargo
/usr/bin/rls
/usr/bin/rust-gdb
/usr/bin/rust-gdbgui
/usr/bin/rust-lldb
/usr/bin/rustdoc
/usr/lib/rust/lib
/usr/lib/rust/libexec
/usr/lib/rust/man
/usr/lib/rustlib
/usr/share/doc/rust
_EOF_
if use clippy; then
echo /usr/bin/clippy-driver >> "${T}/provider-${P}"
echo /usr/bin/cargo-clippy >> "${T}/provider-${P}"
fi
if use miri; then
echo /usr/bin/miri >> "${T}/provider-${P}"
echo /usr/bin/cargo-miri >> "${T}/provider-${P}"
fi
if use rustfmt; then
echo /usr/bin/rustfmt >> "${T}/provider-${P}"
echo /usr/bin/cargo-fmt >> "${T}/provider-${P}"
fi
insinto /etc/env.d/rust
doins "${T}/provider-${P}"
}
pkg_postinst() {
eselect rust update
if has_version dev-debug/gdb || has_version dev-util/lldb; then
elog "Rust installs a helper script for calling GDB and LLDB,"
elog "for your convenience it is installed under /usr/bin/rust-{gdb,lldb}-${PV}."
fi
if has_version app-editors/emacs; then
elog "install app-emacs/rust-mode to get emacs support for rust."
fi
if has_version app-editors/gvim || has_version app-editors/vim; then
elog "install app-vim/rust-vim to get vim support for rust."
fi
}
pkg_postrm() {
eselect rust cleanup
}

View File

@@ -9,8 +9,8 @@ PYTHON_COMPAT=( python3_{10..12} )
RUST_MAX_VER=${PV}
RUST_MIN_VER="$(ver_cut 1).$(($(ver_cut 2) - 1)).0"
inherit check-reqs estack flag-o-matic llvm-r1 multiprocessing \
multilib multilib-build python-any-r1 rust rust-toolchain toolchain-funcs verify-sig
inherit check-reqs estack flag-o-matic llvm-r1 multiprocessing multilib multilib-build \
optfeature python-any-r1 rust rust-toolchain toolchain-funcs verify-sig
if [[ ${PV} = *beta* ]]; then
betaver=${PV//*beta}
@@ -646,20 +646,43 @@ pkg_preinst() {
pkg_postinst() {
if has_version -b "dev-lang/rust:stable/$(ver_cut 1-2)"; then
local old_rust="dev-lang/rust:stable/$(ver_cut 1-2)"
if has_version -b ${old_rust}; then
# Be _extra_ careful here as we're removing files from the live filesystem
local f
local only_one_file=()
einfo "Tidying up libraries files from non-slotted \`${old_rust}\`."
for f in "${old_rust_libs[@]}"; do
[[ -f ${f} ]] || die "old_rust_libs array contains non-existent file"
local base_name="${f%-*}"
local ext="${f##*.}"
local matching_files=("${base_name}"-*.${ext})
if [[ ${#matching_files[@]} -ne 2 ]]; then
die "Expected exactly two files matching ${base_name}-\*.rlib, but found ${#matching_files[@]}"
fi
einfo "Removing old .rlib file ${f}"
rm "${f}" || die
case ${#matching_files[@]} in
2)
einfo "Removing old .${ext}: ${f}"
rm "${f}" || die
;;
1)
# Turns out fingerprints are not as unique as we'd thought, _sometimes_ they collide,
# so we may have already installed over the old file.
# We'll warn about this just in case, but it's probably fine.
only_one_file+=( "${matching_files[0]}" )
;;
*)
die "Expected one or two files matching ${base_name}-\*.rlib, but found ${#matching_files[@]}"
;;
esac
done
if [[ ${#only_one_file} -gt 0 ]]; then
einfo "While tidying up non-slotted rust libraries for \`${old_rust}\`,"
einfo "the following file(s) did not have a duplicate where one was expected:"
for f in "${only_one_file[@]}"; do
einfo " * ${f}"
done
einfo ""
einfo "This is unlikely to cause problems; the fingerprint for the library ended up being the same."
einfo "However, if you encounter any issues please report them to the Gentoo Rust Team."
fi
fi
eselect rust update
@@ -669,13 +692,8 @@ pkg_postinst() {
elog "for convenience they are installed under /usr/bin/rust-{gdb,lldb}-${PV}."
fi
if has_version app-editors/emacs; then
elog "install app-emacs/rust-mode to get emacs support for rust."
fi
if has_version app-editors/gvim || has_version app-editors/vim; then
elog "install app-vim/rust-vim to get vim support for rust."
fi
optfeature "Emacs support" "app-emacs/rust-mode"
optfeature "Vim support" "app-vim/rust-vim"
}
pkg_postrm() {

View File

@@ -9,8 +9,8 @@ PYTHON_COMPAT=( python3_{10..12} )
RUST_MAX_VER=${PV}
RUST_MIN_VER="$(ver_cut 1).$(($(ver_cut 2) - 1)).0"
inherit check-reqs estack flag-o-matic llvm-r1 multiprocessing \
multilib multilib-build python-any-r1 rust rust-toolchain toolchain-funcs verify-sig
inherit check-reqs estack flag-o-matic llvm-r1 multiprocessing multilib multilib-build \
optfeature python-any-r1 rust rust-toolchain toolchain-funcs verify-sig
if [[ ${PV} = *beta* ]]; then
betaver=${PV//*beta}
@@ -676,20 +676,43 @@ pkg_preinst() {
pkg_postinst() {
if has_version -b "dev-lang/rust:stable/$(ver_cut 1-2)"; then
local old_rust="dev-lang/rust:stable/$(ver_cut 1-2)"
if has_version -b ${old_rust}; then
# Be _extra_ careful here as we're removing files from the live filesystem
local f
local only_one_file=()
einfo "Tidying up libraries files from non-slotted \`${old_rust}\`."
for f in "${old_rust_libs[@]}"; do
[[ -f ${f} ]] || die "old_rust_libs array contains non-existent file"
local base_name="${f%-*}"
local ext="${f##*.}"
local matching_files=("${base_name}"-*.${ext})
if [[ ${#matching_files[@]} -ne 2 ]]; then
die "Expected exactly two files matching ${base_name}-\*.rlib, but found ${#matching_files[@]}"
fi
einfo "Removing old .rlib file ${f}"
rm "${f}" || die
case ${#matching_files[@]} in
2)
einfo "Removing old .${ext}: ${f}"
rm "${f}" || die
;;
1)
# Turns out fingerprints are not as unique as we'd thought, _sometimes_ they collide,
# so we may have already installed over the old file.
# We'll warn about this just in case, but it's probably fine.
only_one_file+=( "${matching_files[0]}" )
;;
*)
die "Expected one or two files matching ${base_name}-\*.rlib, but found ${#matching_files[@]}"
;;
esac
done
if [[ ${#only_one_file} -gt 0 ]]; then
einfo "While tidying up non-slotted rust libraries for \`${old_rust}\`,"
einfo "the following file(s) did not have a duplicate where one was expected:"
for f in "${only_one_file[@]}"; do
einfo " * ${f}"
done
einfo ""
einfo "This is unlikely to cause problems; the fingerprint for the library ended up being the same."
einfo "However, if you encounter any issues please report them to the Gentoo Rust Team."
fi
fi
eselect rust update
@@ -699,13 +722,8 @@ pkg_postinst() {
elog "for convenience they are installed under /usr/bin/rust-{gdb,lldb}-${PV}."
fi
if has_version app-editors/emacs; then
elog "install app-emacs/rust-mode to get emacs support for rust."
fi
if has_version app-editors/gvim || has_version app-editors/vim; then
elog "install app-vim/rust-vim to get vim support for rust."
fi
optfeature "Emacs support" "app-emacs/rust-mode"
optfeature "Vim support" "app-vim/rust-vim"
}
pkg_postrm() {

View File

@@ -9,8 +9,8 @@ PYTHON_COMPAT=( python3_{10..12} )
RUST_MAX_VER=${PV}
RUST_MIN_VER="$(ver_cut 1).$(($(ver_cut 2) - 1)).0"
inherit check-reqs estack flag-o-matic llvm-r1 multiprocessing \
multilib multilib-build python-any-r1 rust rust-toolchain toolchain-funcs verify-sig
inherit check-reqs estack flag-o-matic llvm-r1 multiprocessing multilib multilib-build \
optfeature python-any-r1 rust rust-toolchain toolchain-funcs verify-sig
if [[ ${PV} = *beta* ]]; then
betaver=${PV//*beta}
@@ -678,20 +678,43 @@ pkg_preinst() {
pkg_postinst() {
if has_version -b "dev-lang/rust:stable/$(ver_cut 1-2)"; then
local old_rust="dev-lang/rust:stable/$(ver_cut 1-2)"
if has_version -b ${old_rust}; then
# Be _extra_ careful here as we're removing files from the live filesystem
local f
local only_one_file=()
einfo "Tidying up libraries files from non-slotted \`${old_rust}\`."
for f in "${old_rust_libs[@]}"; do
[[ -f ${f} ]] || die "old_rust_libs array contains non-existent file"
local base_name="${f%-*}"
local ext="${f##*.}"
local matching_files=("${base_name}"-*.${ext})
if [[ ${#matching_files[@]} -ne 2 ]]; then
die "Expected exactly two files matching ${base_name}-\*.rlib, but found ${#matching_files[@]}"
fi
einfo "Removing old .rlib file ${f}"
rm "${f}" || die
case ${#matching_files[@]} in
2)
einfo "Removing old .${ext}: ${f}"
rm "${f}" || die
;;
1)
# Turns out fingerprints are not as unique as we'd thought, _sometimes_ they collide,
# so we may have already installed over the old file.
# We'll warn about this just in case, but it's probably fine.
only_one_file+=( "${matching_files[0]}" )
;;
*)
die "Expected one or two files matching ${base_name}-\*.rlib, but found ${#matching_files[@]}"
;;
esac
done
if [[ ${#only_one_file} -gt 0 ]]; then
einfo "While tidying up non-slotted rust libraries for \`${old_rust}\`,"
einfo "the following file(s) did not have a duplicate where one was expected:"
for f in "${only_one_file[@]}"; do
einfo " * ${f}"
done
einfo ""
einfo "This is unlikely to cause problems; the fingerprint for the library ended up being the same."
einfo "However, if you encounter any issues please report them to the Gentoo Rust Team."
fi
fi
eselect rust update
@@ -701,13 +724,8 @@ pkg_postinst() {
elog "for convenience they are installed under /usr/bin/rust-{gdb,lldb}-${PV}."
fi
if has_version app-editors/emacs; then
elog "install app-emacs/rust-mode to get emacs support for rust."
fi
if has_version app-editors/gvim || has_version app-editors/vim; then
elog "install app-vim/rust-vim to get vim support for rust."
fi
optfeature "Emacs support" "app-emacs/rust-mode"
optfeature "Vim support" "app-vim/rust-vim"
}
pkg_postrm() {

View File

@@ -9,8 +9,8 @@ PYTHON_COMPAT=( python3_{10..12} )
RUST_MAX_VER=${PV}
RUST_MIN_VER="$(ver_cut 1).$(($(ver_cut 2) - 1)).0"
inherit check-reqs estack flag-o-matic llvm-r1 multiprocessing \
multilib multilib-build python-any-r1 rust rust-toolchain toolchain-funcs verify-sig
inherit check-reqs estack flag-o-matic llvm-r1 multiprocessing multilib multilib-build \
optfeature python-any-r1 rust rust-toolchain toolchain-funcs verify-sig
if [[ ${PV} = *beta* ]]; then
betaver=${PV//*beta}
@@ -677,20 +677,43 @@ pkg_preinst() {
pkg_postinst() {
if has_version -b "dev-lang/rust:stable/$(ver_cut 1-2)"; then
local old_rust="dev-lang/rust:stable/$(ver_cut 1-2)"
if has_version -b ${old_rust}; then
# Be _extra_ careful here as we're removing files from the live filesystem
local f
local only_one_file=()
einfo "Tidying up libraries files from non-slotted \`${old_rust}\`."
for f in "${old_rust_libs[@]}"; do
[[ -f ${f} ]] || die "old_rust_libs array contains non-existent file"
local base_name="${f%-*}"
local ext="${f##*.}"
local matching_files=("${base_name}"-*.${ext})
if [[ ${#matching_files[@]} -ne 2 ]]; then
die "Expected exactly two files matching ${base_name}-\*.rlib, but found ${#matching_files[@]}"
fi
einfo "Removing old .rlib file ${f}"
rm "${f}" || die
case ${#matching_files[@]} in
2)
einfo "Removing old .${ext}: ${f}"
rm "${f}" || die
;;
1)
# Turns out fingerprints are not as unique as we'd thought, _sometimes_ they collide,
# so we may have already installed over the old file.
# We'll warn about this just in case, but it's probably fine.
only_one_file+=( "${matching_files[0]}" )
;;
*)
die "Expected one or two files matching ${base_name}-\*.rlib, but found ${#matching_files[@]}"
;;
esac
done
if [[ ${#only_one_file} -gt 0 ]]; then
einfo "While tidying up non-slotted rust libraries for \`${old_rust}\`,"
einfo "the following file(s) did not have a duplicate where one was expected:"
for f in "${only_one_file[@]}"; do
einfo " * ${f}"
done
einfo ""
einfo "This is unlikely to cause problems; the fingerprint for the library ended up being the same."
einfo "However, if you encounter any issues please report them to the Gentoo Rust Team."
fi
fi
eselect rust update
@@ -700,13 +723,8 @@ pkg_postinst() {
elog "for convenience they are installed under /usr/bin/rust-{gdb,lldb}-${PV}."
fi
if has_version app-editors/emacs; then
elog "install app-emacs/rust-mode to get emacs support for rust."
fi
if has_version app-editors/gvim || has_version app-editors/vim; then
elog "install app-vim/rust-vim to get vim support for rust."
fi
optfeature "Emacs support" "app-emacs/rust-mode"
optfeature "Vim support" "app-vim/rust-vim"
}
pkg_postrm() {

View File

@@ -9,8 +9,8 @@ PYTHON_COMPAT=( python3_{10..13} )
RUST_MAX_VER=${PV}
RUST_MIN_VER="$(ver_cut 1).$(($(ver_cut 2) - 1)).0"
inherit check-reqs estack flag-o-matic llvm-r1 multiprocessing \
multilib multilib-build python-any-r1 rust rust-toolchain toolchain-funcs verify-sig
inherit check-reqs estack flag-o-matic llvm-r1 multiprocessing multilib multilib-build \
optfeature python-any-r1 rust rust-toolchain toolchain-funcs verify-sig
if [[ ${PV} = *beta* ]]; then
betaver=${PV//*beta}
@@ -680,20 +680,43 @@ pkg_preinst() {
pkg_postinst() {
if has_version -b "dev-lang/rust:stable/$(ver_cut 1-2)"; then
local old_rust="dev-lang/rust:stable/$(ver_cut 1-2)"
if has_version -b ${old_rust}; then
# Be _extra_ careful here as we're removing files from the live filesystem
local f
local only_one_file=()
einfo "Tidying up libraries files from non-slotted \`${old_rust}\`."
for f in "${old_rust_libs[@]}"; do
[[ -f ${f} ]] || die "old_rust_libs array contains non-existent file"
local base_name="${f%-*}"
local ext="${f##*.}"
local matching_files=("${base_name}"-*.${ext})
if [[ ${#matching_files[@]} -ne 2 ]]; then
die "Expected exactly two files matching ${base_name}-\*.rlib, but found ${#matching_files[@]}"
fi
einfo "Removing old .rlib file ${f}"
rm "${f}" || die
case ${#matching_files[@]} in
2)
einfo "Removing old .${ext}: ${f}"
rm "${f}" || die
;;
1)
# Turns out fingerprints are not as unique as we'd thought, _sometimes_ they collide,
# so we may have already installed over the old file.
# We'll warn about this just in case, but it's probably fine.
only_one_file+=( "${matching_files[0]}" )
;;
*)
die "Expected one or two files matching ${base_name}-\*.rlib, but found ${#matching_files[@]}"
;;
esac
done
if [[ ${#only_one_file} -gt 0 ]]; then
einfo "While tidying up non-slotted rust libraries for \`${old_rust}\`,"
einfo "the following file(s) did not have a duplicate where one was expected:"
for f in "${only_one_file[@]}"; do
einfo " * ${f}"
done
einfo ""
einfo "This is unlikely to cause problems; the fingerprint for the library ended up being the same."
einfo "However, if you encounter any issues please report them to the Gentoo Rust Team."
fi
fi
eselect rust update
@@ -703,13 +726,8 @@ pkg_postinst() {
elog "for convenience they are installed under /usr/bin/rust-{gdb,lldb}-${PV}."
fi
if has_version app-editors/emacs; then
elog "install app-emacs/rust-mode to get emacs support for rust."
fi
if has_version app-editors/gvim || has_version app-editors/vim; then
elog "install app-vim/rust-vim to get vim support for rust."
fi
optfeature "Emacs support" "app-emacs/rust-mode"
optfeature "Vim support" "app-vim/rust-vim"
}
pkg_postrm() {

View File

@@ -9,8 +9,8 @@ PYTHON_COMPAT=( python3_{10..13} )
RUST_MAX_VER=${PV}
RUST_MIN_VER="$(ver_cut 1).$(($(ver_cut 2) - 1)).0"
inherit check-reqs estack flag-o-matic llvm-r1 multiprocessing \
multilib multilib-build python-any-r1 rust rust-toolchain toolchain-funcs verify-sig
inherit check-reqs estack flag-o-matic llvm-r1 multiprocessing multilib multilib-build \
optfeature python-any-r1 rust rust-toolchain toolchain-funcs verify-sig
if [[ ${PV} = *beta* ]]; then
betaver=${PV//*beta}
@@ -677,20 +677,43 @@ pkg_preinst() {
pkg_postinst() {
if has_version -b "dev-lang/rust:stable/$(ver_cut 1-2)"; then
local old_rust="dev-lang/rust:stable/$(ver_cut 1-2)"
if has_version -b ${old_rust}; then
# Be _extra_ careful here as we're removing files from the live filesystem
local f
local only_one_file=()
einfo "Tidying up libraries files from non-slotted \`${old_rust}\`."
for f in "${old_rust_libs[@]}"; do
[[ -f ${f} ]] || die "old_rust_libs array contains non-existent file"
local base_name="${f%-*}"
local ext="${f##*.}"
local matching_files=("${base_name}"-*.${ext})
if [[ ${#matching_files[@]} -ne 2 ]]; then
die "Expected exactly two files matching ${base_name}-\*.rlib, but found ${#matching_files[@]}"
fi
einfo "Removing old .rlib file ${f}"
rm "${f}" || die
case ${#matching_files[@]} in
2)
einfo "Removing old .${ext}: ${f}"
rm "${f}" || die
;;
1)
# Turns out fingerprints are not as unique as we'd thought, _sometimes_ they collide,
# so we may have already installed over the old file.
# We'll warn about this just in case, but it's probably fine.
only_one_file+=( "${matching_files[0]}" )
;;
*)
die "Expected one or two files matching ${base_name}-\*.rlib, but found ${#matching_files[@]}"
;;
esac
done
if [[ ${#only_one_file} -gt 0 ]]; then
einfo "While tidying up non-slotted rust libraries for \`${old_rust}\`,"
einfo "the following file(s) did not have a duplicate where one was expected:"
for f in "${only_one_file[@]}"; do
einfo " * ${f}"
done
einfo ""
einfo "This is unlikely to cause problems; the fingerprint for the library ended up being the same."
einfo "However, if you encounter any issues please report them to the Gentoo Rust Team."
fi
fi
eselect rust update
@@ -700,13 +723,8 @@ pkg_postinst() {
elog "for convenience they are installed under /usr/bin/rust-{gdb,lldb}-${PV}."
fi
if has_version app-editors/emacs; then
elog "install app-emacs/rust-mode to get emacs support for rust."
fi
if has_version app-editors/gvim || has_version app-editors/vim; then
elog "install app-vim/rust-vim to get vim support for rust."
fi
optfeature "Emacs support" "app-emacs/rust-mode"
optfeature "Vim support" "app-vim/rust-vim"
}
pkg_postrm() {

View File

@@ -681,20 +681,43 @@ pkg_preinst() {
pkg_postinst() {
if has_version -b "dev-lang/rust:stable/$(ver_cut 1-2)"; then
local old_rust="dev-lang/rust:stable/$(ver_cut 1-2)"
if has_version -b ${old_rust}; then
# Be _extra_ careful here as we're removing files from the live filesystem
local f
local only_one_file=()
einfo "Tidying up libraries files from non-slotted \`${old_rust}\`."
for f in "${old_rust_libs[@]}"; do
[[ -f ${f} ]] || die "old_rust_libs array contains non-existent file"
local base_name="${f%-*}"
local ext="${f##*.}"
local matching_files=("${base_name}"-*.${ext})
if [[ ${#matching_files[@]} -ne 2 ]]; then
die "Expected exactly two files matching ${base_name}-\*.rlib, but found ${#matching_files[@]}"
fi
einfo "Removing old .rlib file ${f}"
rm "${f}" || die
case ${#matching_files[@]} in
2)
einfo "Removing old .${ext}: ${f}"
rm "${f}" || die
;;
1)
# Turns out fingerprints are not as unique as we'd thought, _sometimes_ they collide,
# so we may have already installed over the old file.
# We'll warn about this just in case, but it's probably fine.
only_one_file+=( "${matching_files[0]}" )
;;
*)
die "Expected one or two files matching ${base_name}-\*.rlib, but found ${#matching_files[@]}"
;;
esac
done
if [[ ${#only_one_file} -gt 0 ]]; then
einfo "While tidying up non-slotted rust libraries for \`${old_rust}\`,"
einfo "the following file(s) did not have a duplicate where one was expected:"
for f in "${only_one_file[@]}"; do
einfo " * ${f}"
done
einfo ""
einfo "This is unlikely to cause problems; the fingerprint for the library ended up being the same."
einfo "However, if you encounter any issues please report them to the Gentoo Rust Team."
fi
fi
eselect rust update
@@ -704,13 +727,8 @@ pkg_postinst() {
elog "for convenience they are installed under /usr/bin/rust-{gdb,lldb}-${PV}."
fi
if has_version app-editors/emacs; then
optfeature "emacs support for rust" app-emacs/rust-mode
fi
if has_version app-editors/gvim || has_version app-editors/vim; then
optfeature "vim support for rust" app-vim/rust-vim
fi
optfeature "Emacs support" "app-emacs/rust-mode"
optfeature "Vim support" "app-vim/rust-vim"
}
pkg_postrm() {

View File

@@ -691,20 +691,43 @@ pkg_preinst() {
pkg_postinst() {
if has_version -b "dev-lang/rust:stable/$(ver_cut 1-2)"; then
local old_rust="dev-lang/rust:stable/$(ver_cut 1-2)"
if has_version -b ${old_rust}; then
# Be _extra_ careful here as we're removing files from the live filesystem
local f
local only_one_file=()
einfo "Tidying up libraries files from non-slotted \`${old_rust}\`."
for f in "${old_rust_libs[@]}"; do
[[ -f ${f} ]] || die "old_rust_libs array contains non-existent file"
local base_name="${f%-*}"
local ext="${f##*.}"
local matching_files=("${base_name}"-*.${ext})
if [[ ${#matching_files[@]} -ne 2 ]]; then
die "Expected exactly two files matching ${base_name}-\*.rlib, but found ${#matching_files[@]}"
fi
einfo "Removing old .rlib file ${f}"
rm "${f}" || die
case ${#matching_files[@]} in
2)
einfo "Removing old .${ext}: ${f}"
rm "${f}" || die
;;
1)
# Turns out fingerprints are not as unique as we'd thought, _sometimes_ they collide,
# so we may have already installed over the old file.
# We'll warn about this just in case, but it's probably fine.
only_one_file+=( "${matching_files[0]}" )
;;
*)
die "Expected one or two files matching ${base_name}-\*.rlib, but found ${#matching_files[@]}"
;;
esac
done
if [[ ${#only_one_file} -gt 0 ]]; then
einfo "While tidying up non-slotted rust libraries for \`${old_rust}\`,"
einfo "the following file(s) did not have a duplicate where one was expected:"
for f in "${only_one_file[@]}"; do
einfo " * ${f}"
done
einfo ""
einfo "This is unlikely to cause problems; the fingerprint for the library ended up being the same."
einfo "However, if you encounter any issues please report them to the Gentoo Rust Team."
fi
fi
eselect rust update
@@ -714,13 +737,8 @@ pkg_postinst() {
elog "for convenience they are installed under /usr/bin/rust-{gdb,lldb}-${PV}."
fi
if has_version app-editors/emacs; then
optfeature "emacs support for rust" app-emacs/rust-mode
fi
if has_version app-editors/gvim || has_version app-editors/vim; then
optfeature "vim support for rust" app-vim/rust-vim
fi
optfeature "Emacs support" "app-emacs/rust-mode"
optfeature "Vim support" "app-vim/rust-vim"
}
pkg_postrm() {

View File

@@ -7,6 +7,7 @@
# @AUTHOR:
# Doug Goldstein <cardoe@gentoo.org>
# Georgy Yakovlev <gyakovlev@gentoo.org>
# Matt Jolly <kangie@gentoo.org>
# @SUPPORTED_EAPIS: 8
# @PROVIDES: rust
# @BLURB: common functions and variables for cargo builds
@@ -30,6 +31,9 @@ fi
# Either the lowest slot supported by rust.eclass _or_
# reference the changelog for a particular feature requirement
# https://github.com/rust-lang/cargo/blob/master/CHANGELOG.md
# For reference the actual minimum version of cargo that can be used
# is 1.53.0 for `cargo update --offline`; updated to 1.71.1 with rust eclass.
# No need to enable usage of legacy rust versions in ebuilds; keep it as-is.
_CARGO_ECLASS_RUST_MIN_VER="1.71.1"
case ${EAPI} in
@@ -37,8 +41,10 @@ case ${EAPI} in
if [[ -n ${RUST_MIN_VER} ]]; then
# This is _very_ unlikely given that we leverage the rust eclass but just in case cargo requires a newer version
# than the oldest in-tree in future.
if ver_test "${RUST_MIN_VER}" -lt "${_CARGO_ECLASS_RUST_MIN_VER}"; then
die "RUST_MIN_VERSION must be at least ${_CARGO_ECLASS_RUST_MIN_VER}"
if [[ -z ${CARGO_BOOTSTRAP} ]]; then
if ver_test "${RUST_MIN_VER}" -lt "${_CARGO_ECLASS_RUST_MIN_VER}"; then
die "RUST_MIN_VERSION must be at least ${_CARGO_ECLASS_RUST_MIN_VER}"
fi
fi
else
RUST_MIN_VER="${_CARGO_ECLASS_RUST_MIN_VER}"
@@ -46,6 +52,10 @@ case ${EAPI} in
;;
esac
if [[ -n ${CRATE_PATHS_OVERRIDE} ]]; then
CRATES="${CRATES} ${CRATE_PATHS_OVERRIDE}"
fi
inherit flag-o-matic multiprocessing rust rust-toolchain toolchain-funcs
IUSE="${IUSE} debug"
@@ -76,6 +86,41 @@ ECARGO_VENDOR="${ECARGO_HOME}/gentoo"
# SRC_URI="${CARGO_CRATE_URIS}"
# @CODE
# @ECLASS_VARIABLE: CRATE_PATHS_OVERRIDE
# @DEFAULT_UNSET
# @PRE_INHERIT
# @DESCRIPTION:
# Bash string containing crates that will be used to override
# dependencies via generated `paths = ['/path/to/crate']` configuration.
# This is not "smart", _all crates_ which match the `Cargo.toml`
# for a given crate/path will be overridden, ignoring lockfiles,
# version constraints, etc.
#
# This should be used as a last resort where (e.g.) you are
# bootstrapping Rust and need to override a vendored crate
# with a newer version, and all versions in use are compatible.
#
# Crate names and versions must be separated by a `@`;
# multiple crates are separated by a space or newline.
# Crates in CRATE_PATHS_OVERRIDE are implicitly added to CRATES;
# they do not need to be listed.
#
# Example:
# @CODE
# CRATES="
# foo@1.2.3
# "
#
# CRATE_PATHS_OVERRIDE="
# openssl@0.10.35
# openssl-sys@0.9.65
# "
#
# inherit cargo
# ...
# SRC_URI="${CARGO_CRATE_URIS}"
# @CODE
# @ECLASS_VARIABLE: GIT_CRATES
# @DEFAULT_UNSET
# @PRE_INHERIT
@@ -109,6 +154,13 @@ ECARGO_VENDOR="${ECARGO_HOME}/gentoo"
# )
# @CODE
# @ECLASS_VARIABLE: CARGO_BOOTSTRAP
# @DEFAULT_UNSET
# @PRE_INHERIT
# @DESCRIPTION:
# Ignore `_CARGO_ECLASS_RUST_MIN_VER` checks.
# If you aren't bootstrapping Rust you probably don't need this.
# @ECLASS_VARIABLE: CARGO_OPTIONAL
# @DEFAULT_UNSET
# @PRE_INHERIT
@@ -265,6 +317,26 @@ cargo_crate_uris() {
echo "${CARGO_CRATE_URIS}"
}
# @FUNCTION: _cargo_gen_override_paths_config
# @INTERNAL
# @DESCRIPTION:
# Generate the TOML content for overriding crates globally using the package manager.
# This is called from within cargo_gen_config to insert the appropriate snippet
# into the generated config.toml. Does not support git crates.
_cargo_gen_override_paths_config() {
if [[ ! ${#CRATE_PATHS_OVERRIDE[@]} -gt 0 ]]; then
return
fi
local content override path
content=( 'paths = [' )
for override in ${CRATE_PATHS_OVERRIDE}; do
local path="${ECARGO_VENDOR}/${override//@/-}"
content+=( "'${path}'," )
done
content+=( ']' )
printf "%s\n" "${content[@]}"
}
# @FUNCTION: cargo_gen_config
# @DESCRIPTION:
# Generate the $CARGO_HOME/config.toml necessary to use our local registry and settings.
@@ -281,6 +353,8 @@ cargo_gen_config() {
mkdir -p "${ECARGO_HOME}" || die
cat > "${ECARGO_HOME}/config.toml" <<- _EOF_ || die "Failed to create cargo config"
$(_cargo_gen_override_paths_config)
[source.gentoo]
directory = "${ECARGO_VENDOR}"
@@ -299,6 +373,7 @@ cargo_gen_config() {
verbose = true
$([[ "${NOCOLOR}" = true || "${NOCOLOR}" = yes ]] && echo "color = 'never'")
$(_cargo_gen_git_config)
_EOF_
export CARGO_HOME="${ECARGO_HOME}"
@@ -346,6 +421,37 @@ cargo_target_dir() {
echo "${CARGO_TARGET_DIR:-target}/$(rust_abi)/$(usex debug debug release)"
}
# @FUNCTION: cargo_update_crates
# @USAGE:
# @DESCRIPTION:
# Helper function to call `cargo update --offline` with the given Cargo.toml.
# This will update Cargo.{toml,lock}. This should provide a straightforward
# approach to updating vulnerable crates in a package.
#
# To use: replace any vulnerable crates in ${CRATES} with updated (and compatible)
# versions, then call `cargo_update_crates` in src_prepare. If Cargo.toml is not
# in the root of ${S}, pass the path to the Cargo.toml as the first argument.
# It is up to the ebuild to ensure that the updated crates are compatible with the
# package and that no unexpected breakage occurs.
cargo_update_crates () {
debug-print-function ${FUNCNAME} "$@"
if [[ -z ${CARGO} ]]; then
die "CARGO is not set; was rust_pkg_setup run?"
fi
local path=${1:-"${S}/Cargo.toml"}
if [[ $# -gt 1 ]]; then
die "Usage: cargo_update_crates [path_to_Cargo.toml]"
fi
[[ -f ${path} ]] || die "${path} does not exist"
set -- "${CARGO}" update --offline --manifest-path "${path}"
einfo "${@}"
# This is overkill (we're not using rustflags (etc) here) but it's safe.
cargo_env "${@}" || die "Failed to update crates"
}
# @FUNCTION: cargo_src_unpack
# @DESCRIPTION:
# Unpacks the package and the cargo registry.

View File

@@ -76,6 +76,7 @@ declare -A -g -r _RUST_LLVM_MAP=(
["1.75.0"]=17
["1.74.1"]=17
["1.71.1"]=16
["1.54.0"]=12
)
# @ECLASS_VARIABLE: _RUST_SLOTS_ORDERED
@@ -94,6 +95,7 @@ declare -a -g -r _RUST_SLOTS_ORDERED=(
"1.75.0"
"1.74.1"
"1.71.1"
"1.54.0"
)
# == control variables ==