mirror of https://github.com/python/cpython
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:
parent
6a00a58f60
commit
de2715f086
|
@ -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.
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue