about summary refs log tree commit diff
path: root/pkgs/development/python-modules/pyside6/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/python-modules/pyside6/default.nix')
-rw-r--r--pkgs/development/python-modules/pyside6/default.nix132
1 files changed, 90 insertions, 42 deletions
diff --git a/pkgs/development/python-modules/pyside6/default.nix b/pkgs/development/python-modules/pyside6/default.nix
index 79c691980ffbf..088f4e785af64 100644
--- a/pkgs/development/python-modules/pyside6/default.nix
+++ b/pkgs/development/python-modules/pyside6/default.nix
@@ -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,57 @@ 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.hostPlatform.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.hostPlatform.isDarwin {
+    LLVM_INSTALL_DIR = "${llvmPackages.libclang.lib}/lib";
+  };
 
   nativeBuildInputs = [
     cmake
     ninja
     python
-  ] ++ lib.optionals stdenv.isDarwin [ moveBuildTree ];
+    pythonImportsCheckHook
+  ] ++ lib.optionals stdenv.hostPlatform.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.hostPlatform.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 +123,8 @@ stdenv.mkDerivation (finalAttrs: {
     cp -r PySide6.egg-info $out/${python.sitePackages}/
   '';
 
+  pythonImportsCheck = [ "PySide6" ];
+
   meta = {
     description = "Python bindings for Qt";
     license = with lib.licenses; [
@@ -83,10 +134,7 @@ stdenv.mkDerivation (finalAttrs: {
     ];
     homepage = "https://wiki.qt.io/Qt_for_Python";
     changelog = "https://code.qt.io/cgit/pyside/pyside-setup.git/tree/doc/changelogs/changes-${finalAttrs.version}?h=v${finalAttrs.version}";
-    maintainers = with lib.maintainers; [
-      gebner
-      Enzime
-    ];
+    maintainers = with lib.maintainers; [ gebner ];
     platforms = lib.platforms.all;
   };
 })