{ stdenv, lib, php, autoreconfHook, fetchurl, re2c, nix-update-script }: { pname , version , internalDeps ? [ ] , peclDeps ? [ ] , buildInputs ? [ ] , nativeBuildInputs ? [ ] , postPhpize ? "" , makeFlags ? [ ] , src ? fetchurl ({ url = "https://pecl.php.net/get/${pname}-${version}.tgz"; } // lib.filterAttrs (attrName: _: lib.elem attrName [ "sha256" "hash" ]) args) , passthru ? { } , ... }@args: stdenv.mkDerivation (args // { name = "php-${pname}-${version}"; extensionName = pname; inherit src; nativeBuildInputs = [ autoreconfHook re2c ] ++ nativeBuildInputs; buildInputs = [ php ] ++ peclDeps ++ buildInputs; makeFlags = [ "EXTENSION_DIR=$(out)/lib/php/extensions" ] ++ makeFlags; autoreconfPhase = '' phpize ${postPhpize} ${lib.concatMapStringsSep "\n" (dep: "mkdir -p ext; ln -s ${dep.dev}/include ext/${dep.extensionName}") internalDeps} ''; checkPhase = "NO_INTERACTON=yes make test"; passthru = passthru // { # Thes flags were introduced for `nix-update` so that it can update # PHP extensions correctly. # See the corresponding PR: https://github.com/Mic92/nix-update/pull/123 isPhpExtension = true; updateScript = nix-update-script {}; }; })