From 37ca658b86df4d7e35be58df768b1a53cce428b6 Mon Sep 17 00:00:00 2001 From: Charlie Lin Date: Wed, 10 Sep 2025 15:58:44 +0000 Subject: [PATCH 1/9] Disable building for limited API with no-GIL interpreters --- setup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 488e047a..306f20f5 100644 --- a/setup.py +++ b/setup.py @@ -56,7 +56,8 @@ def main(): Extension( name="frida._frida", sources=["frida/_frida/extension.c"], - py_limited_api=True, + py_limited_api=False if bool(sysconfig.get_config_var("Py_GIL_DISABLED") else True) +, ) ], cmdclass={"build_ext": FridaPrebuiltExt if FRIDA_EXTENSION is not None else FridaDemandBuiltExt}, From c9d437c730dbfca5c64d27264c4a7b667251c860 Mon Sep 17 00:00:00 2001 From: Charlie Lin Date: Wed, 10 Sep 2025 16:07:41 +0000 Subject: [PATCH 2/9] Update setup.py --- setup.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index 306f20f5..240ff766 100644 --- a/setup.py +++ b/setup.py @@ -3,6 +3,7 @@ import shutil import subprocess import sys +import sysconfig from pathlib import Path from typing import Iterator @@ -13,6 +14,8 @@ SOURCE_ROOT = Path(__file__).resolve().parent FRIDA_EXTENSION = os.environ.get("FRIDA_EXTENSION", None) +use_limited_api = False if bool(sysconfig.get_config_var("Py_GIL_DISABLED") else True + def main(): setup( @@ -24,7 +27,7 @@ def main(): author="Frida Developers", author_email="oleavr@frida.re", url="https://frida.re", - install_requires=["typing_extensions; python_version<'3.11'"], + install_requires=["typing_extensions], python_requires=">=3.7", license="wxWindows Library Licence, Version 3.1", keywords="frida debugger dynamic instrumentation inject javascript windows macos linux ios iphone ipad android qnx", @@ -56,8 +59,7 @@ def main(): Extension( name="frida._frida", sources=["frida/_frida/extension.c"], - py_limited_api=False if bool(sysconfig.get_config_var("Py_GIL_DISABLED") else True) -, + py_limited_api=use_limited_api), ) ], cmdclass={"build_ext": FridaPrebuiltExt if FRIDA_EXTENSION is not None else FridaDemandBuiltExt}, From f1235f471fe12808422f7cce7ac37f16906b0cbb Mon Sep 17 00:00:00 2001 From: Charlie Lin Date: Wed, 10 Sep 2025 16:08:30 +0000 Subject: [PATCH 3/9] Fix minor oops --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 240ff766..429a65ec 100644 --- a/setup.py +++ b/setup.py @@ -27,7 +27,7 @@ def main(): author="Frida Developers", author_email="oleavr@frida.re", url="https://frida.re", - install_requires=["typing_extensions], + install_requires=["typing_extensions"], python_requires=">=3.7", license="wxWindows Library Licence, Version 3.1", keywords="frida debugger dynamic instrumentation inject javascript windows macos linux ios iphone ipad android qnx", From a210958e1aa9b227fad0e67626bb26e4a1572351 Mon Sep 17 00:00:00 2001 From: Charlie Lin Date: Wed, 10 Sep 2025 16:09:28 +0000 Subject: [PATCH 4/9] FIx minor oops --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 429a65ec..cbbcbc95 100644 --- a/setup.py +++ b/setup.py @@ -59,7 +59,7 @@ def main(): Extension( name="frida._frida", sources=["frida/_frida/extension.c"], - py_limited_api=use_limited_api), + py_limited_api=use_limited_api, ) ], cmdclass={"build_ext": FridaPrebuiltExt if FRIDA_EXTENSION is not None else FridaDemandBuiltExt}, From 6285cece430279bb4029cb24b6752e0785c77c13 Mon Sep 17 00:00:00 2001 From: Charlie Lin Date: Wed, 10 Sep 2025 16:11:44 +0000 Subject: [PATCH 5/9] Another try --- setup.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/setup.py b/setup.py index cbbcbc95..d01b2a73 100644 --- a/setup.py +++ b/setup.py @@ -14,9 +14,6 @@ SOURCE_ROOT = Path(__file__).resolve().parent FRIDA_EXTENSION = os.environ.get("FRIDA_EXTENSION", None) -use_limited_api = False if bool(sysconfig.get_config_var("Py_GIL_DISABLED") else True - - def main(): setup( name="frida", @@ -59,7 +56,7 @@ def main(): Extension( name="frida._frida", sources=["frida/_frida/extension.c"], - py_limited_api=use_limited_api, + py_limited_api=not(bool(sysconfig.get_config_var("Py_GIL_DISABLED"))), ) ], cmdclass={"build_ext": FridaPrebuiltExt if FRIDA_EXTENSION is not None else FridaDemandBuiltExt}, From 1969b49684af934c76ee2164a5ffd99fd85d6704 Mon Sep 17 00:00:00 2001 From: Charlie Lin Date: Wed, 10 Sep 2025 16:13:48 +0000 Subject: [PATCH 6/9] Delete setup.cfg --- setup.cfg | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 setup.cfg diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 08a438ab..00000000 --- a/setup.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[bdist_wheel] -py_limited_api = cp37 From 8b9ece627d1cb3f87e17206e9222ad947b015a9f Mon Sep 17 00:00:00 2001 From: Charlie Lin Date: Wed, 10 Sep 2025 16:21:51 +0000 Subject: [PATCH 7/9] Call PyUnstable_Module_SetGIL --- frida/_frida/extension.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/frida/_frida/extension.c b/frida/_frida/extension.c index 6f2c0fa7..54cbd8bb 100644 --- a/frida/_frida/extension.c +++ b/frida/_frida/extension.c @@ -6018,6 +6018,10 @@ PyInit__frida (void) module = PyModule_Create (&PyFrida_moduledef); +#ifdef Py_GIL_DISABLED + PyUnstable_Module_SetGIL(mod, Py_MOD_GIL_NOT_USED); +#endif + PyModule_AddStringConstant (module, "__version__", frida_version_string ()); PYFRIDA_REGISTER_TYPE (GObject, G_TYPE_OBJECT); From 4842cb372d8fdc1d4aeed162ca740cc606d34785 Mon Sep 17 00:00:00 2001 From: Charlie Lin Date: Wed, 10 Sep 2025 16:35:03 +0000 Subject: [PATCH 8/9] Do not build extension.c with limited API --- frida/_frida/meson.build | 1 - 1 file changed, 1 deletion(-) diff --git a/frida/_frida/meson.build b/frida/_frida/meson.build index 21b02d4e..38147609 100644 --- a/frida/_frida/meson.build +++ b/frida/_frida/meson.build @@ -12,7 +12,6 @@ elif host_os_family != 'windows' endif extension = python.extension_module('_frida', 'extension.c', - limited_api: '3.7', c_args: frida_component_cflags, link_args: extra_link_args, dependencies: [python_dep, frida_core_dep, os_deps], From ec214035c0d7550ee58d27ac65dcc466070590e6 Mon Sep 17 00:00:00 2001 From: Charlie Lin Date: Wed, 10 Sep 2025 16:38:01 +0000 Subject: [PATCH 9/9] Extremely silly spelling fix --- frida/_frida/extension.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frida/_frida/extension.c b/frida/_frida/extension.c index 54cbd8bb..6b4a7611 100644 --- a/frida/_frida/extension.c +++ b/frida/_frida/extension.c @@ -6019,7 +6019,7 @@ PyInit__frida (void) module = PyModule_Create (&PyFrida_moduledef); #ifdef Py_GIL_DISABLED - PyUnstable_Module_SetGIL(mod, Py_MOD_GIL_NOT_USED); + PyUnstable_Module_SetGIL(module, Py_MOD_GIL_NOT_USED); #endif PyModule_AddStringConstant (module, "__version__", frida_version_string ());