summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Misc/NEWS.d/next/macOS/2023-10-31-22-13-05.gh-issue-59703.SML6Ag.rst4
-rw-r--r--Modules/getpath.c17
2 files changed, 10 insertions, 11 deletions
diff --git a/Misc/NEWS.d/next/macOS/2023-10-31-22-13-05.gh-issue-59703.SML6Ag.rst b/Misc/NEWS.d/next/macOS/2023-10-31-22-13-05.gh-issue-59703.SML6Ag.rst
new file mode 100644
index 0000000..eeb014d
--- /dev/null
+++ b/Misc/NEWS.d/next/macOS/2023-10-31-22-13-05.gh-issue-59703.SML6Ag.rst
@@ -0,0 +1,4 @@
+For macOS framework builds, in ``getpath.c`` use the system ``dladdr``
+function to find the path to the shared library rather than depending
+on deprecated macOS APIs.
+
diff --git a/Modules/getpath.c b/Modules/getpath.c
index 50ba090..be1a9cf 100644
--- a/Modules/getpath.c
+++ b/Modules/getpath.c
@@ -17,7 +17,7 @@
#endif
#ifdef __APPLE__
-# include <mach-o/dyld.h>
+# include <dlfcn.h>
#endif
/* Reference the precompiled getpath.py */
@@ -768,16 +768,11 @@ library_to_dict(PyObject *dict, const char *key)
which is in the framework, not relative to the executable, which may
be outside of the framework. Except when we're in the build
directory... */
- NSSymbol symbol = NSLookupAndBindSymbol("_Py_Initialize");
- if (symbol != NULL) {
- NSModule pythonModule = NSModuleForSymbol(symbol);
- if (pythonModule != NULL) {
- /* Use dylib functions to find out where the framework was loaded from */
- const char *path = NSLibraryNameForModule(pythonModule);
- if (path) {
- strncpy(modPath, path, MAXPATHLEN);
- modPathInitialized = 1;
- }
+ Dl_info pythonInfo;
+ if (dladdr(&Py_Initialize, &pythonInfo)) {
+ if (pythonInfo.dli_fname) {
+ strncpy(modPath, pythonInfo.dli_fname, MAXPATHLEN);
+ modPathInitialized = 1;
}
}
}