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 }:
self: super:
let
pythonOverridesFor = with self.lib; superPython: fix (python: superPython.override ({
packageOverrides ? _: _: {}, ...
}: {
self = python;
packageOverrides = composeExtensions packageOverrides
(pySelf: pySuper: optionalAttrs pySuper.isPy3k {
wxPython = pySelf.wxPython_4_0;
});
}));
pythonOverridesFor = with self.lib; prevPython: prevPython // {
pkgs = prevPython.pkgs.overrideScope (pyFinal: pyPrev: optionalAttrs pyPrev.isPy3k {
wxPython = pyFinal.wxPython_4_0;
});
};
base = rosSelf: rosSuper: {
recurseForDerivations = true;

View file

@ -51,28 +51,28 @@ rosSelf: rosSuper: with rosSelf.lib; {
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 {
python-qt-binding = (rosSuper.python-qt-binding.override {
python3Packages = rosSelf.python3Packages.override {
overrides = pySelf: pySuper: {
pyqt5 = rosSelf.python3Packages.pyqt5.overrideAttrs ({
patches ? [], ...
}: {
patches = patches ++ [ (self.fetchpatch {
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=";
}) ];
});
};
};
python3Packages = rosSelf.python3Packages.overrideScope (pyFinal: pyPrev: {
pyqt5 = pyPrev.pyqt5.overrideAttrs ({
patches ? [], ...
}: {
patches = patches ++ [ (self.fetchpatch {
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=";
}) ];
});
});
}).overrideAttrs({
propagatedNativeBuildInputs ? [],
postPatch ? "", ...
}: {
# rviz1 does not support shiboken/pyside2
propagatedNativeBuildInputs = (rosSelf.lib.subtractLists
(with rosSelf.pythonPackages; [ shiboken2 pyside2 ])
propagatedNativeBuildInputs) ++ [ rosSelf.pythonPackages.sip_4 ];
propagatedNativeBuildInputs = with rosSelf.pythonPackages;
(rosSelf.lib.subtractLists [ shiboken2 pyside2 ] propagatedNativeBuildInputs)
++ [ sip_4 ];
postPatch = ''
sed -e "1 i\\import PyQt5" \
-e "s#sipconfig\._pkg_config\['default_mod_dir'\], 'PyQt5'#PyQt5.__path__[0]#" \

View file

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

View file

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

View file

@ -1,60 +1,56 @@
self: super: with self.lib; let
pythonOverridesFor = superPython: fix (python: superPython.override ({
packageOverrides ? _: _: {}, ...
}: {
self = python;
packageOverrides = composeExtensions packageOverrides (pySelf: pySuper: {
bson = pySelf.callPackage ./bson { };
pythonOverridesFor = prevPython: prevPython // {
pkgs = prevPython.pkgs.overrideScope (pyFinal: pyPrev: {
bson = pyFinal.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 {
cargo-ament-build = self.callPackage ./cargo-ament-build { };