From 7e8b2b7e988cfd7e8e0745f0af3eb42b6a1918cb Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Tue, 15 Dec 2020 17:42:21 +0100 Subject: [PATCH 1/2] phpPackages: convert to scope This will make it easier to make overridable. Had to rename `packages` attribute to `tools` in `php-packages.nix` because `packages` is shadowed by `makeScope`. --- pkgs/development/interpreters/php/generic.nix | 5 +++-- pkgs/top-level/php-packages.nix | 15 +++++---------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/pkgs/development/interpreters/php/generic.nix b/pkgs/development/interpreters/php/generic.nix index 4a96abcf9b69328..a3559de94400756 100644 --- a/pkgs/development/interpreters/php/generic.nix +++ b/pkgs/development/interpreters/php/generic.nix @@ -49,7 +49,7 @@ let php = generic filteredArgs; php-packages = (callPackage ../../../top-level/php-packages.nix { - php = phpWithExtensions; + phpPackage = phpWithExtensions; }); allExtensionFunctions = prevExtensionFunctions ++ [ extensions ]; @@ -112,7 +112,8 @@ let phpIni = "${phpWithExtensions}/lib/php.ini"; unwrapped = php; tests = nixosTests.php; - inherit (php-packages) packages extensions buildPecl; + inherit (php-packages) extensions buildPecl; + packages = php-packages.tools; meta = php.meta // { outputsToInstall = [ "out" ]; }; diff --git a/pkgs/top-level/php-packages.nix b/pkgs/top-level/php-packages.nix index d5bebb9bd847427..cc8ba346ae56c57 100644 --- a/pkgs/top-level/php-packages.nix +++ b/pkgs/top-level/php-packages.nix @@ -1,4 +1,4 @@ -{ stdenv, lib, pkgs, fetchgit, php, autoconf, pkgconfig, re2c +{ stdenv, lib, pkgs, fetchgit, phpPackage, autoconf, pkgconfig, re2c , gettext, bzip2, curl, libxml2, openssl, gmp, icu64, oniguruma, libsodium , html-tidy, libzip, zlib, pcre, pcre2, libxslt, aspell, openldap, cyrus_sasl , uwimap, pam, libiconv, enchant1, libXpm, gd, libwebp, libjpeg, libpng @@ -6,7 +6,7 @@ , readline, rsync, fetchpatch, valgrind }: -let +lib.makeScope pkgs.newScope (self: with self; { buildPecl = import ../build-support/build-pecl.nix { php = php.unwrapped; inherit lib; @@ -21,15 +21,10 @@ let pcre' = if (lib.versionAtLeast php.version "7.3") then pcre2 else pcre; - callPackage = pkgs.newScope { - inherit mkDerivation php buildPecl pcre'; - }; -in -{ - inherit buildPecl; + php = phpPackage; # This is a set of interactive tools based on PHP. - packages = { + tools = { box = callPackage ../development/php-packages/box { }; composer = callPackage ../development/php-packages/composer { }; @@ -550,4 +545,4 @@ in # Produce the final attribute set of all extensions defined. in builtins.listToAttrs namedExtensions); -} +}) From b2594c71c248b78b8526a62f43ad74151a31ac3a Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Wed, 16 Dec 2020 00:06:42 +0100 Subject: [PATCH 2/2] php.packages: Make packages overridable This will allow patching extensions without having to manually having to patch all occurrences in the dependency tree. --- doc/languages-frameworks/php.section.md | 18 ++++++++++++++++++ pkgs/development/interpreters/php/generic.nix | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/doc/languages-frameworks/php.section.md b/doc/languages-frameworks/php.section.md index 763beeb59358311..5977363323f18f0 100644 --- a/doc/languages-frameworks/php.section.md +++ b/doc/languages-frameworks/php.section.md @@ -135,3 +135,21 @@ Example of building `composer` with additional extensions: enabled ++ (with all; [ imagick redis ])) ).packages.composer ``` + +### Overriding PHP packages {#ssec-php-user-guide-overriding-packages} + +`php-packages.nix` form a scope, allowing us to override the packages defined within. For example, to apply a patch to a `mysqlnd` extension, you can simply pass an overlay-style function to `php`’s `packageOverrides` argument: + +```nix +php.override { + packageOverrides = final: prev: { + extensions = prev.extensions // { + mysqlnd = prev.extensions.mysqlnd.overrideAttrs (attrs: { + patches = attrs.patches or [] ++ [ + … + ]; + }); + }; + }; +} +``` diff --git a/pkgs/development/interpreters/php/generic.nix b/pkgs/development/interpreters/php/generic.nix index a3559de94400756..82134e14406f897 100644 --- a/pkgs/development/interpreters/php/generic.nix +++ b/pkgs/development/interpreters/php/generic.nix @@ -13,6 +13,7 @@ let , version , sha256 , extraPatches ? [] + , packageOverrides ? (final: prev: {}) # Sapi flags , cgiSupport ? true @@ -50,7 +51,7 @@ let php-packages = (callPackage ../../../top-level/php-packages.nix { phpPackage = phpWithExtensions; - }); + }).overrideScope' packageOverrides; allExtensionFunctions = prevExtensionFunctions ++ [ extensions ]; enabledExtensions =