summary refs log tree commit diff
path: root/pkgs/development
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development')
-rw-r--r--pkgs/development/interpreters/python/hooks/default.nix5
-rw-r--r--pkgs/development/interpreters/python/hooks/python-output-dist-hook.sh10
-rw-r--r--pkgs/development/interpreters/python/mk-python-derivation.nix11
3 files changed, 25 insertions, 1 deletions
diff --git a/pkgs/development/interpreters/python/hooks/default.nix b/pkgs/development/interpreters/python/hooks/default.nix
index 5d605b240ad..9d4b61c1a0f 100644
--- a/pkgs/development/interpreters/python/hooks/default.nix
+++ b/pkgs/development/interpreters/python/hooks/default.nix
@@ -115,6 +115,11 @@ in rec {
       };
     } ./python-namespaces-hook.sh) {};
 
+  pythonOutputDistHook = callPackage ({ }:
+    makeSetupHook {
+      name = "python-output-dist-hook";
+  } ./python-output-dist-hook.sh ) {};
+
   pythonRecompileBytecodeHook = callPackage ({ }:
     makeSetupHook {
       name = "python-recompile-bytecode-hook";
diff --git a/pkgs/development/interpreters/python/hooks/python-output-dist-hook.sh b/pkgs/development/interpreters/python/hooks/python-output-dist-hook.sh
new file mode 100644
index 00000000000..e73e45cd597
--- /dev/null
+++ b/pkgs/development/interpreters/python/hooks/python-output-dist-hook.sh
@@ -0,0 +1,10 @@
+# Setup hook for storing dist folder (wheels/sdists) in a separate output
+echo "Sourcing python-catch-conflicts-hook.sh"
+
+pythonOutputDistPhase() {
+    echo "Executing pythonOutputDistPhase"
+    mv "dist" "$dist"
+    echo "Finished executing pythonOutputDistPhase"
+}
+
+preFixupPhases+=" pythonOutputDistPhase"
diff --git a/pkgs/development/interpreters/python/mk-python-derivation.nix b/pkgs/development/interpreters/python/mk-python-derivation.nix
index f37ad592cb4..f82611554a2 100644
--- a/pkgs/development/interpreters/python/mk-python-derivation.nix
+++ b/pkgs/development/interpreters/python/mk-python-derivation.nix
@@ -17,6 +17,7 @@
 , pythonCatchConflictsHook
 , pythonImportsCheckHook
 , pythonNamespacesHook
+, pythonOutputDistHook
 , pythonRemoveBinBytecodeHook
 , pythonRemoveTestsDirHook
 , setuptoolsBuildHook
@@ -49,6 +50,8 @@
 # Enabled to detect some (native)BuildInputs mistakes
 , strictDeps ? true
 
+, outputs ? [ "out" ]
+
 # used to disable derivation, useful for specific python versions
 , disabled ? false
 
@@ -106,11 +109,13 @@ else
 let
   inherit (python) stdenv;
 
+  withDistOutput = lib.elem format ["pyproject" "setuptools" "flit"];
+
   name_ = name;
 
   self = toPythonModule (stdenv.mkDerivation ((builtins.removeAttrs attrs [
     "disabled" "checkPhase" "checkInputs" "doCheck" "doInstallCheck" "dontWrapPythonPrograms" "catchConflicts" "format"
-    "disabledTestPaths"
+    "disabledTestPaths" "outputs"
   ]) // {
 
     name = namePrefix + name_;
@@ -144,6 +149,8 @@ let
     ] ++ lib.optionals (python.pythonAtLeast "3.3") [
       # Optionally enforce PEP420 for python3
       pythonNamespacesHook
+    ] ++ lib.optionals withDistOutput [
+      pythonOutputDistHook
     ] ++ nativeBuildInputs;
 
     buildInputs = buildInputs ++ pythonPath;
@@ -177,6 +184,8 @@ let
     # Python packages built through cross-compilation are always for the host platform.
     disallowedReferences = lib.optionals (python.stdenv.hostPlatform != python.stdenv.buildPlatform) [ python.pythonForBuild ];
 
+    outputs = outputs ++ lib.optional withDistOutput "dist";
+
     meta = {
       # default to python's platforms
       platforms = python.meta.platforms;