Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 54 additions & 40 deletions pkgs/build-support/php/builders/v2/build-composer-project.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is intended? @drupol

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes this was intended indeed. Is there any issue?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@drupol If you would like to restore the previous overriding behaviour, simply restore this line.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes it's done in the PR linked in this PR

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;
}
84 changes: 39 additions & 45 deletions pkgs/build-support/php/builders/v2/build-composer-vendor.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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;
}