Merge pull request #329238 from gador/pyside6-darwin

python312Packages.pyside6: allow optional dependencies for darwin
This commit is contained in:
Florian 2024-08-02 08:46:59 +02:00 committed by GitHub
commit 556126cb6c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -2,11 +2,55 @@
lib,
stdenv,
cmake,
cups,
ninja,
python,
pythonImportsCheckHook,
moveBuildTree,
shiboken6,
llvmPackages,
symlinkJoin,
libGL,
darwin,
}:
let
packages = with python.pkgs.qt6; [
# required
python.pkgs.ninja
python.pkgs.packaging
python.pkgs.setuptools
qtbase
# optional
qt3d
qtcharts
qtconnectivity
qtdatavis3d
qtdeclarative
qthttpserver
qtmultimedia
qtnetworkauth
qtquick3d
qtremoteobjects
qtscxml
qtsensors
qtspeech
qtsvg
qtwebchannel
qtwebsockets
qtpositioning
qtlocation
qtshadertools
qtserialport
qtserialbus
qtgraphs
qttools
];
qt_linked = symlinkJoin {
name = "qt_linked";
paths = packages;
};
in
stdenv.mkDerivation (finalAttrs: {
pname = "pyside6";
@ -15,52 +59,55 @@ stdenv.mkDerivation (finalAttrs: {
sourceRoot = "pyside-setup-everywhere-src-${finalAttrs.version}/sources/pyside6";
# FIXME: cmake/Macros/PySideModules.cmake supposes that all Qt frameworks on macOS
# cmake/Macros/PySideModules.cmake supposes that all Qt frameworks on macOS
# reside in the same directory as QtCore.framework, which is not true for Nix.
postPatch = lib.optionalString stdenv.isLinux ''
# Don't ignore optional Qt modules
substituteInPlace cmake/PySideHelpers.cmake \
--replace-fail \
'string(FIND "''${_module_dir}" "''${_core_abs_dir}" found_basepath)' \
'set (found_basepath 0)'
'';
# We therefore symLink all required and optional Qt modules in one directory tree ("qt_linked").
# Also we remove "Designer" from darwin build, due to linking failure
postPatch =
''
# Don't ignore optional Qt modules
substituteInPlace cmake/PySideHelpers.cmake \
--replace-fail \
'string(FIND "''${_module_dir}" "''${_core_abs_dir}" found_basepath)' \
'set (found_basepath 0)'
''
+ lib.optionalString stdenv.isDarwin ''
substituteInPlace cmake/PySideHelpers.cmake \
--replace-fail \
"Designer" ""
'';
# "Couldn't find libclang.dylib You will likely need to add it manually to PATH to ensure the build succeeds."
env = lib.optionalAttrs stdenv.isDarwin { LLVM_INSTALL_DIR = "${llvmPackages.libclang.lib}/lib"; };
nativeBuildInputs = [
cmake
ninja
python
pythonImportsCheckHook
] ++ lib.optionals stdenv.isDarwin [ moveBuildTree ];
buildInputs =
with python.pkgs.qt6;
[
# required
qtbase
python.pkgs.ninja
python.pkgs.packaging
python.pkgs.setuptools
]
++ lib.optionals stdenv.isLinux [
# optional
qt3d
qtcharts
qtconnectivity
qtdatavis3d
qtdeclarative
qthttpserver
qtmultimedia
qtnetworkauth
qtquick3d
qtremoteobjects
qtscxml
qtsensors
qtspeech
qtsvg
qttools
qtwebchannel
qtwebengine
qtwebsockets
];
if stdenv.isLinux then
# qtwebengine fails under darwin
# see https://github.com/NixOS/nixpkgs/pull/312987
packages ++ [ python.pkgs.qt6.qtwebengine ]
else
with darwin.apple_sdk_11_0.frameworks;
[
qt_linked
libGL
cups
# frameworks
IOKit
DiskArbitration
CoreBluetooth
EventKit
AVFoundation
Contacts
AGL
AppKit
];
propagatedBuildInputs = [ shiboken6 ];
@ -74,6 +121,8 @@ stdenv.mkDerivation (finalAttrs: {
cp -r PySide6.egg-info $out/${python.sitePackages}/
'';
pythonImportsCheck = [ "PySide6" ];
meta = {
description = "Python bindings for Qt";
license = with lib.licenses; [