From: AN Long Date: Tue, 21 Nov 2023 05:15:25 +0000 (+0800) Subject: gh-59703: use the system dladdr function in getpath.c for macOS framework builds... X-Git-Tag: v3.13.0a2~12 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=de2715f086bc799b20e420a82b76180338352565;p=thirdparty%2FPython%2Fcpython.git gh-59703: use the system dladdr function in getpath.c for macOS framework builds (GH-111546) Co-authored-by: Ned Deily --- 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 000000000000..eeb014dd92ba --- /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 50ba090ee548..be1a9cf9cc47 100644 --- a/Modules/getpath.c +++ b/Modules/getpath.c @@ -17,7 +17,7 @@ #endif #ifdef __APPLE__ -# include +# include #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; } } }