diff options
author | talyz <kim.lindberger@gmail.com> | 2020-04-11 21:48:37 +0200 |
---|---|---|
committer | talyz <kim.lindberger@gmail.com> | 2020-04-24 13:05:37 +0200 |
commit | a46326141570098adc676cd66dc8030fa36d4998 (patch) | |
tree | 937c12bebb2b01cb15e79a5b7b22571d6c3a6d50 /pkgs/development/interpreters/php | |
parent | c89243a03e432625cff14fbcc148041cf9508681 (diff) | |
download | nixlib-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.nix | 86 |
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 |