diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 599ea640f67c..ab7c63117ff3 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -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 diff --git a/nixos/modules/services/mail/mailpit.nix b/nixos/modules/services/mail/mailpit.nix new file mode 100644 index 000000000000..6bc368e91f5f --- /dev/null +++ b/nixos/modules/services/mail/mailpit.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; +} diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 1278bf0def79..5c12507a05f7 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -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 {}; diff --git a/nixos/tests/kernel-generic.nix b/nixos/tests/kernel-generic.nix index f26038c443e2..3e2302810ef0 100644 --- a/nixos/tests/kernel-generic.nix +++ b/nixos/tests/kernel-generic.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 diff --git a/nixos/tests/mailpit.nix b/nixos/tests/mailpit.nix new file mode 100644 index 000000000000..887f700ae684 --- /dev/null +++ b/nixos/tests/mailpit.nix @@ -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'] + ''; + } +) diff --git a/pkgs/applications/blockchains/polkadot/Cargo.lock b/pkgs/applications/blockchains/polkadot/Cargo.lock index c00775bafdf0..668ccbd31ae2 100644 --- a/pkgs/applications/blockchains/polkadot/Cargo.lock +++ b/pkgs/applications/blockchains/polkadot/Cargo.lock @@ -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", ] diff --git a/pkgs/applications/blockchains/polkadot/default.nix b/pkgs/applications/blockchains/polkadot/default.nix index 06af87112a36..65ce156ecef5 100644 --- a/pkgs/applications/blockchains/polkadot/default.nix +++ b/pkgs/applications/blockchains/polkadot/default.nix @@ -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" ]; diff --git a/pkgs/applications/networking/browsers/librewolf/src.json b/pkgs/applications/networking/browsers/librewolf/src.json index 9e572ff22c73..cdaafe04f786 100644 --- a/pkgs/applications/networking/browsers/librewolf/src.json +++ b/pkgs/applications/networking/browsers/librewolf/src.json @@ -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" } } diff --git a/pkgs/applications/office/qownnotes/default.nix b/pkgs/applications/office/qownnotes/default.nix index 9fe183058e01..b0d03703aab3 100644 --- a/pkgs/applications/office/qownnotes/default.nix +++ b/pkgs/applications/office/qownnotes/default.nix @@ -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 = '' diff --git a/pkgs/by-name/bl/bluetuith/package.nix b/pkgs/by-name/bl/bluetuith/package.nix index 43445a88d0a5..b40e613b33e5 100644 --- a/pkgs/by-name/bl/bluetuith/package.nix +++ b/pkgs/by-name/bl/bluetuith/package.nix @@ -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; diff --git a/pkgs/by-name/cp/cpuinfo/package.nix b/pkgs/by-name/cp/cpuinfo/package.nix index 00a7f2c2f995..7e3c88015fa8 100644 --- a/pkgs/by-name/cp/cpuinfo/package.nix +++ b/pkgs/by-name/cp/cpuinfo/package.nix @@ -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" ]; }; diff --git a/pkgs/by-name/fa/fastfetch/package.nix b/pkgs/by-name/fa/fastfetch/package.nix index ce0bd1827e60..ef846a9fb406 100644 --- a/pkgs/by-name/fa/fastfetch/package.nix +++ b/pkgs/by-name/fa/fastfetch/package.nix @@ -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 = [ diff --git a/pkgs/by-name/lu/lunar-client/package.nix b/pkgs/by-name/lu/lunar-client/package.nix index 0aa9b9699fb4..2dbe77339226 100644 --- a/pkgs/by-name/lu/lunar-client/package.nix +++ b/pkgs/by-name/lu/lunar-client/package.nix @@ -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 = diff --git a/pkgs/by-name/ma/mangareader/package.nix b/pkgs/by-name/ma/mangareader/package.nix index 456803218816..3ef038be0e79 100644 --- a/pkgs/by-name/ma/mangareader/package.nix +++ b/pkgs/by-name/ma/mangareader/package.nix @@ -33,6 +33,7 @@ stdenv.mkDerivation rec { karchive kcoreaddons kconfigwidgets + qtwayland ]; passthru.updateScript = nix-update-script { }; diff --git a/pkgs/servers/sql/mariadb/galera/default.nix b/pkgs/by-name/ma/mariadb-galera/package.nix similarity index 78% rename from pkgs/servers/sql/mariadb/galera/default.nix rename to pkgs/by-name/ma/mariadb-galera/package.nix index 2f0b4d0b2b5e..0d85c9f3d56b 100644 --- a/pkgs/servers/sql/mariadb/galera/default.nix +++ b/pkgs/by-name/ma/mariadb-galera/package.nix @@ -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 diff --git a/pkgs/by-name/ne/nexusmods-app/package.nix b/pkgs/by-name/ne/nexusmods-app/package.nix index 6cb9dd5bc1ed..875f17e876bb 100644 --- a/pkgs/by-name/ne/nexusmods-app/package.nix +++ b/pkgs/by-name/ne/nexusmods-app/package.nix @@ -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; + } + ``` + '' + } + ''; }; } diff --git a/pkgs/development/tools/okteto/default.nix b/pkgs/by-name/ok/okteto/package.nix similarity index 95% rename from pkgs/development/tools/okteto/default.nix rename to pkgs/by-name/ok/okteto/package.nix index 4c224be33ddf..1374ed07dd28 100644 --- a/pkgs/development/tools/okteto/default.nix +++ b/pkgs/by-name/ok/okteto/package.nix @@ -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="; diff --git a/pkgs/by-name/re/renovate/package.nix b/pkgs/by-name/re/renovate/package.nix index cbb9dbed6b56..9c9e43c39794 100644 --- a/pkgs/by-name/re/renovate/package.nix +++ b/pkgs/by-name/re/renovate/package.nix @@ -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; diff --git a/pkgs/by-name/rp/rpcs3/package.nix b/pkgs/by-name/rp/rpcs3/package.nix index 5014c4c4e0e4..e09bc22de78a 100644 --- a/pkgs/by-name/rp/rpcs3/package.nix +++ b/pkgs/by-name/rp/rpcs3/package.nix @@ -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 diff --git a/pkgs/by-name/sl/slimserver/package.nix b/pkgs/by-name/sl/slimserver/package.nix index 1a9a2207ac05..b88f72b0d118 100644 --- a/pkgs/by-name/sl/slimserver/package.nix +++ b/pkgs/by-name/sl/slimserver/package.nix @@ -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 diff --git a/pkgs/applications/video/subtitleedit/default.nix b/pkgs/by-name/su/subtitleedit/package.nix similarity index 82% rename from pkgs/applications/video/subtitleedit/default.nix rename to pkgs/by-name/su/subtitleedit/package.nix index aa00f5e8dce0..e672b04c2436 100644 --- a/pkgs/applications/video/subtitleedit/default.nix +++ b/pkgs/by-name/su/subtitleedit/package.nix @@ -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 ]; }; } diff --git a/pkgs/desktops/pantheon/desktop/elementary-onboarding/default.nix b/pkgs/desktops/pantheon/desktop/elementary-onboarding/default.nix index 439d434488ef..e5000a20ca76 100644 --- a/pkgs/desktops/pantheon/desktop/elementary-onboarding/default.nix +++ b/pkgs/desktops/pantheon/desktop/elementary-onboarding/default.nix @@ -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 = [ diff --git a/pkgs/development/interpreters/php/8.1.nix b/pkgs/development/interpreters/php/8.1.nix index 4b53f9e6c84b..204bf316e842 100644 --- a/pkgs/development/interpreters/php/8.1.nix +++ b/pkgs/development/interpreters/php/8.1.nix @@ -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 diff --git a/pkgs/development/interpreters/php/php81-fix-libxml2-2.13-compatibility.patch b/pkgs/development/interpreters/php/php81-fix-libxml2-2.13-compatibility.patch new file mode 100644 index 000000000000..b4624676ee29 --- /dev/null +++ b/pkgs/development/interpreters/php/php81-fix-libxml2-2.13-compatibility.patch @@ -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. diff --git a/pkgs/development/interpreters/python/python-packages-base.nix b/pkgs/development/interpreters/python/python-packages-base.nix index e4be95bb3a10..a807b6e6e33c 100644 --- a/pkgs/development/interpreters/python/python-packages-base.nix +++ b/pkgs/development/interpreters/python/python-packages-base.nix @@ -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; diff --git a/pkgs/development/libraries/openmpi/default.nix b/pkgs/development/libraries/openmpi/default.nix index 79afcbff17c4..ea98064820c2 100644 --- a/pkgs/development/libraries/openmpi/default.nix +++ b/pkgs/development/libraries/openmpi/default.nix @@ -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}" diff --git a/pkgs/development/python-modules/aiorussound/default.nix b/pkgs/development/python-modules/aiorussound/default.nix index e0f5c79681ca..268e791cd0fd 100644 --- a/pkgs/development/python-modules/aiorussound/default.nix +++ b/pkgs/development/python-modules/aiorussound/default.nix @@ -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 ]; diff --git a/pkgs/development/python-modules/aiovlc/default.nix b/pkgs/development/python-modules/aiovlc/default.nix index d0e0e42f33ff..7708b6806292 100644 --- a/pkgs/development/python-modules/aiovlc/default.nix +++ b/pkgs/development/python-modules/aiovlc/default.nix @@ -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 ]; diff --git a/pkgs/development/python-modules/boto3-stubs/default.nix b/pkgs/development/python-modules/boto3-stubs/default.nix index 3667e27f206b..8d03a8c9d511 100644 --- a/pkgs/development/python-modules/boto3-stubs/default.nix +++ b/pkgs/development/python-modules/boto3-stubs/default.nix @@ -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 ]; diff --git a/pkgs/development/python-modules/botocore-stubs/default.nix b/pkgs/development/python-modules/botocore-stubs/default.nix index 266b2afca131..980ab4873062 100644 --- a/pkgs/development/python-modules/botocore-stubs/default.nix +++ b/pkgs/development/python-modules/botocore-stubs/default.nix @@ -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 ]; diff --git a/pkgs/development/python-modules/cccolutils/default.nix b/pkgs/development/python-modules/cccolutils/default.nix index 829ebd248c41..53baa3c3e034 100644 --- a/pkgs/development/python-modules/cccolutils/default.nix +++ b/pkgs/development/python-modules/cccolutils/default.nix @@ -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 diff --git a/pkgs/development/python-modules/elevenlabs/default.nix b/pkgs/development/python-modules/elevenlabs/default.nix index 6061f54c214b..fd6f3b0d3802 100644 --- a/pkgs/development/python-modules/elevenlabs/default.nix +++ b/pkgs/development/python-modules/elevenlabs/default.nix @@ -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 ]; diff --git a/pkgs/development/python-modules/feather-format/default.nix b/pkgs/development/python-modules/feather-format/default.nix new file mode 100644 index 000000000000..956b107695ad --- /dev/null +++ b/pkgs/development/python-modules/feather-format/default.nix @@ -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 ]; + }; +} diff --git a/pkgs/development/python-modules/graphrag/default.nix b/pkgs/development/python-modules/graphrag/default.nix index d00cc1b4b26e..7824e471a01e 100644 --- a/pkgs/development/python-modules/graphrag/default.nix +++ b/pkgs/development/python-modules/graphrag/default.nix @@ -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 = { diff --git a/pkgs/development/python-modules/gssapi/default.nix b/pkgs/development/python-modules/gssapi/default.nix index 44a7b87ec7c3..08683996db8d 100644 --- a/pkgs/development/python-modules/gssapi/default.nix +++ b/pkgs/development/python-modules/gssapi/default.nix @@ -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 ]; diff --git a/pkgs/development/python-modules/k5test/default.nix b/pkgs/development/python-modules/k5test/default.nix index 676fea31f827..208f24c2b2bf 100644 --- a/pkgs/development/python-modules/k5test/default.nix +++ b/pkgs/development/python-modules/k5test/default.nix @@ -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; }) ]; diff --git a/pkgs/development/python-modules/krb5/default.nix b/pkgs/development/python-modules/krb5/default.nix new file mode 100644 index 000000000000..ee520b0f0012 --- /dev/null +++ b/pkgs/development/python-modules/krb5/default.nix @@ -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; + }; +} diff --git a/pkgs/development/python-modules/nemosis/default.nix b/pkgs/development/python-modules/nemosis/default.nix new file mode 100644 index 000000000000..1d7252b12a91 --- /dev/null +++ b/pkgs/development/python-modules/nemosis/default.nix @@ -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 ]; + }; +} diff --git a/pkgs/development/python-modules/proxmoxer/default.nix b/pkgs/development/python-modules/proxmoxer/default.nix index 229634d64d59..8f3ff8621fc8 100644 --- a/pkgs/development/python-modules/proxmoxer/default.nix +++ b/pkgs/development/python-modules/proxmoxer/default.nix @@ -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; { diff --git a/pkgs/development/python-modules/pyblu/default.nix b/pkgs/development/python-modules/pyblu/default.nix index 14b6c1d10de6..0060bc176438 100644 --- a/pkgs/development/python-modules/pyblu/default.nix +++ b/pkgs/development/python-modules/pyblu/default.nix @@ -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"; diff --git a/pkgs/development/python-modules/pykerberos/default.nix b/pkgs/development/python-modules/pykerberos/default.nix index b7b8953a72b3..8b8be76b12e5 100644 --- a/pkgs/development/python-modules/pykerberos/default.nix +++ b/pkgs/development/python-modules/pykerberos/default.nix @@ -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; { diff --git a/pkgs/development/python-modules/pypsrp/default.nix b/pkgs/development/python-modules/pypsrp/default.nix index 7cf8c56581dc..faddf2906f5f 100644 --- a/pkgs/development/python-modules/pypsrp/default.nix +++ b/pkgs/development/python-modules/pypsrp/default.nix @@ -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 ]; }; diff --git a/pkgs/development/python-modules/requests-credssp/default.nix b/pkgs/development/python-modules/requests-credssp/default.nix index 243332123f79..f6be7b9908f2 100644 --- a/pkgs/development/python-modules/requests-credssp/default.nix +++ b/pkgs/development/python-modules/requests-credssp/default.nix @@ -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" ]; diff --git a/pkgs/development/python-modules/requests-kerberos/default.nix b/pkgs/development/python-modules/requests-kerberos/default.nix index c231233a4f29..210e792cfbf7 100644 --- a/pkgs/development/python-modules/requests-kerberos/default.nix +++ b/pkgs/development/python-modules/requests-kerberos/default.nix @@ -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; { diff --git a/pkgs/development/python-modules/tencentcloud-sdk-python/default.nix b/pkgs/development/python-modules/tencentcloud-sdk-python/default.nix index 5eaf819f1726..fb53f449d826 100644 --- a/pkgs/development/python-modules/tencentcloud-sdk-python/default.nix +++ b/pkgs/development/python-modules/tencentcloud-sdk-python/default.nix @@ -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 ]; diff --git a/pkgs/development/python-modules/testcontainers/default.nix b/pkgs/development/python-modules/testcontainers/default.nix index 0ca740b2c655..4e0c517ca55e 100644 --- a/pkgs/development/python-modules/testcontainers/default.nix +++ b/pkgs/development/python-modules/testcontainers/default.nix @@ -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 = '' diff --git a/pkgs/development/python-modules/types-html5lib/default.nix b/pkgs/development/python-modules/types-html5lib/default.nix index 563227bc85b8..2bd3c889d8f7 100644 --- a/pkgs/development/python-modules/types-html5lib/default.nix +++ b/pkgs/development/python-modules/types-html5lib/default.nix @@ -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 ]; diff --git a/pkgs/development/python-modules/types-lxml/default.nix b/pkgs/development/python-modules/types-lxml/default.nix index 03a90f292ee7..5f45fd8a4176 100644 --- a/pkgs/development/python-modules/types-lxml/default.nix +++ b/pkgs/development/python-modules/types-lxml/default.nix @@ -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 diff --git a/pkgs/development/tools/analysis/checkov/default.nix b/pkgs/development/tools/analysis/checkov/default.nix index c97bd1790c72..96d4fa32f11f 100644 --- a/pkgs/development/tools/analysis/checkov/default.nix +++ b/pkgs/development/tools/analysis/checkov/default.nix @@ -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 ]; diff --git a/pkgs/os-specific/linux/kernel/patches.nix b/pkgs/os-specific/linux/kernel/patches.nix index c1715a91e5fb..5d4ebc214dc7 100644 --- a/pkgs/os-specific/linux/kernel/patches.nix +++ b/pkgs/os-specific/linux/kernel/patches.nix @@ -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="; - }; - }; } diff --git a/pkgs/os-specific/linux/kernel/rust-1.75.patch b/pkgs/os-specific/linux/kernel/rust-1.75.patch deleted file mode 100644 index 9d6b1a3dcc75..000000000000 --- a/pkgs/os-specific/linux/kernel/rust-1.75.patch +++ /dev/null @@ -1,373 +0,0 @@ -From 77007eef13d52d0a5df9706d47078c4e1390a0a9 Mon Sep 17 00:00:00 2001 -From: Miguel Ojeda -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 -Link: https://lore.kernel.org/lkml/20231224172128.271447-1-ojeda@kernel.org/ -Signed-off-by: Alyssa Ross ---- - 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 Box { - /// ``` - /// 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 Unpin for Box where A: 'static {} - --#[unstable(feature = "generator_trait", issue = "43122")] --impl + Unpin, R, A: Allocator> Generator for Box -+#[unstable(feature = "coroutine_trait", issue = "43122")] -+impl + Unpin, R, A: Allocator> Coroutine for Box - where - A: 'static, - { - type Yield = G::Yield; - type Return = G::Return; - -- fn resume(mut self: Pin<&mut Self>, arg: R) -> GeneratorState { -+ fn resume(mut self: Pin<&mut Self>, arg: R) -> CoroutineState { - G::resume(Pin::new(&mut *self), arg) - } - } - --#[unstable(feature = "generator_trait", issue = "43122")] --impl, R, A: Allocator> Generator for Pin> -+#[unstable(feature = "coroutine_trait", issue = "43122")] -+impl, R, A: Allocator> Coroutine for Pin> - where - A: 'static, - { - type Yield = G::Yield; - type Return = G::Return; - -- fn resume(mut self: Pin<&mut Self>, arg: R) -> GeneratorState { -+ fn resume(mut self: Pin<&mut Self>, arg: R) -> CoroutineState { - 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 { - } 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 - diff --git a/pkgs/os-specific/linux/kernel/rust-1.77-6.8.patch b/pkgs/os-specific/linux/kernel/rust-1.77-6.8.patch deleted file mode 100644 index 4b25d3e60e39..000000000000 --- a/pkgs/os-specific/linux/kernel/rust-1.77-6.8.patch +++ /dev/null @@ -1,799 +0,0 @@ -From 82a754271336c7736fb0350692be85fecb30e38e Mon Sep 17 00:00:00 2001 -From: Miguel Ojeda -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 -Tested-by: Boqun Feng -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 -Signed-off-by: Alyssa Ross - -# 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 { - //! Cons(T, Box>), -@@ -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, 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( - 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, -- 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, -+ /// 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` -+ pub(super) end: *const T, - } - - #[stable(feature = "vec_intoiter_debug", since = "1.13.0")] -@@ -70,7 +83,7 @@ impl IntoIter { - /// ``` - #[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 { - // 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 Iterator for IntoIter { - - #[inline] - fn next(&mut self) -> Option { -- 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) { - 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) { - #[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 DoubleEndedIterator for IntoIter { - #[inline] - fn next_back(&mut self) -> Option { -- 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 ExactSizeIterator for IntoIter { - 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 [len] == [capacity], -+/// with at least the requested capacity. If [len] == [capacity], - /// (as is the case for the [`vec!`] macro), then a `Vec` 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 { - } 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 { - /// - /// # 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>> = Mutex::new(Vec::new()); -+/// -+/// for i in 0..10 { -+/// let big_temporary: Vec = (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 FromIterator for Vec { -@@ -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 From> 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 - diff --git a/pkgs/os-specific/linux/kernel/rust-1.77.patch b/pkgs/os-specific/linux/kernel/rust-1.77.patch deleted file mode 100644 index ed9eb56bf6d7..000000000000 --- a/pkgs/os-specific/linux/kernel/rust-1.77.patch +++ /dev/null @@ -1,795 +0,0 @@ -From b256fc507d4710287b22077834c16d18cee4ab17 Mon Sep 17 00:00:00 2001 -From: Miguel Ojeda -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 -Tested-by: Boqun Feng -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 -Signed-off-by: Alyssa Ross ---- - 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 { - //! Cons(T, Box>), -@@ -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, 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( - 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, -- 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, -+ /// 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` -+ pub(super) end: *const T, - } - - #[stable(feature = "vec_intoiter_debug", since = "1.13.0")] -@@ -70,7 +83,7 @@ impl IntoIter { - /// ``` - #[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 { - // 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 Iterator for IntoIter { - - #[inline] - fn next(&mut self) -> Option { -- 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) { - 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) { - #[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 DoubleEndedIterator for IntoIter { - #[inline] - fn next_back(&mut self) -> Option { -- 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 ExactSizeIterator for IntoIter { - 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 [len] == [capacity], -+/// with at least the requested capacity. If [len] == [capacity], - /// (as is the case for the [`vec!`] macro), then a `Vec` 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 { - } 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 { - /// - /// # 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>> = Mutex::new(Vec::new()); -+/// -+/// for i in 0..10 { -+/// let big_temporary: Vec = (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 FromIterator for Vec { -@@ -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 From> 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 - diff --git a/pkgs/os-specific/linux/zfs/2_2.nix b/pkgs/os-specific/linux/zfs/2_2.nix index b6d99bbcc006..9e3fde0780f0 100644 --- a/pkgs/os-specific/linux/zfs/2_2.nix +++ b/pkgs/os-specific/linux/zfs/2_2.nix @@ -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"; diff --git a/pkgs/os-specific/linux/zfs/unstable.nix b/pkgs/os-specific/linux/zfs/unstable.nix index d989e2394ce4..50e1cc1459e9 100644 --- a/pkgs/os-specific/linux/zfs/unstable.nix +++ b/pkgs/os-specific/linux/zfs/unstable.nix @@ -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 diff --git a/pkgs/servers/mail/mailpit/default.nix b/pkgs/servers/mail/mailpit/default.nix index da62efd9f7a2..fd8f01674d80 100644 --- a/pkgs/servers/mail/mailpit/default.nix +++ b/pkgs/servers/mail/mailpit/default.nix @@ -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 = { diff --git a/pkgs/servers/matrix-synapse/default.nix b/pkgs/servers/matrix-synapse/default.nix index 72d89fd0111d..c5179d10f848 100644 --- a/pkgs/servers/matrix-synapse/default.nix +++ b/pkgs/servers/matrix-synapse/default.nix @@ -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 = '' diff --git a/pkgs/servers/polaris/default.nix b/pkgs/servers/polaris/default.nix index 35ebd2d66d88..b19eb1c47e7d 100644 --- a/pkgs/servers/polaris/default.nix +++ b/pkgs/servers/polaris/default.nix @@ -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"; diff --git a/pkgs/shells/zsh/oh-my-zsh/default.nix b/pkgs/shells/zsh/oh-my-zsh/default.nix index 4d6cd7e56ef1..afa3cbad9552 100644 --- a/pkgs/shells/zsh/oh-my-zsh/default.nix +++ b/pkgs/shells/zsh/oh-my-zsh/default.nix @@ -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; diff --git a/pkgs/tools/graphics/wallutils/default.nix b/pkgs/tools/graphics/wallutils/default.nix index e8abeebfec2e..1877832b59cc 100644 --- a/pkgs/tools/graphics/wallutils/default.nix +++ b/pkgs/tools/graphics/wallutils/default.nix @@ -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; diff --git a/pkgs/tools/misc/fedifetcher/default.nix b/pkgs/tools/misc/fedifetcher/default.nix index a0902fe79a3c..28dd0a88bac0 100644 --- a/pkgs/tools/misc/fedifetcher/default.nix +++ b/pkgs/tools/misc/fedifetcher/default.nix @@ -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; [ diff --git a/pkgs/tools/networking/burpsuite/default.nix b/pkgs/tools/networking/burpsuite/default.nix index b50f61ebc304..75014e8823d7 100644 --- a/pkgs/tools/networking/burpsuite/default.nix +++ b/pkgs/tools/networking/burpsuite/default.nix @@ -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" diff --git a/pkgs/tools/security/yubihsm-shell/default.nix b/pkgs/tools/security/yubihsm-shell/default.nix index 3302b26bfb90..8567798ea82c 100644 --- a/pkgs/tools/security/yubihsm-shell/default.nix +++ b/pkgs/tools/security/yubihsm-shell/default.nix @@ -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" ]; diff --git a/pkgs/tools/system/kanata/default.nix b/pkgs/tools/system/kanata/default.nix index 4f25b78f8bb2..682158af76ca 100644 --- a/pkgs/tools/system/kanata/default.nix +++ b/pkgs/tools/system/kanata/default.nix @@ -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"; diff --git a/pkgs/tools/virtualization/nixos-shell/default.nix b/pkgs/tools/virtualization/nixos-shell/default.nix index 14924de4e32d..18c49fe79ede 100644 --- a/pkgs/tools/virtualization/nixos-shell/default.nix +++ b/pkgs/tools/virtualization/nixos-shell/default.nix @@ -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 ]; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 23b14968d529..13b78f58eecd 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -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 { }; @@ -23944,8 +23945,6 @@ with pkgs; subdl = callPackage ../applications/video/subdl { }; - subtitleedit = callPackage ../applications/video/subtitleedit { }; - subtitleeditor = callPackage ../applications/video/subtitleeditor { }; subxt = callPackage ../development/tools/subxt { }; @@ -25531,8 +25530,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 @@ -26687,10 +26684,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; @@ -32307,8 +32300,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 { }; diff --git a/pkgs/top-level/linux-kernels.nix b/pkgs/top-level/linux-kernels.nix index 62679db1ddcf..4688e25586ac 100644 --- a/pkgs/top-level/linux-kernels.nix +++ b/pkgs/top-level/linux-kernels.nix @@ -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"; }); diff --git a/pkgs/top-level/php-packages.nix b/pkgs/top-level/php-packages.nix index d6d2af5850d0..093c47147877 100644 --- a/pkgs/top-level/php-packages.nix +++ b/pkgs/top-level/php-packages.nix @@ -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"; diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 5bb25e37898b..8e253e63328c 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -2031,7 +2031,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 { }; @@ -4298,6 +4300,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 { }; @@ -5376,8 +5380,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 { @@ -6552,7 +6556,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 { }; @@ -6701,6 +6706,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 { }; @@ -9025,6 +9034,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 { }; @@ -11631,7 +11642,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 { };