Commit cd850d57 authored by Pol Dellaiera's avatar Pol Dellaiera Committed by Masum Reza
Browse files

build-support/php: support `lib.extendMkDerivation` for `php.mkComposerVendor`

parent 862a3e90
Loading
Loading
Loading
Loading
+39 −45
Original line number Diff line number Diff line
@@ -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.
    finalAttrs:
    {
      php ? null,
      composer ? null,
      composerLock ? "composer.lock",
      src,
      vendorHash,
      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;
}