diff --git a/pkgs/top-level/php-packages.nix b/pkgs/top-level/php-packages.nix index 3fa17b35853..8795f855691 100644 --- a/pkgs/top-level/php-packages.nix +++ b/pkgs/top-level/php-packages.nix @@ -19,7 +19,6 @@ , html-tidy , icu64 , libXpm -, libedit , libffi , libiconv , libjpeg @@ -80,16 +79,29 @@ lib.makeScope pkgs.newScope (self: with self; { pname = "php-${name}"; extensionName = name; + outputs = [ "out" "dev" ]; + inherit (php.unwrapped) version src; - sourceRoot = "php-${php.version}/ext/${name}"; enableParallelBuilding = true; - nativeBuildInputs = [ php.unwrapped autoconf pkg-config re2c ]; - inherit configureFlags internalDeps buildInputs - zendExtension doCheck; - prePatch = "pushd ../.."; - postPatch = "popd"; + nativeBuildInputs = [ + php.unwrapped + autoconf + pkg-config + re2c + ]; + + inherit configureFlags internalDeps buildInputs zendExtension doCheck; + + preConfigurePhases = [ + "cdToExtensionRootPhase" + ]; + + cdToExtensionRootPhase = '' + # Go to extension source root. + cd "ext/${name}" + ''; preConfigure = '' nullglobRestore=$(shopt -p nullglob) @@ -101,19 +113,28 @@ lib.makeScope pkgs.newScope (self: with self; { fi $nullglobRestore + phpize ${postPhpize} - ${lib.concatMapStringsSep "\n" + + ${lib.concatMapStringsSep + "\n" (dep: "mkdir -p ext; ln -s ${dep.dev}/include ext/${dep.extensionName}") - internalDeps} + internalDeps + } ''; + checkPhase = '' runHook preCheck + NO_INTERACTON=yes SKIP_PERF_SENSITIVE=yes make test + runHook postCheck ''; - outputs = [ "out" "dev" ]; + installPhase = '' + runHook preInstall + mkdir -p $out/lib/php/extensions cp modules/${name}.so $out/lib/php/extensions/${name}.so mkdir -p $dev/include @@ -122,6 +143,8 @@ lib.makeScope pkgs.newScope (self: with self; { --filter="- *" \ --prune-empty-dirs \ . $dev/include/ + + runHook postInstall ''; meta = { @@ -520,10 +543,23 @@ lib.makeScope pkgs.newScope (self: with self; { { name = "pspell"; configureFlags = [ "--with-pspell=${aspell}" ]; } { name = "readline"; - buildInputs = [ libedit readline ]; - configureFlags = [ "--with-readline=${readline.dev}" ]; - postPhpize = lib.optionalString (lib.versionOlder php.version "7.4") '' - substituteInPlace configure --replace 'as_fn_error $? "Please reinstall libedit - I cannot find readline.h" "$LINENO" 5' ':' + buildInputs = [ + readline + ]; + configureFlags = [ + "--with-readline=${readline.dev}" + ]; + postPatch = '' + # Fix `--with-readline` option not being available. + # `PHP_ALWAYS_SHARED` generated by phpize enables all options + # without the possibility to override them. But when `--with-libedit` + # is enabled, `--with-readline` is not registered. + echo ' + AC_DEFUN([PHP_ALWAYS_SHARED],[ + test "[$]$1" != "no" && ext_shared=yes + ])dnl + ' | cat - ext/readline/config.m4 > ext/readline/config.m4.tmp + mv ext/readline/config.m4{.tmp,} ''; doCheck = false; }