diff --git a/pkgs/development/python-modules/pyside6-qtads/default.nix b/pkgs/development/python-modules/pyside6-qtads/default.nix new file mode 100644 index 000000000000..58fb70638033 --- /dev/null +++ b/pkgs/development/python-modules/pyside6-qtads/default.nix @@ -0,0 +1,80 @@ +{ + buildPythonPackage, + cmake-build-extension, + fetchFromGitHub, + lib, + pythonRelaxDepsHook, + pyside6, + qt6, + setuptools, + setuptools-scm, + shiboken6, +}: + +buildPythonPackage rec { + pname = "pyside6-qtads"; + version = "4.3.1.1"; + pyproject = true; + + src = fetchFromGitHub { + owner = "mborgerson"; + repo = "pyside6_qtads"; + rev = "v${version}"; + hash = "sha256-WSthRtK9IaRDDFEtGMUsQwylD+iGdsZM2vkXBjt8+mI="; + fetchSubmodules = true; + }; + + # bypass the broken parts of their bespoke python script cmake plugin + patches = [ ./find-nix-deps.patch ]; + postPatch = '' + substituteInPlace setup.py \ + --replace-fail @shiboken6@ ${shiboken6} \ + --replace-fail @pyside6@ ${pyside6} + + # can't use pythonRelaxDepsHook because it runs postBuild but the dependency check + # happens during build. + # -Essentials is a smaller version of PySide6, but the name mismatch breaks build + # _generator is also a virtual package with the same issue + substituteInPlace pyproject.toml \ + --replace-warn 'PySide6-Essentials' "" \ + --replace-warn 'shiboken6_generator' "" \ + --replace-quiet '"",' "" \ + --replace-quiet '""' "" + ''; + + buildInputs = [ + qt6.qtbase + qt6.qtquick3d + ]; + + nativeBuildInputs = [ + pythonRelaxDepsHook + ]; + + build-system = [ + cmake-build-extension + setuptools + setuptools-scm + ]; + + dependencies = [ + pyside6 + shiboken6 + ]; + + # cmake-build-extension will configure + dontUseCmakeConfigure = true; + + dontWrapQtApps = true; + # runtime deps check fails on the pyside6-essentials virtual package + dontCheckRuntimeDeps = true; + + pythonImportsCheck = [ "PySide6QtAds" ]; + + meta = { + description = "Python bindings to Qt Advanced Docking System for PySide6"; + homepage = "https://github.com/mborgerson/pyside6_qtads"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ scoder12 ]; + }; +} diff --git a/pkgs/development/python-modules/pyside6-qtads/find-nix-deps.patch b/pkgs/development/python-modules/pyside6-qtads/find-nix-deps.patch new file mode 100644 index 000000000000..5ec2f5ab8259 --- /dev/null +++ b/pkgs/development/python-modules/pyside6-qtads/find-nix-deps.patch @@ -0,0 +1,43 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 0c0568a..f12d50e 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -105,15 +105,17 @@ macro(pyside_config option output_var) + endmacro() + + # Query for the shiboken generator path, Python path, include paths and linker flags. ++find_package(Shiboken6 REQUIRED) ++find_package(PySide6 REQUIRED) + pyside_config(--shiboken-module-path shiboken_module_path) +-pyside_config(--shiboken-generator-path shiboken_generator_path) +-pyside_config(--pyside-path pyside_path) +-pyside_config(--pyside-include-path pyside_include_dir 1) ++set(shiboken_generator_path "" CACHE PATH "Path where shiboken6 executable can be found") ++set(pyside_path "" CACHE PATH "pyside share path, where typesystems dir can be found") ++get_target_property(pyside_include_dir PySide6::pyside6 INTERFACE_INCLUDE_DIRECTORIES) + pyside_config(--python-include-path python_include_dir) +-pyside_config(--shiboken-generator-include-path shiboken_include_dir 1) +-pyside_config(--shiboken-module-shared-libraries-cmake shiboken_shared_libraries 0) ++get_target_property(shiboken_include_dir Shiboken6::libshiboken INTERFACE_INCLUDE_DIRECTORIES) ++get_target_property(shiboken_shared_libraries Shiboken6::libshiboken IMPORTED_LOCATION_RELEASE) + pyside_config(--python-link-flags-cmake python_linking_data 0) +-pyside_config(--pyside-shared-libraries-cmake pyside_shared_libraries 0) ++get_target_property(pyside_shared_libraries PySide6::pyside6 IMPORTED_LOCATION_RELEASE) + + set(shiboken_path "${shiboken_generator_path}/shiboken6${CMAKE_EXECUTABLE_SUFFIX}") + if(NOT EXISTS ${shiboken_path}) +diff --git a/setup.py b/setup.py +index 802821b..f522818 100644 +--- a/setup.py ++++ b/setup.py +@@ -88,7 +88,9 @@ setuptools.setup( + "-DBUILD_STATIC:BOOL=ON", + "-DADS_VERSION=4.3.0", + f"-DPython3_ROOT_DIR={Path(sys.prefix)}", +- f"-DPython_EXECUTABLE={Path(sys.executable)}" ++ f"-DPython_EXECUTABLE={Path(sys.executable)}", ++ "-Dshiboken_generator_path=@shiboken6@/bin", ++ "-Dpyside_path=@pyside6@/share/PySide6" + ], + py_limited_api=True + ), diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 0c1af1ba043c..26581cde0bc4 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -13011,6 +13011,8 @@ self: super: with self; { inherit (pkgs) cmake ninja; }); + pyside6-qtads = callPackage ../development/python-modules/pyside6-qtads { }; + pysigma = callPackage ../development/python-modules/pysigma { }; pysigma-backend-elasticsearch = callPackage ../development/python-modules/pysigma-backend-elasticsearch { };