about summary refs log tree commit diff
path: root/pkgs/development/interpreters/php
diff options
context:
space:
mode:
authortalyz <kim.lindberger@gmail.com>2020-04-11 21:48:37 +0200
committertalyz <kim.lindberger@gmail.com>2020-04-24 13:05:37 +0200
commita46326141570098adc676cd66dc8030fa36d4998 (patch)
tree937c12bebb2b01cb15e79a5b7b22571d6c3a6d50 /pkgs/development/interpreters/php
parentc89243a03e432625cff14fbcc148041cf9508681 (diff)
downloadnixlib-a46326141570098adc676cd66dc8030fa36d4998.tar
nixlib-a46326141570098adc676cd66dc8030fa36d4998.tar.gz
nixlib-a46326141570098adc676cd66dc8030fa36d4998.tar.bz2
nixlib-a46326141570098adc676cd66dc8030fa36d4998.tar.lz
nixlib-a46326141570098adc676cd66dc8030fa36d4998.tar.xz
nixlib-a46326141570098adc676cd66dc8030fa36d4998.tar.zst
nixlib-a46326141570098adc676cd66dc8030fa36d4998.zip
php.buildEnv: Make the exported php package overridable
This implements the override pattern for builds done with buildEnv, so
that we can, for example, write

php.override { fpmSupport = false; }

and get a PHP package with the default extensions enabled, but PHP
compiled without fpm support.
Diffstat (limited to 'pkgs/development/interpreters/php')
-rw-r--r--pkgs/development/interpreters/php/default.nix86
1 files changed, 46 insertions, 40 deletions
diff --git a/pkgs/development/interpreters/php/default.nix b/pkgs/development/interpreters/php/default.nix
index 1d6576b383cd..4a80f79deebb 100644
--- a/pkgs/development/interpreters/php/default.nix
+++ b/pkgs/development/interpreters/php/default.nix
@@ -148,55 +148,61 @@ let
 
   generic' = { version, sha256, self, selfWithExtensions, ... }@args:
     let
-      php = generic (builtins.removeAttrs args [ "self" "selfWithExtensions" ]);
+      filteredArgs = builtins.removeAttrs args [ "self" "selfWithExtensions" ];
+      php = generic filteredArgs;
 
       php-packages = (callPackage ../../../top-level/php-packages.nix {
         php = self;
         phpWithExtensions = selfWithExtensions;
       });
 
-      buildEnv = { extensions ? (_: []), extraConfig ? "" }:
-        let
-          getExtName = ext: lib.removePrefix "php-" (builtins.parseDrvName ext.name).name;
-          enabledExtensions = extensions php-packages.extensions;
-
-          # Generate extension load configuration snippets from the
-          # extension parameter. This is an attrset suitable for use
-          # with textClosureList, which is used to put the strings in
-          # the right order - if a plugin which is dependent on
-          # another plugin is placed before its dependency, it will
-          # fail to load.
-          extensionTexts =
-            lib.listToAttrs
-              (map (ext:
-                let
-                  extName = getExtName ext;
-                  type = "${lib.optionalString (ext.zendExtension or false) "zend_"}extension";
-                in
-                  lib.nameValuePair extName {
-                    text = "${type}=${ext}/lib/php/extensions/${extName}.so";
-                    deps = lib.optionals (ext ? internalDeps)
-                      (map getExtName ext.internalDeps);
-                  })
-                enabledExtensions);
-
-          extNames = map getExtName enabledExtensions;
-          extraInit = writeText "custom-php.ini" ''
+      buildEnv = lib.makeOverridable (
+        { extensions ? (_: []), extraConfig ? "", ... }@innerArgs:
+          let
+            filteredInnerArgs = builtins.removeAttrs innerArgs [ "extensions" "extraConfig" ];
+            allArgs = filteredArgs // filteredInnerArgs;
+            php = generic allArgs;
+
+            getExtName = ext: lib.removePrefix "php-" (builtins.parseDrvName ext.name).name;
+            enabledExtensions = extensions php-packages.extensions;
+
+            # Generate extension load configuration snippets from the
+            # extension parameter. This is an attrset suitable for use
+            # with textClosureList, which is used to put the strings in
+            # the right order - if a plugin which is dependent on
+            # another plugin is placed before its dependency, it will
+            # fail to load.
+            extensionTexts =
+              lib.listToAttrs
+                (map (ext:
+                  let
+                    extName = getExtName ext;
+                    type = "${lib.optionalString (ext.zendExtension or false) "zend_"}extension";
+                  in
+                    lib.nameValuePair extName {
+                      text = "${type}=${ext}/lib/php/extensions/${extName}.so";
+                      deps = lib.optionals (ext ? internalDeps)
+                        (map getExtName ext.internalDeps);
+                    })
+                  enabledExtensions);
+
+            extNames = map getExtName enabledExtensions;
+            extraInit = writeText "custom-php.ini" ''
             ${lib.concatStringsSep "\n"
               (lib.textClosureList extensionTexts extNames)}
             ${extraConfig}
           '';
-        in
-          symlinkJoin {
-            name = "php-with-extensions-${version}";
-            inherit (php) version;
-            nativeBuildInputs = [ makeWrapper ];
-            passthru = {
-              inherit buildEnv withExtensions enabledExtensions;
-              inherit (php-packages) packages extensions;
-            };
-            paths = [ php ];
-            postBuild = ''
+          in
+            symlinkJoin {
+              name = "php-with-extensions-${version}";
+              inherit (php) version;
+              nativeBuildInputs = [ makeWrapper ];
+              passthru = {
+                inherit buildEnv withExtensions enabledExtensions;
+                inherit (php-packages) packages extensions;
+              };
+              paths = [ php ];
+              postBuild = ''
               cp ${extraInit} $out/lib/custom-php.ini
 
               wrapProgram $out/bin/php --set PHP_INI_SCAN_DIR $out/lib
@@ -205,7 +211,7 @@ let
                  wrapProgram $out/bin/php-fpm --set PHP_INI_SCAN_DIR $out/lib
               fi
             '';
-          };
+            });
 
       withExtensions = extensions: buildEnv { inherit extensions; };
     in