From d61040716e4e7266f36e523f8ba5fa11f387548e Mon Sep 17 00:00:00 2001 From: talyz Date: Fri, 24 Apr 2020 18:11:40 +0200 Subject: [PATCH] php.buildEnv: Automatically include extension dependencies Some extensions depend on other extensions. Previously, these had to be added manually to the list of included extensions, or we got a cryptic error message pointing to strings-with-deps.nix, which wasn't very helpful. This makes sure all required extensions are included in the set from which textClosureList chooses its snippets. --- pkgs/development/interpreters/php/default.nix | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/pkgs/development/interpreters/php/default.nix b/pkgs/development/interpreters/php/default.nix index 33071b06d95..2eda206ef2e 100644 --- a/pkgs/development/interpreters/php/default.nix +++ b/pkgs/development/interpreters/php/default.nix @@ -71,6 +71,19 @@ let getExtName = ext: lib.removePrefix "php-" (builtins.parseDrvName ext.name).name; + # Recursively get a list of all internal dependencies + # for a list of extensions. + getDepsRecursively = extensions: + let + deps = lib.concatMap + (ext: ext.internalDeps or []) + extensions; + in + if ! (deps == []) then + deps ++ (getDepsRecursively deps) + else + deps; + # 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 @@ -89,7 +102,7 @@ let deps = lib.optionals (ext ? internalDeps) (map getExtName ext.internalDeps); }) - enabledExtensions); + (enabledExtensions ++ (getDepsRecursively enabledExtensions))); extNames = map getExtName enabledExtensions; extraInit = writeText "custom-php.ini" ''