mirror of
https://github.com/vale981/poetry2nix
synced 2025-03-04 16:51:40 -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
|
||||
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.
|
||||
*/
|
||||
|
@ -106,6 +109,8 @@ let
|
|||
# The canonical name is setuptools-scm
|
||||
setuptools-scm = super.setuptools_scm;
|
||||
|
||||
__toPluginAble = toPluginAble self;
|
||||
|
||||
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