diff options
author | Jan Tojnar <jtojnar@gmail.com> | 2020-12-22 22:39:29 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-22 22:39:29 +0100 |
commit | 3dfcc7e3a57268d06754b44bf89ff0b728df8de4 (patch) | |
tree | b46b548d670f8d00510810675ba3c277fb3b05b4 | |
parent | d3a8c46fa838c754214ddb3ce5aad0bfd29ac37f (diff) | |
parent | b2594c71c248b78b8526a62f43ad74151a31ac3a (diff) |
Merge pull request #107044 from jtojnar/overridable-php-packages
-rw-r--r-- | doc/languages-frameworks/php.section.md | 18 | ||||
-rw-r--r-- | pkgs/development/interpreters/php/generic.nix | 8 | ||||
-rw-r--r-- | pkgs/top-level/php-packages.nix | 15 |
3 files changed, 28 insertions, 13 deletions
diff --git a/doc/languages-frameworks/php.section.md b/doc/languages-frameworks/php.section.md index 763beeb59358..5977363323f1 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 4a96abcf9b69..82134e14406f 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 @@ -49,8 +50,8 @@ let php = generic filteredArgs; php-packages = (callPackage ../../../top-level/php-packages.nix { - php = phpWithExtensions; - }); + phpPackage = phpWithExtensions; + }).overrideScope' packageOverrides; allExtensionFunctions = prevExtensionFunctions ++ [ extensions ]; enabledExtensions = @@ -112,7 +113,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 d5bebb9bd847..cc8ba346ae56 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); -} +}) |