php.packages: Make packages overridable

This will allow patching extensions without having to manually having to patch all occurrences in the dependency tree.
This commit is contained in:
Jan Tojnar 2020-12-16 00:06:42 +01:00
parent 7e8b2b7e98
commit b2594c71c2
No known key found for this signature in database
GPG key ID: 7FAB2A15F7A607A4
2 changed files with 20 additions and 1 deletions

View file

@ -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 [] ++ [
];
});
};
};
}
```

View file

@ -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 =