Cleanup Python package overrides.

This commit is contained in:
Ben Wolsieffer 2023-02-26 14:44:09 -05:00
parent 3fa6f9fb54
commit b79845c4ed
5 changed files with 54 additions and 62 deletions

View file

@ -1,15 +1,11 @@
{ version, distro, python }: { version, distro, python }:
self: super: self: super:
let let
pythonOverridesFor = with self.lib; superPython: fix (python: superPython.override ({ pythonOverridesFor = with self.lib; prevPython: prevPython // {
packageOverrides ? _: _: {}, ... pkgs = prevPython.pkgs.overrideScope (pyFinal: pyPrev: optionalAttrs pyPrev.isPy3k {
}: { wxPython = pyFinal.wxPython_4_0;
self = python; });
packageOverrides = composeExtensions packageOverrides };
(pySelf: pySuper: optionalAttrs pySuper.isPy3k {
wxPython = pySelf.wxPython_4_0;
});
}));
base = rosSelf: rosSuper: { base = rosSelf: rosSuper: {
recurseForDerivations = true; recurseForDerivations = true;

View file

@ -51,28 +51,28 @@ rosSelf: rosSuper: with rosSelf.lib; {
nativeBuildInputs = nativeBuildInputs ++ [ self.pkg-config ]; nativeBuildInputs = nativeBuildInputs ++ [ self.pkg-config ];
}); });
# rviz does not support shiboken/pyside2 and SIP4 is broken with the latest
# pyqt5. This applies a patch to make pyqt5 compatible with SIP 4 and uses
# SIP 4 with python-qt-binding for rviz only.
rviz = rosSuper.rviz.override { rviz = rosSuper.rviz.override {
python-qt-binding = (rosSuper.python-qt-binding.override { python-qt-binding = (rosSuper.python-qt-binding.override {
python3Packages = rosSelf.python3Packages.override { python3Packages = rosSelf.python3Packages.overrideScope (pyFinal: pyPrev: {
overrides = pySelf: pySuper: { pyqt5 = pyPrev.pyqt5.overrideAttrs ({
pyqt5 = rosSelf.python3Packages.pyqt5.overrideAttrs ({ patches ? [], ...
patches ? [], ... }: {
}: { patches = patches ++ [ (self.fetchpatch {
patches = patches ++ [ (self.fetchpatch { url = "https://aur.archlinux.org/cgit/aur.git/plain/restore-sip4-support.patch?h=python-pyqt5-sip4&id=6e712e6c588d550a1a6f83c1b37c2c9135aae6ba";
url = "https://aur.archlinux.org/cgit/aur.git/plain/restore-sip4-support.patch?h=python-pyqt5-sip4&id=6e712e6c588d550a1a6f83c1b37c2c9135aae6ba"; sha256 = "sha256-NfMe/EK1Uj88S82xZSm+A6js3PK9mlgsaci/kinlsy8=";
sha256 = "sha256-NfMe/EK1Uj88S82xZSm+A6js3PK9mlgsaci/kinlsy8="; }) ];
}) ]; });
}); });
};
};
}).overrideAttrs({ }).overrideAttrs({
propagatedNativeBuildInputs ? [], propagatedNativeBuildInputs ? [],
postPatch ? "", ... postPatch ? "", ...
}: { }: {
# rviz1 does not support shiboken/pyside2 propagatedNativeBuildInputs = with rosSelf.pythonPackages;
propagatedNativeBuildInputs = (rosSelf.lib.subtractLists (rosSelf.lib.subtractLists [ shiboken2 pyside2 ] propagatedNativeBuildInputs)
(with rosSelf.pythonPackages; [ shiboken2 pyside2 ]) ++ [ sip_4 ];
propagatedNativeBuildInputs) ++ [ rosSelf.pythonPackages.sip_4 ];
postPatch = '' postPatch = ''
sed -e "1 i\\import PyQt5" \ sed -e "1 i\\import PyQt5" \
-e "s#sipconfig\._pkg_config\['default_mod_dir'\], 'PyQt5'#PyQt5.__path__[0]#" \ -e "s#sipconfig\._pkg_config\['default_mod_dir'\], 'PyQt5'#PyQt5.__path__[0]#" \

View file

@ -77,9 +77,9 @@ in {
# Implementation # Implementation
config = mkIf cfg.enable { config = mkIf cfg.enable {
# FIXME: mkAfter is used to make sure the Python overlay is applied. That # mkAfter is used to make sure the Python overlay (which uses overrideScope)
# means all other user configured Python overlays are ignored. This needs a # is applied after any user overlays that use packageOverrides, so that
# fix in nixpkgs: https://github.com/NixOS/nixpkgs/issues/44426 # composition works.
nixpkgs.overlays = mkAfter (singleton (import ../../overlay.nix)); nixpkgs.overlays = mkAfter (singleton (import ../../overlay.nix));
services.ros = { services.ros = {

View file

@ -69,9 +69,9 @@ in {
# Implementation # Implementation
config = mkIf cfg.enable { config = mkIf cfg.enable {
# FIXME: mkAfter is used to make sure the Python overlay is applied. That # mkAfter is used to make sure the Python overlay (which uses overrideScope)
# means all other user configured Python overlays are ignored. This needs a # is applied after any user overlays that use packageOverrides, so that
# fix in nixpkgs: https://github.com/NixOS/nixpkgs/issues/44426 # composition works.
nixpkgs.overlays = mkAfter (singleton (import ../../overlay.nix)); nixpkgs.overlays = mkAfter (singleton (import ../../overlay.nix));
services.ros2.pkgs = mkDefault (pkgs.rosPackages."${cfg.distro}".overrideScope cfg.overlays); services.ros2.pkgs = mkDefault (pkgs.rosPackages."${cfg.distro}".overrideScope cfg.overlays);

View file

@ -1,60 +1,56 @@
self: super: with self.lib; let self: super: with self.lib; let
pythonOverridesFor = superPython: fix (python: superPython.override ({ pythonOverridesFor = prevPython: prevPython // {
packageOverrides ? _: _: {}, ... pkgs = prevPython.pkgs.overrideScope (pyFinal: pyPrev: {
}: { bson = pyFinal.callPackage ./bson { };
self = python;
packageOverrides = composeExtensions packageOverrides (pySelf: pySuper: {
bson = pySelf.callPackage ./bson { };
catkin-pkg = pySelf.callPackage ./catkin-pkg { }; catkin-pkg = pyFinal.callPackage ./catkin-pkg { };
catkin-tools = pySelf.callPackage ./catkin-tools { }; catkin-tools = pyFinal.callPackage ./catkin-tools { };
colcon-cargo = pySelf.callPackage ./colcon/cargo.nix { }; colcon-cargo = pyFinal.callPackage ./colcon/cargo.nix { };
colcon-cmake = pySelf.callPackage ./colcon/cmake.nix { }; colcon-cmake = pyFinal.callPackage ./colcon/cmake.nix { };
colcon-core = pySelf.callPackage ./colcon/core.nix { }; colcon-core = pyFinal.callPackage ./colcon/core.nix { };
colcon-library-path = pySelf.callPackage ./colcon/library-path.nix { }; colcon-library-path = pyFinal.callPackage ./colcon/library-path.nix { };
colcon-metadata = pySelf.callPackage ./colcon/metadata.nix { }; colcon-metadata = pyFinal.callPackage ./colcon/metadata.nix { };
colcon-notification = pySelf.callPackage ./colcon/notification.nix { }; colcon-notification = pyFinal.callPackage ./colcon/notification.nix { };
colcon-output = pySelf.callPackage ./colcon/output.nix { }; colcon-output = pyFinal.callPackage ./colcon/output.nix { };
colcon-package-information = pySelf.callPackage ./colcon/package-information.nix { }; colcon-package-information = pyFinal.callPackage ./colcon/package-information.nix { };
colcon-package-selection = pySelf.callPackage ./colcon/package-selection.nix { }; colcon-package-selection = pyFinal.callPackage ./colcon/package-selection.nix { };
colcon-parallel-executor = pySelf.callPackage ./colcon/parallel-executor.nix { }; colcon-parallel-executor = pyFinal.callPackage ./colcon/parallel-executor.nix { };
colcon-pkg-config = pySelf.callPackage ./colcon/pkg-config.nix { }; colcon-pkg-config = pyFinal.callPackage ./colcon/pkg-config.nix { };
colcon-python-setup-py = pySelf.callPackage ./colcon/python-setup-py.nix { }; colcon-python-setup-py = pyFinal.callPackage ./colcon/python-setup-py.nix { };
colcon-recursive-crawl = pySelf.callPackage ./colcon/recursive-crawl.nix { }; colcon-recursive-crawl = pyFinal.callPackage ./colcon/recursive-crawl.nix { };
colcon-ros = pySelf.callPackage ./colcon/ros.nix { }; colcon-ros = pyFinal.callPackage ./colcon/ros.nix { };
colcon-ros-cargo = pySelf.callPackage ./colcon/ros-cargo.nix { }; colcon-ros-cargo = pyFinal.callPackage ./colcon/ros-cargo.nix { };
colcon-test-result = pySelf.callPackage ./colcon/test-result.nix { }; colcon-test-result = pyFinal.callPackage ./colcon/test-result.nix { };
osrf-pycommon = pySelf.callPackage ./osrf-pycommon {}; osrf-pycommon = pyFinal.callPackage ./osrf-pycommon {};
rosdep = pySelf.callPackage ./rosdep { }; rosdep = pyFinal.callPackage ./rosdep { };
rosdistro = pySelf.callPackage ./rosdistro { }; rosdistro = pyFinal.callPackage ./rosdistro { };
rosinstall-generator = pySelf.callPackage ./rosinstall-generator { }; rosinstall-generator = pyFinal.callPackage ./rosinstall-generator { };
rospkg = pySelf.callPackage ./rospkg { }; rospkg = pyFinal.callPackage ./rospkg { };
}); });
})); };
in { in {
cargo-ament-build = self.callPackage ./cargo-ament-build { }; cargo-ament-build = self.callPackage ./cargo-ament-build { };