summary refs log tree commit diff
path: root/pkgs/development/interpreters/php
diff options
context:
space:
mode:
authorJan Tojnar <jtojnar@gmail.com>2021-06-06 08:33:46 +0200
committerJan Tojnar <jtojnar@gmail.com>2021-06-06 08:40:43 +0200
commitc27d583b427262bec1d4de707d1bbba401fffcd2 (patch)
treec29dc87a859156e687fa893aacc5c9c8ab223418 /pkgs/development/interpreters/php
parent4a34590eced7ec7aadf4a64105d7a88125919738 (diff)
downloadnixpkgs-c27d583b427262bec1d4de707d1bbba401fffcd2.tar
nixpkgs-c27d583b427262bec1d4de707d1bbba401fffcd2.tar.gz
nixpkgs-c27d583b427262bec1d4de707d1bbba401fffcd2.tar.bz2
nixpkgs-c27d583b427262bec1d4de707d1bbba401fffcd2.tar.lz
nixpkgs-c27d583b427262bec1d4de707d1bbba401fffcd2.tar.xz
nixpkgs-c27d583b427262bec1d4de707d1bbba401fffcd2.tar.zst
nixpkgs-c27d583b427262bec1d4de707d1bbba401fffcd2.zip
php: Simplify generic.nix
There is no need for the outer function since all arguments are shadowed anyway.
Diffstat (limited to 'pkgs/development/interpreters/php')
-rw-r--r--pkgs/development/interpreters/php/7.4.nix6
-rw-r--r--pkgs/development/interpreters/php/8.0.nix6
-rw-r--r--pkgs/development/interpreters/php/generic.nix489
3 files changed, 248 insertions, 253 deletions
diff --git a/pkgs/development/interpreters/php/7.4.nix b/pkgs/development/interpreters/php/7.4.nix
index 79e736b30d5..c4e566ee27c 100644
--- a/pkgs/development/interpreters/php/7.4.nix
+++ b/pkgs/development/interpreters/php/7.4.nix
@@ -1,9 +1,7 @@
-{ callPackage, lib, stdenv, nixosTests, ... }@_args:
+{ callPackage, lib, stdenv, ... }@_args:
 
 let
-  generic = (import ./generic.nix) _args;
-
-  base = callPackage generic (_args // {
+  base = callPackage ./generic.nix (_args // {
     version = "7.4.20";
     sha256 = "0d5ncz97y0271dsmz269wl4721vhq2fn6pmm9rxglc756p36pnha";
   });
diff --git a/pkgs/development/interpreters/php/8.0.nix b/pkgs/development/interpreters/php/8.0.nix
index 9d357f88afe..90f7c3b796c 100644
--- a/pkgs/development/interpreters/php/8.0.nix
+++ b/pkgs/development/interpreters/php/8.0.nix
@@ -1,9 +1,7 @@
-{ callPackage, lib, stdenv, nixosTests, ... }@_args:
+{ callPackage, lib, stdenv, ... }@_args:
 
 let
-  generic = (import ./generic.nix) _args;
-
-  base = callPackage generic (_args // {
+  base = callPackage ./generic.nix (_args // {
     version = "8.0.7";
     sha256 = "0yazcc9x66xg1gmi3rpgk891g6s3mm7aywcadqfqnx1mdz4z5ckj";
   });
diff --git a/pkgs/development/interpreters/php/generic.nix b/pkgs/development/interpreters/php/generic.nix
index 233e1b7007f..558fa45a1fd 100644
--- a/pkgs/development/interpreters/php/generic.nix
+++ b/pkgs/development/interpreters/php/generic.nix
@@ -1,8 +1,6 @@
 # We have tests for PCRE and PHP-FPM in nixos/tests/php/ or
 # both in the same attribute named nixosTests.php
 
-{ callPackage, lib, stdenv, nixosTests, ... }:
-
 let
   generic =
     { callPackage, lib, stdenv, nixosTests, fetchurl, makeWrapper
@@ -33,250 +31,251 @@ let
     , valgrindSupport ? !stdenv.isDarwin
     , ztsSupport ? apxs2Support
     }@args:
-      let
-        # buildEnv wraps php to provide additional extensions and
-        # configuration. Its usage is documented in
-        # doc/languages-frameworks/php.section.md.
-        #
-        # Create a buildEnv with earlier overridden values and
-        # extensions functions in its closure. This is necessary for
-        # consecutive calls to buildEnv and overrides to work as
-        # expected.
-        mkBuildEnv = prevArgs: prevExtensionFunctions: lib.makeOverridable (
-          { extensions ? ({ enabled, ... }: enabled), extraConfig ? "", ... }@innerArgs:
-            let
-              allArgs = args // prevArgs // innerArgs;
-              filteredArgs = builtins.removeAttrs allArgs [ "extensions" "extraConfig" ];
-              php = generic filteredArgs;
-
-              php-packages = (callPackage ../../../top-level/php-packages.nix {
-                phpPackage = phpWithExtensions;
-              }).overrideScope' packageOverrides;
-
-              allExtensionFunctions = prevExtensionFunctions ++ [ extensions ];
-              enabledExtensions =
-                builtins.foldl'
-                  (enabled: f:
-                    f { inherit enabled; all = php-packages.extensions; })
-                  []
-                  allExtensionFunctions;
-
-              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 []) ++ (ext.peclDeps 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
-              # 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;
-                      phpDeps = (ext.internalDeps or []) ++ (ext.peclDeps or []);
-                      type = "${lib.optionalString (ext.zendExtension or false) "zend_"}extension";
-                    in
-                      lib.nameValuePair extName {
-                        text = "${type}=${ext}/lib/php/extensions/${extName}.so";
-                        deps = map getExtName phpDeps;
-                      })
-                    (enabledExtensions ++ (getDepsRecursively enabledExtensions)));
-
-              extNames = map getExtName enabledExtensions;
-              extraInit = writeText "php-extra-init-${version}.ini" ''
-                ${lib.concatStringsSep "\n"
-                  (lib.textClosureList extensionTexts extNames)}
-                ${extraConfig}
-              '';
 
-              phpWithExtensions = symlinkJoin {
-                name = "php-with-extensions-${version}";
-                inherit (php) version;
-                nativeBuildInputs = [ makeWrapper ];
-                passthru = php.passthru // {
-                  buildEnv = mkBuildEnv allArgs allExtensionFunctions;
-                  withExtensions = mkWithExtensions allArgs allExtensionFunctions;
-                  phpIni = "${phpWithExtensions}/lib/php.ini";
-                  unwrapped = php;
-                  # Select the right php tests for the php version
-                  tests = nixosTests."php${lib.strings.replaceStrings [ "." ] [ "" ] (lib.versions.majorMinor php.version)}";
-                  inherit (php-packages) extensions buildPecl;
-                  packages = php-packages.tools;
-                  meta = php.meta // {
-                    outputsToInstall = [ "out" ];
-                  };
+    let
+      # buildEnv wraps php to provide additional extensions and
+      # configuration. Its usage is documented in
+      # doc/languages-frameworks/php.section.md.
+      #
+      # Create a buildEnv with earlier overridden values and
+      # extensions functions in its closure. This is necessary for
+      # consecutive calls to buildEnv and overrides to work as
+      # expected.
+      mkBuildEnv = prevArgs: prevExtensionFunctions: lib.makeOverridable (
+        { extensions ? ({ enabled, ... }: enabled), extraConfig ? "", ... }@innerArgs:
+          let
+            allArgs = args // prevArgs // innerArgs;
+            filteredArgs = builtins.removeAttrs allArgs [ "extensions" "extraConfig" ];
+            php = generic filteredArgs;
+
+            php-packages = (callPackage ../../../top-level/php-packages.nix {
+              phpPackage = phpWithExtensions;
+            }).overrideScope' packageOverrides;
+
+            allExtensionFunctions = prevExtensionFunctions ++ [ extensions ];
+            enabledExtensions =
+              builtins.foldl'
+                (enabled: f:
+                  f { inherit enabled; all = php-packages.extensions; })
+                []
+                allExtensionFunctions;
+
+            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 []) ++ (ext.peclDeps 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
+            # 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;
+                    phpDeps = (ext.internalDeps or []) ++ (ext.peclDeps or []);
+                    type = "${lib.optionalString (ext.zendExtension or false) "zend_"}extension";
+                  in
+                    lib.nameValuePair extName {
+                      text = "${type}=${ext}/lib/php/extensions/${extName}.so";
+                      deps = map getExtName phpDeps;
+                    })
+                  (enabledExtensions ++ (getDepsRecursively enabledExtensions)));
+
+            extNames = map getExtName enabledExtensions;
+            extraInit = writeText "php-extra-init-${version}.ini" ''
+              ${lib.concatStringsSep "\n"
+                (lib.textClosureList extensionTexts extNames)}
+              ${extraConfig}
+            '';
+
+            phpWithExtensions = symlinkJoin {
+              name = "php-with-extensions-${version}";
+              inherit (php) version;
+              nativeBuildInputs = [ makeWrapper ];
+              passthru = php.passthru // {
+                buildEnv = mkBuildEnv allArgs allExtensionFunctions;
+                withExtensions = mkWithExtensions allArgs allExtensionFunctions;
+                phpIni = "${phpWithExtensions}/lib/php.ini";
+                unwrapped = php;
+                # Select the right php tests for the php version
+                tests = nixosTests."php${lib.strings.replaceStrings [ "." ] [ "" ] (lib.versions.majorMinor php.version)}";
+                inherit (php-packages) extensions buildPecl;
+                packages = php-packages.tools;
+                meta = php.meta // {
+                  outputsToInstall = [ "out" ];
                 };
-                paths = [ php ];
-                postBuild = ''
-                  ln -s ${extraInit} $out/lib/php.ini
-
-                  if test -e $out/bin/php; then
-                    wrapProgram $out/bin/php --set PHP_INI_SCAN_DIR $out/lib
-                  fi
-
-                  if test -e $out/bin/php-fpm; then
-                    wrapProgram $out/bin/php-fpm --set PHP_INI_SCAN_DIR $out/lib
-                  fi
-
-                  if test -e $out/bin/phpdbg; then
-                    wrapProgram $out/bin/phpdbg --set PHP_INI_SCAN_DIR $out/lib
-                  fi
-                '';
               };
-            in
-              phpWithExtensions);
-
-        mkWithExtensions = prevArgs: prevExtensionFunctions: extensions:
-          mkBuildEnv prevArgs prevExtensionFunctions { inherit extensions; };
-      in
-        stdenv.mkDerivation {
-          pname = "php";
-
-          inherit version;
-
-          enableParallelBuilding = true;
-
-          nativeBuildInputs = [ autoconf automake bison flex libtool pkg-config re2c ]
-            ++ lib.optional stdenv.isDarwin xcbuild;
-
-          buildInputs =
-            # PCRE extension
-            [ pcre2 ]
-
-            # Enable sapis
-            ++ lib.optional pearSupport [ libxml2.dev ]
-
-            # Misc deps
-            ++ lib.optional apxs2Support apacheHttpd
-            ++ lib.optional argon2Support libargon2
-            ++ lib.optional systemdSupport systemd
-            ++ lib.optional valgrindSupport valgrind
-          ;
-
-          CXXFLAGS = lib.optionalString stdenv.cc.isClang "-std=c++11";
-
-          configureFlags =
-            # Disable all extensions
-            [ "--disable-all" ]
-
-            # PCRE
-            ++ lib.optionals (lib.versionAtLeast version "7.4") [ "--with-external-pcre=${pcre2.dev}" ]
-            ++ lib.optionals (lib.versions.majorMinor version == "7.3") [ "--with-pcre-regex=${pcre2.dev}" ]
-            ++ lib.optionals (lib.versionOlder version "7.3") [ "--with-pcre-regex=${pcre2.dev}" ]
-            ++ [ "PCRE_LIBDIR=${pcre2}" ]
-
-
-            # Enable sapis
-            ++ lib.optional (!cgiSupport) "--disable-cgi"
-            ++ lib.optional (!cliSupport) "--disable-cli"
-            ++ lib.optional fpmSupport    "--enable-fpm"
-            ++ lib.optional pearSupport [ "--with-pear" "--enable-xml" "--with-libxml" ]
-            ++ lib.optionals (pearSupport && (lib.versionOlder version "7.4")) [
-              "--enable-libxml"
-              "--with-libxml-dir=${libxml2.dev}"
-            ]
-            ++ lib.optional pharSupport   "--enable-phar"
-            ++ lib.optional (!phpdbgSupport) "--disable-phpdbg"
-
-
-            # Misc flags
-            ++ lib.optional apxs2Support "--with-apxs2=${apacheHttpd.dev}/bin/apxs"
-            ++ lib.optional argon2Support "--with-password-argon2=${libargon2}"
-            ++ lib.optional cgotoSupport "--enable-re2c-cgoto"
-            ++ lib.optional embedSupport "--enable-embed"
-            ++ lib.optional (!ipv6Support) "--disable-ipv6"
-            ++ lib.optional systemdSupport "--with-fpm-systemd"
-            ++ lib.optional valgrindSupport "--with-valgrind=${valgrind.dev}"
-            ++ lib.optional (ztsSupport && (lib.versionOlder version "8.0")) "--enable-maintainer-zts"
-            ++ lib.optional (ztsSupport && (lib.versionAtLeast version "8.0")) "--enable-zts"
-
-
-            # Sendmail
-            ++ [ "PROG_SENDMAIL=${system-sendmail}/bin/sendmail" ]
-          ;
-
-          hardeningDisable = [ "bindnow" ];
-
-          preConfigure =
-          # Don't record the configure flags since this causes unnecessary
-          # runtime dependencies
-          ''
-            for i in main/build-defs.h.in scripts/php-config.in; do
-              substituteInPlace $i \
-                --replace '@CONFIGURE_COMMAND@' '(omitted)' \
-                --replace '@CONFIGURE_OPTIONS@' "" \
-                --replace '@PHP_LDFLAGS@' ""
-            done
-
-            export EXTENSION_DIR=$out/lib/php/extensions
-          ''
-          # PKG_CONFIG need not be a relative path
-          + lib.optionalString (! lib.versionAtLeast version "7.4") ''
-            for i in $(find . -type f -name "*.m4"); do
-              substituteInPlace $i \
-                --replace 'test -x "$PKG_CONFIG"' 'type -P "$PKG_CONFIG" >/dev/null'
-            done
-          '' + ''
-            ./buildconf --copy --force
-
-            if test -f $src/genfiles; then
-              ./genfiles
-            fi
-          '' + lib.optionalString stdenv.isDarwin ''
-            substituteInPlace configure --replace "-lstdc++" "-lc++"
-          '';
-
-          postInstall = ''
-            test -d $out/etc || mkdir $out/etc
-            cp php.ini-production $out/etc/php.ini
-          '';
-
-          postFixup = ''
-            mkdir -p $dev/bin $dev/share/man/man1
-            mv $out/bin/phpize $out/bin/php-config $dev/bin/
-            mv $out/share/man/man1/phpize.1.gz \
-               $out/share/man/man1/php-config.1.gz \
-               $dev/share/man/man1/
-          '';
-
-          src = fetchurl {
-            url = "https://www.php.net/distributions/php-${version}.tar.bz2";
-            inherit sha256;
-          };
-
-          patches = [ ./fix-paths-php7.patch ] ++ extraPatches;
-
-          separateDebugInfo = true;
-
-          outputs = [ "out" "dev" ];
-
-          passthru = {
-            buildEnv = mkBuildEnv {} [];
-            withExtensions = mkWithExtensions {} [];
-            inherit ztsSupport;
-          };
-
-          meta = with lib; {
-            description = "An HTML-embedded scripting language";
-            homepage = "https://www.php.net/";
-            license = licenses.php301;
-            maintainers = teams.php.members;
-            platforms = platforms.all;
-            outputsToInstall = [ "out" "dev" ];
-          };
-        };
+              paths = [ php ];
+              postBuild = ''
+                ln -s ${extraInit} $out/lib/php.ini
+
+                if test -e $out/bin/php; then
+                  wrapProgram $out/bin/php --set PHP_INI_SCAN_DIR $out/lib
+                fi
+
+                if test -e $out/bin/php-fpm; then
+                  wrapProgram $out/bin/php-fpm --set PHP_INI_SCAN_DIR $out/lib
+                fi
+
+                if test -e $out/bin/phpdbg; then
+                  wrapProgram $out/bin/phpdbg --set PHP_INI_SCAN_DIR $out/lib
+                fi
+              '';
+            };
+          in
+            phpWithExtensions);
+
+      mkWithExtensions = prevArgs: prevExtensionFunctions: extensions:
+        mkBuildEnv prevArgs prevExtensionFunctions { inherit extensions; };
+    in
+    stdenv.mkDerivation {
+      pname = "php";
+
+      inherit version;
+
+      enableParallelBuilding = true;
+
+      nativeBuildInputs = [ autoconf automake bison flex libtool pkg-config re2c ]
+        ++ lib.optional stdenv.isDarwin xcbuild;
+
+      buildInputs =
+        # PCRE extension
+        [ pcre2 ]
+
+        # Enable sapis
+        ++ lib.optional pearSupport [ libxml2.dev ]
+
+        # Misc deps
+        ++ lib.optional apxs2Support apacheHttpd
+        ++ lib.optional argon2Support libargon2
+        ++ lib.optional systemdSupport systemd
+        ++ lib.optional valgrindSupport valgrind
+      ;
+
+      CXXFLAGS = lib.optionalString stdenv.cc.isClang "-std=c++11";
+
+      configureFlags =
+        # Disable all extensions
+        [ "--disable-all" ]
+
+        # PCRE
+        ++ lib.optionals (lib.versionAtLeast version "7.4") [ "--with-external-pcre=${pcre2.dev}" ]
+        ++ lib.optionals (lib.versions.majorMinor version == "7.3") [ "--with-pcre-regex=${pcre2.dev}" ]
+        ++ lib.optionals (lib.versionOlder version "7.3") [ "--with-pcre-regex=${pcre2.dev}" ]
+        ++ [ "PCRE_LIBDIR=${pcre2}" ]
+
+
+        # Enable sapis
+        ++ lib.optional (!cgiSupport) "--disable-cgi"
+        ++ lib.optional (!cliSupport) "--disable-cli"
+        ++ lib.optional fpmSupport    "--enable-fpm"
+        ++ lib.optional pearSupport [ "--with-pear" "--enable-xml" "--with-libxml" ]
+        ++ lib.optionals (pearSupport && (lib.versionOlder version "7.4")) [
+          "--enable-libxml"
+          "--with-libxml-dir=${libxml2.dev}"
+        ]
+        ++ lib.optional pharSupport   "--enable-phar"
+        ++ lib.optional (!phpdbgSupport) "--disable-phpdbg"
+
+
+        # Misc flags
+        ++ lib.optional apxs2Support "--with-apxs2=${apacheHttpd.dev}/bin/apxs"
+        ++ lib.optional argon2Support "--with-password-argon2=${libargon2}"
+        ++ lib.optional cgotoSupport "--enable-re2c-cgoto"
+        ++ lib.optional embedSupport "--enable-embed"
+        ++ lib.optional (!ipv6Support) "--disable-ipv6"
+        ++ lib.optional systemdSupport "--with-fpm-systemd"
+        ++ lib.optional valgrindSupport "--with-valgrind=${valgrind.dev}"
+        ++ lib.optional (ztsSupport && (lib.versionOlder version "8.0")) "--enable-maintainer-zts"
+        ++ lib.optional (ztsSupport && (lib.versionAtLeast version "8.0")) "--enable-zts"
+
+
+        # Sendmail
+        ++ [ "PROG_SENDMAIL=${system-sendmail}/bin/sendmail" ]
+      ;
+
+      hardeningDisable = [ "bindnow" ];
+
+      preConfigure =
+      # Don't record the configure flags since this causes unnecessary
+      # runtime dependencies
+      ''
+        for i in main/build-defs.h.in scripts/php-config.in; do
+          substituteInPlace $i \
+            --replace '@CONFIGURE_COMMAND@' '(omitted)' \
+            --replace '@CONFIGURE_OPTIONS@' "" \
+            --replace '@PHP_LDFLAGS@' ""
+        done
+
+        export EXTENSION_DIR=$out/lib/php/extensions
+      ''
+      # PKG_CONFIG need not be a relative path
+      + lib.optionalString (! lib.versionAtLeast version "7.4") ''
+        for i in $(find . -type f -name "*.m4"); do
+          substituteInPlace $i \
+            --replace 'test -x "$PKG_CONFIG"' 'type -P "$PKG_CONFIG" >/dev/null'
+        done
+      '' + ''
+        ./buildconf --copy --force
+
+        if test -f $src/genfiles; then
+          ./genfiles
+        fi
+      '' + lib.optionalString stdenv.isDarwin ''
+        substituteInPlace configure --replace "-lstdc++" "-lc++"
+      '';
+
+      postInstall = ''
+        test -d $out/etc || mkdir $out/etc
+        cp php.ini-production $out/etc/php.ini
+      '';
+
+      postFixup = ''
+        mkdir -p $dev/bin $dev/share/man/man1
+        mv $out/bin/phpize $out/bin/php-config $dev/bin/
+        mv $out/share/man/man1/phpize.1.gz \
+           $out/share/man/man1/php-config.1.gz \
+           $dev/share/man/man1/
+      '';
+
+      src = fetchurl {
+        url = "https://www.php.net/distributions/php-${version}.tar.bz2";
+        inherit sha256;
+      };
+
+      patches = [ ./fix-paths-php7.patch ] ++ extraPatches;
+
+      separateDebugInfo = true;
+
+      outputs = [ "out" "dev" ];
+
+      passthru = {
+        buildEnv = mkBuildEnv {} [];
+        withExtensions = mkWithExtensions {} [];
+        inherit ztsSupport;
+      };
+
+      meta = with lib; {
+        description = "An HTML-embedded scripting language";
+        homepage = "https://www.php.net/";
+        license = licenses.php301;
+        maintainers = teams.php.members;
+        platforms = platforms.all;
+        outputsToInstall = [ "out" "dev" ];
+      };
+    };
 in generic