From cce2fd547be73f6a709d86751b67e9ae798f5d46 Mon Sep 17 00:00:00 2001 From: Frederik Rietdijk Date: Fri, 27 Nov 2020 16:24:42 +0100 Subject: [PATCH 1/5] Python: use pythonPackagesBuildHost instead of pythonForBuild Follow-up to #104201, related to #105113. --- .../interpreters/python/cpython/2.7/default.nix | 11 ++++++----- .../interpreters/python/cpython/default.nix | 11 +++++------ .../development/interpreters/python/default.nix | 8 ++++---- .../interpreters/python/pypy/default.nix | 17 +++++++++++------ 4 files changed, 26 insertions(+), 21 deletions(-) diff --git a/pkgs/development/interpreters/python/cpython/2.7/default.nix b/pkgs/development/interpreters/python/cpython/2.7/default.nix index 26bd8a8f3609..d7bc50948590 100644 --- a/pkgs/development/interpreters/python/cpython/2.7/default.nix +++ b/pkgs/development/interpreters/python/cpython/2.7/default.nix @@ -18,8 +18,8 @@ , ucsEncoding ? 4 # For the Python package set , packageOverrides ? (self: super: {}) -, buildPackages , pkgsBuildBuild +, pkgsBuildHost , pkgsBuildTarget , pkgsHostHost , pkgsTargetTarget @@ -28,6 +28,7 @@ , passthruFun , static ? false , enableOptimizations ? (!stdenv.isDarwin) +, pythonAttr ? "python${sourceVersion.major}${sourceVersion.minor}" }: assert x11Support -> tcl != null @@ -38,9 +39,8 @@ assert x11Support -> tcl != null with stdenv.lib; let - - pythonAttr = "python${sourceVersion.major}${sourceVersion.minor}"; - pythonForBuild = buildPackages.${pythonAttr}; + buildPackages = pkgsBuildHost; + inherit (passthru) pythonForBuild; passthru = passthruFun rec { inherit self sourceVersion packageOverrides; @@ -49,8 +49,9 @@ let executable = libPrefix; pythonVersion = with sourceVersion; "${major}.${minor}"; sitePackages = "lib/${libPrefix}/site-packages"; - inherit hasDistutilsCxxPatch pythonForBuild; + inherit hasDistutilsCxxPatch; pythonPackagesBuildBuild = pkgsBuildBuild.${pythonAttr}; + pythonPackagesBuildHost = pkgsBuildHost.${pythonAttr}; pythonPackagesBuildTarget = pkgsBuildTarget.${pythonAttr}; pythonPackagesHostHost = pkgsHostHost.${pythonAttr}; pythonPackagesTargetTarget = pkgsTargetTarget.${pythonAttr} or {}; diff --git a/pkgs/development/interpreters/python/cpython/default.nix b/pkgs/development/interpreters/python/cpython/default.nix index 02777063a772..5e7668deea39 100644 --- a/pkgs/development/interpreters/python/cpython/default.nix +++ b/pkgs/development/interpreters/python/cpython/default.nix @@ -19,12 +19,11 @@ , nukeReferences # For the Python package set , packageOverrides ? (self: super: {}) -, buildPackages , pkgsBuildBuild +, pkgsBuildHost , pkgsBuildTarget , pkgsHostHost , pkgsTargetTarget -, pythonForBuild ? buildPackages.${pythonAttr} , sourceVersion , sha256 , passthruFun @@ -58,7 +57,8 @@ assert bluezSupport -> bluez != null; with stdenv.lib; let - + buildPackages = pkgsBuildHost; + inherit (passthru) pythonForBuild; passthru = passthruFun rec { inherit self sourceVersion packageOverrides; @@ -67,8 +67,9 @@ let executable = libPrefix; pythonVersion = with sourceVersion; "${major}.${minor}"; sitePackages = "lib/${libPrefix}/site-packages"; - inherit hasDistutilsCxxPatch pythonForBuild; + inherit hasDistutilsCxxPatch; pythonPackagesBuildBuild = pkgsBuildBuild.${pythonAttr}; + pythonPackagesBuildHost = pkgsBuildHost.${pythonAttr}; pythonPackagesBuildTarget = pkgsBuildTarget.${pythonAttr}; pythonPackagesHostHost = pkgsHostHost.${pythonAttr}; pythonPackagesTargetTarget = pkgsTargetTarget.${pythonAttr} or {}; @@ -95,8 +96,6 @@ let hasDistutilsCxxPatch = !(stdenv.cc.isGNU or false); - inherit pythonForBuild; - pythonForBuildInterpreter = if stdenv.hostPlatform == stdenv.buildPlatform then "$out/bin/python" else pythonForBuild.interpreter; diff --git a/pkgs/development/interpreters/python/default.nix b/pkgs/development/interpreters/python/default.nix index 19a7f44de369..876cfd20fb9e 100644 --- a/pkgs/development/interpreters/python/default.nix +++ b/pkgs/development/interpreters/python/default.nix @@ -15,7 +15,7 @@ with pkgs; , sitePackages , hasDistutilsCxxPatch , pythonPackagesBuildBuild - , pythonForBuild # provides pythonPackagesBuildHost + , pythonPackagesBuildHost , pythonPackagesBuildTarget , pythonPackagesHostHost , self # is pythonPackagesHostTarget @@ -29,7 +29,7 @@ with pkgs; }; otherSplices = { selfBuildBuild = pythonPackagesBuildBuild; - selfBuildHost = pythonForBuild.pkgs; + selfBuildHost = pythonPackagesBuildHost; selfBuildTarget = pythonPackagesBuildTarget; selfHostHost = pythonPackagesHostHost; selfTargetTarget = pythonPackagesTargetTarget; @@ -99,7 +99,8 @@ with pkgs; inherit sourceVersion; pythonAtLeast = lib.versionAtLeast pythonVersion; pythonOlder = lib.versionOlder pythonVersion; - inherit hasDistutilsCxxPatch pythonForBuild; + inherit hasDistutilsCxxPatch; + pythonForBuild = pythonPackagesBuildHost; tests = callPackage ./tests.nix { python = self; @@ -188,7 +189,6 @@ in { # Minimal versions of Python (built without optional dependencies) python3Minimal = (python38.override { self = python3Minimal; - pythonForBuild = pkgs.buildPackages.python3Minimal; # strip down that python version as much as possible openssl = null; readline = null; diff --git a/pkgs/development/interpreters/python/pypy/default.nix b/pkgs/development/interpreters/python/pypy/default.nix index 0647ce878642..b941750eb4e5 100644 --- a/pkgs/development/interpreters/python/pypy/default.nix +++ b/pkgs/development/interpreters/python/pypy/default.nix @@ -5,10 +5,16 @@ , python-setup-hook # For the Python package set , packageOverrides ? (self: super: {}) +, pkgsBuildBuild +, pkgsBuildHost +, pkgsBuildTarget +, pkgsHostHost +, pkgsTargetTarget , sourceVersion , pythonVersion , sha256 , passthruFun +, pythonAttr ? "pypy${stdenv.lib.substring 0 1 pythonVersion}${stdenv.lib.substring 2 3 pythonVersion}" }: assert zlibSupport -> zlib != null; @@ -25,12 +31,11 @@ let sitePackages = "site-packages"; hasDistutilsCxxPatch = false; - # No cross-compiling for now. - pythonForBuild = self; - pythonPackagesBuildBuild = {}; - pythonPackagesBuildTarget = {}; - pythonPackagesHostHost = {}; - pythonPackagesTargetTarget = {}; + pythonPackagesBuildBuild = pkgsBuildBuild.${pythonAttr}; + pythonPackagesBuildHost = pkgsBuildHost.${pythonAttr}; + pythonPackagesBuildTarget = pkgsBuildTarget.${pythonAttr}; + pythonPackagesHostHost = pkgsHostHost.${pythonAttr}; + pythonPackagesTargetTarget = pkgsTargetTarget.${pythonAttr} or {}; }; pname = passthru.executable; version = with sourceVersion; "${major}.${minor}.${patch}"; From 8220b0449cffd3c97597aa187b36d05c1257f68b Mon Sep 17 00:00:00 2001 From: Frederik Rietdijk Date: Sun, 22 Nov 2020 13:17:19 +0100 Subject: [PATCH 2/5] python.tests: use self.callPackage instead of super.callPackage super was incorrectly possible until https://github.com/NixOS/nixpkgs/pull/104201 got merged. --- .../interpreters/python/tests/test_nix_pythonprefix/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/interpreters/python/tests/test_nix_pythonprefix/default.nix b/pkgs/development/interpreters/python/tests/test_nix_pythonprefix/default.nix index 05798cbaf1b8..572cbdccbfb2 100644 --- a/pkgs/development/interpreters/python/tests/test_nix_pythonprefix/default.nix +++ b/pkgs/development/interpreters/python/tests/test_nix_pythonprefix/default.nix @@ -4,7 +4,7 @@ let python = let packageOverrides = self: super: { - typeddep = super.callPackage ./typeddep {}; + typeddep = self.callPackage ./typeddep {}; }; in interpreter.override {inherit packageOverrides; self = python;}; From 6cf25f9dbdef12c36748f322f7414a1d04c8dcd7 Mon Sep 17 00:00:00 2001 From: Frederik Rietdijk Date: Sat, 28 Nov 2020 16:56:51 +0100 Subject: [PATCH 3/5] Python: rename parameters and arguments passed to passthru As part of the splicing the build/host/target combinations of the interpreter need to be passed around internally. The chosen names were not very clear, implying they were package sets whereas actually there were derivations. --- .../python/cpython/2.7/default.nix | 10 ++++---- .../interpreters/python/cpython/default.nix | 10 ++++---- .../interpreters/python/default.nix | 24 +++++++++---------- .../interpreters/python/pypy/default.nix | 10 ++++---- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/pkgs/development/interpreters/python/cpython/2.7/default.nix b/pkgs/development/interpreters/python/cpython/2.7/default.nix index d7bc50948590..e6ab1f218795 100644 --- a/pkgs/development/interpreters/python/cpython/2.7/default.nix +++ b/pkgs/development/interpreters/python/cpython/2.7/default.nix @@ -50,11 +50,11 @@ let pythonVersion = with sourceVersion; "${major}.${minor}"; sitePackages = "lib/${libPrefix}/site-packages"; inherit hasDistutilsCxxPatch; - pythonPackagesBuildBuild = pkgsBuildBuild.${pythonAttr}; - pythonPackagesBuildHost = pkgsBuildHost.${pythonAttr}; - pythonPackagesBuildTarget = pkgsBuildTarget.${pythonAttr}; - pythonPackagesHostHost = pkgsHostHost.${pythonAttr}; - pythonPackagesTargetTarget = pkgsTargetTarget.${pythonAttr} or {}; + pythonOnBuildForBuild = pkgsBuildBuild.${pythonAttr}; + pythonOnBuildForHost = pkgsBuildHost.${pythonAttr}; + pythonOnBuildForTarget = pkgsBuildTarget.${pythonAttr}; + pythonOnHostForHost = pkgsHostHost.${pythonAttr}; + pythonOnTargetForTarget = pkgsTargetTarget.${pythonAttr} or {}; } // { inherit ucsEncoding; }; diff --git a/pkgs/development/interpreters/python/cpython/default.nix b/pkgs/development/interpreters/python/cpython/default.nix index 5e7668deea39..cd06c2b63670 100644 --- a/pkgs/development/interpreters/python/cpython/default.nix +++ b/pkgs/development/interpreters/python/cpython/default.nix @@ -68,11 +68,11 @@ let pythonVersion = with sourceVersion; "${major}.${minor}"; sitePackages = "lib/${libPrefix}/site-packages"; inherit hasDistutilsCxxPatch; - pythonPackagesBuildBuild = pkgsBuildBuild.${pythonAttr}; - pythonPackagesBuildHost = pkgsBuildHost.${pythonAttr}; - pythonPackagesBuildTarget = pkgsBuildTarget.${pythonAttr}; - pythonPackagesHostHost = pkgsHostHost.${pythonAttr}; - pythonPackagesTargetTarget = pkgsTargetTarget.${pythonAttr} or {}; + pythonOnBuildForBuild = pkgsBuildBuild.${pythonAttr}; + pythonOnBuildForHost = pkgsBuildHost.${pythonAttr}; + pythonOnBuildForTarget = pkgsBuildTarget.${pythonAttr}; + pythonOnHostForHost = pkgsHostHost.${pythonAttr}; + pythonOnTargetForTarget = pkgsTargetTarget.${pythonAttr} or {}; }; version = with sourceVersion; "${major}.${minor}.${patch}${suffix}"; diff --git a/pkgs/development/interpreters/python/default.nix b/pkgs/development/interpreters/python/default.nix index 876cfd20fb9e..91a464ea4633 100644 --- a/pkgs/development/interpreters/python/default.nix +++ b/pkgs/development/interpreters/python/default.nix @@ -14,12 +14,12 @@ with pkgs; , packageOverrides , sitePackages , hasDistutilsCxxPatch - , pythonPackagesBuildBuild - , pythonPackagesBuildHost - , pythonPackagesBuildTarget - , pythonPackagesHostHost - , self # is pythonPackagesHostTarget - , pythonPackagesTargetTarget + , pythonOnBuildForBuild + , pythonOnBuildForHost + , pythonOnBuildForTarget + , pythonOnHostForHost + , pythonOnTargetForTarget + , self # is pythonOnHostForTarget }: let pythonPackages = callPackage ({ pkgs, stdenv, python, overrides }: let @@ -28,11 +28,11 @@ with pkgs; python = self; }; otherSplices = { - selfBuildBuild = pythonPackagesBuildBuild; - selfBuildHost = pythonPackagesBuildHost; - selfBuildTarget = pythonPackagesBuildTarget; - selfHostHost = pythonPackagesHostHost; - selfTargetTarget = pythonPackagesTargetTarget; + selfBuildBuild = pythonOnBuildForBuild; + selfBuildHost = pythonOnBuildForHost; + selfBuildTarget = pythonOnBuildForTarget; + selfHostHost = pythonOnHostForHost; + selfTargetTarget = pythonOnTargetForTarget; }; keep = self: { # TODO maybe only define these here so nothing is needed to be kept in sync. @@ -100,7 +100,7 @@ with pkgs; pythonAtLeast = lib.versionAtLeast pythonVersion; pythonOlder = lib.versionOlder pythonVersion; inherit hasDistutilsCxxPatch; - pythonForBuild = pythonPackagesBuildHost; + pythonForBuild = pythonOnBuildForHost; tests = callPackage ./tests.nix { python = self; diff --git a/pkgs/development/interpreters/python/pypy/default.nix b/pkgs/development/interpreters/python/pypy/default.nix index b941750eb4e5..8feeb3c51bf3 100644 --- a/pkgs/development/interpreters/python/pypy/default.nix +++ b/pkgs/development/interpreters/python/pypy/default.nix @@ -31,11 +31,11 @@ let sitePackages = "site-packages"; hasDistutilsCxxPatch = false; - pythonPackagesBuildBuild = pkgsBuildBuild.${pythonAttr}; - pythonPackagesBuildHost = pkgsBuildHost.${pythonAttr}; - pythonPackagesBuildTarget = pkgsBuildTarget.${pythonAttr}; - pythonPackagesHostHost = pkgsHostHost.${pythonAttr}; - pythonPackagesTargetTarget = pkgsTargetTarget.${pythonAttr} or {}; + pythonOnBuildForBuild = pkgsBuildBuild.${pythonAttr}; + pythonOnBuildForHost = pkgsBuildHost.${pythonAttr}; + pythonOnBuildForTarget = pkgsBuildTarget.${pythonAttr}; + pythonOnHostForHost = pkgsHostHost.${pythonAttr}; + pythonOnTargetForTarget = pkgsTargetTarget.${pythonAttr} or {}; }; pname = passthru.executable; version = with sourceVersion; "${major}.${minor}.${patch}"; From 5804c8a7f5f0db0ebefb4aa612cc7a254debd57a Mon Sep 17 00:00:00 2001 From: Frederik Rietdijk Date: Sat, 28 Nov 2020 17:06:08 +0100 Subject: [PATCH 4/5] Python splicing: splice package sets, not Python derivation In the original commit the various builds of Python were added to `otherSplices`, instead of the intended Python package sets. --- pkgs/development/interpreters/python/default.nix | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pkgs/development/interpreters/python/default.nix b/pkgs/development/interpreters/python/default.nix index 91a464ea4633..e98cb89b77d5 100644 --- a/pkgs/development/interpreters/python/default.nix +++ b/pkgs/development/interpreters/python/default.nix @@ -28,11 +28,11 @@ with pkgs; python = self; }; otherSplices = { - selfBuildBuild = pythonOnBuildForBuild; - selfBuildHost = pythonOnBuildForHost; - selfBuildTarget = pythonOnBuildForTarget; - selfHostHost = pythonOnHostForHost; - selfTargetTarget = pythonOnTargetForTarget; + selfBuildBuild = pythonOnBuildForBuild.pkgs; + selfBuildHost = pythonOnBuildForHost.pkgs; + selfBuildTarget = pythonOnBuildForTarget.pkgs; + selfHostHost = pythonOnHostForHost.pkgs; + selfTargetTarget = pythonOnTargetForTarget.pkgs or {}; # There is no Python TargetTarget. }; keep = self: { # TODO maybe only define these here so nothing is needed to be kept in sync. From 455774e5466681a90f864125424871bfe2a504d2 Mon Sep 17 00:00:00 2001 From: Frederik Rietdijk Date: Sat, 28 Nov 2020 17:33:28 +0100 Subject: [PATCH 5/5] Python: add todo note regarding pythonForBuild --- pkgs/development/interpreters/python/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/development/interpreters/python/default.nix b/pkgs/development/interpreters/python/default.nix index e98cb89b77d5..2f350738238e 100644 --- a/pkgs/development/interpreters/python/default.nix +++ b/pkgs/development/interpreters/python/default.nix @@ -100,6 +100,8 @@ with pkgs; pythonAtLeast = lib.versionAtLeast pythonVersion; pythonOlder = lib.versionOlder pythonVersion; inherit hasDistutilsCxxPatch; + # TODO: rename to pythonOnBuild + # Not done immediately because its likely used outside Nixpkgs. pythonForBuild = pythonOnBuildForHost; tests = callPackage ./tests.nix {