From c81a62f7e57c77f80c8a1b0ccd1ef26d70625943 Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Wed, 29 Oct 2025 10:26:19 +0100 Subject: [PATCH 1/5] python3Packages.pyobjc-core: small refactor --- .../python-modules/pyobjc-core/default.nix | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/pkgs/development/python-modules/pyobjc-core/default.nix b/pkgs/development/python-modules/pyobjc-core/default.nix index 968a60515fc4..e07a01289f74 100644 --- a/pkgs/development/python-modules/pyobjc-core/default.nix +++ b/pkgs/development/python-modules/pyobjc-core/default.nix @@ -23,7 +23,6 @@ buildPythonPackage rec { build-system = [ setuptools ]; buildInputs = [ - darwin.DarwinTools darwin.libffi ]; @@ -39,11 +38,11 @@ buildPythonPackage rec { pythonImportsCheck = [ "objc" ]; - meta = with lib; { + meta = { description = "Python <-> Objective-C bridge"; - homepage = "https://github.com/ronaldoussoren/pyobjc"; - license = licenses.mit; - platforms = platforms.darwin; - maintainers = with maintainers; [ samuela ]; + homepage = "https://github.com/ronaldoussoren/pyobjc/tree/main/pyobjc-core"; + license = lib.licenses.mit; + platforms = lib.platforms.darwin; + maintainers = with lib.maintainers; [ samuela ]; }; } From 747d686d577378cf33f565b7beb66c050a0dfc54 Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Wed, 29 Oct 2025 10:26:04 +0100 Subject: [PATCH 2/5] python3Packages.pyobjc-framework-Cocoa: small refactor --- .../pyobjc-framework-Cocoa/default.nix | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/pkgs/development/python-modules/pyobjc-framework-Cocoa/default.nix b/pkgs/development/python-modules/pyobjc-framework-Cocoa/default.nix index a395f1069420..f6af5aca2f54 100644 --- a/pkgs/development/python-modules/pyobjc-framework-Cocoa/default.nix +++ b/pkgs/development/python-modules/pyobjc-framework-Cocoa/default.nix @@ -9,15 +9,11 @@ buildPythonPackage rec { pname = "pyobjc-framework-Cocoa"; - version = "11.1"; pyproject = true; - src = fetchFromGitHub { - owner = "ronaldoussoren"; - repo = "pyobjc"; - tag = "v${version}"; - hash = "sha256-2qPGJ/1hXf3k8AqVLr02fVIM9ziVG9NMrm3hN1de1Us="; - }; + inherit (pyobjc-core) version src; + + patches = pyobjc-core.patches or [ ]; sourceRoot = "${src.name}/pyobjc-framework-Cocoa"; @@ -56,11 +52,11 @@ buildPythonPackage rec { "PyObjCTools" ]; - meta = with lib; { + meta = { description = "PyObjC wrappers for the Cocoa frameworks on macOS"; - homepage = "https://github.com/ronaldoussoren/pyobjc"; - license = licenses.mit; - platforms = platforms.darwin; - maintainers = with maintainers; [ samuela ]; + homepage = "https://github.com/ronaldoussoren/pyobjc/tree/main/pyobjc-framework-Cocoa"; + license = lib.licenses.mit; + platforms = lib.platforms.darwin; + maintainers = with lib.maintainers; [ samuela ]; }; } From 5d07912ccc39c331cc4b5fe6aad57cb06d24d7b7 Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Tue, 28 Oct 2025 19:01:09 +0100 Subject: [PATCH 3/5] python3Packages.pyobjc-framework-CoreBluetooth: init at 11.1 --- .../default.nix | 66 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 4 ++ 2 files changed, 70 insertions(+) create mode 100644 pkgs/development/python-modules/pyobjc-framework-CoreBluetooth/default.nix diff --git a/pkgs/development/python-modules/pyobjc-framework-CoreBluetooth/default.nix b/pkgs/development/python-modules/pyobjc-framework-CoreBluetooth/default.nix new file mode 100644 index 000000000000..ac702d1d3160 --- /dev/null +++ b/pkgs/development/python-modules/pyobjc-framework-CoreBluetooth/default.nix @@ -0,0 +1,66 @@ +{ + buildPythonPackage, + darwin, + fetchFromGitHub, + lib, + pyobjc-core, + pyobjc-framework-Cocoa, + setuptools, + unittestCheckHook, +}: + +buildPythonPackage rec { + pname = "pyobjc-framework-CoreBluetooth"; + pyproject = true; + + inherit (pyobjc-core) version src; + + patches = pyobjc-core.patches or [ ]; + + sourceRoot = "${src.name}/pyobjc-framework-CoreBluetooth"; + + build-system = [ setuptools ]; + + buildInputs = [ + darwin.libffi + ]; + + nativeBuildInputs = [ + darwin.DarwinTools # sw_vers + ]; + + nativeCheckInputs = [ + unittestCheckHook + ]; + + # See https://github.com/ronaldoussoren/pyobjc/pull/641. Unfortunately, we + # cannot just pull that diff with fetchpatch due to https://discourse.nixos.org/t/how-to-apply-patches-with-sourceroot/59727. + postPatch = '' + substituteInPlace pyobjc_setup.py \ + --replace-fail "-buildversion" "-buildVersion" \ + --replace-fail "-productversion" "-productVersion" \ + --replace-fail "/usr/bin/" "" + ''; + + dependencies = [ + pyobjc-core + pyobjc-framework-Cocoa + ]; + + env.NIX_CFLAGS_COMPILE = toString [ + "-I${lib.getDev darwin.libffi}/include" + "-Wno-error=unused-command-line-argument" + ]; + + pythonImportsCheck = [ + "CoreBluetooth" + ]; + + meta = { + description = "PyObjC wrappers for the CoreBluetooth framework on macOS"; + homepage = "https://github.com/ronaldoussoren/pyobjc/tree/main/pyobjc-framework-CoreBluetooth"; + license = lib.licenses.mit; + platforms = lib.platforms.darwin; + maintainers = with lib.maintainers; [ prusnak ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index eb44f2fd32d3..8e1584f3185e 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -13944,6 +13944,10 @@ self: super: with self; { pyobjc-framework-Cocoa = callPackage ../development/python-modules/pyobjc-framework-Cocoa { }; + pyobjc-framework-CoreBluetooth = + callPackage ../development/python-modules/pyobjc-framework-CoreBluetooth + { }; + pyobjc-framework-Quartz = callPackage ../development/python-modules/pyobjc-framework-Quartz { }; pyobjc-framework-Security = callPackage ../development/python-modules/pyobjc-framework-Security { }; From 90fd100ec4fa93afd67be14dd11e8e42fca491e6 Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Tue, 28 Oct 2025 19:01:30 +0100 Subject: [PATCH 4/5] python3Packages.pyobjc-framework-libdispatch: init at 11.1 --- .../pyobjc-framework-libdispatch/default.nix | 67 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 4 ++ 2 files changed, 71 insertions(+) create mode 100644 pkgs/development/python-modules/pyobjc-framework-libdispatch/default.nix diff --git a/pkgs/development/python-modules/pyobjc-framework-libdispatch/default.nix b/pkgs/development/python-modules/pyobjc-framework-libdispatch/default.nix new file mode 100644 index 000000000000..40035e9d8dfe --- /dev/null +++ b/pkgs/development/python-modules/pyobjc-framework-libdispatch/default.nix @@ -0,0 +1,67 @@ +{ + buildPythonPackage, + darwin, + fetchFromGitHub, + lib, + pyobjc-core, + pyobjc-framework-Cocoa, + setuptools, + unittestCheckHook, +}: + +buildPythonPackage rec { + pname = "pyobjc-framework-libdispatch"; + pyproject = true; + + inherit (pyobjc-core) version src; + + patches = pyobjc-core.patches or [ ]; + + sourceRoot = "${src.name}/pyobjc-framework-libdispatch"; + + build-system = [ setuptools ]; + + buildInputs = [ + darwin.libffi + ]; + + nativeBuildInputs = [ + darwin.DarwinTools # sw_vers + ]; + + nativeCheckInputs = [ + unittestCheckHook + ]; + + # See https://github.com/ronaldoussoren/pyobjc/pull/641. Unfortunately, we + # cannot just pull that diff with fetchpatch due to https://discourse.nixos.org/t/how-to-apply-patches-with-sourceroot/59727. + postPatch = '' + substituteInPlace pyobjc_setup.py \ + --replace-fail "-buildversion" "-buildVersion" \ + --replace-fail "-productversion" "-productVersion" \ + --replace-fail "/usr/bin/" "" + ''; + + dependencies = [ + pyobjc-core + pyobjc-framework-Cocoa + ]; + + env.NIX_CFLAGS_COMPILE = toString [ + "-I${darwin.libffi.dev}/include" + "-Wno-error=unused-command-line-argument" + ]; + + pythonImportsCheck = [ + "dispatch" + "libdispatch" + ]; + + meta = { + description = "PyObjC wrappers for the libdispatch framework on macOS"; + homepage = "https://github.com/ronaldoussoren/pyobjc/tree/main/pyobjc-framework-libdispatch"; + license = lib.licenses.mit; + platforms = lib.platforms.darwin; + maintainers = with lib.maintainers; [ prusnak ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 8e1584f3185e..6819a8874ffc 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -13954,6 +13954,10 @@ self: super: with self; { pyobjc-framework-WebKit = callPackage ../development/python-modules/pyobjc-framework-WebKit { }; + pyobjc-framework-libdispatch = + callPackage ../development/python-modules/pyobjc-framework-libdispatch + { }; + pyocd = callPackage ../development/python-modules/pyocd { }; pyocd-pemicro = callPackage ../development/python-modules/pyocd-pemicro { }; From 264a60991c6e29bb50bde36030d09cdf5ec50dcf Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Tue, 28 Oct 2025 19:02:46 +0100 Subject: [PATCH 5/5] python3Packages.bleak: enable darwin build --- .../python-modules/bleak/default.nix | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/bleak/default.nix b/pkgs/development/python-modules/bleak/default.nix index 8fd97203fc4e..7a00dac08740 100644 --- a/pkgs/development/python-modules/bleak/default.nix +++ b/pkgs/development/python-modules/bleak/default.nix @@ -1,5 +1,6 @@ { lib, + stdenv, async-timeout, bluez, buildPythonPackage, @@ -10,6 +11,9 @@ pytestCheckHook, pythonOlder, typing-extensions, + pyobjc-core, + pyobjc-framework-CoreBluetooth, + pyobjc-framework-libdispatch, }: buildPythonPackage rec { @@ -26,7 +30,7 @@ buildPythonPackage rec { hash = "sha256-z0Mxr1pUQWNEK01PKMV/CzpW+GeCRcv/+9BADts1FuU="; }; - postPatch = '' + postPatch = lib.optionalString stdenv.hostPlatform.isLinux '' # bleak checks BlueZ's version with a call to `bluetoothctl --version` substituteInPlace bleak/backends/bluezdbus/version.py \ --replace-fail \"bluetoothctl\" \"${bluez}/bin/bluetoothctl\" @@ -35,7 +39,16 @@ buildPythonPackage rec { build-system = [ poetry-core ]; dependencies = [ + ] + ++ lib.optionals stdenv.hostPlatform.isLinux [ dbus-fast + ] + ++ lib.optionals stdenv.hostPlatform.isDarwin [ + pyobjc-core + pyobjc-framework-CoreBluetooth + pyobjc-framework-libdispatch + ] + ++ lib.optionals (pythonOlder "3.12") [ typing-extensions ] ++ lib.optionals (pythonOlder "3.11") [ @@ -54,7 +67,7 @@ buildPythonPackage rec { homepage = "https://github.com/hbldh/bleak"; changelog = "https://github.com/hbldh/bleak/blob/${src.tag}/CHANGELOG.rst"; license = licenses.mit; - platforms = platforms.linux; + platforms = platforms.linux ++ platforms.darwin; maintainers = with maintainers; [ oxzi ]; }; }