mirror of
https://github.com/vale981/poetry2nix
synced 2025-03-05 09:11:39 -05:00
Add experimental support for plugin closures
This commit is contained in:
parent
ff98b8a987
commit
8215ac6941
2 changed files with 75 additions and 0 deletions
|
@ -22,6 +22,9 @@ let
|
||||||
# Get license by id falling back to input string
|
# Get license by id falling back to input string
|
||||||
getLicenseBySpdxId = spdxId: spdxLicenses.${spdxId} or spdxId;
|
getLicenseBySpdxId = spdxId: spdxLicenses.${spdxId} or spdxId;
|
||||||
|
|
||||||
|
# Experimental withPlugins functionality
|
||||||
|
toPluginAble = (import ./plugins.nix { inherit pkgs lib; }).toPluginAble;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Returns an attrset { python, poetryPackages, pyProject, poetryLock } for the given pyproject/lockfile.
|
Returns an attrset { python, poetryPackages, pyProject, poetryLock } for the given pyproject/lockfile.
|
||||||
*/
|
*/
|
||||||
|
@ -106,6 +109,8 @@ let
|
||||||
# The canonical name is setuptools-scm
|
# The canonical name is setuptools-scm
|
||||||
setuptools-scm = super.setuptools_scm;
|
setuptools-scm = super.setuptools_scm;
|
||||||
|
|
||||||
|
__toPluginAble = toPluginAble self;
|
||||||
|
|
||||||
inherit (hooks) pipBuildHook removePathDependenciesHook poetry2nixFixupHook;
|
inherit (hooks) pipBuildHook removePathDependenciesHook poetry2nixFixupHook;
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
70
plugins.nix
Normal file
70
plugins.nix
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
{ pkgs, lib }:
|
||||||
|
let
|
||||||
|
inherit (pkgs) stdenv;
|
||||||
|
|
||||||
|
mkPluginDrv =
|
||||||
|
{ self
|
||||||
|
, plugins
|
||||||
|
, drv
|
||||||
|
, postInstall ? ""
|
||||||
|
, nativeBuildInputs ? [ ]
|
||||||
|
, buildInputs ? [ ]
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
env = self.python.withPackages (ps: plugins);
|
||||||
|
in
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
pname = drv.pname + "-with-plugins";
|
||||||
|
|
||||||
|
inherit (drv) src version meta;
|
||||||
|
|
||||||
|
buildInputs = drv.buildInputs ++ drv.propagatedBuildInputs ++ buildInputs;
|
||||||
|
nativeBuildInputs = drv.nativeBuildInputs ++ nativeBuildInputs;
|
||||||
|
|
||||||
|
dontConfigure = true;
|
||||||
|
dontBuild = true;
|
||||||
|
dontUsePythonRecompileBytecode = true;
|
||||||
|
|
||||||
|
passthru = {
|
||||||
|
inherit (drv.passthru) withPlugins;
|
||||||
|
inherit plugins;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Link bin/ from environment, but only if it's in a plugin
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
|
||||||
|
mkdir -p $out/bin
|
||||||
|
|
||||||
|
for bindir in ${lib.concatStringsSep " " (map (d: "${lib.getBin d}/bin") plugins)}; do
|
||||||
|
for bin in $bindir/*; do
|
||||||
|
ln -s ${env}/bin/$(basename $bin) $out/bin/
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
inherit postInstall;
|
||||||
|
};
|
||||||
|
|
||||||
|
in
|
||||||
|
{
|
||||||
|
|
||||||
|
# Provide the `withPlugins` function
|
||||||
|
toPluginAble = self: { drv
|
||||||
|
, finalDrv
|
||||||
|
, postInstall ? ""
|
||||||
|
, nativeBuildInputs ? [ ]
|
||||||
|
, buildInputs ? [ ]
|
||||||
|
}: drv.overridePythonAttrs (old: {
|
||||||
|
passthru = old.passthru // {
|
||||||
|
withPlugins = pluginFn: mkPluginDrv {
|
||||||
|
plugins = [ finalDrv ] ++ pluginFn self;
|
||||||
|
inherit self postInstall nativeBuildInputs buildInputs;
|
||||||
|
drv = finalDrv;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue