From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Sun, 13 Oct 2024 08:46:35 +0000 (+0200) Subject: [3.13] gh-61698: Use launchctl to detect macOS window manager in tests (GH-118390... X-Git-Tag: v3.13.1~313 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b7dff8563828b486b27e8373b9171b1136473308;p=thirdparty%2FPython%2Fcpython.git [3.13] gh-61698: Use launchctl to detect macOS window manager in tests (GH-118390) (#125392) (cherry picked from commit ce740d46246b28bb675ba9d62214b59be9b8411e) Co-authored-by: Erlend E. Aasland --- diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py index 057b3bbd2294..6413af50a7c0 100644 --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -252,22 +252,16 @@ def _is_gui_available(): # process not running under the same user id as the current console # user. To avoid that, raise an exception if the window manager # connection is not available. - from ctypes import cdll, c_int, pointer, Structure - from ctypes.util import find_library - - app_services = cdll.LoadLibrary(find_library("ApplicationServices")) - - if app_services.CGMainDisplayID() == 0: - reason = "gui tests cannot run without OS X window manager" + import subprocess + try: + rc = subprocess.run(["launchctl", "managername"], + capture_output=True, check=True) + managername = rc.stdout.decode("utf-8").strip() + except subprocess.CalledProcessError: + reason = "unable to detect macOS launchd job manager" else: - class ProcessSerialNumber(Structure): - _fields_ = [("highLongOfPSN", c_int), - ("lowLongOfPSN", c_int)] - psn = ProcessSerialNumber() - psn_p = pointer(psn) - if ( (app_services.GetCurrentProcess(psn_p) < 0) or - (app_services.SetFrontProcess(psn_p) < 0) ): - reason = "cannot run without OS X gui process" + if managername != "Aqua": + reason = f"{managername=} -- can only run in a macOS GUI session" # check on every platform whether tkinter can actually do anything if not reason: