summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Tojnar <jtojnar@gmail.com>2020-12-22 22:39:29 +0100
committerGitHub <noreply@github.com>2020-12-22 22:39:29 +0100
commit3dfcc7e3a57268d06754b44bf89ff0b728df8de4 (patch)
treeb46b548d670f8d00510810675ba3c277fb3b05b4
parentd3a8c46fa838c754214ddb3ce5aad0bfd29ac37f (diff)
parentb2594c71c248b78b8526a62f43ad74151a31ac3a (diff)
Merge pull request #107044 from jtojnar/overridable-php-packages
-rw-r--r--doc/languages-frameworks/php.section.md18
-rw-r--r--pkgs/development/interpreters/php/generic.nix8
-rw-r--r--pkgs/top-level/php-packages.nix15
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);
-}
+})