Merge master into staging-next
This commit is contained in:
@@ -664,6 +664,7 @@
|
||||
./services/mail/mailcatcher.nix
|
||||
./services/mail/mailhog.nix
|
||||
./services/mail/mailman.nix
|
||||
./services/mail/mailpit.nix
|
||||
./services/mail/mlmmj.nix
|
||||
./services/mail/nullmailer.nix
|
||||
./services/mail/offlineimap.nix
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
inherit (config.services.mailpit) instances;
|
||||
inherit (lib)
|
||||
cli
|
||||
concatStringsSep
|
||||
const
|
||||
filterAttrs
|
||||
getExe
|
||||
mapAttrs'
|
||||
mkIf
|
||||
mkOption
|
||||
nameValuePair
|
||||
types
|
||||
;
|
||||
|
||||
isNonNull = v: v != null;
|
||||
genCliFlags =
|
||||
settings: concatStringsSep " " (cli.toGNUCommandLine { } (filterAttrs (const isNonNull) settings));
|
||||
in
|
||||
{
|
||||
options.services.mailpit.instances = mkOption {
|
||||
default = { };
|
||||
type = types.attrsOf (
|
||||
types.submodule {
|
||||
freeformType = types.attrsOf (
|
||||
types.oneOf [
|
||||
types.str
|
||||
types.int
|
||||
types.bool
|
||||
]
|
||||
);
|
||||
options = {
|
||||
database = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
example = "mailpit.db";
|
||||
description = ''
|
||||
Specify the local database filename to store persistent data.
|
||||
If `null`, a temporary file will be created that will be removed when the application stops.
|
||||
It's recommended to specify a relative path. The database will be written into the service's
|
||||
state directory then.
|
||||
'';
|
||||
};
|
||||
max = mkOption {
|
||||
type = types.ints.unsigned;
|
||||
default = 500;
|
||||
description = ''
|
||||
Maximum number of emails to keep. If the number is exceeded, old emails
|
||||
will be deleted.
|
||||
|
||||
Set to `0` to never prune old emails.
|
||||
'';
|
||||
};
|
||||
listen = mkOption {
|
||||
default = "127.0.0.1:8025";
|
||||
type = types.str;
|
||||
description = ''
|
||||
HTTP bind interface and port for UI.
|
||||
'';
|
||||
};
|
||||
smtp = mkOption {
|
||||
default = "127.0.0.1:1025";
|
||||
type = types.str;
|
||||
description = ''
|
||||
SMTP bind interface and port.
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
);
|
||||
description = ''
|
||||
Configure mailpit instances. The attribute-set values are
|
||||
CLI flags passed to the `mailpit` CLI.
|
||||
|
||||
See [upstream docs](https://mailpit.axllent.org/docs/configuration/runtime-options/)
|
||||
for all available options.
|
||||
'';
|
||||
};
|
||||
|
||||
config = mkIf (instances != { }) {
|
||||
systemd.services = mapAttrs' (
|
||||
name: cfg:
|
||||
nameValuePair "mailpit-${name}" {
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "network-online.target" ];
|
||||
wants = [ "network-online.target" ];
|
||||
serviceConfig = {
|
||||
DynamicUser = true;
|
||||
StateDirectory = "mailpit";
|
||||
WorkingDirectory = "%S/mailpit";
|
||||
ExecStart = "${getExe pkgs.mailpit} ${genCliFlags cfg}";
|
||||
Restart = "on-failure";
|
||||
};
|
||||
}
|
||||
) instances;
|
||||
};
|
||||
|
||||
meta.maintainers = lib.teams.flyingcircus.members;
|
||||
}
|
||||
@@ -552,6 +552,7 @@ in {
|
||||
magnetico = handleTest ./magnetico.nix {};
|
||||
mailcatcher = handleTest ./mailcatcher.nix {};
|
||||
mailhog = handleTest ./mailhog.nix {};
|
||||
mailpit = handleTest ./mailpit.nix {};
|
||||
mailman = handleTest ./mailman.nix {};
|
||||
man = handleTest ./man.nix {};
|
||||
mariadb-galera = handleTest ./mysql/mariadb-galera.nix {};
|
||||
|
||||
@@ -31,8 +31,6 @@ let
|
||||
linux_5_15_hardened
|
||||
linux_6_1_hardened
|
||||
linux_6_6_hardened
|
||||
linux_6_8_hardened
|
||||
linux_6_9_hardened
|
||||
linux_rt_5_4
|
||||
linux_rt_5_10
|
||||
linux_rt_5_15
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
import ./make-test-python.nix (
|
||||
{ lib, ... }:
|
||||
{
|
||||
name = "mailpit";
|
||||
meta.maintainers = lib.teams.flyingcircus.members;
|
||||
|
||||
nodes.machine =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
services.mailpit.instances.default = { };
|
||||
|
||||
environment.systemPackages = with pkgs; [ swaks ];
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
|
||||
from json import loads
|
||||
|
||||
machine.wait_for_unit("mailpit-default.service")
|
||||
machine.wait_for_open_port(1025)
|
||||
machine.wait_for_open_port(8025)
|
||||
machine.succeed(
|
||||
'echo "this is the body of the email" | swaks --to root@example.org --body - --server localhost:1025'
|
||||
)
|
||||
|
||||
received = loads(machine.succeed("curl http://localhost:8025/api/v1/messages"))
|
||||
assert received['total'] == 1
|
||||
message = received["messages"][0]
|
||||
assert len(message['To']) == 1
|
||||
assert message['To'][0]['Address'] == 'root@example.org'
|
||||
assert "this is the body of the email" in message['Snippet']
|
||||
'';
|
||||
}
|
||||
)
|
||||
+26
-8
@@ -4660,9 +4660,12 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "deranged"
|
||||
version = "0.3.8"
|
||||
version = "0.3.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946"
|
||||
checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
|
||||
dependencies = [
|
||||
"powerfmt",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "derivative"
|
||||
@@ -9244,6 +9247,12 @@ dependencies = [
|
||||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-conv"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
|
||||
|
||||
[[package]]
|
||||
name = "num-derive"
|
||||
version = "0.4.2"
|
||||
@@ -14996,6 +15005,12 @@ dependencies = [
|
||||
"rand",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "powerfmt"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
|
||||
|
||||
[[package]]
|
||||
name = "pprof"
|
||||
version = "0.12.1"
|
||||
@@ -21682,14 +21697,16 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "time"
|
||||
version = "0.3.27"
|
||||
version = "0.3.36"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0bb39ee79a6d8de55f48f2293a830e040392f1c5f16e336bdd1788cd0aadce07"
|
||||
checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
|
||||
dependencies = [
|
||||
"deranged",
|
||||
"itoa",
|
||||
"libc",
|
||||
"num-conv",
|
||||
"num_threads",
|
||||
"powerfmt",
|
||||
"serde",
|
||||
"time-core",
|
||||
"time-macros",
|
||||
@@ -21697,16 +21714,17 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "time-core"
|
||||
version = "0.1.1"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
|
||||
checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
|
||||
|
||||
[[package]]
|
||||
name = "time-macros"
|
||||
version = "0.2.13"
|
||||
version = "0.2.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "733d258752e9303d392b94b75230d07b0b9c489350c69b851fc6c065fde3e8f9"
|
||||
checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf"
|
||||
dependencies = [
|
||||
"num-conv",
|
||||
"time-core",
|
||||
]
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{ fetchFromGitHub
|
||||
, fetchpatch
|
||||
, lib
|
||||
, openssl
|
||||
, pkg-config
|
||||
@@ -51,6 +52,15 @@ rustPlatform.buildRustPackage rec {
|
||||
};
|
||||
};
|
||||
|
||||
cargoPatches = [
|
||||
# NOTE: bump `time` dependency to be able to build with rust 1.80
|
||||
# should be removed on the next release
|
||||
(fetchpatch {
|
||||
url = "https://github.com/paritytech/polkadot-sdk/pull/5149.patch";
|
||||
hash = "sha256-FNG9XLeMRJOT6k7mcs6GemtQ3oUrH/hOYG0JNQP0akU=";
|
||||
})
|
||||
];
|
||||
|
||||
buildType = "production";
|
||||
|
||||
cargoBuildFlags = [ "-p" "polkadot" ];
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
{
|
||||
"packageVersion": "128.0.3-2",
|
||||
"packageVersion": "129.0-1",
|
||||
"source": {
|
||||
"rev": "128.0.3-2",
|
||||
"sha256": "1g1biavphqykj0zvi1brakrncj1h4gqhs1cy5mxlp4w4p7ahpv6d"
|
||||
"rev": "129.0-1",
|
||||
"sha256": "13wb54avaz2jsb5bz2jp3wn5bpraxfnvc2m93djzcacc8fd5fbwp"
|
||||
},
|
||||
"settings": {
|
||||
"rev": "1debc2d30949baff2d1e7df23e87900f1987a8ae",
|
||||
"sha256": "12xgjv40mihbyfsah26vvdyb4yirydc1a884v2chnca4f5q00lc2"
|
||||
"rev": "0d126722d7e10bb7fa81f473450484c778928b39",
|
||||
"sha256": "00i7j67nlfs8p9y2sylz4z4rylwhs98rd0idjpg0al0zga4jv7im"
|
||||
},
|
||||
"firefox": {
|
||||
"version": "128.0.3",
|
||||
"sha512": "52a0a1a6fa653f5a621a9e16e1937760c05a5ebc81a058ecc16b2c3d29d09d418dc5129deabed86ad2f82abdb3100969478a67f48b11616dc3b3e3698a1acf51"
|
||||
"version": "129.0",
|
||||
"sha512": "e406d00dc53c66a1ee6b56e7001efcdd8b323caa3676d66d874d39a99f44ac7cebf4c60d76b5d239ebcf834a75cecabf801a74a1d08a97a66ea5e8ec6c8f7c5b"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{ lib
|
||||
, stdenv
|
||||
, fetchurl
|
||||
, qmake
|
||||
, cmake
|
||||
, qttools
|
||||
, qtbase
|
||||
, qtdeclarative
|
||||
@@ -20,18 +20,18 @@
|
||||
let
|
||||
pname = "qownnotes";
|
||||
appname = "QOwnNotes";
|
||||
version = "24.8.3";
|
||||
version = "24.8.5";
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
inherit pname version;
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/pbek/QOwnNotes/releases/download/v${version}/qownnotes-${version}.tar.xz";
|
||||
hash = "sha256-lbNJT6IbIgTYLpsMWK6Nk0XXhw1De+wZgrH4DE1vDKg=";
|
||||
hash = "sha256-2aXKb9epApscoxt9I2oL6pl1jnGu6sbHTr9+pz6QJu4=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
qmake
|
||||
cmake
|
||||
qttools
|
||||
wrapQtAppsHook
|
||||
pkg-config
|
||||
@@ -47,8 +47,9 @@ stdenv.mkDerivation {
|
||||
botan2
|
||||
] ++ lib.optionals stdenv.isLinux [ qtwayland ];
|
||||
|
||||
qmakeFlags = [
|
||||
"USE_SYSTEM_BOTAN=1"
|
||||
cmakeFlags = [
|
||||
"-DQON_QT6_BUILD=ON"
|
||||
"-DBUILD_WITH_SYSTEM_BOTAN=ON"
|
||||
];
|
||||
|
||||
postInstall = ''
|
||||
|
||||
@@ -6,16 +6,16 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "bluetuith";
|
||||
version = "0.2.2";
|
||||
version = "0.2.3";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "darkhz";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-JwPTFMimGDZnESx6l72cK545rzyDWWTBU66t9bU49w0=";
|
||||
sha256 = "sha256-yXH/koNT4ec/SOZhSU01iPNAfD1MdMjM2+wNmjXWsrk=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-A0hUenuji3bfJghLRM2mvFbusrHm+tQ+LeRGzIETpbs=";
|
||||
vendorHash = "sha256-tEVzuhE0Di7edGa5eJHLLqOecCuoj02h91TsZiZU1PM=";
|
||||
|
||||
CGO_ENABLED = 0;
|
||||
|
||||
|
||||
@@ -10,13 +10,13 @@
|
||||
}:
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "cpuinfo";
|
||||
version = "0-unstable-2024-07-10";
|
||||
version = "0-unstable-2024-08-07";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "pytorch";
|
||||
repo = "cpuinfo";
|
||||
rev = "ca678952a9a8eaa6de112d154e8e104b22f9ab3f";
|
||||
hash = "sha256-UKy9TIiO/UJ5w+qLRlMd085CX2qtdVH2W3rtxB5r6MY=";
|
||||
rev = "16bfc1622c6902d6f91d316ec54894910c620325";
|
||||
hash = "sha256-LDqBH2O64PaVaqNvvjy/17kNpvfa60oP8VZ0GLeAAag=";
|
||||
};
|
||||
|
||||
passthru.updateScript = nix-update-script { extraArgs = [ "--version=branch" ]; };
|
||||
|
||||
@@ -47,13 +47,13 @@ let
|
||||
in
|
||||
stdenv'.mkDerivation (finalAttrs: {
|
||||
pname = "fastfetch";
|
||||
version = "2.21.0";
|
||||
version = "2.21.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "fastfetch-cli";
|
||||
repo = "fastfetch";
|
||||
rev = finalAttrs.version;
|
||||
hash = "sha256-1bWWwMzbzECWARhl3ULMVF5QhbvrV5ShVT382BnRGg8=";
|
||||
hash = "sha256-wh8k/+2Wj5XhYvBD+s7IHLGi7v7gxn6rxLHlZTvw+Rk=";
|
||||
};
|
||||
|
||||
outputs = [
|
||||
|
||||
@@ -6,11 +6,11 @@
|
||||
|
||||
appimageTools.wrapType2 rec {
|
||||
pname = "lunarclient";
|
||||
version = "3.2.12";
|
||||
version = "3.2.15";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://launcherupdates.lunarclientcdn.com/Lunar%20Client-${version}.AppImage";
|
||||
hash = "sha512-dqFFi5Vri5oEbyDdzKiWPF1mbSf0Qv2MBuEqF/rIs1aYMNjCQDu2CqTrhLtctu2VXxKlgzaqktFWKs9WMZayZA==";
|
||||
hash = "sha512-j2UuZXyjKev3me3b45/7NrWyfi3dbz8vgnEDF6m9Mv0ZT4CWi+A+h2V5DkJoUERWR8Pv4SJ4/GiwzftO9KSAZQ==";
|
||||
};
|
||||
|
||||
extraInstallCommands =
|
||||
|
||||
@@ -33,6 +33,7 @@ stdenv.mkDerivation rec {
|
||||
karchive
|
||||
kcoreaddons
|
||||
kconfigwidgets
|
||||
qtwayland
|
||||
];
|
||||
|
||||
passthru.updateScript = nix-update-script { };
|
||||
|
||||
+18
-6
@@ -1,23 +1,35 @@
|
||||
{ lib, stdenv, fetchFromGitHub, buildEnv
|
||||
, asio, boost, check, openssl, cmake
|
||||
, nixosTests
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchFromGitHub,
|
||||
asio,
|
||||
boost,
|
||||
check,
|
||||
openssl,
|
||||
cmake,
|
||||
nixosTests,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "mariadb-galera";
|
||||
version = "26.4.19";
|
||||
version = "26.4.20";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "codership";
|
||||
repo = "galera";
|
||||
rev = "release_${version}";
|
||||
hash = "sha256-DSYwOMBs7kxskTjEIO1AqXw+oAUeDXzX+qLNBuob0Jg=";
|
||||
hash = "sha256-R2YQtAuqPkOtcvjS5PPcqAqu153N2+0/WjZt96ZSI1A=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake ];
|
||||
|
||||
buildInputs = [ asio boost.dev check openssl ];
|
||||
buildInputs = [
|
||||
asio
|
||||
boost.dev
|
||||
check
|
||||
openssl
|
||||
];
|
||||
|
||||
preConfigure = ''
|
||||
# make sure bundled asio cannot be used, but leave behind license, because it gets installed
|
||||
@@ -1,26 +1,21 @@
|
||||
{ _7zz
|
||||
, buildDotnetModule
|
||||
, copyDesktopItems
|
||||
, desktop-file-utils
|
||||
, dotnetCorePackages
|
||||
, fetchFromGitHub
|
||||
, fontconfig
|
||||
, lib
|
||||
, libICE
|
||||
, libSM
|
||||
, libX11
|
||||
, nexusmods-app
|
||||
, runCommand
|
||||
, enableUnfree ? false # Set to true to support RAR format mods
|
||||
{
|
||||
_7zz,
|
||||
buildDotnetModule,
|
||||
copyDesktopItems,
|
||||
desktop-file-utils,
|
||||
dotnetCorePackages,
|
||||
fetchFromGitHub,
|
||||
fontconfig,
|
||||
lib,
|
||||
libICE,
|
||||
libSM,
|
||||
libX11,
|
||||
nexusmods-app,
|
||||
runCommand,
|
||||
pname ? "nexusmods-app",
|
||||
}:
|
||||
let
|
||||
_7zzWithOptionalUnfreeRarSupport = _7zz.override {
|
||||
inherit enableUnfree;
|
||||
};
|
||||
in
|
||||
buildDotnetModule rec {
|
||||
pname = "nexusmods-app";
|
||||
|
||||
inherit pname;
|
||||
version = "0.4.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
@@ -39,9 +34,7 @@ buildDotnetModule rec {
|
||||
projectFile = "src/NexusMods.App/NexusMods.App.csproj";
|
||||
testProjectFile = "NexusMods.App.sln";
|
||||
|
||||
nativeBuildInputs = [
|
||||
copyDesktopItems
|
||||
];
|
||||
nativeBuildInputs = [ copyDesktopItems ];
|
||||
|
||||
nugetDeps = ./deps.nix;
|
||||
|
||||
@@ -54,15 +47,15 @@ buildDotnetModule rec {
|
||||
'';
|
||||
|
||||
postPatch = ''
|
||||
ln --force --symbolic "${lib.getExe _7zzWithOptionalUnfreeRarSupport}" src/ArchiveManagement/NexusMods.FileExtractor/runtimes/linux-x64/native/7zz
|
||||
ln --force --symbolic "${lib.getExe _7zz}" src/ArchiveManagement/NexusMods.FileExtractor/runtimes/linux-x64/native/7zz
|
||||
|
||||
# for some reason these tests fail (intermittently?) with a zero timestamp
|
||||
touch tests/NexusMods.UI.Tests/WorkspaceSystem/*.verified.png
|
||||
'';
|
||||
|
||||
makeWrapperArgs = [
|
||||
"--prefix PATH : ${lib.makeBinPath [desktop-file-utils]}"
|
||||
"--set APPIMAGE $out/bin/${meta.mainProgram}" # Make associating with nxm links work on Linux
|
||||
"--prefix PATH : ${lib.makeBinPath [ desktop-file-utils ]}"
|
||||
"--set APPIMAGE ${placeholder "out"}/bin/${meta.mainProgram}" # Make associating with nxm links work on Linux
|
||||
];
|
||||
|
||||
runtimeDeps = [
|
||||
@@ -72,52 +65,62 @@ buildDotnetModule rec {
|
||||
libX11
|
||||
];
|
||||
|
||||
executables = [
|
||||
nexusmods-app.meta.mainProgram
|
||||
];
|
||||
executables = [ meta.mainProgram ];
|
||||
|
||||
doCheck = true;
|
||||
|
||||
dotnetTestFlags = [
|
||||
"--environment=USER=nobody"
|
||||
(lib.strings.concatStrings [
|
||||
(
|
||||
"--filter="
|
||||
(lib.strings.concatStrings (lib.strings.intersperse "&" ([
|
||||
"Category!=Disabled"
|
||||
"FlakeyTest!=True"
|
||||
"RequiresNetworking!=True"
|
||||
"FullyQualifiedName!=NexusMods.UI.Tests.ImageCacheTests.Test_LoadAndCache_RemoteImage"
|
||||
"FullyQualifiedName!=NexusMods.UI.Tests.ImageCacheTests.Test_LoadAndCache_ImageStoredFile"
|
||||
] ++ lib.optionals (! enableUnfree) [
|
||||
"FullyQualifiedName!=NexusMods.Games.FOMOD.Tests.FomodXmlInstallerTests.InstallsFilesSimple_UsingRar"
|
||||
])))
|
||||
])
|
||||
+ lib.strings.concatStringsSep "&" (
|
||||
[
|
||||
"Category!=Disabled"
|
||||
"FlakeyTest!=True"
|
||||
"RequiresNetworking!=True"
|
||||
"FullyQualifiedName!=NexusMods.UI.Tests.ImageCacheTests.Test_LoadAndCache_RemoteImage"
|
||||
"FullyQualifiedName!=NexusMods.UI.Tests.ImageCacheTests.Test_LoadAndCache_ImageStoredFile"
|
||||
]
|
||||
++ lib.optionals (!_7zz.meta.unfree) [
|
||||
"FullyQualifiedName!=NexusMods.Games.FOMOD.Tests.FomodXmlInstallerTests.InstallsFilesSimple_UsingRar"
|
||||
]
|
||||
)
|
||||
)
|
||||
];
|
||||
|
||||
passthru = {
|
||||
tests = {
|
||||
serve = runCommand "${pname}-test-serve" { } ''
|
||||
${nexusmods-app}/bin/${nexusmods-app.meta.mainProgram}
|
||||
touch $out
|
||||
'';
|
||||
help = runCommand "${pname}-test-help" { } ''
|
||||
${nexusmods-app}/bin/${nexusmods-app.meta.mainProgram} --help
|
||||
touch $out
|
||||
'';
|
||||
associate-nxm = runCommand "${pname}-test-associate-nxm" { } ''
|
||||
${nexusmods-app}/bin/${nexusmods-app.meta.mainProgram} associate-nxm
|
||||
touch $out
|
||||
'';
|
||||
list-tools = runCommand "${pname}-test-list-tools" { } ''
|
||||
${nexusmods-app}/bin/${nexusmods-app.meta.mainProgram} list-tools
|
||||
touch $out
|
||||
'';
|
||||
};
|
||||
tests =
|
||||
let
|
||||
runTest =
|
||||
name: script:
|
||||
runCommand "${pname}-test-${name}"
|
||||
{
|
||||
# TODO: use finalAttrs when buildDotnetModule has support
|
||||
nativeBuildInputs = [ nexusmods-app ];
|
||||
}
|
||||
''
|
||||
${script}
|
||||
touch $out
|
||||
'';
|
||||
in
|
||||
{
|
||||
serve = runTest "serve" ''
|
||||
NexusMods.App
|
||||
'';
|
||||
help = runTest "help" ''
|
||||
NexusMods.App --help
|
||||
'';
|
||||
associate-nxm = runTest "associate-nxm" ''
|
||||
NexusMods.App associate-nxm
|
||||
'';
|
||||
list-tools = runTest "list-tools" ''
|
||||
NexusMods.App list-tools
|
||||
'';
|
||||
};
|
||||
updateScript = ./update.bash;
|
||||
};
|
||||
|
||||
meta = {
|
||||
description = "Game mod installer, creator and manager";
|
||||
mainProgram = "NexusMods.App";
|
||||
homepage = "https://github.com/Nexus-Mods/NexusMods.App";
|
||||
changelog = "https://github.com/Nexus-Mods/NexusMods.App/releases/tag/${src.rev}";
|
||||
@@ -127,5 +130,32 @@ buildDotnetModule rec {
|
||||
MattSturgeon
|
||||
];
|
||||
platforms = lib.platforms.linux;
|
||||
description = "Game mod installer, creator and manager";
|
||||
longDescription = ''
|
||||
A mod installer, creator and manager for all your popular games.
|
||||
|
||||
Currently experimental and undergoing active development,
|
||||
new releases may include breaking changes!
|
||||
|
||||
${
|
||||
if _7zz.meta.unfree then
|
||||
''
|
||||
This "unfree" variant includes support for mods packaged as RAR archives.
|
||||
''
|
||||
else
|
||||
''
|
||||
It is strongly recommended that you use the "unfree" variant of this package,
|
||||
which provides support for mods packaged as RAR archives.
|
||||
|
||||
You can also enable unrar support manually, by overriding the `_7zz` used:
|
||||
|
||||
```nix
|
||||
pkgs.nexusmods-app.override {
|
||||
_7zz = pkgs._7zz-rar;
|
||||
}
|
||||
```
|
||||
''
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "okteto";
|
||||
version = "2.29.3";
|
||||
version = "2.30.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "okteto";
|
||||
repo = "okteto";
|
||||
rev = version;
|
||||
hash = "sha256-aU2yH33HVg9CHA5+NOWZUmhRC7W6yMjKIwyDM8E4e2g=";
|
||||
hash = "sha256-Mu5Cl+wNCDXjFn0+1IitWEaku6Fi8ykKL6GgIKr5CHk=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-7XZImCS9hv8ILYfGcoY3tMk0grswWbfpQrBKhghTfsY=";
|
||||
@@ -21,13 +21,13 @@ let
|
||||
in
|
||||
stdenv'.mkDerivation (finalAttrs: {
|
||||
pname = "renovate";
|
||||
version = "38.18.17";
|
||||
version = "38.27.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "renovatebot";
|
||||
repo = "renovate";
|
||||
rev = "refs/tags/${finalAttrs.version}";
|
||||
hash = "sha256-Mur4UH63unYjgwkj9Rscg9V2M38XLrsNuqz+mWn0wR4=";
|
||||
hash = "sha256-wVL7Ke38sweVDr2krUukIToBw/VXDucH+3axIsdD3DM=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
@@ -44,7 +44,7 @@ stdenv'.mkDerivation (finalAttrs: {
|
||||
|
||||
pnpmDeps = pnpm_9.fetchDeps {
|
||||
inherit (finalAttrs) pname version src;
|
||||
hash = "sha256-3XSseB0rjFv1bsJ5S2fCveFicSQFnTwz4MmjzC7t9Jw=";
|
||||
hash = "sha256-/HeKabcA7y4dCVtslIRcon0oAaai6JvR8nFkGZtO2vg=";
|
||||
};
|
||||
|
||||
env.COREPACK_ENABLE_STRICT = 0;
|
||||
|
||||
@@ -33,10 +33,10 @@
|
||||
|
||||
let
|
||||
# Keep these separate so the update script can regex them
|
||||
rpcs3GitVersion = "16711-501e9260b";
|
||||
rpcs3Version = "0.0.32-16711-501e9260b";
|
||||
rpcs3Revision = "501e9260b2f2c175c19e3a7e80a0afc7952a3f1e";
|
||||
rpcs3Hash = "sha256-qCTaCRx3Q7gUHNvcBlbHtQbeCwDe9pehWAEYiihH+LA=";
|
||||
rpcs3GitVersion = "16784-03a612487";
|
||||
rpcs3Version = "0.0.32-16784-03a612487";
|
||||
rpcs3Revision = "03a612487d5b840c858c900e33ce2e3bfb03d0b8";
|
||||
rpcs3Hash = "sha256-WMXRxxIHbTYlYDtzdM2YO5B58WGq6Pt2TaEhLcflpns=";
|
||||
|
||||
inherit (qt6Packages) qtbase qtmultimedia wrapQtAppsHook qtwayland;
|
||||
in
|
||||
|
||||
@@ -78,7 +78,7 @@ perlPackages.buildPerlPackage rec {
|
||||
ExporterLite
|
||||
FileBOM
|
||||
FileCopyRecursive
|
||||
FileNext
|
||||
# FileNext # https://github.com/LMS-Community/slimserver/pull/1140
|
||||
FileReadBackwards
|
||||
FileSlurp
|
||||
FileWhich
|
||||
@@ -125,10 +125,11 @@ perlPackages.buildPerlPackage rec {
|
||||
rm -rf Bin
|
||||
|
||||
# remove most vendored modules, keeping necessary ones
|
||||
mkdir -p CPAN_used/Class/C3/ CPAN_used/SQL
|
||||
mkdir -p CPAN_used/Class/C3/ CPAN_used/SQL/ CPAN_used/File/
|
||||
rm -r CPAN/SQL/Abstract/Limit.pm
|
||||
cp -rv CPAN/Class/C3/Componentised.pm CPAN_used/Class/C3/
|
||||
cp -rv CPAN/DBIx CPAN_used/
|
||||
cp -rv CPAN/File/Next.pm CPAN_used/File/
|
||||
cp -rv CPAN/Log CPAN_used/
|
||||
cp -rv CPAN/SQL/* CPAN_used/SQL/
|
||||
rm -r CPAN
|
||||
|
||||
+22
-19
@@ -1,28 +1,31 @@
|
||||
{ lib
|
||||
, stdenv
|
||||
, fetchzip
|
||||
, makeDesktopItem
|
||||
, nix-update-script
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchzip,
|
||||
makeDesktopItem,
|
||||
nix-update-script,
|
||||
|
||||
, copyDesktopItems
|
||||
, icoutils
|
||||
, makeWrapper
|
||||
copyDesktopItems,
|
||||
icoutils,
|
||||
makeWrapper,
|
||||
|
||||
, ffmpeg
|
||||
, gtk2
|
||||
, hunspell
|
||||
, mono
|
||||
, mpv
|
||||
, tesseract4
|
||||
ffmpeg,
|
||||
gtk2,
|
||||
hunspell,
|
||||
mono,
|
||||
mpv,
|
||||
tesseract4,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "subtitleedit";
|
||||
version = "4.0.6";
|
||||
version = "4.0.7";
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://github.com/SubtitleEdit/subtitleedit/releases/download/${version}/SE${lib.replaceStrings [ "." ] [ "" ] version}.zip";
|
||||
hash = "sha256-ipAqnF7rpSXccWkyTysUBrD0/mnv5AEA5GuxMJjW9Dg=";
|
||||
url = "https://github.com/SubtitleEdit/subtitleedit/releases/download/${version}/SE${
|
||||
lib.replaceStrings [ "." ] [ "" ] version
|
||||
}.zip";
|
||||
hash = "sha256-7BTW0wqlxyxtXu4aBVQXMQ1mUdSINn+S6W7XPL5pcSI=";
|
||||
stripRoot = false;
|
||||
};
|
||||
|
||||
@@ -74,7 +77,7 @@ stdenv.mkDerivation rec {
|
||||
exec = "subtitleedit";
|
||||
icon = "subtitleedit";
|
||||
comment = meta.description;
|
||||
categories = [ "Video" ];
|
||||
categories = [ "AudioVideo" ];
|
||||
})
|
||||
];
|
||||
|
||||
@@ -92,6 +95,6 @@ stdenv.mkDerivation rec {
|
||||
license = licenses.gpl3Plus;
|
||||
platforms = platforms.all;
|
||||
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
|
||||
maintainers = [ ];
|
||||
maintainers = with maintainers; [ paveloom ];
|
||||
};
|
||||
}
|
||||
@@ -18,13 +18,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "elementary-onboarding";
|
||||
version = "7.2.0";
|
||||
version = "8.0.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "elementary";
|
||||
repo = "onboarding";
|
||||
rev = version;
|
||||
sha256 = "sha256-5vEKQUGg5KQSheM6tSK8uieEfCqlY6pABfPb/333FHU=";
|
||||
sha256 = "sha256-oG6L2t99BWeu8C6kE6IKgyc57Q8D1O9fdEMLnRA6AWY=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -5,12 +5,28 @@ let
|
||||
version = "8.1.29";
|
||||
hash = "sha256-h6YDEyY/L1M/GA5xknLKXkfNmITU7DyTcgGY6v+uCCc=";
|
||||
extraPatches = [
|
||||
# Fix build with libxml 2.12+.
|
||||
# Fix build with libxml2 2.12+.
|
||||
# Patch from https://github.com/php/php-src/commit/0a39890c967aa57225bb6bdf4821aff7a3a3c082
|
||||
(fetchpatch {
|
||||
url = "https://github.com/php/php-src/commit/0a39890c967aa57225bb6bdf4821aff7a3a3c082.patch";
|
||||
hash = "sha256-HvpTL7aXO9gr4glFdhqUWQPrG8TYTlvbNINq33M3zS0=";
|
||||
})
|
||||
# Fix tests with libxml2 2.12
|
||||
(fetchpatch {
|
||||
url = "https://github.com/php/php-src/commit/061058a9b1bbd90d27d97d79aebcf2b5029767b0.patch";
|
||||
hash = "sha256-0hOlAG+pOYp/gUU0MUMZvzWpgr0ncJi5GB8IeNxxyEU=";
|
||||
excludes = [
|
||||
"NEWS"
|
||||
];
|
||||
})
|
||||
# Backport of PHP_LIBXML_IGNORE_DEPRECATIONS_START and PHP_LIBXML_IGNORE_DEPRECATIONS_END
|
||||
# Required for libxml2 2.13 compatibility patch.
|
||||
./php81-fix-libxml2-2.13-compatibility.patch
|
||||
# Fix build with libxml2 2.13+. Has to be applied after libxml2 2.12 patch.
|
||||
(fetchpatch {
|
||||
url = "https://github.com/php/php-src/commit/9b4f6b09d58a4e54ee60443bf9a8b166852c03e0.patch";
|
||||
hash = "sha256-YC3I0BQi3o3+VmRu/UqpqPpaSC+ekPqzbORTHftbPvY=";
|
||||
})
|
||||
];
|
||||
});
|
||||
in
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
diff --git a/ext/libxml/php_libxml.h b/ext/libxml/php_libxml.h
|
||||
index a1011f0b17..7a7622c482 100644
|
||||
--- a/ext/libxml/php_libxml.h
|
||||
+++ b/ext/libxml/php_libxml.h
|
||||
@@ -119,6 +119,23 @@ PHP_LIBXML_API void php_libxml_shutdown(void);
|
||||
ZEND_TSRMLS_CACHE_EXTERN()
|
||||
#endif
|
||||
|
||||
+#if defined(__clang__)
|
||||
+# define PHP_LIBXML_IGNORE_DEPRECATIONS_START \
|
||||
+ _Pragma("clang diagnostic push") \
|
||||
+ _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"")
|
||||
+# define PHP_LIBXML_IGNORE_DEPRECATIONS_END \
|
||||
+ _Pragma("clang diagnostic pop")
|
||||
+#elif defined(__GNUC__)
|
||||
+# define PHP_LIBXML_IGNORE_DEPRECATIONS_START \
|
||||
+ _Pragma("GCC diagnostic push") \
|
||||
+ _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
|
||||
+# define PHP_LIBXML_IGNORE_DEPRECATIONS_END \
|
||||
+ _Pragma("GCC diagnostic pop")
|
||||
+#else
|
||||
+# define PHP_LIBXML_IGNORE_DEPRECATIONS_START
|
||||
+# define PHP_LIBXML_IGNORE_DEPRECATIONS_END
|
||||
+#endif
|
||||
+
|
||||
/* Other extension may override the global state options, these global options
|
||||
* are copied initially to ctxt->options. Set the options to a known good value.
|
||||
* See libxml2 globals.c and parserInternals.c.
|
||||
@@ -93,7 +93,7 @@ let
|
||||
|
||||
in {
|
||||
inherit lib pkgs stdenv;
|
||||
inherit (python.passthru) isPy27 isPy37 isPy38 isPy39 isPy310 isPy311 isPy3k isPyPy pythonAtLeast pythonOlder;
|
||||
inherit (python.passthru) isPy27 isPy37 isPy38 isPy39 isPy310 isPy311 isPy312 isPy3k isPyPy pythonAtLeast pythonOlder;
|
||||
inherit buildPythonPackage buildPythonApplication;
|
||||
inherit hasPythonModule requiredPythonModules makePythonPath disabled disabledIf;
|
||||
inherit toPythonModule toPythonApplication;
|
||||
|
||||
@@ -226,7 +226,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
))
|
||||
(lib.concatStringsSep "\n")
|
||||
]}
|
||||
# A symlink to ${lib.getDev pmix}/bin/pmixcc upstreeam puts here as well
|
||||
# A symlink to $\{lib.getDev pmix}/bin/pmixcc upstreeam puts here as well
|
||||
# from some reason.
|
||||
moveToOutput "bin/pcc" "''${!outputDev}"
|
||||
|
||||
|
||||
@@ -9,14 +9,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "aiorussound";
|
||||
version = "2.2.2";
|
||||
version = "2.3.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "noahhusby";
|
||||
repo = "aiorussound";
|
||||
rev = version;
|
||||
hash = "sha256-X7KdIjfPNZSsSXYN1gVqTpcgM00V1YG3ihxutmYnb6Y=";
|
||||
rev = "refs/tags/${version}";
|
||||
hash = "sha256-wFpW+X10dGezMnzjGJsXyWMy6H8PtzhQFRCaf+A2L74=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -1,37 +1,41 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
click,
|
||||
fetchFromGitHub,
|
||||
poetry-core,
|
||||
pytest-asyncio,
|
||||
pytest-cov-stub,
|
||||
pytest-timeout,
|
||||
pytestCheckHook,
|
||||
pythonOlder,
|
||||
rich,
|
||||
typer,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "aiovlc";
|
||||
version = "0.3.2";
|
||||
format = "setuptools";
|
||||
version = "0.4.0";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.9";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "MartinHjelmare";
|
||||
repo = pname;
|
||||
repo = "aiovlc";
|
||||
rev = "refs/tags/v${version}";
|
||||
hash = "sha256-+IpWX661Axl2Ke1NGN6W9CMMQMEu7EQ/2PeRkkByAxI=";
|
||||
hash = "sha256-wUtoL3e22ufyzB7MJH0EuxE4WyxKQXEgThAOw23AwLM=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace pyproject.toml --replace \
|
||||
" --cov=aiovlc --cov-report=term-missing:skip-covered" ""
|
||||
'';
|
||||
build-system = [ poetry-core ];
|
||||
|
||||
propagatedBuildInputs = [ click ];
|
||||
dependencies = [
|
||||
rich
|
||||
typer
|
||||
];
|
||||
|
||||
nativeCheckInputs = [
|
||||
pytest-asyncio
|
||||
pytest-cov-stub
|
||||
pytest-timeout
|
||||
pytestCheckHook
|
||||
];
|
||||
|
||||
@@ -366,7 +366,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "boto3-stubs";
|
||||
version = "1.34.158";
|
||||
version = "1.34.160";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
@@ -374,7 +374,7 @@ buildPythonPackage rec {
|
||||
src = fetchPypi {
|
||||
pname = "boto3_stubs";
|
||||
inherit version;
|
||||
hash = "sha256-APECk1mT4NCQQnrHkqTsU5Dk1nD6w5xbXNQ9mb0Ejc4=";
|
||||
hash = "sha256-xrHf6zyuZz7tWW8BQJM54uC5VaUkGhbO5p8pMD2bN94=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "botocore-stubs";
|
||||
version = "1.34.158";
|
||||
version = "1.34.160";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
@@ -18,7 +18,7 @@ buildPythonPackage rec {
|
||||
src = fetchPypi {
|
||||
pname = "botocore_stubs";
|
||||
inherit version;
|
||||
hash = "sha256-XeDJ5uZ4cLEyBmTcUL9T2/beUiksuW2PCBNYkU8KAQ4=";
|
||||
hash = "sha256-kAlT8/km0gVQV3ZTX9ExBH74lRlzTx5TZdA+y67FPNk=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ poetry-core ];
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
fetchPypi,
|
||||
git,
|
||||
gitpython,
|
||||
krb5,
|
||||
krb5-c, # C krb5 library, not PyPI krb5
|
||||
mock,
|
||||
pytestCheckHook,
|
||||
pythonOlder,
|
||||
@@ -23,7 +23,7 @@ buildPythonPackage rec {
|
||||
hash = "sha256-YzKjG43biRbTZKtzSUHHhtzOfcZfzISHDFolqzrBjL8=";
|
||||
};
|
||||
|
||||
buildInputs = [ krb5 ];
|
||||
buildInputs = [ krb5-c ];
|
||||
|
||||
propagatedBuildInputs = [
|
||||
git
|
||||
|
||||
@@ -13,14 +13,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "elevenlabs";
|
||||
version = "1.6.1";
|
||||
version = "1.7.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "elevenlabs";
|
||||
repo = "elevenlabs-python";
|
||||
rev = "refs/tags/v${version}";
|
||||
hash = "sha256-IjsAd2QLYFbYRFQoZgcrKNxBUbD6+mILKkwH6E/mjyU=";
|
||||
hash = "sha256-wRgDKaSNSdpOJLVeYx2gTbtQ8rcxEAjrxvCI9W1v5V4=";
|
||||
};
|
||||
|
||||
build-system = [ poetry-core ];
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchPypi,
|
||||
setuptools,
|
||||
pyarrow,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "feather-format";
|
||||
version = "0.4.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
|
||||
hash = "sha256-RfZ+N0XTlNTxYMptY2u/1Pi2jQEZncFkm25IfT6HiQM=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
dependencies = [ pyarrow ];
|
||||
|
||||
pythonImportsCheck = [ "feather" ];
|
||||
doCheck = false; # no tests
|
||||
|
||||
meta = {
|
||||
description = "Simple wrapper library to the Apache Arrow-based Feather File Format";
|
||||
homepage = "https://github.com/wesm/feather";
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ sigmanificient ];
|
||||
};
|
||||
}
|
||||
@@ -40,14 +40,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "graphrag";
|
||||
version = "0.2.2";
|
||||
version = "0.3.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "microsoft";
|
||||
repo = "graphrag";
|
||||
rev = "refs/tags/v${version}";
|
||||
hash = "sha256-X4mhnKSaQQo0i10EsdaDtMgKwfBxFvOOrkDrkUM2cQI=";
|
||||
hash = "sha256-QPUxDMKO2qxF5qrk+vJCrJxyGwVWv7655YAVCis+XwM=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
@@ -117,6 +117,7 @@ buildPythonPackage rec {
|
||||
"test_find"
|
||||
"test_run_extract_entities_multiple_documents"
|
||||
"test_run_extract_entities_single_document"
|
||||
"test_sort_context_max_tokens"
|
||||
];
|
||||
|
||||
meta = {
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
|
||||
# build-system
|
||||
cython,
|
||||
krb5,
|
||||
setuptools,
|
||||
|
||||
# dependencies
|
||||
@@ -15,6 +14,7 @@
|
||||
|
||||
# native dependencies
|
||||
GSS,
|
||||
krb5-c, # C krb5 library, not PyPI krb5
|
||||
|
||||
# tests
|
||||
parameterized,
|
||||
@@ -38,7 +38,7 @@ buildPythonPackage rec {
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace setup.py \
|
||||
--replace 'get_output(f"{kc} gssapi --prefix")' '"${lib.getDev krb5}"'
|
||||
--replace 'get_output(f"{kc} gssapi --prefix")' '"${lib.getDev krb5-c}"'
|
||||
'';
|
||||
|
||||
env = lib.optionalAttrs (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) {
|
||||
@@ -47,7 +47,7 @@ buildPythonPackage rec {
|
||||
|
||||
build-system = [
|
||||
cython
|
||||
krb5
|
||||
krb5-c
|
||||
setuptools
|
||||
];
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
pythonOlder,
|
||||
fetchPypi,
|
||||
substituteAll,
|
||||
findutils,
|
||||
krb5,
|
||||
krb5-c,
|
||||
pythonOlder,
|
||||
setuptools,
|
||||
substituteAll,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
@@ -24,9 +24,10 @@ buildPythonPackage rec {
|
||||
patches = [
|
||||
(substituteAll {
|
||||
src = ./fix-paths.patch;
|
||||
inherit findutils krb5;
|
||||
inherit findutils;
|
||||
krb5 = krb5-c;
|
||||
# krb5-config is in dev output
|
||||
krb5Dev = krb5.dev;
|
||||
krb5Dev = krb5-c.dev;
|
||||
})
|
||||
];
|
||||
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
cython,
|
||||
fetchPypi,
|
||||
k5test,
|
||||
krb5-c, # C krb5 library
|
||||
pytestCheckHook,
|
||||
pythonOlder,
|
||||
setuptools,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "krb5";
|
||||
version = "0.6.0";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
hash = "sha256-cSugkvvjoo7BiCC7Gx7SzBA3t1xccDP5cMaoyXu9Egk=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
cython
|
||||
setuptools
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ krb5-c ];
|
||||
|
||||
nativeCheckInputs = [
|
||||
k5test
|
||||
pytestCheckHook
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "krb5" ];
|
||||
|
||||
meta = with lib; {
|
||||
changelog = "https://github.com/jborean93/pykrb5/blob/v${version}/CHANGELOG.md";
|
||||
description = "Kerberos API bindings for Python";
|
||||
homepage = "https://github.com/jborean93/pykrb5";
|
||||
license = licenses.mit;
|
||||
maintainers = teams.deshaw.members;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
setuptools,
|
||||
requests,
|
||||
beautifulsoup4,
|
||||
feather-format,
|
||||
joblib,
|
||||
openpyxl,
|
||||
pandas,
|
||||
pyarrow,
|
||||
xlrd,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "nemosis";
|
||||
version = "3.7.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "UNSW-CEEM";
|
||||
repo = "NEMOSIS";
|
||||
rev = "refs/tags/v${version}";
|
||||
hash = "sha256-7jIPBTvL7Y3945GEpa1/DQVdbPsSxVdYoOFTIaIgPag=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
dependencies = [
|
||||
beautifulsoup4
|
||||
feather-format
|
||||
joblib
|
||||
openpyxl
|
||||
pandas
|
||||
pyarrow
|
||||
requests
|
||||
xlrd
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "nemosis" ];
|
||||
doCheck = false; # require network and patching
|
||||
|
||||
meta = {
|
||||
description = "Downloader of historical data published by the Australian Energy Market Operator";
|
||||
homepage = "https://github.com/UNSW-CEEM/NEMOSIS";
|
||||
license = lib.licenses.gpl3Only;
|
||||
maintainers = with lib.maintainers; [ sigmanificient ];
|
||||
};
|
||||
}
|
||||
@@ -8,23 +8,26 @@
|
||||
requests,
|
||||
requests-toolbelt,
|
||||
responses,
|
||||
setuptools,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "proxmoxer";
|
||||
version = "2.0.1";
|
||||
format = "setuptools";
|
||||
version = "2.1.0";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = pname;
|
||||
repo = pname;
|
||||
owner = "proxmoxer";
|
||||
repo = "proxmoxer";
|
||||
rev = "refs/tags/${version}";
|
||||
hash = "sha256-kwD6yJhVTaVAAUVA6k4r6HZy4w+MPDF7DfJBS8wGE/c=";
|
||||
hash = "sha256-bwNv9eBuatMAWZ/ZOoF4VUZFIYAxJDEEwGQaAwPWcHY=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
build-system = [ setuptools ];
|
||||
|
||||
dependencies = [
|
||||
paramiko
|
||||
requests
|
||||
];
|
||||
@@ -40,6 +43,11 @@ buildPythonPackage rec {
|
||||
"tests/test_openssh.py"
|
||||
];
|
||||
|
||||
disabledTests = [
|
||||
# Tests require openssh_wrapper which is outdated and not available
|
||||
"test_repr_openssh"
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "proxmoxer" ];
|
||||
|
||||
meta = with lib; {
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
{
|
||||
aiohttp,
|
||||
aioresponses,
|
||||
buildPythonPackage,
|
||||
fetchPypi,
|
||||
fetchFromGitHub,
|
||||
lib,
|
||||
poetry-core,
|
||||
pytest-asyncio,
|
||||
pytestCheckHook,
|
||||
xmltodict,
|
||||
}:
|
||||
|
||||
@@ -12,9 +15,11 @@ buildPythonPackage rec {
|
||||
version = "0.4.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
hash = "sha256-qMbwrRD7ZUsHHOLF9yPvAxiTmJ8vJX1cyHX+4ONtsQ8=";
|
||||
src = fetchFromGitHub {
|
||||
owner = "LouisChrist";
|
||||
repo = "pyblu";
|
||||
rev = "refs/tags/v${version}";
|
||||
hash = "sha256-Pj0L9D5j+5koqhbpr4maa8aLGka1FghKkMEbyKi/D3E=";
|
||||
};
|
||||
|
||||
build-system = [ poetry-core ];
|
||||
@@ -26,9 +31,11 @@ buildPythonPackage rec {
|
||||
|
||||
pythonImportsCheck = [ "pyblu" ];
|
||||
|
||||
# no tests on PyPI, no tags on GitHub
|
||||
# https://github.com/LouisChrist/pyblu/issues/19
|
||||
doCheck = false;
|
||||
nativeCheckInputs = [
|
||||
aioresponses
|
||||
pytest-asyncio
|
||||
pytestCheckHook
|
||||
];
|
||||
|
||||
meta = {
|
||||
description = "BluOS API client";
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
lib,
|
||||
fetchPypi,
|
||||
buildPythonPackage,
|
||||
krb5,
|
||||
krb5-c, # C krb5 library, not PyPI krb5
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
@@ -15,12 +15,13 @@ buildPythonPackage rec {
|
||||
hash = "sha256-nXAevY/FlsmdMVXVukWBO9WQjSbvg7oK3SUO22IqvtQ=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ krb5 ]; # for krb5-config
|
||||
nativeBuildInputs = [ krb5-c ]; # for krb5-config
|
||||
|
||||
buildInputs = [ krb5 ];
|
||||
buildInputs = [ krb5-c ];
|
||||
|
||||
# there are no tests
|
||||
doCheck = false;
|
||||
|
||||
pythonImportsCheck = [ "kerberos" ];
|
||||
|
||||
meta = with lib; {
|
||||
|
||||
@@ -4,10 +4,8 @@
|
||||
buildPythonPackage,
|
||||
cryptography,
|
||||
fetchFromGitHub,
|
||||
gssapi,
|
||||
httpcore,
|
||||
httpx,
|
||||
krb5,
|
||||
psrpcore,
|
||||
psutil,
|
||||
pyspnego,
|
||||
@@ -52,11 +50,7 @@ buildPythonPackage rec {
|
||||
|
||||
passthru.optional-dependencies = {
|
||||
credssp = [ requests-credssp ];
|
||||
kerberos = [
|
||||
# pyspnego[kerberos] will have those two dependencies
|
||||
gssapi
|
||||
krb5
|
||||
];
|
||||
kerberos = pyspnego.optional-dependencies.kerberos;
|
||||
named_pipe = [ psutil ];
|
||||
ssh = [ asyncssh ];
|
||||
};
|
||||
|
||||
@@ -3,8 +3,6 @@
|
||||
buildPythonPackage,
|
||||
cryptography,
|
||||
fetchFromGitHub,
|
||||
gssapi,
|
||||
krb5,
|
||||
pyspnego,
|
||||
pytestCheckHook,
|
||||
pythonOlder,
|
||||
@@ -34,11 +32,7 @@ buildPythonPackage rec {
|
||||
nativeCheckInputs = [ pytestCheckHook ];
|
||||
|
||||
passthru.optional-dependencies = {
|
||||
kerberos = [
|
||||
# pyspnego[kerberos] will have those two dependencies
|
||||
gssapi
|
||||
krb5
|
||||
];
|
||||
kerberos = pyspnego.optional-dependencies.kerberos;
|
||||
};
|
||||
|
||||
pythonImportsCheck = [ "requests_credssp" ];
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
buildPythonPackage,
|
||||
cryptography,
|
||||
fetchFromGitHub,
|
||||
pykerberos,
|
||||
pyspnego,
|
||||
pytest-mock,
|
||||
pytestCheckHook,
|
||||
@@ -28,21 +27,14 @@ buildPythonPackage rec {
|
||||
propagatedBuildInputs = [
|
||||
cryptography
|
||||
requests
|
||||
pykerberos
|
||||
pyspnego
|
||||
];
|
||||
] ++ pyspnego.optional-dependencies.kerberos;
|
||||
|
||||
nativeCheckInputs = [
|
||||
pytestCheckHook
|
||||
pytest-mock
|
||||
];
|
||||
|
||||
# avoid needing to package krb5
|
||||
postPatch = ''
|
||||
substituteInPlace setup.py \
|
||||
--replace "pyspnego[kerberos]" "pyspnego"
|
||||
'';
|
||||
|
||||
pythonImportsCheck = [ "requests_kerberos" ];
|
||||
|
||||
meta = with lib; {
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "tencentcloud-sdk-python";
|
||||
version = "3.0.1210";
|
||||
version = "3.0.1211";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.9";
|
||||
@@ -19,7 +19,7 @@ buildPythonPackage rec {
|
||||
owner = "TencentCloud";
|
||||
repo = "tencentcloud-sdk-python";
|
||||
rev = "refs/tags/${version}";
|
||||
hash = "sha256-TdT6PK+vzkHuptV1i3LvPxvFGgtBBrkRIzJgyvPJG9w=";
|
||||
hash = "sha256-/NIFYBZXVV/v83EGG2HDLvpErOZW/61jQ/+C3Lc3Zs4=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "testcontainers";
|
||||
version = "4.7.2";
|
||||
version = "4.8.0";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.9";
|
||||
@@ -21,7 +21,7 @@ buildPythonPackage rec {
|
||||
owner = "testcontainers";
|
||||
repo = "testcontainers-python";
|
||||
rev = "refs/tags/testcontainers-v${version}";
|
||||
hash = "sha256-cmMuX3tKVGe4F+dQlOqQSTS/e49oWuudOekeL/j0YFw=";
|
||||
hash = "sha256-4PYtWn3NqGYe4BrYTG/CwPAdPVFkdUyFuAxwGQvd6y8=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
||||
@@ -7,12 +7,12 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "types-html5lib";
|
||||
version = "1.1.11.20240228";
|
||||
version = "1.1.11.20240806";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
hash = "sha256-InNrcpnmBexLpTnUhpHpBf0MYcPqYQrMWZIiMtyEzt4=";
|
||||
hash = "sha256-gGDcmLr2PWeWp2W7vICf/596OD9uOprdUm+BTAhlRe8=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ setuptools ];
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
{
|
||||
lib,
|
||||
beautifulsoup4,
|
||||
buildPythonPackage,
|
||||
cssselect,
|
||||
fetchFromGitHub,
|
||||
html5lib,
|
||||
lxml,
|
||||
pdm-backend,
|
||||
pyright,
|
||||
pytestCheckHook,
|
||||
pythonOlder,
|
||||
setuptools,
|
||||
setuptools-scm,
|
||||
typeguard,
|
||||
types-beautifulsoup4,
|
||||
typing-extensions,
|
||||
@@ -15,7 +17,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "types-lxml";
|
||||
version = "2024.02.09";
|
||||
version = "2024.08.07";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.8";
|
||||
@@ -24,20 +26,20 @@ buildPythonPackage rec {
|
||||
owner = "abelcheung";
|
||||
repo = "types-lxml";
|
||||
rev = "refs/tags/${version}";
|
||||
hash = "sha256-vmRbzfwlGGxd64KX8j4B3O9c7kg7hXSsCEYq3WAFdmk=";
|
||||
hash = "sha256-odllaOqqVGI/k84cro5YXkhDlUx+BRSe5WWwYWXhCY0=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
setuptools
|
||||
setuptools-scm
|
||||
];
|
||||
build-system = [ pdm-backend ];
|
||||
|
||||
propagatedBuildInputs = [
|
||||
dependencies = [
|
||||
cssselect
|
||||
types-beautifulsoup4
|
||||
typing-extensions
|
||||
];
|
||||
|
||||
nativeCheckInputs = [
|
||||
beautifulsoup4
|
||||
html5lib
|
||||
lxml
|
||||
pyright
|
||||
pytestCheckHook
|
||||
|
||||
@@ -6,14 +6,14 @@
|
||||
|
||||
python3.pkgs.buildPythonApplication rec {
|
||||
pname = "checkov";
|
||||
version = "3.2.221";
|
||||
version = "3.2.223";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "bridgecrewio";
|
||||
repo = "checkov";
|
||||
rev = "refs/tags/${version}";
|
||||
hash = "sha256-reidEqm5qKNbYM5n3OsdtuBQ2HZfRdUKboU34nibvfU=";
|
||||
hash = "sha256-NK1Ka3m9XQJish5d8Z0UiaTLEDot+rekEjC5peZ7FV4=";
|
||||
};
|
||||
|
||||
patches = [ ./flake8-compat-5.x.patch ];
|
||||
|
||||
@@ -65,38 +65,4 @@
|
||||
name = "export-rt-sched-migrate";
|
||||
patch = ./export-rt-sched-migrate.patch;
|
||||
};
|
||||
|
||||
rust_1_75 = {
|
||||
name = "rust-1.75.patch";
|
||||
patch = ./rust-1.75.patch;
|
||||
};
|
||||
|
||||
rust_1_76 = {
|
||||
name = "rust-1.76.patch";
|
||||
patch = fetchurl {
|
||||
name = "rust-1.76.patch";
|
||||
url = "https://lore.kernel.org/rust-for-linux/20240217002638.57373-2-ojeda@kernel.org/raw";
|
||||
hash = "sha256-q3iNBo8t4b1Rn5k5lau2myqOAqdA/9V9A+ok2jGkLdY=";
|
||||
};
|
||||
};
|
||||
|
||||
rust_1_77-6_8 = {
|
||||
name = "rust-1.77.patch";
|
||||
patch = ./rust-1.77-6.8.patch;
|
||||
};
|
||||
|
||||
rust_1_77-6_9 = {
|
||||
name = "rust-1.77.patch";
|
||||
patch = ./rust-1.77.patch;
|
||||
};
|
||||
|
||||
rust_1_78 = {
|
||||
name = "rust-1.78.patch";
|
||||
patch = fetchpatch {
|
||||
name = "rust-1.78.patch";
|
||||
url = "https://lore.kernel.org/rust-for-linux/20240401212303.537355-4-ojeda@kernel.org/raw";
|
||||
excludes = [ "Documentation/process/changes.rst" ]; # Conflicts on 6.8.
|
||||
hash = "sha256-EZ+Qa9z1AtAv08e72M7BEsCZi9UK572gmW+AR62a8EM=";
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,373 +0,0 @@
|
||||
From 77007eef13d52d0a5df9706d47078c4e1390a0a9 Mon Sep 17 00:00:00 2001
|
||||
From: Miguel Ojeda <ojeda@kernel.org>
|
||||
Date: Sun, 24 Dec 2023 18:21:28 +0100
|
||||
Subject: [PATCH] rust: upgrade to Rust 1.75.0
|
||||
|
||||
This is the next upgrade to the Rust toolchain, from 1.74.1 to 1.75.0
|
||||
(i.e. the latest) [1].
|
||||
|
||||
See the upgrade policy [2] and the comments on the first upgrade in
|
||||
commit 3ed03f4da06e ("rust: upgrade to Rust 1.68.2").
|
||||
|
||||
# Unstable features
|
||||
|
||||
The `const_maybe_uninit_zeroed` unstable feature [3] was stabilized in
|
||||
Rust 1.75.0, which we were using in the PHYLIB abstractions.
|
||||
|
||||
The only unstable features allowed to be used outside the `kernel` crate
|
||||
are still `new_uninit,offset_of`, though other code to be upstreamed
|
||||
may increase the list.
|
||||
|
||||
Please see [4] for details.
|
||||
|
||||
# Other improvements
|
||||
|
||||
Rust 1.75.0 stabilized `pointer_byte_offsets` [5] which we could
|
||||
potentially use as an alternative for `ptr_metadata` in the future.
|
||||
|
||||
# Required changes
|
||||
|
||||
For this upgrade, no changes were required (i.e. on our side).
|
||||
|
||||
# `alloc` upgrade and reviewing
|
||||
|
||||
The vast majority of changes are due to our `alloc` fork being upgraded
|
||||
at once.
|
||||
|
||||
There are two kinds of changes to be aware of: the ones coming from
|
||||
upstream, which we should follow as closely as possible, and the updates
|
||||
needed in our added fallible APIs to keep them matching the newer
|
||||
infallible APIs coming from upstream.
|
||||
|
||||
Instead of taking a look at the diff of this patch, an alternative
|
||||
approach is reviewing a diff of the changes between upstream `alloc` and
|
||||
the kernel's. This allows to easily inspect the kernel additions only,
|
||||
especially to check if the fallible methods we already have still match
|
||||
the infallible ones in the new version coming from upstream.
|
||||
|
||||
Another approach is reviewing the changes introduced in the additions in
|
||||
the kernel fork between the two versions. This is useful to spot
|
||||
potentially unintended changes to our additions.
|
||||
|
||||
To apply these approaches, one may follow steps similar to the following
|
||||
to generate a pair of patches that show the differences between upstream
|
||||
Rust and the kernel (for the subset of `alloc` we use) before and after
|
||||
applying this patch:
|
||||
|
||||
# Get the difference with respect to the old version.
|
||||
git -C rust checkout $(linux/scripts/min-tool-version.sh rustc)
|
||||
git -C linux ls-tree -r --name-only HEAD -- rust/alloc |
|
||||
cut -d/ -f3- |
|
||||
grep -Fv README.md |
|
||||
xargs -IPATH cp rust/library/alloc/src/PATH linux/rust/alloc/PATH
|
||||
git -C linux diff --patch-with-stat --summary -R > old.patch
|
||||
git -C linux restore rust/alloc
|
||||
|
||||
# Apply this patch.
|
||||
git -C linux am rust-upgrade.patch
|
||||
|
||||
# Get the difference with respect to the new version.
|
||||
git -C rust checkout $(linux/scripts/min-tool-version.sh rustc)
|
||||
git -C linux ls-tree -r --name-only HEAD -- rust/alloc |
|
||||
cut -d/ -f3- |
|
||||
grep -Fv README.md |
|
||||
xargs -IPATH cp rust/library/alloc/src/PATH linux/rust/alloc/PATH
|
||||
git -C linux diff --patch-with-stat --summary -R > new.patch
|
||||
git -C linux restore rust/alloc
|
||||
|
||||
Now one may check the `new.patch` to take a look at the additions (first
|
||||
approach) or at the difference between those two patches (second
|
||||
approach). For the latter, a side-by-side tool is recommended.
|
||||
|
||||
Link: https://github.com/rust-lang/rust/blob/stable/RELEASES.md#version-1750-2023-12-28 [1]
|
||||
Link: https://rust-for-linux.com/rust-version-policy [2]
|
||||
Link: https://github.com/rust-lang/rust/issues/91850 [3]
|
||||
Link: https://github.com/Rust-for-Linux/linux/issues/2 [4]
|
||||
Link: https://github.com/rust-lang/rust/issues/96283 [5]
|
||||
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
|
||||
Link: https://lore.kernel.org/lkml/20231224172128.271447-1-ojeda@kernel.org/
|
||||
Signed-off-by: Alyssa Ross <hi@alyssa.is>
|
||||
---
|
||||
Documentation/process/changes.rst | 2 +-
|
||||
rust/alloc/alloc.rs | 9 ++++++++-
|
||||
rust/alloc/boxed.rs | 20 ++++++++++++--------
|
||||
rust/alloc/lib.rs | 7 ++++---
|
||||
rust/alloc/raw_vec.rs | 19 +++++++++++++++----
|
||||
rust/alloc/vec/mod.rs | 16 ++++++++++------
|
||||
scripts/min-tool-version.sh | 2 +-
|
||||
7 files changed, 51 insertions(+), 24 deletions(-)
|
||||
|
||||
diff --git a/Documentation/process/changes.rst b/Documentation/process/changes.rst
|
||||
index 169f67773518..52284fdbaf23 100644
|
||||
--- a/Documentation/process/changes.rst
|
||||
+++ b/Documentation/process/changes.rst
|
||||
@@ -31,7 +31,7 @@ you probably needn't concern yourself with pcmciautils.
|
||||
====================== =============== ========================================
|
||||
GNU C 5.1 gcc --version
|
||||
Clang/LLVM (optional) 11.0.0 clang --version
|
||||
-Rust (optional) 1.74.1 rustc --version
|
||||
+Rust (optional) 1.75.0 rustc --version
|
||||
bindgen (optional) 0.65.1 bindgen --version
|
||||
GNU make 3.82 make --version
|
||||
bash 4.2 bash --version
|
||||
diff --git a/rust/alloc/alloc.rs b/rust/alloc/alloc.rs
|
||||
index 150e13750ff7..8a6be8c98173 100644
|
||||
--- a/rust/alloc/alloc.rs
|
||||
+++ b/rust/alloc/alloc.rs
|
||||
@@ -379,13 +379,20 @@ const fn ct_error(_: Layout) -> ! {
|
||||
panic!("allocation failed");
|
||||
}
|
||||
|
||||
+ #[inline]
|
||||
fn rt_error(layout: Layout) -> ! {
|
||||
unsafe {
|
||||
__rust_alloc_error_handler(layout.size(), layout.align());
|
||||
}
|
||||
}
|
||||
|
||||
- unsafe { core::intrinsics::const_eval_select((layout,), ct_error, rt_error) }
|
||||
+ #[cfg(not(feature = "panic_immediate_abort"))]
|
||||
+ unsafe {
|
||||
+ core::intrinsics::const_eval_select((layout,), ct_error, rt_error)
|
||||
+ }
|
||||
+
|
||||
+ #[cfg(feature = "panic_immediate_abort")]
|
||||
+ ct_error(layout)
|
||||
}
|
||||
|
||||
// For alloc test `std::alloc::handle_alloc_error` can be used directly.
|
||||
diff --git a/rust/alloc/boxed.rs b/rust/alloc/boxed.rs
|
||||
index 9620eba17268..f5f40778a193 100644
|
||||
--- a/rust/alloc/boxed.rs
|
||||
+++ b/rust/alloc/boxed.rs
|
||||
@@ -161,7 +161,7 @@
|
||||
use core::marker::Unsize;
|
||||
use core::mem::{self, SizedTypeProperties};
|
||||
use core::ops::{
|
||||
- CoerceUnsized, Deref, DerefMut, DispatchFromDyn, Generator, GeneratorState, Receiver,
|
||||
+ CoerceUnsized, Coroutine, CoroutineState, Deref, DerefMut, DispatchFromDyn, Receiver,
|
||||
};
|
||||
use core::pin::Pin;
|
||||
use core::ptr::{self, NonNull, Unique};
|
||||
@@ -211,7 +211,7 @@ impl<T> Box<T> {
|
||||
/// ```
|
||||
/// let five = Box::new(5);
|
||||
/// ```
|
||||
- #[cfg(all(not(no_global_oom_handling)))]
|
||||
+ #[cfg(not(no_global_oom_handling))]
|
||||
#[inline(always)]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[must_use]
|
||||
@@ -2110,28 +2110,28 @@ fn as_mut(&mut self) -> &mut T {
|
||||
#[stable(feature = "pin", since = "1.33.0")]
|
||||
impl<T: ?Sized, A: Allocator> Unpin for Box<T, A> where A: 'static {}
|
||||
|
||||
-#[unstable(feature = "generator_trait", issue = "43122")]
|
||||
-impl<G: ?Sized + Generator<R> + Unpin, R, A: Allocator> Generator<R> for Box<G, A>
|
||||
+#[unstable(feature = "coroutine_trait", issue = "43122")]
|
||||
+impl<G: ?Sized + Coroutine<R> + Unpin, R, A: Allocator> Coroutine<R> for Box<G, A>
|
||||
where
|
||||
A: 'static,
|
||||
{
|
||||
type Yield = G::Yield;
|
||||
type Return = G::Return;
|
||||
|
||||
- fn resume(mut self: Pin<&mut Self>, arg: R) -> GeneratorState<Self::Yield, Self::Return> {
|
||||
+ fn resume(mut self: Pin<&mut Self>, arg: R) -> CoroutineState<Self::Yield, Self::Return> {
|
||||
G::resume(Pin::new(&mut *self), arg)
|
||||
}
|
||||
}
|
||||
|
||||
-#[unstable(feature = "generator_trait", issue = "43122")]
|
||||
-impl<G: ?Sized + Generator<R>, R, A: Allocator> Generator<R> for Pin<Box<G, A>>
|
||||
+#[unstable(feature = "coroutine_trait", issue = "43122")]
|
||||
+impl<G: ?Sized + Coroutine<R>, R, A: Allocator> Coroutine<R> for Pin<Box<G, A>>
|
||||
where
|
||||
A: 'static,
|
||||
{
|
||||
type Yield = G::Yield;
|
||||
type Return = G::Return;
|
||||
|
||||
- fn resume(mut self: Pin<&mut Self>, arg: R) -> GeneratorState<Self::Yield, Self::Return> {
|
||||
+ fn resume(mut self: Pin<&mut Self>, arg: R) -> CoroutineState<Self::Yield, Self::Return> {
|
||||
G::resume((*self).as_mut(), arg)
|
||||
}
|
||||
}
|
||||
@@ -2448,4 +2448,8 @@ fn cause(&self) -> Option<&dyn core::error::Error> {
|
||||
fn source(&self) -> Option<&(dyn core::error::Error + 'static)> {
|
||||
core::error::Error::source(&**self)
|
||||
}
|
||||
+
|
||||
+ fn provide<'b>(&'b self, request: &mut core::error::Request<'b>) {
|
||||
+ core::error::Error::provide(&**self, request);
|
||||
+ }
|
||||
}
|
||||
diff --git a/rust/alloc/lib.rs b/rust/alloc/lib.rs
|
||||
index 9c7ea73da108..345cf5c9cf92 100644
|
||||
--- a/rust/alloc/lib.rs
|
||||
+++ b/rust/alloc/lib.rs
|
||||
@@ -80,6 +80,8 @@
|
||||
not(no_sync),
|
||||
target_has_atomic = "ptr"
|
||||
))]
|
||||
+#![cfg_attr(not(bootstrap), doc(rust_logo))]
|
||||
+#![cfg_attr(not(bootstrap), feature(rustdoc_internals))]
|
||||
#![no_std]
|
||||
#![needs_allocator]
|
||||
// Lints:
|
||||
@@ -115,7 +117,6 @@
|
||||
#![feature(const_eval_select)]
|
||||
#![feature(const_maybe_uninit_as_mut_ptr)]
|
||||
#![feature(const_maybe_uninit_write)]
|
||||
-#![feature(const_maybe_uninit_zeroed)]
|
||||
#![feature(const_pin)]
|
||||
#![feature(const_refs_to_cell)]
|
||||
#![feature(const_size_of_val)]
|
||||
@@ -141,7 +142,7 @@
|
||||
#![feature(maybe_uninit_uninit_array)]
|
||||
#![feature(maybe_uninit_uninit_array_transpose)]
|
||||
#![feature(pattern)]
|
||||
-#![feature(pointer_byte_offsets)]
|
||||
+#![feature(ptr_addr_eq)]
|
||||
#![feature(ptr_internals)]
|
||||
#![feature(ptr_metadata)]
|
||||
#![feature(ptr_sub_ptr)]
|
||||
@@ -168,7 +169,7 @@
|
||||
//
|
||||
// Language features:
|
||||
// tidy-alphabetical-start
|
||||
-#![cfg_attr(not(test), feature(generator_trait))]
|
||||
+#![cfg_attr(not(test), feature(coroutine_trait))]
|
||||
#![cfg_attr(test, feature(panic_update_hook))]
|
||||
#![cfg_attr(test, feature(test))]
|
||||
#![feature(allocator_internals)]
|
||||
diff --git a/rust/alloc/raw_vec.rs b/rust/alloc/raw_vec.rs
|
||||
index a7425582a323..f1b8cec8cc62 100644
|
||||
--- a/rust/alloc/raw_vec.rs
|
||||
+++ b/rust/alloc/raw_vec.rs
|
||||
@@ -338,10 +338,13 @@ pub fn reserve_for_push(&mut self, len: usize) {
|
||||
/// The same as `reserve`, but returns on errors instead of panicking or aborting.
|
||||
pub fn try_reserve(&mut self, len: usize, additional: usize) -> Result<(), TryReserveError> {
|
||||
if self.needs_to_grow(len, additional) {
|
||||
- self.grow_amortized(len, additional)
|
||||
- } else {
|
||||
- Ok(())
|
||||
+ self.grow_amortized(len, additional)?;
|
||||
}
|
||||
+ unsafe {
|
||||
+ // Inform the optimizer that the reservation has succeeded or wasn't needed
|
||||
+ core::intrinsics::assume(!self.needs_to_grow(len, additional));
|
||||
+ }
|
||||
+ Ok(())
|
||||
}
|
||||
|
||||
/// The same as `reserve_for_push`, but returns on errors instead of panicking or aborting.
|
||||
@@ -378,7 +381,14 @@ pub fn try_reserve_exact(
|
||||
len: usize,
|
||||
additional: usize,
|
||||
) -> Result<(), TryReserveError> {
|
||||
- if self.needs_to_grow(len, additional) { self.grow_exact(len, additional) } else { Ok(()) }
|
||||
+ if self.needs_to_grow(len, additional) {
|
||||
+ self.grow_exact(len, additional)?;
|
||||
+ }
|
||||
+ unsafe {
|
||||
+ // Inform the optimizer that the reservation has succeeded or wasn't needed
|
||||
+ core::intrinsics::assume(!self.needs_to_grow(len, additional));
|
||||
+ }
|
||||
+ Ok(())
|
||||
}
|
||||
|
||||
/// Shrinks the buffer down to the specified capacity. If the given amount
|
||||
@@ -569,6 +579,7 @@ fn alloc_guard(alloc_size: usize) -> Result<(), TryReserveError> {
|
||||
// ensure that the code generation related to these panics is minimal as there's
|
||||
// only one location which panics rather than a bunch throughout the module.
|
||||
#[cfg(not(no_global_oom_handling))]
|
||||
+#[cfg_attr(not(feature = "panic_immediate_abort"), inline(never))]
|
||||
fn capacity_overflow() -> ! {
|
||||
panic!("capacity overflow");
|
||||
}
|
||||
diff --git a/rust/alloc/vec/mod.rs b/rust/alloc/vec/mod.rs
|
||||
index 41ca71805ef0..0d95fd7ef337 100644
|
||||
--- a/rust/alloc/vec/mod.rs
|
||||
+++ b/rust/alloc/vec/mod.rs
|
||||
@@ -1376,7 +1376,7 @@ pub fn as_mut_slice(&mut self) -> &mut [T] {
|
||||
/// [`as_mut_ptr`]: Vec::as_mut_ptr
|
||||
/// [`as_ptr`]: Vec::as_ptr
|
||||
#[stable(feature = "vec_as_ptr", since = "1.37.0")]
|
||||
- #[cfg_attr(not(bootstrap), rustc_never_returns_null_ptr)]
|
||||
+ #[rustc_never_returns_null_ptr]
|
||||
#[inline]
|
||||
pub fn as_ptr(&self) -> *const T {
|
||||
// We shadow the slice method of the same name to avoid going through
|
||||
@@ -1436,7 +1436,7 @@ pub fn as_ptr(&self) -> *const T {
|
||||
/// [`as_mut_ptr`]: Vec::as_mut_ptr
|
||||
/// [`as_ptr`]: Vec::as_ptr
|
||||
#[stable(feature = "vec_as_ptr", since = "1.37.0")]
|
||||
- #[cfg_attr(not(bootstrap), rustc_never_returns_null_ptr)]
|
||||
+ #[rustc_never_returns_null_ptr]
|
||||
#[inline]
|
||||
pub fn as_mut_ptr(&mut self) -> *mut T {
|
||||
// We shadow the slice method of the same name to avoid going through
|
||||
@@ -1565,7 +1565,8 @@ pub unsafe fn set_len(&mut self, new_len: usize) {
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub fn swap_remove(&mut self, index: usize) -> T {
|
||||
#[cold]
|
||||
- #[inline(never)]
|
||||
+ #[cfg_attr(not(feature = "panic_immediate_abort"), inline(never))]
|
||||
+ #[track_caller]
|
||||
fn assert_failed(index: usize, len: usize) -> ! {
|
||||
panic!("swap_remove index (is {index}) should be < len (is {len})");
|
||||
}
|
||||
@@ -1606,7 +1607,8 @@ fn assert_failed(index: usize, len: usize) -> ! {
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub fn insert(&mut self, index: usize, element: T) {
|
||||
#[cold]
|
||||
- #[inline(never)]
|
||||
+ #[cfg_attr(not(feature = "panic_immediate_abort"), inline(never))]
|
||||
+ #[track_caller]
|
||||
fn assert_failed(index: usize, len: usize) -> ! {
|
||||
panic!("insertion index (is {index}) should be <= len (is {len})");
|
||||
}
|
||||
@@ -1667,7 +1669,7 @@ fn assert_failed(index: usize, len: usize) -> ! {
|
||||
#[track_caller]
|
||||
pub fn remove(&mut self, index: usize) -> T {
|
||||
#[cold]
|
||||
- #[inline(never)]
|
||||
+ #[cfg_attr(not(feature = "panic_immediate_abort"), inline(never))]
|
||||
#[track_caller]
|
||||
fn assert_failed(index: usize, len: usize) -> ! {
|
||||
panic!("removal index (is {index}) should be < len (is {len})");
|
||||
@@ -2097,6 +2099,7 @@ pub fn pop(&mut self) -> Option<T> {
|
||||
} else {
|
||||
unsafe {
|
||||
self.len -= 1;
|
||||
+ core::intrinsics::assume(self.len < self.capacity());
|
||||
Some(ptr::read(self.as_ptr().add(self.len())))
|
||||
}
|
||||
}
|
||||
@@ -2299,7 +2302,8 @@ pub fn split_off(&mut self, at: usize) -> Self
|
||||
A: Clone,
|
||||
{
|
||||
#[cold]
|
||||
- #[inline(never)]
|
||||
+ #[cfg_attr(not(feature = "panic_immediate_abort"), inline(never))]
|
||||
+ #[track_caller]
|
||||
fn assert_failed(at: usize, len: usize) -> ! {
|
||||
panic!("`at` split index (is {at}) should be <= len (is {len})");
|
||||
}
|
||||
diff --git a/scripts/min-tool-version.sh b/scripts/min-tool-version.sh
|
||||
index c62066825f53..bcc7d4247290 100755
|
||||
--- a/scripts/min-tool-version.sh
|
||||
+++ b/scripts/min-tool-version.sh
|
||||
@@ -31,7 +31,7 @@ llvm)
|
||||
fi
|
||||
;;
|
||||
rustc)
|
||||
- echo 1.74.1
|
||||
+ echo 1.75.0
|
||||
;;
|
||||
bindgen)
|
||||
echo 0.65.1
|
||||
--
|
||||
2.43.0
|
||||
|
||||
@@ -1,799 +0,0 @@
|
||||
From 82a754271336c7736fb0350692be85fecb30e38e Mon Sep 17 00:00:00 2001
|
||||
From: Miguel Ojeda <ojeda@kernel.org>
|
||||
Date: Sat, 17 Feb 2024 01:27:17 +0100
|
||||
Subject: [PATCH] rust: upgrade to Rust 1.77.1
|
||||
|
||||
This is the next upgrade to the Rust toolchain, from 1.76.0 to 1.77.1
|
||||
(i.e. the latest) [1].
|
||||
|
||||
See the upgrade policy [2] and the comments on the first upgrade in
|
||||
commit 3ed03f4da06e ("rust: upgrade to Rust 1.68.2").
|
||||
|
||||
# Unstable features
|
||||
|
||||
The `offset_of` feature (single-field `offset_of!`) that we were using
|
||||
got stabilized in Rust 1.77.0 [3].
|
||||
|
||||
Therefore, now the only unstable features allowed to be used outside the
|
||||
`kernel` crate is `new_uninit`, though other code to be upstreamed may
|
||||
increase the list.
|
||||
|
||||
Please see [4] for details.
|
||||
|
||||
# Required changes
|
||||
|
||||
Rust 1.77.0 merged the `unused_tuple_struct_fields` lint into `dead_code`,
|
||||
thus upgrading it from `allow` to `warn` [5]. In turn, this made `rustc`
|
||||
complain about the `ThisModule`'s pointer field being never read, but
|
||||
the previous patch adds the `as_ptr` method to it, needed by Binder [6],
|
||||
so that we do not need to locally `allow` it.
|
||||
|
||||
# Other changes
|
||||
|
||||
Rust 1.77.0 introduces the `--check-cfg` feature [7], for which there
|
||||
is a Call for Testing going on [8]. We were requested to test it and
|
||||
we found it useful [9] -- we will likely enable it in the future.
|
||||
|
||||
# `alloc` upgrade and reviewing
|
||||
|
||||
The vast majority of changes are due to our `alloc` fork being upgraded
|
||||
at once.
|
||||
|
||||
There are two kinds of changes to be aware of: the ones coming from
|
||||
upstream, which we should follow as closely as possible, and the updates
|
||||
needed in our added fallible APIs to keep them matching the newer
|
||||
infallible APIs coming from upstream.
|
||||
|
||||
Instead of taking a look at the diff of this patch, an alternative
|
||||
approach is reviewing a diff of the changes between upstream `alloc` and
|
||||
the kernel's. This allows to easily inspect the kernel additions only,
|
||||
especially to check if the fallible methods we already have still match
|
||||
the infallible ones in the new version coming from upstream.
|
||||
|
||||
Another approach is reviewing the changes introduced in the additions in
|
||||
the kernel fork between the two versions. This is useful to spot
|
||||
potentially unintended changes to our additions.
|
||||
|
||||
To apply these approaches, one may follow steps similar to the following
|
||||
to generate a pair of patches that show the differences between upstream
|
||||
Rust and the kernel (for the subset of `alloc` we use) before and after
|
||||
applying this patch:
|
||||
|
||||
# Get the difference with respect to the old version.
|
||||
git -C rust checkout $(linux/scripts/min-tool-version.sh rustc)
|
||||
git -C linux ls-tree -r --name-only HEAD -- rust/alloc |
|
||||
cut -d/ -f3- |
|
||||
grep -Fv README.md |
|
||||
xargs -IPATH cp rust/library/alloc/src/PATH linux/rust/alloc/PATH
|
||||
git -C linux diff --patch-with-stat --summary -R > old.patch
|
||||
git -C linux restore rust/alloc
|
||||
|
||||
# Apply this patch.
|
||||
git -C linux am rust-upgrade.patch
|
||||
|
||||
# Get the difference with respect to the new version.
|
||||
git -C rust checkout $(linux/scripts/min-tool-version.sh rustc)
|
||||
git -C linux ls-tree -r --name-only HEAD -- rust/alloc |
|
||||
cut -d/ -f3- |
|
||||
grep -Fv README.md |
|
||||
xargs -IPATH cp rust/library/alloc/src/PATH linux/rust/alloc/PATH
|
||||
git -C linux diff --patch-with-stat --summary -R > new.patch
|
||||
git -C linux restore rust/alloc
|
||||
|
||||
Now one may check the `new.patch` to take a look at the additions (first
|
||||
approach) or at the difference between those two patches (second
|
||||
approach). For the latter, a side-by-side tool is recommended.
|
||||
|
||||
Link: https://github.com/rust-lang/rust/blob/stable/RELEASES.md#version-1770-2024-03-21 [1]
|
||||
Link: https://rust-for-linux.com/rust-version-policy [2]
|
||||
Link: https://github.com/rust-lang/rust/pull/118799 [3]
|
||||
Link: https://github.com/Rust-for-Linux/linux/issues/2 [4]
|
||||
Link: https://github.com/rust-lang/rust/pull/118297 [5]
|
||||
Link: https://lore.kernel.org/rust-for-linux/20231101-rust-binder-v1-2-08ba9197f637@google.com/#Z31rust:kernel:lib.rs [6]
|
||||
Link: https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html [7]
|
||||
Link: https://github.com/rust-lang/rfcs/pull/3013#issuecomment-1936648479 [8]
|
||||
Link: https://github.com/rust-lang/rust/issues/82450#issuecomment-1947462977 [9]
|
||||
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
|
||||
Tested-by: Boqun Feng <boqun.feng@gmail.com>
|
||||
Link: https://lore.kernel.org/r/20240217002717.57507-1-ojeda@kernel.org
|
||||
[ Upgraded to 1.77.1. Removed `allow(dead_code)` thanks to the previous
|
||||
patch. Reworded accordingly. No changes to `alloc` during the beta. ]
|
||||
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
|
||||
Signed-off-by: Alyssa Ross <hi@alyssa.is>
|
||||
|
||||
# Conflicts:
|
||||
# Documentation/process/changes.rst
|
||||
# rust/kernel/lib.rs
|
||||
---
|
||||
Documentation/process/changes.rst | 2 +-
|
||||
rust/alloc/alloc.rs | 6 +-
|
||||
rust/alloc/boxed.rs | 4 +-
|
||||
rust/alloc/lib.rs | 7 +-
|
||||
rust/alloc/raw_vec.rs | 13 ++--
|
||||
rust/alloc/slice.rs | 4 +-
|
||||
rust/alloc/vec/into_iter.rs | 104 +++++++++++++++++++-----------
|
||||
rust/alloc/vec/mod.rs | 101 ++++++++++++++++++++---------
|
||||
rust/kernel/lib.rs | 1 -
|
||||
scripts/Makefile.build | 2 +-
|
||||
scripts/min-tool-version.sh | 2 +-
|
||||
11 files changed, 158 insertions(+), 88 deletions(-)
|
||||
|
||||
diff --git a/Documentation/process/changes.rst b/Documentation/process/changes.rst
|
||||
index c78ecc1e176f..641d67363b92 100644
|
||||
--- a/Documentation/process/changes.rst
|
||||
+++ b/Documentation/process/changes.rst
|
||||
@@ -31,7 +31,7 @@ you probably needn't concern yourself with pcmciautils.
|
||||
====================== =============== ========================================
|
||||
GNU C 5.1 gcc --version
|
||||
Clang/LLVM (optional) 11.0.0 clang --version
|
||||
-Rust (optional) 1.76.0 rustc --version
|
||||
+Rust (optional) 1.77.1 rustc --version
|
||||
bindgen (optional) 0.65.1 bindgen --version
|
||||
GNU make 3.82 make --version
|
||||
bash 4.2 bash --version
|
||||
diff --git a/rust/alloc/alloc.rs b/rust/alloc/alloc.rs
|
||||
index abb791cc2371..b1204f87227b 100644
|
||||
--- a/rust/alloc/alloc.rs
|
||||
+++ b/rust/alloc/alloc.rs
|
||||
@@ -5,7 +5,7 @@
|
||||
#![stable(feature = "alloc_module", since = "1.28.0")]
|
||||
|
||||
#[cfg(not(test))]
|
||||
-use core::intrinsics;
|
||||
+use core::hint;
|
||||
|
||||
#[cfg(not(test))]
|
||||
use core::ptr::{self, NonNull};
|
||||
@@ -210,7 +210,7 @@ unsafe fn grow_impl(
|
||||
let new_size = new_layout.size();
|
||||
|
||||
// `realloc` probably checks for `new_size >= old_layout.size()` or something similar.
|
||||
- intrinsics::assume(new_size >= old_layout.size());
|
||||
+ hint::assert_unchecked(new_size >= old_layout.size());
|
||||
|
||||
let raw_ptr = realloc(ptr.as_ptr(), old_layout, new_size);
|
||||
let ptr = NonNull::new(raw_ptr).ok_or(AllocError)?;
|
||||
@@ -301,7 +301,7 @@ unsafe fn shrink(
|
||||
// SAFETY: `new_size` is non-zero. Other conditions must be upheld by the caller
|
||||
new_size if old_layout.align() == new_layout.align() => unsafe {
|
||||
// `realloc` probably checks for `new_size <= old_layout.size()` or something similar.
|
||||
- intrinsics::assume(new_size <= old_layout.size());
|
||||
+ hint::assert_unchecked(new_size <= old_layout.size());
|
||||
|
||||
let raw_ptr = realloc(ptr.as_ptr(), old_layout, new_size);
|
||||
let ptr = NonNull::new(raw_ptr).ok_or(AllocError)?;
|
||||
diff --git a/rust/alloc/boxed.rs b/rust/alloc/boxed.rs
|
||||
index c93a22a5c97f..5fc39dfeb8e7 100644
|
||||
--- a/rust/alloc/boxed.rs
|
||||
+++ b/rust/alloc/boxed.rs
|
||||
@@ -26,6 +26,7 @@
|
||||
//! Creating a recursive data structure:
|
||||
//!
|
||||
//! ```
|
||||
+//! ##[allow(dead_code)]
|
||||
//! #[derive(Debug)]
|
||||
//! enum List<T> {
|
||||
//! Cons(T, Box<List<T>>),
|
||||
@@ -194,8 +195,7 @@
|
||||
#[fundamental]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
// The declaration of the `Box` struct must be kept in sync with the
|
||||
-// `alloc::alloc::box_free` function or ICEs will happen. See the comment
|
||||
-// on `box_free` for more details.
|
||||
+// compiler or ICEs will happen.
|
||||
pub struct Box<
|
||||
T: ?Sized,
|
||||
#[unstable(feature = "allocator_api", issue = "32838")] A: Allocator = Global,
|
||||
diff --git a/rust/alloc/lib.rs b/rust/alloc/lib.rs
|
||||
index 36f79c075593..39afd55ec074 100644
|
||||
--- a/rust/alloc/lib.rs
|
||||
+++ b/rust/alloc/lib.rs
|
||||
@@ -105,7 +105,6 @@
|
||||
#![feature(allocator_api)]
|
||||
#![feature(array_chunks)]
|
||||
#![feature(array_into_iter_constructors)]
|
||||
-#![feature(array_methods)]
|
||||
#![feature(array_windows)]
|
||||
#![feature(ascii_char)]
|
||||
#![feature(assert_matches)]
|
||||
@@ -122,7 +121,6 @@
|
||||
#![feature(const_size_of_val)]
|
||||
#![feature(const_waker)]
|
||||
#![feature(core_intrinsics)]
|
||||
-#![feature(core_panic)]
|
||||
#![feature(deprecated_suggestion)]
|
||||
#![feature(dispatch_from_dyn)]
|
||||
#![feature(error_generic_member_access)]
|
||||
@@ -132,6 +130,7 @@
|
||||
#![feature(fmt_internals)]
|
||||
#![feature(fn_traits)]
|
||||
#![feature(hasher_prefixfree_extras)]
|
||||
+#![feature(hint_assert_unchecked)]
|
||||
#![feature(inline_const)]
|
||||
#![feature(inplace_iteration)]
|
||||
#![feature(iter_advance_by)]
|
||||
@@ -141,6 +140,8 @@
|
||||
#![feature(maybe_uninit_slice)]
|
||||
#![feature(maybe_uninit_uninit_array)]
|
||||
#![feature(maybe_uninit_uninit_array_transpose)]
|
||||
+#![feature(non_null_convenience)]
|
||||
+#![feature(panic_internals)]
|
||||
#![feature(pattern)]
|
||||
#![feature(ptr_internals)]
|
||||
#![feature(ptr_metadata)]
|
||||
@@ -149,7 +150,6 @@
|
||||
#![feature(set_ptr_value)]
|
||||
#![feature(sized_type_properties)]
|
||||
#![feature(slice_from_ptr_range)]
|
||||
-#![feature(slice_group_by)]
|
||||
#![feature(slice_ptr_get)]
|
||||
#![feature(slice_ptr_len)]
|
||||
#![feature(slice_range)]
|
||||
@@ -182,6 +182,7 @@
|
||||
#![feature(const_ptr_write)]
|
||||
#![feature(const_trait_impl)]
|
||||
#![feature(const_try)]
|
||||
+#![feature(decl_macro)]
|
||||
#![feature(dropck_eyepatch)]
|
||||
#![feature(exclusive_range_pattern)]
|
||||
#![feature(fundamental)]
|
||||
diff --git a/rust/alloc/raw_vec.rs b/rust/alloc/raw_vec.rs
|
||||
index 98b6abf30af6..1839d1c8ee7a 100644
|
||||
--- a/rust/alloc/raw_vec.rs
|
||||
+++ b/rust/alloc/raw_vec.rs
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
use core::alloc::LayoutError;
|
||||
use core::cmp;
|
||||
-use core::intrinsics;
|
||||
+use core::hint;
|
||||
use core::mem::{self, ManuallyDrop, MaybeUninit, SizedTypeProperties};
|
||||
use core::ptr::{self, NonNull, Unique};
|
||||
use core::slice;
|
||||
@@ -317,7 +317,7 @@ fn current_memory(&self) -> Option<(NonNull<u8>, Layout)> {
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
- /// Panics if the new capacity exceeds `isize::MAX` bytes.
|
||||
+ /// Panics if the new capacity exceeds `isize::MAX` _bytes_.
|
||||
///
|
||||
/// # Aborts
|
||||
///
|
||||
@@ -358,7 +358,7 @@ pub fn try_reserve(&mut self, len: usize, additional: usize) -> Result<(), TryRe
|
||||
}
|
||||
unsafe {
|
||||
// Inform the optimizer that the reservation has succeeded or wasn't needed
|
||||
- core::intrinsics::assume(!self.needs_to_grow(len, additional));
|
||||
+ hint::assert_unchecked(!self.needs_to_grow(len, additional));
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
@@ -381,7 +381,7 @@ pub fn try_reserve_for_push(&mut self, len: usize) -> Result<(), TryReserveError
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
- /// Panics if the new capacity exceeds `isize::MAX` bytes.
|
||||
+ /// Panics if the new capacity exceeds `isize::MAX` _bytes_.
|
||||
///
|
||||
/// # Aborts
|
||||
///
|
||||
@@ -402,7 +402,7 @@ pub fn try_reserve_exact(
|
||||
}
|
||||
unsafe {
|
||||
// Inform the optimizer that the reservation has succeeded or wasn't needed
|
||||
- core::intrinsics::assume(!self.needs_to_grow(len, additional));
|
||||
+ hint::assert_unchecked(!self.needs_to_grow(len, additional));
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
@@ -553,7 +553,7 @@ fn finish_grow<A>(
|
||||
debug_assert_eq!(old_layout.align(), new_layout.align());
|
||||
unsafe {
|
||||
// The allocator checks for alignment equality
|
||||
- intrinsics::assume(old_layout.align() == new_layout.align());
|
||||
+ hint::assert_unchecked(old_layout.align() == new_layout.align());
|
||||
alloc.grow(ptr, old_layout, new_layout)
|
||||
}
|
||||
} else {
|
||||
@@ -591,7 +591,6 @@ fn handle_reserve(result: Result<(), TryReserveError>) {
|
||||
// `> isize::MAX` bytes will surely fail. On 32-bit and 16-bit we need to add
|
||||
// an extra guard for this in case we're running on a platform which can use
|
||||
// all 4GB in user-space, e.g., PAE or x32.
|
||||
-
|
||||
#[inline]
|
||||
fn alloc_guard(alloc_size: usize) -> Result<(), TryReserveError> {
|
||||
if usize::BITS < 64 && alloc_size > isize::MAX as usize {
|
||||
diff --git a/rust/alloc/slice.rs b/rust/alloc/slice.rs
|
||||
index 1181836da5f4..a36b072c9519 100644
|
||||
--- a/rust/alloc/slice.rs
|
||||
+++ b/rust/alloc/slice.rs
|
||||
@@ -53,14 +53,14 @@
|
||||
pub use core::slice::{from_mut_ptr_range, from_ptr_range};
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub use core::slice::{from_raw_parts, from_raw_parts_mut};
|
||||
+#[stable(feature = "slice_group_by", since = "1.77.0")]
|
||||
+pub use core::slice::{ChunkBy, ChunkByMut};
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub use core::slice::{Chunks, Windows};
|
||||
#[stable(feature = "chunks_exact", since = "1.31.0")]
|
||||
pub use core::slice::{ChunksExact, ChunksExactMut};
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub use core::slice::{ChunksMut, Split, SplitMut};
|
||||
-#[unstable(feature = "slice_group_by", issue = "80552")]
|
||||
-pub use core::slice::{GroupBy, GroupByMut};
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub use core::slice::{Iter, IterMut};
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
diff --git a/rust/alloc/vec/into_iter.rs b/rust/alloc/vec/into_iter.rs
|
||||
index 136bfe94af6c..0f11744c44b3 100644
|
||||
--- a/rust/alloc/vec/into_iter.rs
|
||||
+++ b/rust/alloc/vec/into_iter.rs
|
||||
@@ -20,6 +20,17 @@
|
||||
use core::ptr::{self, NonNull};
|
||||
use core::slice::{self};
|
||||
|
||||
+macro non_null {
|
||||
+ (mut $place:expr, $t:ident) => {{
|
||||
+ #![allow(unused_unsafe)] // we're sometimes used within an unsafe block
|
||||
+ unsafe { &mut *(ptr::addr_of_mut!($place) as *mut NonNull<$t>) }
|
||||
+ }},
|
||||
+ ($place:expr, $t:ident) => {{
|
||||
+ #![allow(unused_unsafe)] // we're sometimes used within an unsafe block
|
||||
+ unsafe { *(ptr::addr_of!($place) as *const NonNull<$t>) }
|
||||
+ }},
|
||||
+}
|
||||
+
|
||||
/// An iterator that moves out of a vector.
|
||||
///
|
||||
/// This `struct` is created by the `into_iter` method on [`Vec`](super::Vec)
|
||||
@@ -43,10 +54,12 @@ pub struct IntoIter<
|
||||
// the drop impl reconstructs a RawVec from buf, cap and alloc
|
||||
// to avoid dropping the allocator twice we need to wrap it into ManuallyDrop
|
||||
pub(super) alloc: ManuallyDrop<A>,
|
||||
- pub(super) ptr: *const T,
|
||||
- pub(super) end: *const T, // If T is a ZST, this is actually ptr+len. This encoding is picked so that
|
||||
- // ptr == end is a quick test for the Iterator being empty, that works
|
||||
- // for both ZST and non-ZST.
|
||||
+ pub(super) ptr: NonNull<T>,
|
||||
+ /// If T is a ZST, this is actually ptr+len. This encoding is picked so that
|
||||
+ /// ptr == end is a quick test for the Iterator being empty, that works
|
||||
+ /// for both ZST and non-ZST.
|
||||
+ /// For non-ZSTs the pointer is treated as `NonNull<T>`
|
||||
+ pub(super) end: *const T,
|
||||
}
|
||||
|
||||
#[stable(feature = "vec_intoiter_debug", since = "1.13.0")]
|
||||
@@ -70,7 +83,7 @@ impl<T, A: Allocator> IntoIter<T, A> {
|
||||
/// ```
|
||||
#[stable(feature = "vec_into_iter_as_slice", since = "1.15.0")]
|
||||
pub fn as_slice(&self) -> &[T] {
|
||||
- unsafe { slice::from_raw_parts(self.ptr, self.len()) }
|
||||
+ unsafe { slice::from_raw_parts(self.ptr.as_ptr(), self.len()) }
|
||||
}
|
||||
|
||||
/// Returns the remaining items of this iterator as a mutable slice.
|
||||
@@ -99,7 +112,7 @@ pub fn allocator(&self) -> &A {
|
||||
}
|
||||
|
||||
fn as_raw_mut_slice(&mut self) -> *mut [T] {
|
||||
- ptr::slice_from_raw_parts_mut(self.ptr as *mut T, self.len())
|
||||
+ ptr::slice_from_raw_parts_mut(self.ptr.as_ptr(), self.len())
|
||||
}
|
||||
|
||||
/// Drops remaining elements and relinquishes the backing allocation.
|
||||
@@ -126,7 +139,7 @@ pub(super) fn forget_allocation_drop_remaining(&mut self) {
|
||||
// this creates less assembly
|
||||
self.cap = 0;
|
||||
self.buf = unsafe { NonNull::new_unchecked(RawVec::NEW.ptr()) };
|
||||
- self.ptr = self.buf.as_ptr();
|
||||
+ self.ptr = self.buf;
|
||||
self.end = self.buf.as_ptr();
|
||||
|
||||
// Dropping the remaining elements can panic, so this needs to be
|
||||
@@ -138,9 +151,9 @@ pub(super) fn forget_allocation_drop_remaining(&mut self) {
|
||||
|
||||
/// Forgets to Drop the remaining elements while still allowing the backing allocation to be freed.
|
||||
pub(crate) fn forget_remaining_elements(&mut self) {
|
||||
- // For th ZST case, it is crucial that we mutate `end` here, not `ptr`.
|
||||
+ // For the ZST case, it is crucial that we mutate `end` here, not `ptr`.
|
||||
// `ptr` must stay aligned, while `end` may be unaligned.
|
||||
- self.end = self.ptr;
|
||||
+ self.end = self.ptr.as_ptr();
|
||||
}
|
||||
|
||||
#[cfg(not(no_global_oom_handling))]
|
||||
@@ -162,7 +175,7 @@ pub(crate) fn into_vecdeque(self) -> VecDeque<T, A> {
|
||||
// say that they're all at the beginning of the "allocation".
|
||||
0..this.len()
|
||||
} else {
|
||||
- this.ptr.sub_ptr(buf)..this.end.sub_ptr(buf)
|
||||
+ this.ptr.sub_ptr(this.buf)..this.end.sub_ptr(buf)
|
||||
};
|
||||
let cap = this.cap;
|
||||
let alloc = ManuallyDrop::take(&mut this.alloc);
|
||||
@@ -189,29 +202,35 @@ impl<T, A: Allocator> Iterator for IntoIter<T, A> {
|
||||
|
||||
#[inline]
|
||||
fn next(&mut self) -> Option<T> {
|
||||
- if self.ptr == self.end {
|
||||
- None
|
||||
- } else if T::IS_ZST {
|
||||
- // `ptr` has to stay where it is to remain aligned, so we reduce the length by 1 by
|
||||
- // reducing the `end`.
|
||||
- self.end = self.end.wrapping_byte_sub(1);
|
||||
+ if T::IS_ZST {
|
||||
+ if self.ptr.as_ptr() == self.end as *mut _ {
|
||||
+ None
|
||||
+ } else {
|
||||
+ // `ptr` has to stay where it is to remain aligned, so we reduce the length by 1 by
|
||||
+ // reducing the `end`.
|
||||
+ self.end = self.end.wrapping_byte_sub(1);
|
||||
|
||||
- // Make up a value of this ZST.
|
||||
- Some(unsafe { mem::zeroed() })
|
||||
+ // Make up a value of this ZST.
|
||||
+ Some(unsafe { mem::zeroed() })
|
||||
+ }
|
||||
} else {
|
||||
- let old = self.ptr;
|
||||
- self.ptr = unsafe { self.ptr.add(1) };
|
||||
+ if self.ptr == non_null!(self.end, T) {
|
||||
+ None
|
||||
+ } else {
|
||||
+ let old = self.ptr;
|
||||
+ self.ptr = unsafe { old.add(1) };
|
||||
|
||||
- Some(unsafe { ptr::read(old) })
|
||||
+ Some(unsafe { ptr::read(old.as_ptr()) })
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn size_hint(&self) -> (usize, Option<usize>) {
|
||||
let exact = if T::IS_ZST {
|
||||
- self.end.addr().wrapping_sub(self.ptr.addr())
|
||||
+ self.end.addr().wrapping_sub(self.ptr.as_ptr().addr())
|
||||
} else {
|
||||
- unsafe { self.end.sub_ptr(self.ptr) }
|
||||
+ unsafe { non_null!(self.end, T).sub_ptr(self.ptr) }
|
||||
};
|
||||
(exact, Some(exact))
|
||||
}
|
||||
@@ -219,7 +238,7 @@ fn size_hint(&self) -> (usize, Option<usize>) {
|
||||
#[inline]
|
||||
fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize> {
|
||||
let step_size = self.len().min(n);
|
||||
- let to_drop = ptr::slice_from_raw_parts_mut(self.ptr as *mut T, step_size);
|
||||
+ let to_drop = ptr::slice_from_raw_parts_mut(self.ptr.as_ptr(), step_size);
|
||||
if T::IS_ZST {
|
||||
// See `next` for why we sub `end` here.
|
||||
self.end = self.end.wrapping_byte_sub(step_size);
|
||||
@@ -261,7 +280,7 @@ fn count(self) -> usize {
|
||||
// Safety: `len` indicates that this many elements are available and we just checked that
|
||||
// it fits into the array.
|
||||
unsafe {
|
||||
- ptr::copy_nonoverlapping(self.ptr, raw_ary.as_mut_ptr() as *mut T, len);
|
||||
+ ptr::copy_nonoverlapping(self.ptr.as_ptr(), raw_ary.as_mut_ptr() as *mut T, len);
|
||||
self.forget_remaining_elements();
|
||||
return Err(array::IntoIter::new_unchecked(raw_ary, 0..len));
|
||||
}
|
||||
@@ -270,7 +289,7 @@ fn count(self) -> usize {
|
||||
// Safety: `len` is larger than the array size. Copy a fixed amount here to fully initialize
|
||||
// the array.
|
||||
return unsafe {
|
||||
- ptr::copy_nonoverlapping(self.ptr, raw_ary.as_mut_ptr() as *mut T, N);
|
||||
+ ptr::copy_nonoverlapping(self.ptr.as_ptr(), raw_ary.as_mut_ptr() as *mut T, N);
|
||||
self.ptr = self.ptr.add(N);
|
||||
Ok(raw_ary.transpose().assume_init())
|
||||
};
|
||||
@@ -288,7 +307,7 @@ unsafe fn __iterator_get_unchecked(&mut self, i: usize) -> Self::Item
|
||||
// Also note the implementation of `Self: TrustedRandomAccess` requires
|
||||
// that `T: Copy` so reading elements from the buffer doesn't invalidate
|
||||
// them for `Drop`.
|
||||
- unsafe { if T::IS_ZST { mem::zeroed() } else { ptr::read(self.ptr.add(i)) } }
|
||||
+ unsafe { if T::IS_ZST { mem::zeroed() } else { self.ptr.add(i).read() } }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -296,18 +315,25 @@ unsafe fn __iterator_get_unchecked(&mut self, i: usize) -> Self::Item
|
||||
impl<T, A: Allocator> DoubleEndedIterator for IntoIter<T, A> {
|
||||
#[inline]
|
||||
fn next_back(&mut self) -> Option<T> {
|
||||
- if self.end == self.ptr {
|
||||
- None
|
||||
- } else if T::IS_ZST {
|
||||
- // See above for why 'ptr.offset' isn't used
|
||||
- self.end = self.end.wrapping_byte_sub(1);
|
||||
+ if T::IS_ZST {
|
||||
+ if self.end as *mut _ == self.ptr.as_ptr() {
|
||||
+ None
|
||||
+ } else {
|
||||
+ // See above for why 'ptr.offset' isn't used
|
||||
+ self.end = self.end.wrapping_byte_sub(1);
|
||||
|
||||
- // Make up a value of this ZST.
|
||||
- Some(unsafe { mem::zeroed() })
|
||||
+ // Make up a value of this ZST.
|
||||
+ Some(unsafe { mem::zeroed() })
|
||||
+ }
|
||||
} else {
|
||||
- self.end = unsafe { self.end.sub(1) };
|
||||
+ if non_null!(self.end, T) == self.ptr {
|
||||
+ None
|
||||
+ } else {
|
||||
+ let new_end = unsafe { non_null!(self.end, T).sub(1) };
|
||||
+ *non_null!(mut self.end, T) = new_end;
|
||||
|
||||
- Some(unsafe { ptr::read(self.end) })
|
||||
+ Some(unsafe { ptr::read(new_end.as_ptr()) })
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -333,7 +359,11 @@ fn advance_back_by(&mut self, n: usize) -> Result<(), NonZeroUsize> {
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl<T, A: Allocator> ExactSizeIterator for IntoIter<T, A> {
|
||||
fn is_empty(&self) -> bool {
|
||||
- self.ptr == self.end
|
||||
+ if T::IS_ZST {
|
||||
+ self.ptr.as_ptr() == self.end as *mut _
|
||||
+ } else {
|
||||
+ self.ptr == non_null!(self.end, T)
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/rust/alloc/vec/mod.rs b/rust/alloc/vec/mod.rs
|
||||
index 220fb9d6f45b..0be27fff4554 100644
|
||||
--- a/rust/alloc/vec/mod.rs
|
||||
+++ b/rust/alloc/vec/mod.rs
|
||||
@@ -360,7 +360,7 @@
|
||||
///
|
||||
/// `vec![x; n]`, `vec![a, b, c, d]`, and
|
||||
/// [`Vec::with_capacity(n)`][`Vec::with_capacity`], will all produce a `Vec`
|
||||
-/// with exactly the requested capacity. If <code>[len] == [capacity]</code>,
|
||||
+/// with at least the requested capacity. If <code>[len] == [capacity]</code>,
|
||||
/// (as is the case for the [`vec!`] macro), then a `Vec<T>` can be converted to
|
||||
/// and from a [`Box<[T]>`][owned slice] without reallocating or moving the elements.
|
||||
///
|
||||
@@ -447,7 +447,7 @@ pub const fn new() -> Self {
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
- /// Panics if the new capacity exceeds `isize::MAX` bytes.
|
||||
+ /// Panics if the new capacity exceeds `isize::MAX` _bytes_.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
@@ -690,7 +690,7 @@ pub const fn new_in(alloc: A) -> Self {
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
- /// Panics if the new capacity exceeds `isize::MAX` bytes.
|
||||
+ /// Panics if the new capacity exceeds `isize::MAX` _bytes_.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
@@ -1013,7 +1013,7 @@ pub fn capacity(&self) -> usize {
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
- /// Panics if the new capacity exceeds `isize::MAX` bytes.
|
||||
+ /// Panics if the new capacity exceeds `isize::MAX` _bytes_.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
@@ -1043,7 +1043,7 @@ pub fn reserve(&mut self, additional: usize) {
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
- /// Panics if the new capacity exceeds `isize::MAX` bytes.
|
||||
+ /// Panics if the new capacity exceeds `isize::MAX` _bytes_.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
@@ -1140,8 +1140,11 @@ pub fn try_reserve_exact(&mut self, additional: usize) -> Result<(), TryReserveE
|
||||
|
||||
/// Shrinks the capacity of the vector as much as possible.
|
||||
///
|
||||
- /// It will drop down as close as possible to the length but the allocator
|
||||
- /// may still inform the vector that there is space for a few more elements.
|
||||
+ /// The behavior of this method depends on the allocator, which may either shrink the vector
|
||||
+ /// in-place or reallocate. The resulting vector might still have some excess capacity, just as
|
||||
+ /// is the case for [`with_capacity`]. See [`Allocator::shrink`] for more details.
|
||||
+ ///
|
||||
+ /// [`with_capacity`]: Vec::with_capacity
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
@@ -1191,10 +1194,10 @@ pub fn shrink_to(&mut self, min_capacity: usize) {
|
||||
|
||||
/// Converts the vector into [`Box<[T]>`][owned slice].
|
||||
///
|
||||
- /// If the vector has excess capacity, its items will be moved into a
|
||||
- /// newly-allocated buffer with exactly the right capacity.
|
||||
+ /// Before doing the conversion, this method discards excess capacity like [`shrink_to_fit`].
|
||||
///
|
||||
/// [owned slice]: Box
|
||||
+ /// [`shrink_to_fit`]: Vec::shrink_to_fit
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
@@ -2017,7 +2020,7 @@ fn drop(&mut self) {
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
- /// Panics if the new capacity exceeds `isize::MAX` bytes.
|
||||
+ /// Panics if the new capacity exceeds `isize::MAX` _bytes_.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
@@ -2133,7 +2136,7 @@ pub fn pop(&mut self) -> Option<T> {
|
||||
} else {
|
||||
unsafe {
|
||||
self.len -= 1;
|
||||
- core::intrinsics::assume(self.len < self.capacity());
|
||||
+ core::hint::assert_unchecked(self.len < self.capacity());
|
||||
Some(ptr::read(self.as_ptr().add(self.len())))
|
||||
}
|
||||
}
|
||||
@@ -2143,7 +2146,7 @@ pub fn pop(&mut self) -> Option<T> {
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
- /// Panics if the new capacity exceeds `isize::MAX` bytes.
|
||||
+ /// Panics if the new capacity exceeds `isize::MAX` _bytes_.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
@@ -2315,6 +2318,12 @@ pub fn is_empty(&self) -> bool {
|
||||
/// `[at, len)`. After the call, the original vector will be left containing
|
||||
/// the elements `[0, at)` with its previous capacity unchanged.
|
||||
///
|
||||
+ /// - If you want to take ownership of the entire contents and capacity of
|
||||
+ /// the vector, see [`mem::take`] or [`mem::replace`].
|
||||
+ /// - If you don't need the returned vector at all, see [`Vec::truncate`].
|
||||
+ /// - If you want to take ownership of an arbitrary subslice, or you don't
|
||||
+ /// necessarily want to store the removed items in a vector, see [`Vec::drain`].
|
||||
+ ///
|
||||
/// # Panics
|
||||
///
|
||||
/// Panics if `at > len`.
|
||||
@@ -2346,14 +2355,6 @@ fn assert_failed(at: usize, len: usize) -> ! {
|
||||
assert_failed(at, self.len());
|
||||
}
|
||||
|
||||
- if at == 0 {
|
||||
- // the new vector can take over the original buffer and avoid the copy
|
||||
- return mem::replace(
|
||||
- self,
|
||||
- Vec::with_capacity_in(self.capacity(), self.allocator().clone()),
|
||||
- );
|
||||
- }
|
||||
-
|
||||
let other_len = self.len - at;
|
||||
let mut other = Vec::with_capacity_in(other_len, self.allocator().clone());
|
||||
|
||||
@@ -3027,6 +3028,50 @@ fn index_mut(&mut self, index: I) -> &mut Self::Output {
|
||||
}
|
||||
}
|
||||
|
||||
+/// Collects an iterator into a Vec, commonly called via [`Iterator::collect()`]
|
||||
+///
|
||||
+/// # Allocation behavior
|
||||
+///
|
||||
+/// In general `Vec` does not guarantee any particular growth or allocation strategy.
|
||||
+/// That also applies to this trait impl.
|
||||
+///
|
||||
+/// **Note:** This section covers implementation details and is therefore exempt from
|
||||
+/// stability guarantees.
|
||||
+///
|
||||
+/// Vec may use any or none of the following strategies,
|
||||
+/// depending on the supplied iterator:
|
||||
+///
|
||||
+/// * preallocate based on [`Iterator::size_hint()`]
|
||||
+/// * and panic if the number of items is outside the provided lower/upper bounds
|
||||
+/// * use an amortized growth strategy similar to `pushing` one item at a time
|
||||
+/// * perform the iteration in-place on the original allocation backing the iterator
|
||||
+///
|
||||
+/// The last case warrants some attention. It is an optimization that in many cases reduces peak memory
|
||||
+/// consumption and improves cache locality. But when big, short-lived allocations are created,
|
||||
+/// only a small fraction of their items get collected, no further use is made of the spare capacity
|
||||
+/// and the resulting `Vec` is moved into a longer-lived structure, then this can lead to the large
|
||||
+/// allocations having their lifetimes unnecessarily extended which can result in increased memory
|
||||
+/// footprint.
|
||||
+///
|
||||
+/// In cases where this is an issue, the excess capacity can be discarded with [`Vec::shrink_to()`],
|
||||
+/// [`Vec::shrink_to_fit()`] or by collecting into [`Box<[T]>`][owned slice] instead, which additionally reduces
|
||||
+/// the size of the long-lived struct.
|
||||
+///
|
||||
+/// [owned slice]: Box
|
||||
+///
|
||||
+/// ```rust
|
||||
+/// # use std::sync::Mutex;
|
||||
+/// static LONG_LIVED: Mutex<Vec<Vec<u16>>> = Mutex::new(Vec::new());
|
||||
+///
|
||||
+/// for i in 0..10 {
|
||||
+/// let big_temporary: Vec<u16> = (0..1024).collect();
|
||||
+/// // discard most items
|
||||
+/// let mut result: Vec<_> = big_temporary.into_iter().filter(|i| i % 100 == 0).collect();
|
||||
+/// // without this a lot of unused capacity might be moved into the global
|
||||
+/// result.shrink_to_fit();
|
||||
+/// LONG_LIVED.lock().unwrap().push(result);
|
||||
+/// }
|
||||
+/// ```
|
||||
#[cfg(not(no_global_oom_handling))]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl<T> FromIterator<T> for Vec<T> {
|
||||
@@ -3069,14 +3114,8 @@ fn into_iter(self) -> Self::IntoIter {
|
||||
begin.add(me.len()) as *const T
|
||||
};
|
||||
let cap = me.buf.capacity();
|
||||
- IntoIter {
|
||||
- buf: NonNull::new_unchecked(begin),
|
||||
- phantom: PhantomData,
|
||||
- cap,
|
||||
- alloc,
|
||||
- ptr: begin,
|
||||
- end,
|
||||
- }
|
||||
+ let buf = NonNull::new_unchecked(begin);
|
||||
+ IntoIter { buf, phantom: PhantomData, cap, alloc, ptr: buf, end }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3598,8 +3637,10 @@ fn from(s: Box<[T], A>) -> Self {
|
||||
impl<T, A: Allocator> From<Vec<T, A>> for Box<[T], A> {
|
||||
/// Convert a vector into a boxed slice.
|
||||
///
|
||||
- /// If `v` has excess capacity, its items will be moved into a
|
||||
- /// newly-allocated buffer with exactly the right capacity.
|
||||
+ /// Before doing the conversion, this method discards excess capacity like [`Vec::shrink_to_fit`].
|
||||
+ ///
|
||||
+ /// [owned slice]: Box
|
||||
+ /// [`Vec::shrink_to_fit`]: Vec::shrink_to_fit
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
diff --git a/rust/kernel/lib.rs b/rust/kernel/lib.rs
|
||||
index 75efe47522e4..f07bc5a2c6b4 100644
|
||||
--- a/rust/kernel/lib.rs
|
||||
+++ b/rust/kernel/lib.rs
|
||||
@@ -17,7 +17,6 @@
|
||||
#![feature(const_maybe_uninit_zeroed)]
|
||||
#![feature(dispatch_from_dyn)]
|
||||
#![feature(new_uninit)]
|
||||
-#![feature(offset_of)]
|
||||
#![feature(ptr_metadata)]
|
||||
#![feature(receiver_trait)]
|
||||
#![feature(unsize)]
|
||||
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
|
||||
index 1633175846df..0bc7c5fe64b1 100644
|
||||
--- a/scripts/Makefile.build
|
||||
+++ b/scripts/Makefile.build
|
||||
@@ -262,7 +262,7 @@ $(obj)/%.lst: $(src)/%.c FORCE
|
||||
# Compile Rust sources (.rs)
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
-rust_allowed_features := new_uninit,offset_of
|
||||
+rust_allowed_features := new_uninit
|
||||
|
||||
# `--out-dir` is required to avoid temporaries being created by `rustc` in the
|
||||
# current working directory, which may be not accessible in the out-of-tree
|
||||
diff --git a/scripts/min-tool-version.sh b/scripts/min-tool-version.sh
|
||||
index e217683b10d6..db2b0bc5866b 100755
|
||||
--- a/scripts/min-tool-version.sh
|
||||
+++ b/scripts/min-tool-version.sh
|
||||
@@ -33,7 +33,7 @@ llvm)
|
||||
fi
|
||||
;;
|
||||
rustc)
|
||||
- echo 1.76.0
|
||||
+ echo 1.77.1
|
||||
;;
|
||||
bindgen)
|
||||
echo 0.65.1
|
||||
--
|
||||
2.44.0
|
||||
|
||||
@@ -1,795 +0,0 @@
|
||||
From b256fc507d4710287b22077834c16d18cee4ab17 Mon Sep 17 00:00:00 2001
|
||||
From: Miguel Ojeda <ojeda@kernel.org>
|
||||
Date: Sat, 17 Feb 2024 01:27:17 +0100
|
||||
Subject: [PATCH] rust: upgrade to Rust 1.77.1
|
||||
|
||||
This is the next upgrade to the Rust toolchain, from 1.76.0 to 1.77.1
|
||||
(i.e. the latest) [1].
|
||||
|
||||
See the upgrade policy [2] and the comments on the first upgrade in
|
||||
commit 3ed03f4da06e ("rust: upgrade to Rust 1.68.2").
|
||||
|
||||
# Unstable features
|
||||
|
||||
The `offset_of` feature (single-field `offset_of!`) that we were using
|
||||
got stabilized in Rust 1.77.0 [3].
|
||||
|
||||
Therefore, now the only unstable features allowed to be used outside the
|
||||
`kernel` crate is `new_uninit`, though other code to be upstreamed may
|
||||
increase the list.
|
||||
|
||||
Please see [4] for details.
|
||||
|
||||
# Required changes
|
||||
|
||||
Rust 1.77.0 merged the `unused_tuple_struct_fields` lint into `dead_code`,
|
||||
thus upgrading it from `allow` to `warn` [5]. In turn, this made `rustc`
|
||||
complain about the `ThisModule`'s pointer field being never read, but
|
||||
the previous patch adds the `as_ptr` method to it, needed by Binder [6],
|
||||
so that we do not need to locally `allow` it.
|
||||
|
||||
# Other changes
|
||||
|
||||
Rust 1.77.0 introduces the `--check-cfg` feature [7], for which there
|
||||
is a Call for Testing going on [8]. We were requested to test it and
|
||||
we found it useful [9] -- we will likely enable it in the future.
|
||||
|
||||
# `alloc` upgrade and reviewing
|
||||
|
||||
The vast majority of changes are due to our `alloc` fork being upgraded
|
||||
at once.
|
||||
|
||||
There are two kinds of changes to be aware of: the ones coming from
|
||||
upstream, which we should follow as closely as possible, and the updates
|
||||
needed in our added fallible APIs to keep them matching the newer
|
||||
infallible APIs coming from upstream.
|
||||
|
||||
Instead of taking a look at the diff of this patch, an alternative
|
||||
approach is reviewing a diff of the changes between upstream `alloc` and
|
||||
the kernel's. This allows to easily inspect the kernel additions only,
|
||||
especially to check if the fallible methods we already have still match
|
||||
the infallible ones in the new version coming from upstream.
|
||||
|
||||
Another approach is reviewing the changes introduced in the additions in
|
||||
the kernel fork between the two versions. This is useful to spot
|
||||
potentially unintended changes to our additions.
|
||||
|
||||
To apply these approaches, one may follow steps similar to the following
|
||||
to generate a pair of patches that show the differences between upstream
|
||||
Rust and the kernel (for the subset of `alloc` we use) before and after
|
||||
applying this patch:
|
||||
|
||||
# Get the difference with respect to the old version.
|
||||
git -C rust checkout $(linux/scripts/min-tool-version.sh rustc)
|
||||
git -C linux ls-tree -r --name-only HEAD -- rust/alloc |
|
||||
cut -d/ -f3- |
|
||||
grep -Fv README.md |
|
||||
xargs -IPATH cp rust/library/alloc/src/PATH linux/rust/alloc/PATH
|
||||
git -C linux diff --patch-with-stat --summary -R > old.patch
|
||||
git -C linux restore rust/alloc
|
||||
|
||||
# Apply this patch.
|
||||
git -C linux am rust-upgrade.patch
|
||||
|
||||
# Get the difference with respect to the new version.
|
||||
git -C rust checkout $(linux/scripts/min-tool-version.sh rustc)
|
||||
git -C linux ls-tree -r --name-only HEAD -- rust/alloc |
|
||||
cut -d/ -f3- |
|
||||
grep -Fv README.md |
|
||||
xargs -IPATH cp rust/library/alloc/src/PATH linux/rust/alloc/PATH
|
||||
git -C linux diff --patch-with-stat --summary -R > new.patch
|
||||
git -C linux restore rust/alloc
|
||||
|
||||
Now one may check the `new.patch` to take a look at the additions (first
|
||||
approach) or at the difference between those two patches (second
|
||||
approach). For the latter, a side-by-side tool is recommended.
|
||||
|
||||
Link: https://github.com/rust-lang/rust/blob/stable/RELEASES.md#version-1770-2024-03-21 [1]
|
||||
Link: https://rust-for-linux.com/rust-version-policy [2]
|
||||
Link: https://github.com/rust-lang/rust/pull/118799 [3]
|
||||
Link: https://github.com/Rust-for-Linux/linux/issues/2 [4]
|
||||
Link: https://github.com/rust-lang/rust/pull/118297 [5]
|
||||
Link: https://lore.kernel.org/rust-for-linux/20231101-rust-binder-v1-2-08ba9197f637@google.com/#Z31rust:kernel:lib.rs [6]
|
||||
Link: https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html [7]
|
||||
Link: https://github.com/rust-lang/rfcs/pull/3013#issuecomment-1936648479 [8]
|
||||
Link: https://github.com/rust-lang/rust/issues/82450#issuecomment-1947462977 [9]
|
||||
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
|
||||
Tested-by: Boqun Feng <boqun.feng@gmail.com>
|
||||
Link: https://lore.kernel.org/r/20240217002717.57507-1-ojeda@kernel.org
|
||||
[ Upgraded to 1.77.1. Removed `allow(dead_code)` thanks to the previous
|
||||
patch. Reworded accordingly. No changes to `alloc` during the beta. ]
|
||||
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
|
||||
Signed-off-by: Alyssa Ross <hi@alyssa.is>
|
||||
---
|
||||
Documentation/process/changes.rst | 2 +-
|
||||
rust/alloc/alloc.rs | 6 +-
|
||||
rust/alloc/boxed.rs | 4 +-
|
||||
rust/alloc/lib.rs | 7 +-
|
||||
rust/alloc/raw_vec.rs | 13 ++--
|
||||
rust/alloc/slice.rs | 4 +-
|
||||
rust/alloc/vec/into_iter.rs | 104 +++++++++++++++++++-----------
|
||||
rust/alloc/vec/mod.rs | 101 ++++++++++++++++++++---------
|
||||
rust/kernel/lib.rs | 1 -
|
||||
scripts/Makefile.build | 2 +-
|
||||
scripts/min-tool-version.sh | 2 +-
|
||||
11 files changed, 158 insertions(+), 88 deletions(-)
|
||||
|
||||
diff --git a/Documentation/process/changes.rst b/Documentation/process/changes.rst
|
||||
index 7ef8de58f7f8..b5d3107c6734 100644
|
||||
--- a/Documentation/process/changes.rst
|
||||
+++ b/Documentation/process/changes.rst
|
||||
@@ -31,7 +31,7 @@ you probably needn't concern yourself with pcmciautils.
|
||||
====================== =============== ========================================
|
||||
GNU C 5.1 gcc --version
|
||||
Clang/LLVM (optional) 13.0.1 clang --version
|
||||
-Rust (optional) 1.76.0 rustc --version
|
||||
+Rust (optional) 1.77.1 rustc --version
|
||||
bindgen (optional) 0.65.1 bindgen --version
|
||||
GNU make 3.82 make --version
|
||||
bash 4.2 bash --version
|
||||
diff --git a/rust/alloc/alloc.rs b/rust/alloc/alloc.rs
|
||||
index abb791cc2371..b1204f87227b 100644
|
||||
--- a/rust/alloc/alloc.rs
|
||||
+++ b/rust/alloc/alloc.rs
|
||||
@@ -5,7 +5,7 @@
|
||||
#![stable(feature = "alloc_module", since = "1.28.0")]
|
||||
|
||||
#[cfg(not(test))]
|
||||
-use core::intrinsics;
|
||||
+use core::hint;
|
||||
|
||||
#[cfg(not(test))]
|
||||
use core::ptr::{self, NonNull};
|
||||
@@ -210,7 +210,7 @@ unsafe fn grow_impl(
|
||||
let new_size = new_layout.size();
|
||||
|
||||
// `realloc` probably checks for `new_size >= old_layout.size()` or something similar.
|
||||
- intrinsics::assume(new_size >= old_layout.size());
|
||||
+ hint::assert_unchecked(new_size >= old_layout.size());
|
||||
|
||||
let raw_ptr = realloc(ptr.as_ptr(), old_layout, new_size);
|
||||
let ptr = NonNull::new(raw_ptr).ok_or(AllocError)?;
|
||||
@@ -301,7 +301,7 @@ unsafe fn shrink(
|
||||
// SAFETY: `new_size` is non-zero. Other conditions must be upheld by the caller
|
||||
new_size if old_layout.align() == new_layout.align() => unsafe {
|
||||
// `realloc` probably checks for `new_size <= old_layout.size()` or something similar.
|
||||
- intrinsics::assume(new_size <= old_layout.size());
|
||||
+ hint::assert_unchecked(new_size <= old_layout.size());
|
||||
|
||||
let raw_ptr = realloc(ptr.as_ptr(), old_layout, new_size);
|
||||
let ptr = NonNull::new(raw_ptr).ok_or(AllocError)?;
|
||||
diff --git a/rust/alloc/boxed.rs b/rust/alloc/boxed.rs
|
||||
index c93a22a5c97f..5fc39dfeb8e7 100644
|
||||
--- a/rust/alloc/boxed.rs
|
||||
+++ b/rust/alloc/boxed.rs
|
||||
@@ -26,6 +26,7 @@
|
||||
//! Creating a recursive data structure:
|
||||
//!
|
||||
//! ```
|
||||
+//! ##[allow(dead_code)]
|
||||
//! #[derive(Debug)]
|
||||
//! enum List<T> {
|
||||
//! Cons(T, Box<List<T>>),
|
||||
@@ -194,8 +195,7 @@
|
||||
#[fundamental]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
// The declaration of the `Box` struct must be kept in sync with the
|
||||
-// `alloc::alloc::box_free` function or ICEs will happen. See the comment
|
||||
-// on `box_free` for more details.
|
||||
+// compiler or ICEs will happen.
|
||||
pub struct Box<
|
||||
T: ?Sized,
|
||||
#[unstable(feature = "allocator_api", issue = "32838")] A: Allocator = Global,
|
||||
diff --git a/rust/alloc/lib.rs b/rust/alloc/lib.rs
|
||||
index 36f79c075593..39afd55ec074 100644
|
||||
--- a/rust/alloc/lib.rs
|
||||
+++ b/rust/alloc/lib.rs
|
||||
@@ -105,7 +105,6 @@
|
||||
#![feature(allocator_api)]
|
||||
#![feature(array_chunks)]
|
||||
#![feature(array_into_iter_constructors)]
|
||||
-#![feature(array_methods)]
|
||||
#![feature(array_windows)]
|
||||
#![feature(ascii_char)]
|
||||
#![feature(assert_matches)]
|
||||
@@ -122,7 +121,6 @@
|
||||
#![feature(const_size_of_val)]
|
||||
#![feature(const_waker)]
|
||||
#![feature(core_intrinsics)]
|
||||
-#![feature(core_panic)]
|
||||
#![feature(deprecated_suggestion)]
|
||||
#![feature(dispatch_from_dyn)]
|
||||
#![feature(error_generic_member_access)]
|
||||
@@ -132,6 +130,7 @@
|
||||
#![feature(fmt_internals)]
|
||||
#![feature(fn_traits)]
|
||||
#![feature(hasher_prefixfree_extras)]
|
||||
+#![feature(hint_assert_unchecked)]
|
||||
#![feature(inline_const)]
|
||||
#![feature(inplace_iteration)]
|
||||
#![feature(iter_advance_by)]
|
||||
@@ -141,6 +140,8 @@
|
||||
#![feature(maybe_uninit_slice)]
|
||||
#![feature(maybe_uninit_uninit_array)]
|
||||
#![feature(maybe_uninit_uninit_array_transpose)]
|
||||
+#![feature(non_null_convenience)]
|
||||
+#![feature(panic_internals)]
|
||||
#![feature(pattern)]
|
||||
#![feature(ptr_internals)]
|
||||
#![feature(ptr_metadata)]
|
||||
@@ -149,7 +150,6 @@
|
||||
#![feature(set_ptr_value)]
|
||||
#![feature(sized_type_properties)]
|
||||
#![feature(slice_from_ptr_range)]
|
||||
-#![feature(slice_group_by)]
|
||||
#![feature(slice_ptr_get)]
|
||||
#![feature(slice_ptr_len)]
|
||||
#![feature(slice_range)]
|
||||
@@ -182,6 +182,7 @@
|
||||
#![feature(const_ptr_write)]
|
||||
#![feature(const_trait_impl)]
|
||||
#![feature(const_try)]
|
||||
+#![feature(decl_macro)]
|
||||
#![feature(dropck_eyepatch)]
|
||||
#![feature(exclusive_range_pattern)]
|
||||
#![feature(fundamental)]
|
||||
diff --git a/rust/alloc/raw_vec.rs b/rust/alloc/raw_vec.rs
|
||||
index 98b6abf30af6..1839d1c8ee7a 100644
|
||||
--- a/rust/alloc/raw_vec.rs
|
||||
+++ b/rust/alloc/raw_vec.rs
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
use core::alloc::LayoutError;
|
||||
use core::cmp;
|
||||
-use core::intrinsics;
|
||||
+use core::hint;
|
||||
use core::mem::{self, ManuallyDrop, MaybeUninit, SizedTypeProperties};
|
||||
use core::ptr::{self, NonNull, Unique};
|
||||
use core::slice;
|
||||
@@ -317,7 +317,7 @@ fn current_memory(&self) -> Option<(NonNull<u8>, Layout)> {
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
- /// Panics if the new capacity exceeds `isize::MAX` bytes.
|
||||
+ /// Panics if the new capacity exceeds `isize::MAX` _bytes_.
|
||||
///
|
||||
/// # Aborts
|
||||
///
|
||||
@@ -358,7 +358,7 @@ pub fn try_reserve(&mut self, len: usize, additional: usize) -> Result<(), TryRe
|
||||
}
|
||||
unsafe {
|
||||
// Inform the optimizer that the reservation has succeeded or wasn't needed
|
||||
- core::intrinsics::assume(!self.needs_to_grow(len, additional));
|
||||
+ hint::assert_unchecked(!self.needs_to_grow(len, additional));
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
@@ -381,7 +381,7 @@ pub fn try_reserve_for_push(&mut self, len: usize) -> Result<(), TryReserveError
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
- /// Panics if the new capacity exceeds `isize::MAX` bytes.
|
||||
+ /// Panics if the new capacity exceeds `isize::MAX` _bytes_.
|
||||
///
|
||||
/// # Aborts
|
||||
///
|
||||
@@ -402,7 +402,7 @@ pub fn try_reserve_exact(
|
||||
}
|
||||
unsafe {
|
||||
// Inform the optimizer that the reservation has succeeded or wasn't needed
|
||||
- core::intrinsics::assume(!self.needs_to_grow(len, additional));
|
||||
+ hint::assert_unchecked(!self.needs_to_grow(len, additional));
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
@@ -553,7 +553,7 @@ fn finish_grow<A>(
|
||||
debug_assert_eq!(old_layout.align(), new_layout.align());
|
||||
unsafe {
|
||||
// The allocator checks for alignment equality
|
||||
- intrinsics::assume(old_layout.align() == new_layout.align());
|
||||
+ hint::assert_unchecked(old_layout.align() == new_layout.align());
|
||||
alloc.grow(ptr, old_layout, new_layout)
|
||||
}
|
||||
} else {
|
||||
@@ -591,7 +591,6 @@ fn handle_reserve(result: Result<(), TryReserveError>) {
|
||||
// `> isize::MAX` bytes will surely fail. On 32-bit and 16-bit we need to add
|
||||
// an extra guard for this in case we're running on a platform which can use
|
||||
// all 4GB in user-space, e.g., PAE or x32.
|
||||
-
|
||||
#[inline]
|
||||
fn alloc_guard(alloc_size: usize) -> Result<(), TryReserveError> {
|
||||
if usize::BITS < 64 && alloc_size > isize::MAX as usize {
|
||||
diff --git a/rust/alloc/slice.rs b/rust/alloc/slice.rs
|
||||
index 1181836da5f4..a36b072c9519 100644
|
||||
--- a/rust/alloc/slice.rs
|
||||
+++ b/rust/alloc/slice.rs
|
||||
@@ -53,14 +53,14 @@
|
||||
pub use core::slice::{from_mut_ptr_range, from_ptr_range};
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub use core::slice::{from_raw_parts, from_raw_parts_mut};
|
||||
+#[stable(feature = "slice_group_by", since = "1.77.0")]
|
||||
+pub use core::slice::{ChunkBy, ChunkByMut};
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub use core::slice::{Chunks, Windows};
|
||||
#[stable(feature = "chunks_exact", since = "1.31.0")]
|
||||
pub use core::slice::{ChunksExact, ChunksExactMut};
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub use core::slice::{ChunksMut, Split, SplitMut};
|
||||
-#[unstable(feature = "slice_group_by", issue = "80552")]
|
||||
-pub use core::slice::{GroupBy, GroupByMut};
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub use core::slice::{Iter, IterMut};
|
||||
#[stable(feature = "rchunks", since = "1.31.0")]
|
||||
diff --git a/rust/alloc/vec/into_iter.rs b/rust/alloc/vec/into_iter.rs
|
||||
index 136bfe94af6c..0f11744c44b3 100644
|
||||
--- a/rust/alloc/vec/into_iter.rs
|
||||
+++ b/rust/alloc/vec/into_iter.rs
|
||||
@@ -20,6 +20,17 @@
|
||||
use core::ptr::{self, NonNull};
|
||||
use core::slice::{self};
|
||||
|
||||
+macro non_null {
|
||||
+ (mut $place:expr, $t:ident) => {{
|
||||
+ #![allow(unused_unsafe)] // we're sometimes used within an unsafe block
|
||||
+ unsafe { &mut *(ptr::addr_of_mut!($place) as *mut NonNull<$t>) }
|
||||
+ }},
|
||||
+ ($place:expr, $t:ident) => {{
|
||||
+ #![allow(unused_unsafe)] // we're sometimes used within an unsafe block
|
||||
+ unsafe { *(ptr::addr_of!($place) as *const NonNull<$t>) }
|
||||
+ }},
|
||||
+}
|
||||
+
|
||||
/// An iterator that moves out of a vector.
|
||||
///
|
||||
/// This `struct` is created by the `into_iter` method on [`Vec`](super::Vec)
|
||||
@@ -43,10 +54,12 @@ pub struct IntoIter<
|
||||
// the drop impl reconstructs a RawVec from buf, cap and alloc
|
||||
// to avoid dropping the allocator twice we need to wrap it into ManuallyDrop
|
||||
pub(super) alloc: ManuallyDrop<A>,
|
||||
- pub(super) ptr: *const T,
|
||||
- pub(super) end: *const T, // If T is a ZST, this is actually ptr+len. This encoding is picked so that
|
||||
- // ptr == end is a quick test for the Iterator being empty, that works
|
||||
- // for both ZST and non-ZST.
|
||||
+ pub(super) ptr: NonNull<T>,
|
||||
+ /// If T is a ZST, this is actually ptr+len. This encoding is picked so that
|
||||
+ /// ptr == end is a quick test for the Iterator being empty, that works
|
||||
+ /// for both ZST and non-ZST.
|
||||
+ /// For non-ZSTs the pointer is treated as `NonNull<T>`
|
||||
+ pub(super) end: *const T,
|
||||
}
|
||||
|
||||
#[stable(feature = "vec_intoiter_debug", since = "1.13.0")]
|
||||
@@ -70,7 +83,7 @@ impl<T, A: Allocator> IntoIter<T, A> {
|
||||
/// ```
|
||||
#[stable(feature = "vec_into_iter_as_slice", since = "1.15.0")]
|
||||
pub fn as_slice(&self) -> &[T] {
|
||||
- unsafe { slice::from_raw_parts(self.ptr, self.len()) }
|
||||
+ unsafe { slice::from_raw_parts(self.ptr.as_ptr(), self.len()) }
|
||||
}
|
||||
|
||||
/// Returns the remaining items of this iterator as a mutable slice.
|
||||
@@ -99,7 +112,7 @@ pub fn allocator(&self) -> &A {
|
||||
}
|
||||
|
||||
fn as_raw_mut_slice(&mut self) -> *mut [T] {
|
||||
- ptr::slice_from_raw_parts_mut(self.ptr as *mut T, self.len())
|
||||
+ ptr::slice_from_raw_parts_mut(self.ptr.as_ptr(), self.len())
|
||||
}
|
||||
|
||||
/// Drops remaining elements and relinquishes the backing allocation.
|
||||
@@ -126,7 +139,7 @@ pub(super) fn forget_allocation_drop_remaining(&mut self) {
|
||||
// this creates less assembly
|
||||
self.cap = 0;
|
||||
self.buf = unsafe { NonNull::new_unchecked(RawVec::NEW.ptr()) };
|
||||
- self.ptr = self.buf.as_ptr();
|
||||
+ self.ptr = self.buf;
|
||||
self.end = self.buf.as_ptr();
|
||||
|
||||
// Dropping the remaining elements can panic, so this needs to be
|
||||
@@ -138,9 +151,9 @@ pub(super) fn forget_allocation_drop_remaining(&mut self) {
|
||||
|
||||
/// Forgets to Drop the remaining elements while still allowing the backing allocation to be freed.
|
||||
pub(crate) fn forget_remaining_elements(&mut self) {
|
||||
- // For th ZST case, it is crucial that we mutate `end` here, not `ptr`.
|
||||
+ // For the ZST case, it is crucial that we mutate `end` here, not `ptr`.
|
||||
// `ptr` must stay aligned, while `end` may be unaligned.
|
||||
- self.end = self.ptr;
|
||||
+ self.end = self.ptr.as_ptr();
|
||||
}
|
||||
|
||||
#[cfg(not(no_global_oom_handling))]
|
||||
@@ -162,7 +175,7 @@ pub(crate) fn into_vecdeque(self) -> VecDeque<T, A> {
|
||||
// say that they're all at the beginning of the "allocation".
|
||||
0..this.len()
|
||||
} else {
|
||||
- this.ptr.sub_ptr(buf)..this.end.sub_ptr(buf)
|
||||
+ this.ptr.sub_ptr(this.buf)..this.end.sub_ptr(buf)
|
||||
};
|
||||
let cap = this.cap;
|
||||
let alloc = ManuallyDrop::take(&mut this.alloc);
|
||||
@@ -189,29 +202,35 @@ impl<T, A: Allocator> Iterator for IntoIter<T, A> {
|
||||
|
||||
#[inline]
|
||||
fn next(&mut self) -> Option<T> {
|
||||
- if self.ptr == self.end {
|
||||
- None
|
||||
- } else if T::IS_ZST {
|
||||
- // `ptr` has to stay where it is to remain aligned, so we reduce the length by 1 by
|
||||
- // reducing the `end`.
|
||||
- self.end = self.end.wrapping_byte_sub(1);
|
||||
+ if T::IS_ZST {
|
||||
+ if self.ptr.as_ptr() == self.end as *mut _ {
|
||||
+ None
|
||||
+ } else {
|
||||
+ // `ptr` has to stay where it is to remain aligned, so we reduce the length by 1 by
|
||||
+ // reducing the `end`.
|
||||
+ self.end = self.end.wrapping_byte_sub(1);
|
||||
|
||||
- // Make up a value of this ZST.
|
||||
- Some(unsafe { mem::zeroed() })
|
||||
+ // Make up a value of this ZST.
|
||||
+ Some(unsafe { mem::zeroed() })
|
||||
+ }
|
||||
} else {
|
||||
- let old = self.ptr;
|
||||
- self.ptr = unsafe { self.ptr.add(1) };
|
||||
+ if self.ptr == non_null!(self.end, T) {
|
||||
+ None
|
||||
+ } else {
|
||||
+ let old = self.ptr;
|
||||
+ self.ptr = unsafe { old.add(1) };
|
||||
|
||||
- Some(unsafe { ptr::read(old) })
|
||||
+ Some(unsafe { ptr::read(old.as_ptr()) })
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn size_hint(&self) -> (usize, Option<usize>) {
|
||||
let exact = if T::IS_ZST {
|
||||
- self.end.addr().wrapping_sub(self.ptr.addr())
|
||||
+ self.end.addr().wrapping_sub(self.ptr.as_ptr().addr())
|
||||
} else {
|
||||
- unsafe { self.end.sub_ptr(self.ptr) }
|
||||
+ unsafe { non_null!(self.end, T).sub_ptr(self.ptr) }
|
||||
};
|
||||
(exact, Some(exact))
|
||||
}
|
||||
@@ -219,7 +238,7 @@ fn size_hint(&self) -> (usize, Option<usize>) {
|
||||
#[inline]
|
||||
fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize> {
|
||||
let step_size = self.len().min(n);
|
||||
- let to_drop = ptr::slice_from_raw_parts_mut(self.ptr as *mut T, step_size);
|
||||
+ let to_drop = ptr::slice_from_raw_parts_mut(self.ptr.as_ptr(), step_size);
|
||||
if T::IS_ZST {
|
||||
// See `next` for why we sub `end` here.
|
||||
self.end = self.end.wrapping_byte_sub(step_size);
|
||||
@@ -261,7 +280,7 @@ fn count(self) -> usize {
|
||||
// Safety: `len` indicates that this many elements are available and we just checked that
|
||||
// it fits into the array.
|
||||
unsafe {
|
||||
- ptr::copy_nonoverlapping(self.ptr, raw_ary.as_mut_ptr() as *mut T, len);
|
||||
+ ptr::copy_nonoverlapping(self.ptr.as_ptr(), raw_ary.as_mut_ptr() as *mut T, len);
|
||||
self.forget_remaining_elements();
|
||||
return Err(array::IntoIter::new_unchecked(raw_ary, 0..len));
|
||||
}
|
||||
@@ -270,7 +289,7 @@ fn count(self) -> usize {
|
||||
// Safety: `len` is larger than the array size. Copy a fixed amount here to fully initialize
|
||||
// the array.
|
||||
return unsafe {
|
||||
- ptr::copy_nonoverlapping(self.ptr, raw_ary.as_mut_ptr() as *mut T, N);
|
||||
+ ptr::copy_nonoverlapping(self.ptr.as_ptr(), raw_ary.as_mut_ptr() as *mut T, N);
|
||||
self.ptr = self.ptr.add(N);
|
||||
Ok(raw_ary.transpose().assume_init())
|
||||
};
|
||||
@@ -288,7 +307,7 @@ unsafe fn __iterator_get_unchecked(&mut self, i: usize) -> Self::Item
|
||||
// Also note the implementation of `Self: TrustedRandomAccess` requires
|
||||
// that `T: Copy` so reading elements from the buffer doesn't invalidate
|
||||
// them for `Drop`.
|
||||
- unsafe { if T::IS_ZST { mem::zeroed() } else { ptr::read(self.ptr.add(i)) } }
|
||||
+ unsafe { if T::IS_ZST { mem::zeroed() } else { self.ptr.add(i).read() } }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -296,18 +315,25 @@ unsafe fn __iterator_get_unchecked(&mut self, i: usize) -> Self::Item
|
||||
impl<T, A: Allocator> DoubleEndedIterator for IntoIter<T, A> {
|
||||
#[inline]
|
||||
fn next_back(&mut self) -> Option<T> {
|
||||
- if self.end == self.ptr {
|
||||
- None
|
||||
- } else if T::IS_ZST {
|
||||
- // See above for why 'ptr.offset' isn't used
|
||||
- self.end = self.end.wrapping_byte_sub(1);
|
||||
+ if T::IS_ZST {
|
||||
+ if self.end as *mut _ == self.ptr.as_ptr() {
|
||||
+ None
|
||||
+ } else {
|
||||
+ // See above for why 'ptr.offset' isn't used
|
||||
+ self.end = self.end.wrapping_byte_sub(1);
|
||||
|
||||
- // Make up a value of this ZST.
|
||||
- Some(unsafe { mem::zeroed() })
|
||||
+ // Make up a value of this ZST.
|
||||
+ Some(unsafe { mem::zeroed() })
|
||||
+ }
|
||||
} else {
|
||||
- self.end = unsafe { self.end.sub(1) };
|
||||
+ if non_null!(self.end, T) == self.ptr {
|
||||
+ None
|
||||
+ } else {
|
||||
+ let new_end = unsafe { non_null!(self.end, T).sub(1) };
|
||||
+ *non_null!(mut self.end, T) = new_end;
|
||||
|
||||
- Some(unsafe { ptr::read(self.end) })
|
||||
+ Some(unsafe { ptr::read(new_end.as_ptr()) })
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -333,7 +359,11 @@ fn advance_back_by(&mut self, n: usize) -> Result<(), NonZeroUsize> {
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl<T, A: Allocator> ExactSizeIterator for IntoIter<T, A> {
|
||||
fn is_empty(&self) -> bool {
|
||||
- self.ptr == self.end
|
||||
+ if T::IS_ZST {
|
||||
+ self.ptr.as_ptr() == self.end as *mut _
|
||||
+ } else {
|
||||
+ self.ptr == non_null!(self.end, T)
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/rust/alloc/vec/mod.rs b/rust/alloc/vec/mod.rs
|
||||
index 220fb9d6f45b..0be27fff4554 100644
|
||||
--- a/rust/alloc/vec/mod.rs
|
||||
+++ b/rust/alloc/vec/mod.rs
|
||||
@@ -360,7 +360,7 @@
|
||||
///
|
||||
/// `vec![x; n]`, `vec![a, b, c, d]`, and
|
||||
/// [`Vec::with_capacity(n)`][`Vec::with_capacity`], will all produce a `Vec`
|
||||
-/// with exactly the requested capacity. If <code>[len] == [capacity]</code>,
|
||||
+/// with at least the requested capacity. If <code>[len] == [capacity]</code>,
|
||||
/// (as is the case for the [`vec!`] macro), then a `Vec<T>` can be converted to
|
||||
/// and from a [`Box<[T]>`][owned slice] without reallocating or moving the elements.
|
||||
///
|
||||
@@ -447,7 +447,7 @@ pub const fn new() -> Self {
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
- /// Panics if the new capacity exceeds `isize::MAX` bytes.
|
||||
+ /// Panics if the new capacity exceeds `isize::MAX` _bytes_.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
@@ -690,7 +690,7 @@ pub const fn new_in(alloc: A) -> Self {
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
- /// Panics if the new capacity exceeds `isize::MAX` bytes.
|
||||
+ /// Panics if the new capacity exceeds `isize::MAX` _bytes_.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
@@ -1013,7 +1013,7 @@ pub fn capacity(&self) -> usize {
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
- /// Panics if the new capacity exceeds `isize::MAX` bytes.
|
||||
+ /// Panics if the new capacity exceeds `isize::MAX` _bytes_.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
@@ -1043,7 +1043,7 @@ pub fn reserve(&mut self, additional: usize) {
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
- /// Panics if the new capacity exceeds `isize::MAX` bytes.
|
||||
+ /// Panics if the new capacity exceeds `isize::MAX` _bytes_.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
@@ -1140,8 +1140,11 @@ pub fn try_reserve_exact(&mut self, additional: usize) -> Result<(), TryReserveE
|
||||
|
||||
/// Shrinks the capacity of the vector as much as possible.
|
||||
///
|
||||
- /// It will drop down as close as possible to the length but the allocator
|
||||
- /// may still inform the vector that there is space for a few more elements.
|
||||
+ /// The behavior of this method depends on the allocator, which may either shrink the vector
|
||||
+ /// in-place or reallocate. The resulting vector might still have some excess capacity, just as
|
||||
+ /// is the case for [`with_capacity`]. See [`Allocator::shrink`] for more details.
|
||||
+ ///
|
||||
+ /// [`with_capacity`]: Vec::with_capacity
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
@@ -1191,10 +1194,10 @@ pub fn shrink_to(&mut self, min_capacity: usize) {
|
||||
|
||||
/// Converts the vector into [`Box<[T]>`][owned slice].
|
||||
///
|
||||
- /// If the vector has excess capacity, its items will be moved into a
|
||||
- /// newly-allocated buffer with exactly the right capacity.
|
||||
+ /// Before doing the conversion, this method discards excess capacity like [`shrink_to_fit`].
|
||||
///
|
||||
/// [owned slice]: Box
|
||||
+ /// [`shrink_to_fit`]: Vec::shrink_to_fit
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
@@ -2017,7 +2020,7 @@ fn drop(&mut self) {
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
- /// Panics if the new capacity exceeds `isize::MAX` bytes.
|
||||
+ /// Panics if the new capacity exceeds `isize::MAX` _bytes_.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
@@ -2133,7 +2136,7 @@ pub fn pop(&mut self) -> Option<T> {
|
||||
} else {
|
||||
unsafe {
|
||||
self.len -= 1;
|
||||
- core::intrinsics::assume(self.len < self.capacity());
|
||||
+ core::hint::assert_unchecked(self.len < self.capacity());
|
||||
Some(ptr::read(self.as_ptr().add(self.len())))
|
||||
}
|
||||
}
|
||||
@@ -2143,7 +2146,7 @@ pub fn pop(&mut self) -> Option<T> {
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
- /// Panics if the new capacity exceeds `isize::MAX` bytes.
|
||||
+ /// Panics if the new capacity exceeds `isize::MAX` _bytes_.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
@@ -2315,6 +2318,12 @@ pub fn is_empty(&self) -> bool {
|
||||
/// `[at, len)`. After the call, the original vector will be left containing
|
||||
/// the elements `[0, at)` with its previous capacity unchanged.
|
||||
///
|
||||
+ /// - If you want to take ownership of the entire contents and capacity of
|
||||
+ /// the vector, see [`mem::take`] or [`mem::replace`].
|
||||
+ /// - If you don't need the returned vector at all, see [`Vec::truncate`].
|
||||
+ /// - If you want to take ownership of an arbitrary subslice, or you don't
|
||||
+ /// necessarily want to store the removed items in a vector, see [`Vec::drain`].
|
||||
+ ///
|
||||
/// # Panics
|
||||
///
|
||||
/// Panics if `at > len`.
|
||||
@@ -2346,14 +2355,6 @@ fn assert_failed(at: usize, len: usize) -> ! {
|
||||
assert_failed(at, self.len());
|
||||
}
|
||||
|
||||
- if at == 0 {
|
||||
- // the new vector can take over the original buffer and avoid the copy
|
||||
- return mem::replace(
|
||||
- self,
|
||||
- Vec::with_capacity_in(self.capacity(), self.allocator().clone()),
|
||||
- );
|
||||
- }
|
||||
-
|
||||
let other_len = self.len - at;
|
||||
let mut other = Vec::with_capacity_in(other_len, self.allocator().clone());
|
||||
|
||||
@@ -3027,6 +3028,50 @@ fn index_mut(&mut self, index: I) -> &mut Self::Output {
|
||||
}
|
||||
}
|
||||
|
||||
+/// Collects an iterator into a Vec, commonly called via [`Iterator::collect()`]
|
||||
+///
|
||||
+/// # Allocation behavior
|
||||
+///
|
||||
+/// In general `Vec` does not guarantee any particular growth or allocation strategy.
|
||||
+/// That also applies to this trait impl.
|
||||
+///
|
||||
+/// **Note:** This section covers implementation details and is therefore exempt from
|
||||
+/// stability guarantees.
|
||||
+///
|
||||
+/// Vec may use any or none of the following strategies,
|
||||
+/// depending on the supplied iterator:
|
||||
+///
|
||||
+/// * preallocate based on [`Iterator::size_hint()`]
|
||||
+/// * and panic if the number of items is outside the provided lower/upper bounds
|
||||
+/// * use an amortized growth strategy similar to `pushing` one item at a time
|
||||
+/// * perform the iteration in-place on the original allocation backing the iterator
|
||||
+///
|
||||
+/// The last case warrants some attention. It is an optimization that in many cases reduces peak memory
|
||||
+/// consumption and improves cache locality. But when big, short-lived allocations are created,
|
||||
+/// only a small fraction of their items get collected, no further use is made of the spare capacity
|
||||
+/// and the resulting `Vec` is moved into a longer-lived structure, then this can lead to the large
|
||||
+/// allocations having their lifetimes unnecessarily extended which can result in increased memory
|
||||
+/// footprint.
|
||||
+///
|
||||
+/// In cases where this is an issue, the excess capacity can be discarded with [`Vec::shrink_to()`],
|
||||
+/// [`Vec::shrink_to_fit()`] or by collecting into [`Box<[T]>`][owned slice] instead, which additionally reduces
|
||||
+/// the size of the long-lived struct.
|
||||
+///
|
||||
+/// [owned slice]: Box
|
||||
+///
|
||||
+/// ```rust
|
||||
+/// # use std::sync::Mutex;
|
||||
+/// static LONG_LIVED: Mutex<Vec<Vec<u16>>> = Mutex::new(Vec::new());
|
||||
+///
|
||||
+/// for i in 0..10 {
|
||||
+/// let big_temporary: Vec<u16> = (0..1024).collect();
|
||||
+/// // discard most items
|
||||
+/// let mut result: Vec<_> = big_temporary.into_iter().filter(|i| i % 100 == 0).collect();
|
||||
+/// // without this a lot of unused capacity might be moved into the global
|
||||
+/// result.shrink_to_fit();
|
||||
+/// LONG_LIVED.lock().unwrap().push(result);
|
||||
+/// }
|
||||
+/// ```
|
||||
#[cfg(not(no_global_oom_handling))]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl<T> FromIterator<T> for Vec<T> {
|
||||
@@ -3069,14 +3114,8 @@ fn into_iter(self) -> Self::IntoIter {
|
||||
begin.add(me.len()) as *const T
|
||||
};
|
||||
let cap = me.buf.capacity();
|
||||
- IntoIter {
|
||||
- buf: NonNull::new_unchecked(begin),
|
||||
- phantom: PhantomData,
|
||||
- cap,
|
||||
- alloc,
|
||||
- ptr: begin,
|
||||
- end,
|
||||
- }
|
||||
+ let buf = NonNull::new_unchecked(begin);
|
||||
+ IntoIter { buf, phantom: PhantomData, cap, alloc, ptr: buf, end }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3598,8 +3637,10 @@ fn from(s: Box<[T], A>) -> Self {
|
||||
impl<T, A: Allocator> From<Vec<T, A>> for Box<[T], A> {
|
||||
/// Convert a vector into a boxed slice.
|
||||
///
|
||||
- /// If `v` has excess capacity, its items will be moved into a
|
||||
- /// newly-allocated buffer with exactly the right capacity.
|
||||
+ /// Before doing the conversion, this method discards excess capacity like [`Vec::shrink_to_fit`].
|
||||
+ ///
|
||||
+ /// [owned slice]: Box
|
||||
+ /// [`Vec::shrink_to_fit`]: Vec::shrink_to_fit
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
diff --git a/rust/kernel/lib.rs b/rust/kernel/lib.rs
|
||||
index 6858e2f8a3ed..9e9b245ebab5 100644
|
||||
--- a/rust/kernel/lib.rs
|
||||
+++ b/rust/kernel/lib.rs
|
||||
@@ -16,7 +16,6 @@
|
||||
#![feature(coerce_unsized)]
|
||||
#![feature(dispatch_from_dyn)]
|
||||
#![feature(new_uninit)]
|
||||
-#![feature(offset_of)]
|
||||
#![feature(receiver_trait)]
|
||||
#![feature(unsize)]
|
||||
|
||||
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
|
||||
index 533a7799fdfe..5a6ab6d965bc 100644
|
||||
--- a/scripts/Makefile.build
|
||||
+++ b/scripts/Makefile.build
|
||||
@@ -263,7 +263,7 @@ $(obj)/%.lst: $(src)/%.c FORCE
|
||||
# Compile Rust sources (.rs)
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
-rust_allowed_features := new_uninit,offset_of
|
||||
+rust_allowed_features := new_uninit
|
||||
|
||||
# `--out-dir` is required to avoid temporaries being created by `rustc` in the
|
||||
# current working directory, which may be not accessible in the out-of-tree
|
||||
diff --git a/scripts/min-tool-version.sh b/scripts/min-tool-version.sh
|
||||
index 5927cc6b7de3..6086e00e640e 100755
|
||||
--- a/scripts/min-tool-version.sh
|
||||
+++ b/scripts/min-tool-version.sh
|
||||
@@ -33,7 +33,7 @@ llvm)
|
||||
fi
|
||||
;;
|
||||
rustc)
|
||||
- echo 1.76.0
|
||||
+ echo 1.77.1
|
||||
;;
|
||||
bindgen)
|
||||
echo 0.65.1
|
||||
--
|
||||
2.44.0
|
||||
|
||||
@@ -17,7 +17,7 @@ callPackage ./generic.nix args {
|
||||
# check the release notes for compatible kernels
|
||||
kernelCompatible = kernel.kernelOlder "6.10";
|
||||
|
||||
latestCompatibleLinuxPackages = linuxKernel.packages.linux_6_9;
|
||||
latestCompatibleLinuxPackages = linuxKernel.packages.linux_6_6;
|
||||
|
||||
# this package should point to the latest release.
|
||||
version = "2.2.5";
|
||||
|
||||
@@ -17,7 +17,7 @@ callPackage ./generic.nix args {
|
||||
# check the release notes for compatible kernels
|
||||
kernelCompatible = kernel.kernelOlder "6.11";
|
||||
|
||||
latestCompatibleLinuxPackages = linuxKernel.packages.linux_6_9;
|
||||
latestCompatibleLinuxPackages = linuxKernel.packages.linux_6_10;
|
||||
|
||||
# this package should point to a version / git revision compatible with the latest kernel release
|
||||
# IMPORTANT: Always use a tagged release candidate or commits from the
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
fetchNpmDeps,
|
||||
testers,
|
||||
mailpit,
|
||||
nixosTests,
|
||||
}:
|
||||
|
||||
let
|
||||
@@ -78,9 +79,12 @@ buildGoModule {
|
||||
cp -r ${ui} server/ui/dist
|
||||
'';
|
||||
|
||||
passthru.tests.version = testers.testVersion {
|
||||
package = mailpit;
|
||||
command = "mailpit version";
|
||||
passthru.tests = {
|
||||
inherit (nixosTests) mailpit;
|
||||
version = testers.testVersion {
|
||||
package = mailpit;
|
||||
command = "mailpit version";
|
||||
};
|
||||
};
|
||||
|
||||
passthru.updateScript = {
|
||||
|
||||
@@ -17,20 +17,20 @@ let
|
||||
in
|
||||
python3.pkgs.buildPythonApplication rec {
|
||||
pname = "matrix-synapse";
|
||||
version = "1.112.0";
|
||||
version = "1.113.0";
|
||||
format = "pyproject";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "element-hq";
|
||||
repo = "synapse";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-8iXw9C91kPWDlzo/3AA/iVCQqq47eGSORMTzEQTTS+8=";
|
||||
hash = "sha256-8Ts2QOSugPU8Do1Mpusez9tSqiaB+UzCWWY4XJk/KRM=";
|
||||
};
|
||||
|
||||
cargoDeps = rustPlatform.fetchCargoTarball {
|
||||
inherit src;
|
||||
name = "${pname}-${version}";
|
||||
hash = "sha256-hx/IMOxk4vUHXMMIcnxnC3RJcIvJL+IooZnf+m+VKSs=";
|
||||
hash = "sha256-Jlnv3GAobrXaO5fBq6oI9Gq8phz2/jFc+QIUYsUyeNo=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
, rustPlatform
|
||||
, nix-update-script
|
||||
, polaris-web
|
||||
, fetchpatch
|
||||
, darwin
|
||||
, nixosTests
|
||||
}:
|
||||
@@ -30,7 +31,15 @@ rustPlatform.buildRustPackage rec {
|
||||
'';
|
||||
};
|
||||
|
||||
cargoHash = "sha256-+4WN6TTIzVu3Jj0SfPq2jnYh0oWRo/C4qDMeJLrj1kk=";
|
||||
cargoPatches = [
|
||||
(fetchpatch { # https://github.com/agersant/polaris/pull/213
|
||||
name = "bump-time-crate.patch";
|
||||
url = "https://github.com/agersant/polaris/commit/f625c57d203bdd3f2d7fcd99ccce1032f04d9b91.patch";
|
||||
hash = "sha256-ICScYbSv4sCMbfZN2thhZMXGPcDX89xIhZqBJpGOzrY=";
|
||||
})
|
||||
];
|
||||
|
||||
cargoHash = "sha256-PnNLSL6YIpM6b3+oCh2eNRNPpCKyvnWEW7uNaYTKzAU=";
|
||||
|
||||
buildInputs = lib.optionals stdenv.isDarwin [
|
||||
darwin.Security
|
||||
@@ -55,9 +64,7 @@ rustPlatform.buildRustPackage rec {
|
||||
__darwinAllowLocalNetworking = true;
|
||||
|
||||
passthru.tests = nixosTests.polaris;
|
||||
passthru.updateScript = nix-update-script {
|
||||
attrPath = pname;
|
||||
};
|
||||
passthru.updateScript = nix-update-script { };
|
||||
|
||||
meta = with lib; {
|
||||
description = "Self-host your music collection, and access it from any computer and mobile device";
|
||||
|
||||
@@ -5,14 +5,14 @@
|
||||
, git, nix, nixfmt-classic, jq, coreutils, gnused, curl, cacert, bash }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
version = "2024-08-04";
|
||||
version = "2024-08-14";
|
||||
pname = "oh-my-zsh";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "ohmyzsh";
|
||||
repo = "ohmyzsh";
|
||||
rev = "0ffcc3b68a1196e9164ff42fac8a5fdd4804abd0";
|
||||
sha256 = "sha256-wATdyI2NSB7bYJz9uWfYC6aa2tRk5iKPrQdvWBfj/yg=";
|
||||
rev = "9ba6daa1b5d0b60c89525d679eb30fe3ed9947de";
|
||||
sha256 = "sha256-A3RTjtzekBH/b/OuJEIN7SM/qNsC+gAgO8RJ9/Q2huc=";
|
||||
};
|
||||
|
||||
strictDeps = true;
|
||||
|
||||
@@ -13,13 +13,13 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "wallutils";
|
||||
version = "5.12.7";
|
||||
version = "5.12.9";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "xyproto";
|
||||
repo = "wallutils";
|
||||
rev = version;
|
||||
hash = "sha256-7UqZr/DEiHDgg3XwvsKk/gc6FNtLh3aj5NWVz/A3J4o=";
|
||||
hash = "sha256-kayzaNOV2xTjbMeGUJ1jMLGxcVZzYkMLr6qWlAupPKM=";
|
||||
};
|
||||
|
||||
vendorHash = null;
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
|
||||
python3.pkgs.buildPythonApplication rec {
|
||||
pname = "fedifetcher";
|
||||
version = "7.1.5";
|
||||
version = "7.1.6";
|
||||
format = "other";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "nanos";
|
||||
repo = "FediFetcher";
|
||||
rev = "refs/tags/v${version}";
|
||||
hash = "sha256-dOo4QQCEGm7nZCC4k1M66wERrw+hKduvEJZIm1pEFqk=";
|
||||
hash = "sha256-lnBiGBoG5ykKSP+F4NOqJKnvxaLU9oiV3KfbVnjgkgQ=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = with python3.pkgs; [
|
||||
|
||||
@@ -1,24 +1,29 @@
|
||||
{ lib
|
||||
, buildFHSEnv
|
||||
, fetchurl
|
||||
, jdk
|
||||
, makeDesktopItem
|
||||
, proEdition ? false
|
||||
, unzip
|
||||
{
|
||||
lib,
|
||||
buildFHSEnv,
|
||||
fetchurl,
|
||||
jdk,
|
||||
makeDesktopItem,
|
||||
proEdition ? false,
|
||||
unzip,
|
||||
}:
|
||||
|
||||
let
|
||||
version = "2024.5.3";
|
||||
version = "2024.6.6";
|
||||
|
||||
product = if proEdition then {
|
||||
productName = "pro";
|
||||
productDesktop = "Burp Suite Professional Edition";
|
||||
hash = "sha256-1+IAlm4irUVqGFHlL+vNZNdDJrq3ZpJdUJYGrUN2cuY=";
|
||||
} else {
|
||||
productName = "community";
|
||||
productDesktop = "Burp Suite Community Edition";
|
||||
hash = "sha256-+YgRKYF9NPAAfuy97nmAVeI8fCvwjvHn7hHtBUjUoXk=";
|
||||
};
|
||||
product =
|
||||
if proEdition then
|
||||
{
|
||||
productName = "pro";
|
||||
productDesktop = "Burp Suite Professional Edition";
|
||||
hash = "sha256-EpDTxui/6w5RD15vpVXsNRqcajovgQDjlzLqEDdbPgY=";
|
||||
}
|
||||
else
|
||||
{
|
||||
productName = "community";
|
||||
productDesktop = "Burp Suite Community Edition";
|
||||
hash = "sha256-5LyazMNcEOq+F3p7y50x9AogvBKLd6ToS3Wzc+fFpmc=";
|
||||
};
|
||||
|
||||
src = fetchurl {
|
||||
name = "burpsuite.jar";
|
||||
@@ -38,7 +43,11 @@ let
|
||||
icon = pname;
|
||||
desktopName = product.productDesktop;
|
||||
comment = description;
|
||||
categories = [ "Development" "Security" "System" ];
|
||||
categories = [
|
||||
"Development"
|
||||
"Security"
|
||||
"System"
|
||||
];
|
||||
};
|
||||
|
||||
in
|
||||
@@ -47,32 +56,33 @@ buildFHSEnv {
|
||||
|
||||
runScript = "${jdk}/bin/java -jar ${src}";
|
||||
|
||||
targetPkgs = pkgs: with pkgs; [
|
||||
alsa-lib
|
||||
at-spi2-core
|
||||
cairo
|
||||
cups
|
||||
dbus
|
||||
expat
|
||||
glib
|
||||
gtk3
|
||||
gtk3-x11
|
||||
jython
|
||||
libcanberra-gtk3
|
||||
libdrm
|
||||
libudev0-shim
|
||||
libxkbcommon
|
||||
nspr
|
||||
nss
|
||||
pango
|
||||
xorg.libX11
|
||||
xorg.libxcb
|
||||
xorg.libXcomposite
|
||||
xorg.libXdamage
|
||||
xorg.libXext
|
||||
xorg.libXfixes
|
||||
xorg.libXrandr
|
||||
];
|
||||
targetPkgs =
|
||||
pkgs: with pkgs; [
|
||||
alsa-lib
|
||||
at-spi2-core
|
||||
cairo
|
||||
cups
|
||||
dbus
|
||||
expat
|
||||
glib
|
||||
gtk3
|
||||
gtk3-x11
|
||||
jython
|
||||
libcanberra-gtk3
|
||||
libdrm
|
||||
libudev0-shim
|
||||
libxkbcommon
|
||||
nspr
|
||||
nss
|
||||
pango
|
||||
xorg.libX11
|
||||
xorg.libxcb
|
||||
xorg.libXcomposite
|
||||
xorg.libXdamage
|
||||
xorg.libXext
|
||||
xorg.libXfixes
|
||||
xorg.libXrandr
|
||||
];
|
||||
|
||||
extraInstallCommands = ''
|
||||
mkdir -p "$out/share/pixmaps"
|
||||
|
||||
@@ -48,12 +48,16 @@ stdenv.mkDerivation rec {
|
||||
curl
|
||||
openssl
|
||||
] ++ lib.optionals stdenv.isLinux [
|
||||
pcsclite
|
||||
pcsclite.dev
|
||||
] ++ lib.optionals stdenv.isDarwin [
|
||||
darwin.apple_sdk.frameworks.PCSC
|
||||
libiconv
|
||||
];
|
||||
|
||||
preBuild = lib.optionalString stdenv.isLinux ''
|
||||
NIX_CFLAGS_COMPILE="$(pkg-config --cflags libpcsclite) $NIX_CFLAGS_COMPILE"
|
||||
'';
|
||||
|
||||
cmakeFlags = lib.optionals stdenv.isDarwin [
|
||||
"-DDISABLE_LTO=ON"
|
||||
];
|
||||
|
||||
@@ -3,24 +3,45 @@
|
||||
, darwin
|
||||
, rustPlatform
|
||||
, fetchFromGitHub
|
||||
, jq
|
||||
, moreutils
|
||||
, nix-update-script
|
||||
, withCmd ? false
|
||||
}:
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "kanata";
|
||||
version = "1.6.1";
|
||||
version = "1.7.0-prerelease-1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "jtroo";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-Kuxy6lGzImYYujuJwZZdfuu3X7/PJNOJefeZ0hVJaAA=";
|
||||
sha256 = "sha256-eDeGVmh1gI/DhiP6gxJyGH9G9LNH1NHW0+DNuOPUnBY=";
|
||||
};
|
||||
|
||||
cargoHash =
|
||||
if stdenv.isLinux
|
||||
then "sha256-R2lHg+I8Sry3/n8vTfPpDysKCKMDUvxyMKRhEQKDqS0="
|
||||
else "sha256-9CXrOP6SI+sCD9Q94N8TlRB/h+F/l7t3zHbtVDqddS4=";
|
||||
cargoHash = "sha256-Om9Thyr10wc39J6adSWgmXtvjckaEW0z68sWxUqa4wc=";
|
||||
|
||||
# the dependency native-windows-gui contains both README.md and readme.md,
|
||||
# which causes a hash mismatch on systems with a case-insensitive filesystem
|
||||
# this removes the readme files and updates cargo's checksum file accordingly
|
||||
depsExtraArgs = {
|
||||
nativeBuildInputs = [
|
||||
jq
|
||||
moreutils
|
||||
];
|
||||
|
||||
postBuild = ''
|
||||
pushd $name/native-windows-gui
|
||||
|
||||
rm --force --verbose README.md readme.md
|
||||
jq 'del(.files."README.md") | del(.files."readme.md")' \
|
||||
.cargo-checksum.json -c \
|
||||
| sponge .cargo-checksum.json
|
||||
|
||||
popd
|
||||
'';
|
||||
};
|
||||
|
||||
buildInputs = lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.IOKit ];
|
||||
|
||||
@@ -30,6 +51,10 @@ rustPlatform.buildRustPackage rec {
|
||||
install -Dm 444 assets/kanata-icon.svg $out/share/icons/hicolor/scalable/apps/kanata.svg
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
updateScript = nix-update-script { };
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
description = "Tool to improve keyboard comfort and usability with advanced customization";
|
||||
homepage = "https://github.com/jtroo/kanata";
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "nixos-shell";
|
||||
version = "1.1.1";
|
||||
version = "2.0.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Mic92";
|
||||
repo = "nixos-shell";
|
||||
rev = version;
|
||||
sha256 = "sha256-r5qNuv8MAo9He2g2jMPYlpxwaMzKomDvxvjNoS0JKDI=";
|
||||
sha256 = "sha256-plRKXQqww7easx0wgGKAkOJH1TW/PeeB20dq9XUN8J4=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
||||
@@ -18616,8 +18616,9 @@ with pkgs;
|
||||
|
||||
nix-build-uncached = callPackage ../development/tools/misc/nix-build-uncached { };
|
||||
|
||||
nexusmods-app-unfree = callPackage ../by-name/ne/nexusmods-app/package.nix {
|
||||
enableUnfree = true;
|
||||
nexusmods-app-unfree = nexusmods-app.override {
|
||||
pname = "nexusmods-app-unfree";
|
||||
_7zz = _7zz-rar;
|
||||
};
|
||||
|
||||
nmrpflash = callPackage ../development/embedded/nmrpflash { };
|
||||
@@ -23948,8 +23949,6 @@ with pkgs;
|
||||
|
||||
subdl = callPackage ../applications/video/subdl { };
|
||||
|
||||
subtitleedit = callPackage ../applications/video/subtitleedit { };
|
||||
|
||||
subtitleeditor = callPackage ../applications/video/subtitleeditor { };
|
||||
|
||||
subxt = callPackage ../development/tools/subxt { };
|
||||
@@ -25535,8 +25534,6 @@ with pkgs;
|
||||
mariadb-connector-c_3_2 = callPackage ../servers/sql/mariadb/connector-c/3_2.nix { };
|
||||
mariadb-connector-c_3_3 = callPackage ../servers/sql/mariadb/connector-c/3_3.nix { };
|
||||
|
||||
mariadb-galera = callPackage ../servers/sql/mariadb/galera { };
|
||||
|
||||
inherit (import ../servers/sql/mariadb pkgs)
|
||||
mariadb_105
|
||||
mariadb_106
|
||||
@@ -26691,10 +26688,6 @@ with pkgs;
|
||||
linux_6_1_hardened = linuxKernel.kernels.linux_6_1_hardened;
|
||||
linuxPackages_6_6_hardened = linuxKernel.packages.linux_6_6_hardened;
|
||||
linux_6_6_hardened = linuxKernel.kernels.linux_6_6_hardened;
|
||||
linuxPackages_6_8_hardened = linuxKernel.packages.linux_6_8_hardened;
|
||||
linux_6_8_hardened = linuxKernel.kernels.linux_6_8_hardened;
|
||||
linuxPackages_6_9_hardened = linuxKernel.packages.linux_6_9_hardened;
|
||||
linux_6_9_hardened = linuxKernel.kernels.linux_6_9_hardened;
|
||||
|
||||
# GNU Linux-libre kernels
|
||||
linuxPackages-libre = linuxKernel.packages.linux_libre;
|
||||
@@ -32311,8 +32304,6 @@ with pkgs;
|
||||
|
||||
odin2 = callPackage ../applications/audio/odin2 { };
|
||||
|
||||
okteto = callPackage ../development/tools/okteto { };
|
||||
|
||||
onmetal-image = callPackage ../tools/virtualization/onmetal-image { };
|
||||
|
||||
opcr-policy = callPackage ../development/tools/opcr-policy { };
|
||||
|
||||
@@ -186,28 +186,6 @@ in {
|
||||
];
|
||||
};
|
||||
|
||||
linux_6_8 = callPackage ../os-specific/linux/kernel/mainline.nix {
|
||||
branch = "6.8";
|
||||
kernelPatches = [
|
||||
kernelPatches.bridge_stp_helper
|
||||
kernelPatches.request_key_helper
|
||||
kernelPatches.rust_1_75
|
||||
kernelPatches.rust_1_76
|
||||
kernelPatches.rust_1_77-6_8
|
||||
kernelPatches.rust_1_78
|
||||
];
|
||||
};
|
||||
|
||||
linux_6_9 = callPackage ../os-specific/linux/kernel/mainline.nix {
|
||||
branch = "6.9";
|
||||
kernelPatches = [
|
||||
kernelPatches.bridge_stp_helper
|
||||
kernelPatches.request_key_helper
|
||||
kernelPatches.rust_1_77-6_9
|
||||
kernelPatches.rust_1_78
|
||||
];
|
||||
};
|
||||
|
||||
linux_6_10 = callPackage ../os-specific/linux/kernel/mainline.nix {
|
||||
branch = "6.10";
|
||||
kernelPatches = [
|
||||
@@ -279,8 +257,6 @@ in {
|
||||
linux_5_15_hardened = hardenedKernelFor kernels.linux_5_15 { };
|
||||
linux_6_1_hardened = hardenedKernelFor kernels.linux_6_1 { };
|
||||
linux_6_6_hardened = hardenedKernelFor kernels.linux_6_6 { };
|
||||
linux_6_8_hardened = hardenedKernelFor kernels.linux_6_8 { };
|
||||
linux_6_9_hardened = hardenedKernelFor kernels.linux_6_9 { };
|
||||
|
||||
} // lib.optionalAttrs config.allowAliases {
|
||||
linux_4_9 = throw "linux 4.9 was removed because it will reach its end of life within 22.11";
|
||||
@@ -293,6 +269,8 @@ in {
|
||||
linux_6_4 = throw "linux 6.4 was removed because it has reached its end of life upstream";
|
||||
linux_6_5 = throw "linux 6.5 was removed because it has reached its end of life upstream";
|
||||
linux_6_7 = throw "linux 6.7 was removed because it has reached its end of life upstream";
|
||||
linux_6_8 = throw "linux 6.8 was removed because it has reached its end of life upstream";
|
||||
linux_6_9 = throw "linux 6.9 was removed because it has reached its end of life upstream";
|
||||
|
||||
linux_xanmod_tt = throw "linux_xanmod_tt was removed because upstream no longer offers this option";
|
||||
|
||||
@@ -300,6 +278,8 @@ in {
|
||||
linux_5_19_hardened = throw "linux 5.19 was removed because it has reached its end of life upstream";
|
||||
linux_6_0_hardened = throw "linux 6.0 was removed because it has reached its end of life upstream";
|
||||
linux_6_7_hardened = throw "linux 6.7 was removed because it has reached its end of life upstream";
|
||||
linux_6_8_hardened = throw "linux 6.8 was removed because it has reached its end of life upstream";
|
||||
linux_6_9_hardened = throw "linux 6.9 was removed because it has reached its end of life upstream";
|
||||
}));
|
||||
/* Linux kernel modules are inherently tied to a specific kernel. So
|
||||
rather than provide specific instances of those packages for a
|
||||
@@ -630,8 +610,6 @@ in {
|
||||
linux_5_15 = recurseIntoAttrs (packagesFor kernels.linux_5_15);
|
||||
linux_6_1 = recurseIntoAttrs (packagesFor kernels.linux_6_1);
|
||||
linux_6_6 = recurseIntoAttrs (packagesFor kernels.linux_6_6);
|
||||
linux_6_8 = recurseIntoAttrs (packagesFor kernels.linux_6_8);
|
||||
linux_6_9 = recurseIntoAttrs (packagesFor kernels.linux_6_9);
|
||||
linux_6_10 = recurseIntoAttrs (packagesFor kernels.linux_6_10);
|
||||
} // lib.optionalAttrs config.allowAliases {
|
||||
linux_4_9 = throw "linux 4.9 was removed because it will reach its end of life within 22.11"; # Added 2022-11-08
|
||||
@@ -644,6 +622,8 @@ in {
|
||||
linux_6_4 = throw "linux 6.4 was removed because it reached its end of life upstream"; # Added 2023-10-02
|
||||
linux_6_5 = throw "linux 6.5 was removed because it reached its end of life upstream"; # Added 2024-02-28
|
||||
linux_6_7 = throw "linux 6.7 was removed because it reached its end of life upstream"; # Added 2024-04-04
|
||||
linux_6_8 = throw "linux 6.8 was removed because it reached its end of life upstream"; # Added 2024-08-02
|
||||
linux_6_9 = throw "linux 6.9 was removed because it reached its end of life upstream"; # Added 2024-08-02
|
||||
};
|
||||
|
||||
rtPackages = {
|
||||
@@ -675,8 +655,6 @@ in {
|
||||
linux_5_15_hardened = recurseIntoAttrs (packagesFor kernels.linux_5_15_hardened);
|
||||
linux_6_1_hardened = recurseIntoAttrs (packagesFor kernels.linux_6_1_hardened);
|
||||
linux_6_6_hardened = recurseIntoAttrs (packagesFor kernels.linux_6_6_hardened);
|
||||
linux_6_8_hardened = recurseIntoAttrs (packagesFor kernels.linux_6_8_hardened);
|
||||
linux_6_9_hardened = recurseIntoAttrs (packagesFor kernels.linux_6_9_hardened);
|
||||
|
||||
linux_zen = recurseIntoAttrs (packagesFor kernels.linux_zen);
|
||||
linux_lqx = recurseIntoAttrs (packagesFor kernels.linux_lqx);
|
||||
@@ -693,6 +671,8 @@ in {
|
||||
linux_5_19_hardened = throw "linux 5.19 was removed because it has reached its end of life upstream";
|
||||
linux_6_0_hardened = throw "linux 6.0 was removed because it has reached its end of life upstream";
|
||||
linux_6_7_hardened = throw "linux 6.7 was removed because it has reached its end of life upstream";
|
||||
linux_6_8_hardened = throw "linux 6.8 was removed because it has reached its end of life upstream";
|
||||
linux_6_9_hardened = throw "linux 6.9 was removed because it has reached its end of life upstream";
|
||||
linux_xanmod_tt = throw "linux_xanmod_tt was removed because upstream no longer offers this option";
|
||||
});
|
||||
|
||||
|
||||
@@ -387,7 +387,7 @@ in {
|
||||
"--enable-dom"
|
||||
];
|
||||
# Add a PHP lower version bound constraint to avoid applying the patch on older PHP versions.
|
||||
patches = lib.optionals ((lib.versions.majorMinor php.version == "8.2" && lib.versionOlder php.version "8.2.14" && lib.versionAtLeast php.version "8.2.7") || (lib.versions.majorMinor php.version == "8.1" && lib.versionAtLeast php.version "8.1.27")) [
|
||||
patches = lib.optionals ((lib.versions.majorMinor php.version == "8.2" && lib.versionOlder php.version "8.2.14" && lib.versionAtLeast php.version "8.2.7") || (lib.versions.majorMinor php.version == "8.1")) [
|
||||
# Fix tests with libxml 2.12
|
||||
# Part of 8.3.1RC1+, 8.2.14RC1+
|
||||
(fetchpatch {
|
||||
@@ -397,6 +397,14 @@ in {
|
||||
"NEWS"
|
||||
];
|
||||
})
|
||||
] ++ lib.optionals (lib.versions.majorMinor php.version == "8.1") [
|
||||
# Backport of PHP_LIBXML_IGNORE_DEPRECATIONS_START and PHP_LIBXML_IGNORE_DEPRECATIONS_END
|
||||
../development/interpreters/php/php81-fix-libxml2-2.13-compatibility.patch
|
||||
# Fix build with libxml2 2.13+. Has to be applied after libxml2 2.12 patch.
|
||||
(fetchpatch {
|
||||
url = "https://github.com/php/php-src/commit/9b4f6b09d58a4e54ee60443bf9a8b166852c03e0.patch";
|
||||
hash = "sha256-YC3I0BQi3o3+VmRu/UqpqPpaSC+ekPqzbORTHftbPvY=";
|
||||
})
|
||||
] ++ lib.optionals (lib.versions.majorMinor php.version == "8.2" && lib.versionOlder php.version "8.2.22") [
|
||||
# Fixes compatibility with libxml2 2.13. Part of 8.3.10RC1+, 8.2.22RC1+
|
||||
(fetchpatch {
|
||||
@@ -630,7 +638,24 @@ in {
|
||||
configureFlags = [
|
||||
"--enable-simplexml"
|
||||
];
|
||||
patches = lib.optionals (lib.versions.majorMinor php.version == "8.2" && lib.versionOlder php.version "8.2.22") [
|
||||
patches = lib.optionals (lib.versions.majorMinor php.version == "8.1") [
|
||||
# Fix tests with libxml2 2.12
|
||||
(fetchpatch {
|
||||
url = "https://github.com/php/php-src/commit/061058a9b1bbd90d27d97d79aebcf2b5029767b0.patch";
|
||||
hash = "sha256-0hOlAG+pOYp/gUU0MUMZvzWpgr0ncJi5GB8IeNxxyEU=";
|
||||
excludes = [
|
||||
"NEWS"
|
||||
];
|
||||
})
|
||||
# Backport of PHP_LIBXML_IGNORE_DEPRECATIONS_START and PHP_LIBXML_IGNORE_DEPRECATIONS_END
|
||||
# Required for libxml2 2.13 compatibility patch.
|
||||
../development/interpreters/php/php81-fix-libxml2-2.13-compatibility.patch
|
||||
# Fix build with libxml2 2.13+. Has to be applied after libxml2 2.12 patch.
|
||||
(fetchpatch {
|
||||
url = "https://github.com/php/php-src/commit/9b4f6b09d58a4e54ee60443bf9a8b166852c03e0.patch";
|
||||
hash = "sha256-YC3I0BQi3o3+VmRu/UqpqPpaSC+ekPqzbORTHftbPvY=";
|
||||
})
|
||||
] ++ lib.optionals (lib.versions.majorMinor php.version == "8.2" && lib.versionOlder php.version "8.2.22") [
|
||||
# Fixes compatibility with libxml2 2.13. Part of 8.3.10RC1+, 8.2.22RC1+
|
||||
(fetchpatch {
|
||||
url = "https://github.com/php/php-src/commit/4fe821311cafb18ca8bdf20b9d796c48a13ba552.diff?full_index=1";
|
||||
@@ -660,7 +685,24 @@ in {
|
||||
];
|
||||
doCheck = stdenv.isDarwin; # TODO: a couple tests still fail on *-linux
|
||||
internalDeps = [ php.extensions.session ];
|
||||
patches = lib.optionals (lib.versions.majorMinor php.version == "8.2" && lib.versionOlder php.version "8.2.22") [
|
||||
patches = lib.optionals (lib.versions.majorMinor php.version == "8.1") [
|
||||
# Fix tests with libxml2 2.12
|
||||
(fetchpatch {
|
||||
url = "https://github.com/php/php-src/commit/061058a9b1bbd90d27d97d79aebcf2b5029767b0.patch";
|
||||
hash = "sha256-0hOlAG+pOYp/gUU0MUMZvzWpgr0ncJi5GB8IeNxxyEU=";
|
||||
excludes = [
|
||||
"NEWS"
|
||||
];
|
||||
})
|
||||
# Backport of PHP_LIBXML_IGNORE_DEPRECATIONS_START and PHP_LIBXML_IGNORE_DEPRECATIONS_END
|
||||
# Required for libxml2 2.13 compatibility patch.
|
||||
../development/interpreters/php/php81-fix-libxml2-2.13-compatibility.patch
|
||||
# Fix build with libxml2 2.13+. Has to be applied after libxml2 2.12 patch.
|
||||
(fetchpatch {
|
||||
url = "https://github.com/php/php-src/commit/9b4f6b09d58a4e54ee60443bf9a8b166852c03e0.patch";
|
||||
hash = "sha256-YC3I0BQi3o3+VmRu/UqpqPpaSC+ekPqzbORTHftbPvY=";
|
||||
})
|
||||
] ++ lib.optionals (lib.versions.majorMinor php.version == "8.2" && lib.versionOlder php.version "8.2.22") [
|
||||
# Fixes compatibility with libxml2 2.13. Part of 8.3.10RC1+, 8.2.22RC1+
|
||||
(fetchpatch {
|
||||
url = "https://github.com/php/php-src/commit/4fe821311cafb18ca8bdf20b9d796c48a13ba552.diff?full_index=1";
|
||||
@@ -705,7 +747,24 @@ in {
|
||||
"--enable-xml"
|
||||
];
|
||||
doCheck = false;
|
||||
patches = lib.optionals (lib.versions.majorMinor php.version == "8.2" && lib.versionOlder php.version "8.2.22") [
|
||||
patches = lib.optionals (lib.versions.majorMinor php.version == "8.1") [
|
||||
# Fix tests with libxml2 2.12
|
||||
(fetchpatch {
|
||||
url = "https://github.com/php/php-src/commit/061058a9b1bbd90d27d97d79aebcf2b5029767b0.patch";
|
||||
hash = "sha256-0hOlAG+pOYp/gUU0MUMZvzWpgr0ncJi5GB8IeNxxyEU=";
|
||||
excludes = [
|
||||
"NEWS"
|
||||
];
|
||||
})
|
||||
# Backport of PHP_LIBXML_IGNORE_DEPRECATIONS_START and PHP_LIBXML_IGNORE_DEPRECATIONS_END
|
||||
# Required for libxml2 2.13 compatibility patch.
|
||||
../development/interpreters/php/php81-fix-libxml2-2.13-compatibility.patch
|
||||
# Fix build with libxml2 2.13+. Has to be applied after libxml2 2.12 patch.
|
||||
(fetchpatch {
|
||||
url = "https://github.com/php/php-src/commit/9b4f6b09d58a4e54ee60443bf9a8b166852c03e0.patch";
|
||||
hash = "sha256-YC3I0BQi3o3+VmRu/UqpqPpaSC+ekPqzbORTHftbPvY=";
|
||||
})
|
||||
] ++ lib.optionals (lib.versions.majorMinor php.version == "8.2" && lib.versionOlder php.version "8.2.22") [
|
||||
# Fixes compatibility with libxml2 2.13. Part of 8.3.10RC1+, 8.2.22RC1+
|
||||
(fetchpatch {
|
||||
url = "https://github.com/php/php-src/commit/4fe821311cafb18ca8bdf20b9d796c48a13ba552.diff?full_index=1";
|
||||
@@ -735,7 +794,24 @@ in {
|
||||
configureFlags = [
|
||||
"--enable-xmlwriter"
|
||||
];
|
||||
patches = lib.optionals (lib.versions.majorMinor php.version == "8.2" && lib.versionOlder php.version "8.2.22") [
|
||||
patches = lib.optionals (lib.versions.majorMinor php.version == "8.1") [
|
||||
# Fix tests with libxml2 2.12
|
||||
(fetchpatch {
|
||||
url = "https://github.com/php/php-src/commit/061058a9b1bbd90d27d97d79aebcf2b5029767b0.patch";
|
||||
hash = "sha256-0hOlAG+pOYp/gUU0MUMZvzWpgr0ncJi5GB8IeNxxyEU=";
|
||||
excludes = [
|
||||
"NEWS"
|
||||
];
|
||||
})
|
||||
# Backport of PHP_LIBXML_IGNORE_DEPRECATIONS_START and PHP_LIBXML_IGNORE_DEPRECATIONS_END
|
||||
# Required for libxml2 2.13 compatibility patch.
|
||||
../development/interpreters/php/php81-fix-libxml2-2.13-compatibility.patch
|
||||
# Fix build with libxml2 2.13+. Has to be applied after libxml2 2.12 patch.
|
||||
(fetchpatch {
|
||||
url = "https://github.com/php/php-src/commit/9b4f6b09d58a4e54ee60443bf9a8b166852c03e0.patch";
|
||||
hash = "sha256-YC3I0BQi3o3+VmRu/UqpqPpaSC+ekPqzbORTHftbPvY=";
|
||||
})
|
||||
] ++ lib.optionals (lib.versions.majorMinor php.version == "8.2" && lib.versionOlder php.version "8.2.22") [
|
||||
# Fixes compatibility with libxml2 2.13. Part of 8.3.10RC1+, 8.2.22RC1+
|
||||
(fetchpatch {
|
||||
url = "https://github.com/php/php-src/commit/4fe821311cafb18ca8bdf20b9d796c48a13ba552.diff?full_index=1";
|
||||
|
||||
@@ -2033,7 +2033,9 @@ self: super: with self; {
|
||||
|
||||
cbor = callPackage ../development/python-modules/cbor { };
|
||||
|
||||
cccolutils = callPackage ../development/python-modules/cccolutils { };
|
||||
cccolutils = callPackage ../development/python-modules/cccolutils {
|
||||
krb5-c = pkgs.krb5;
|
||||
};
|
||||
|
||||
cdcs = callPackage ../development/python-modules/cdcs { };
|
||||
|
||||
@@ -4300,6 +4302,8 @@ self: super: with self; {
|
||||
|
||||
fe25519 = callPackage ../development/python-modules/fe25519 { };
|
||||
|
||||
feather-format = callPackage ../development/python-modules/feather-format { };
|
||||
|
||||
feedfinder2 = callPackage ../development/python-modules/feedfinder2 { };
|
||||
|
||||
feedgen = callPackage ../development/python-modules/feedgen { };
|
||||
@@ -5378,8 +5382,8 @@ self: super: with self; {
|
||||
gspread = callPackage ../development/python-modules/gspread { };
|
||||
|
||||
gssapi = callPackage ../development/python-modules/gssapi {
|
||||
inherit (pkgs) krb5;
|
||||
inherit (pkgs.darwin.apple_sdk.frameworks) GSS;
|
||||
krb5-c = pkgs.krb5;
|
||||
};
|
||||
|
||||
gst-python = callPackage ../development/python-modules/gst-python {
|
||||
@@ -6554,7 +6558,8 @@ self: super: with self; {
|
||||
k-diffusion = callPackage ../development/python-modules/k-diffusion { };
|
||||
|
||||
k5test = callPackage ../development/python-modules/k5test {
|
||||
inherit (pkgs) krb5 findutils;
|
||||
inherit (pkgs) findutils;
|
||||
krb5-c = pkgs.krb5;
|
||||
};
|
||||
|
||||
kaa-base = callPackage ../development/python-modules/kaa-base { };
|
||||
@@ -6703,6 +6708,10 @@ self: super: with self; {
|
||||
|
||||
krakenex = callPackage ../development/python-modules/krakenex { };
|
||||
|
||||
krb5 = callPackage ../development/python-modules/krb5 {
|
||||
krb5-c = pkgs.krb5;
|
||||
};
|
||||
|
||||
krfzf-py = callPackage ../development/python-modules/krfzf-py { };
|
||||
|
||||
kserve = callPackage ../development/python-modules/kserve { };
|
||||
@@ -9027,6 +9036,8 @@ self: super: with self; {
|
||||
|
||||
nebula3-python = callPackage ../development/python-modules/nebula3-python { };
|
||||
|
||||
nemosis = callPackage ../development/python-modules/nemosis { };
|
||||
|
||||
nengo = callPackage ../development/python-modules/nengo { };
|
||||
|
||||
neo = callPackage ../development/python-modules/neo { };
|
||||
@@ -11633,7 +11644,9 @@ self: super: with self; {
|
||||
|
||||
pykeepass = callPackage ../development/python-modules/pykeepass { };
|
||||
|
||||
pykerberos = callPackage ../development/python-modules/pykerberos { };
|
||||
pykerberos = callPackage ../development/python-modules/pykerberos {
|
||||
krb5-c = pkgs.krb5;
|
||||
};
|
||||
|
||||
pykeyatome = callPackage ../development/python-modules/pykeyatome { };
|
||||
|
||||
|
||||
Reference in New Issue
Block a user