gh-59703: use the system dladdr function in getpath.c for macOS framework builds (GH-111546)

Co-authored-by: Ned Deily <nad@python.org>
This commit is contained in:
AN Long 2023-11-21 13:15:25 +08:00 committed by GitHub
parent 6a00a58f60
commit de2715f086
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 11 deletions

View File

@ -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.

View File

@ -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;
}
}
}