diff --git a/pkgs/build-support/php/builders/v2/build-composer-project.nix b/pkgs/build-support/php/builders/v2/build-composer-project.nix index bfbd2327812bc..a777b8a830e21 100644 --- a/pkgs/build-support/php/builders/v2/build-composer-project.nix +++ b/pkgs/build-support/php/builders/v2/build-composer-project.nix @@ -3,100 +3,114 @@ stdenvNoCC, lib, php, -}: +}@toplevel: let buildComposerProjectOverride = - finalAttrs: previousAttrs: - - let - phpDrv = finalAttrs.php or php; - composer = finalAttrs.composer or phpDrv.packages.composer; - in + finalAttrs: { - composerLock = previousAttrs.composerLock or null; - composerNoDev = previousAttrs.composerNoDev or true; - composerNoPlugins = previousAttrs.composerNoPlugins or true; - composerNoScripts = previousAttrs.composerNoScripts or true; - composerStrictValidation = previousAttrs.composerStrictValidation or true; - - nativeBuildInputs = (previousAttrs.nativeBuildInputs or [ ]) ++ [ + php ? toplevel.php, + composer ? toplevel.php.packages.composer, + composerVendor ? null, + vendorHash ? null, + composerLock ? null, + composerNoDev ? true, + composerNoPlugins ? true, + composerNoScripts ? true, + composerStrictValidation ? true, + buildInputs ? [ ], + nativeBuildInputs ? [ ], + strictDeps ? true, + patches ? [ ], + doCheck ? true, + doInstallCheck ? true, + passthru ? { }, + meta ? { }, + ... + }@args: + { + inherit + patches + strictDeps + doCheck + doInstallCheck + ; + nativeBuildInputs = nativeBuildInputs ++ [ composer - phpDrv - phpDrv.composerHooks2.composerInstallHook + php + php.composerHooks2.composerInstallHook ]; - buildInputs = (previousAttrs.buildInputs or [ ]) ++ [ phpDrv ]; - - patches = previousAttrs.patches or [ ]; - strictDeps = previousAttrs.strictDeps or true; + buildInputs = buildInputs ++ [ php ]; # Should we keep these empty phases? configurePhase = - previousAttrs.configurePhase or '' + args.configurePhase or '' runHook preConfigure runHook postConfigure ''; buildPhase = - previousAttrs.buildPhase or '' + args.buildPhase or '' runHook preBuild runHook postBuild ''; - doCheck = previousAttrs.doCheck or true; checkPhase = - previousAttrs.checkPhase or '' + args.checkPhase or '' runHook preCheck runHook postCheck ''; installPhase = - previousAttrs.installPhase or '' + args.installPhase or '' runHook preInstall runHook postInstall ''; - doInstallCheck = previousAttrs.doInstallCheck or false; installCheckPhase = - previousAttrs.installCheckPhase or '' + args.installCheckPhase or '' runHook preInstallCheck runHook postInstallCheck ''; composerVendor = - previousAttrs.composerVendor or (phpDrv.mkComposerVendor { - inherit composer; + args.composerVendor or (php.mkComposerVendor { + inherit + composer + composerLock + composerNoDev + composerNoPlugins + composerNoScripts + composerStrictValidation + vendorHash + ; inherit (finalAttrs) patches pname src - vendorHash version ; - - composerLock = previousAttrs.composerLock or null; - composerNoDev = previousAttrs.composerNoDev or true; - composerNoPlugins = previousAttrs.composerNoPlugins or true; - composerNoScripts = previousAttrs.composerNoScripts or true; - composerStrictValidation = previousAttrs.composerStrictValidation or true; }); # Projects providing a lockfile from upstream can be automatically updated. - passthru = previousAttrs.passthru or { } // { + passthru = passthru // { updateScript = - previousAttrs.passthru.updateScript + args.passthru.updateScript or (if finalAttrs.composerVendor.composerLock == null then nix-update-script { } else null); }; - meta = previousAttrs.meta or { } // { + meta = meta // { platforms = lib.platforms.all; }; }; in -args: (stdenvNoCC.mkDerivation args).overrideAttrs buildComposerProjectOverride +lib.extendMkDerivation { + constructDrv = stdenvNoCC.mkDerivation; + extendDrvArgs = buildComposerProjectOverride; +} diff --git a/pkgs/build-support/php/builders/v2/build-composer-vendor.nix b/pkgs/build-support/php/builders/v2/build-composer-vendor.nix index 75f93d066f839..c66dedb614da8 100644 --- a/pkgs/build-support/php/builders/v2/build-composer-vendor.nix +++ b/pkgs/build-support/php/builders/v2/build-composer-vendor.nix @@ -2,86 +2,77 @@ stdenvNoCC, lib, php, -}: +}@toplevel: let mkComposerVendorOverride = - /* - We cannot destruct finalAttrs since the attrset below is used to construct it - and Nix currently does not support lazy attribute names. - { - php ? null, - composer ? null, - composerLock ? "composer.lock", - src, - vendorHash, + finalAttrs: + { + php ? toplevel.php, + composer ? toplevel.php.packages.composer, + composerLock, + vendorHash ? null, + composerNoDev ? true, + composerNoPlugins ? true, + composerNoScripts ? true, + composerStrictValidation ? true, + buildInputs ? [ ], + nativeBuildInputs ? [ ], + dontPatchShebangs ? true, + strictDeps ? true, + doCheck ? true, + doInstallCheck ? false, ... - }@finalAttrs: - */ - finalAttrs: previousAttrs: - - let - phpDrv = finalAttrs.php or php; - composer = finalAttrs.composer or phpDrv.packages.composer; - in - assert (lib.assertMsg (previousAttrs ? src) "mkComposerVendor expects src argument."); - assert (lib.assertMsg (previousAttrs ? vendorHash) "mkComposerVendor expects vendorHash argument."); - assert (lib.assertMsg (previousAttrs ? version) "mkComposerVendor expects version argument."); - assert (lib.assertMsg (previousAttrs ? pname) "mkComposerVendor expects pname argument."); + }@args: + assert (lib.assertMsg (args ? src) "mkComposerVendor expects src argument."); + assert (lib.assertMsg (args ? vendorHash) "mkComposerVendor expects vendorHash argument."); + assert (lib.assertMsg (args ? version) "mkComposerVendor expects version argument."); + assert (lib.assertMsg (args ? pname) "mkComposerVendor expects pname argument."); { - composerNoDev = previousAttrs.composerNoDev or true; - composerNoPlugins = previousAttrs.composerNoPlugins or true; - composerNoScripts = previousAttrs.composerNoScripts or true; - composerStrictValidation = previousAttrs.composerStrictValidation or true; - - name = "${previousAttrs.pname}-composer-repository-${previousAttrs.version}"; + name = "${args.pname}-composer-vendor-${args.version}"; # See https://github.com/NixOS/nix/issues/6660 - dontPatchShebangs = previousAttrs.dontPatchShebangs or true; + inherit dontPatchShebangs; - nativeBuildInputs = (previousAttrs.nativeBuildInputs or [ ]) ++ [ + inherit buildInputs strictDeps doCheck; + + nativeBuildInputs = nativeBuildInputs ++ [ composer - phpDrv - phpDrv.composerHooks2.composerVendorHook + php + php.composerHooks2.composerVendorHook ]; - buildInputs = previousAttrs.buildInputs or [ ]; - - strictDeps = previousAttrs.strictDeps or true; - # Should we keep these empty phases? configurePhase = - previousAttrs.configurePhase or '' + args.configurePhase or '' runHook preConfigure runHook postConfigure ''; buildPhase = - previousAttrs.buildPhase or '' + args.buildPhase or '' runHook preBuild runHook postBuild ''; - doCheck = previousAttrs.doCheck or true; checkPhase = - previousAttrs.checkPhase or '' + args.checkPhase or '' runHook preCheck runHook postCheck ''; installPhase = - previousAttrs.installPhase or '' + args.installPhase or '' runHook preInstall runHook postInstall ''; - doInstallCheck = previousAttrs.doInstallCheck or false; installCheckPhase = - previousAttrs.installCheckPhase or '' + args.installCheckPhase or '' runHook preInstallCheck runHook postInstallCheck @@ -90,7 +81,10 @@ let outputHashMode = "recursive"; outputHashAlgo = if (finalAttrs ? vendorHash && finalAttrs.vendorHash != "") then null else "sha256"; - outputHash = finalAttrs.vendorHash or ""; + outputHash = vendorHash; }; in -args: (stdenvNoCC.mkDerivation args).overrideAttrs mkComposerVendorOverride +lib.extendMkDerivation { + constructDrv = stdenvNoCC.mkDerivation; + extendDrvArgs = mkComposerVendorOverride; +}