[Python-checkins] gh-100540: Remove obsolete Modules/_ctypes/darwin/ dlfcn shim (GH-100541)

zware webhook-mailer at python.org
Thu Dec 29 17:13:52 EST 2022


https://github.com/python/cpython/commit/2df82db48506e5a2044a28f147fdb42f662d37b9
commit: 2df82db48506e5a2044a28f147fdb42f662d37b9
branch: main
author: Zachary Ware <zach at python.org>
committer: zware <zachary.ware at gmail.com>
date: 2022-12-29T16:13:28-06:00
summary:

gh-100540: Remove obsolete Modules/_ctypes/darwin/ dlfcn shim (GH-100541)

As far as I can tell, this hasn't been actually used since Mac OS X 10.2.

files:
A Misc/NEWS.d/next/macOS/2022-12-26-14-52-37.gh-issue-100540.kYZLtX.rst
D Modules/_ctypes/ctypes_dlfcn.h
D Modules/_ctypes/darwin/LICENSE
D Modules/_ctypes/darwin/README
D Modules/_ctypes/darwin/README.ctypes
D Modules/_ctypes/darwin/dlfcn.h
D Modules/_ctypes/darwin/dlfcn_simple.c
M Makefile.pre.in
M Modules/_ctypes/_ctypes.c
M Modules/_ctypes/callproc.c
M PCbuild/_ctypes.vcxproj
M PCbuild/_ctypes.vcxproj.filters
M Tools/c-analyzer/cpython/_parser.py
M configure
M configure.ac

diff --git a/Makefile.pre.in b/Makefile.pre.in
index dd6c3fbd1c64..1f8bd561f61d 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -2591,7 +2591,7 @@ MODULE_MATH_DEPS=$(srcdir)/Modules/_math.h
 MODULE_PYEXPAT_DEPS=@LIBEXPAT_INTERNAL@
 MODULE_UNICODEDATA_DEPS=$(srcdir)/Modules/unicodedata_db.h $(srcdir)/Modules/unicodename_db.h
 MODULE__BLAKE2_DEPS=$(srcdir)/Modules/_blake2/impl/blake2-config.h $(srcdir)/Modules/_blake2/impl/blake2-impl.h $(srcdir)/Modules/_blake2/impl/blake2.h $(srcdir)/Modules/_blake2/impl/blake2b-load-sse2.h $(srcdir)/Modules/_blake2/impl/blake2b-load-sse41.h $(srcdir)/Modules/_blake2/impl/blake2b-ref.c $(srcdir)/Modules/_blake2/impl/blake2b-round.h $(srcdir)/Modules/_blake2/impl/blake2b.c $(srcdir)/Modules/_blake2/impl/blake2s-load-sse2.h $(srcdir)/Modules/_blake2/impl/blake2s-load-sse41.h $(srcdir)/Modules/_blake2/impl/blake2s-load-xop.h $(srcdir)/Modules/_blake2/impl/blake2s-ref.c $(srcdir)/Modules/_blake2/impl/blake2s-round.h $(srcdir)/Modules/_blake2/impl/blake2s.c $(srcdir)/Modules/_blake2/blake2module.h $(srcdir)/Modules/hashlib.h
-MODULE__CTYPES_DEPS=$(srcdir)/Modules/_ctypes/ctypes.h $(srcdir)/Modules/_ctypes/darwin/dlfcn.h
+MODULE__CTYPES_DEPS=$(srcdir)/Modules/_ctypes/ctypes.h
 MODULE__CTYPES_MALLOC_CLOSURE=@MODULE__CTYPES_MALLOC_CLOSURE@
 MODULE__DECIMAL_DEPS=$(srcdir)/Modules/_decimal/docstrings.h @LIBMPDEC_INTERNAL@
 MODULE__ELEMENTTREE_DEPS=$(srcdir)/Modules/pyexpat.c @LIBEXPAT_INTERNAL@
diff --git a/Misc/NEWS.d/next/macOS/2022-12-26-14-52-37.gh-issue-100540.kYZLtX.rst b/Misc/NEWS.d/next/macOS/2022-12-26-14-52-37.gh-issue-100540.kYZLtX.rst
new file mode 100644
index 000000000000..a42814e1861d
--- /dev/null
+++ b/Misc/NEWS.d/next/macOS/2022-12-26-14-52-37.gh-issue-100540.kYZLtX.rst
@@ -0,0 +1,2 @@
+Removed obsolete ``dlfcn.h`` shim from the ``_ctypes`` extension module,
+which has not been necessary since Mac OS X 10.2.
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index f69a37709963..4ce6433a2e45 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -120,7 +120,7 @@ bytes(cdata)
 #define IS_INTRESOURCE(x) (((size_t)(x) >> 16) == 0)
 #endif
 #else
-#include "ctypes_dlfcn.h"
+#include <dlfcn.h>
 #endif
 #include "ctypes.h"
 
@@ -768,7 +768,7 @@ CDataType_in_dll(PyObject *type, PyObject *args)
         return NULL;
     }
 #else
-    address = (void *)ctypes_dlsym(handle, name);
+    address = (void *)dlsym(handle, name);
     if (!address) {
 #ifdef __CYGWIN__
 /* dlerror() isn't very helpful on cygwin */
@@ -776,7 +776,7 @@ CDataType_in_dll(PyObject *type, PyObject *args)
                      "symbol '%s' not found",
                      name);
 #else
-        PyErr_SetString(PyExc_ValueError, ctypes_dlerror());
+        PyErr_SetString(PyExc_ValueError, dlerror());
 #endif
         return NULL;
     }
@@ -3560,7 +3560,7 @@ PyCFuncPtr_FromDll(PyTypeObject *type, PyObject *args, PyObject *kwds)
         return NULL;
     }
 #else
-    address = (PPROC)ctypes_dlsym(handle, name);
+    address = (PPROC)dlsym(handle, name);
     if (!address) {
 #ifdef __CYGWIN__
 /* dlerror() isn't very helpful on cygwin */
@@ -3568,7 +3568,7 @@ PyCFuncPtr_FromDll(PyTypeObject *type, PyObject *args, PyObject *kwds)
                      "function '%s' not found",
                      name);
 #else
-        PyErr_SetString(PyExc_AttributeError, ctypes_dlerror());
+        PyErr_SetString(PyExc_AttributeError, dlerror());
 #endif
         Py_DECREF(ftuple);
         return NULL;
diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c
index 28b7cd406971..1958758dd0cf 100644
--- a/Modules/_ctypes/callproc.c
+++ b/Modules/_ctypes/callproc.c
@@ -67,7 +67,7 @@
 #include <windows.h>
 #include <tchar.h>
 #else
-#include "ctypes_dlfcn.h"
+#include <dlfcn.h>
 #endif
 
 #ifdef __APPLE__
@@ -1537,10 +1537,10 @@ static PyObject *py_dl_open(PyObject *self, PyObject *args)
     if (PySys_Audit("ctypes.dlopen", "O", name) < 0) {
         return NULL;
     }
-    handle = ctypes_dlopen(name_str, mode);
+    handle = dlopen(name_str, mode);
     Py_XDECREF(name2);
     if (!handle) {
-        const char *errmsg = ctypes_dlerror();
+        const char *errmsg = dlerror();
         if (!errmsg)
             errmsg = "dlopen() error";
         PyErr_SetString(PyExc_OSError,
@@ -1558,7 +1558,7 @@ static PyObject *py_dl_close(PyObject *self, PyObject *args)
         return NULL;
     if (dlclose(handle)) {
         PyErr_SetString(PyExc_OSError,
-                               ctypes_dlerror());
+                               dlerror());
         return NULL;
     }
     Py_RETURN_NONE;
@@ -1576,10 +1576,10 @@ static PyObject *py_dl_sym(PyObject *self, PyObject *args)
     if (PySys_Audit("ctypes.dlsym/handle", "O", args) < 0) {
         return NULL;
     }
-    ptr = ctypes_dlsym((void*)handle, name);
+    ptr = dlsym((void*)handle, name);
     if (!ptr) {
         PyErr_SetString(PyExc_OSError,
-                               ctypes_dlerror());
+                               dlerror());
         return NULL;
     }
     return PyLong_FromVoidPtr(ptr);
diff --git a/Modules/_ctypes/ctypes_dlfcn.h b/Modules/_ctypes/ctypes_dlfcn.h
deleted file mode 100644
index 54cdde9a4fdb..000000000000
--- a/Modules/_ctypes/ctypes_dlfcn.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef _CTYPES_DLFCN_H_
-#define _CTYPES_DLFCN_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#ifndef MS_WIN32
-
-#include <dlfcn.h>
-
-#ifndef CTYPES_DARWIN_DLFCN
-
-#define ctypes_dlsym dlsym
-#define ctypes_dlerror dlerror
-#define ctypes_dlopen dlopen
-#define ctypes_dlclose dlclose
-#define ctypes_dladdr dladdr
-
-#endif /* !CTYPES_DARWIN_DLFCN */
-
-#endif /* !MS_WIN32 */
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-#endif /* _CTYPES_DLFCN_H_ */
diff --git a/Modules/_ctypes/darwin/LICENSE b/Modules/_ctypes/darwin/LICENSE
deleted file mode 100644
index 786fb50258eb..000000000000
--- a/Modules/_ctypes/darwin/LICENSE
+++ /dev/null
@@ -1,31 +0,0 @@
-Copyright (c) 2002 Jorge Acereda  <jacereda at users.sourceforge.net> &
-                   Peter O'Gorman <ogorman at users.sourceforge.net>
-                   
-Portions may be copyright others, see the AUTHORS file included with this
-distribution.
-
-Maintained by Peter O'Gorman <ogorman at users.sourceforge.net>
-
-Bug Reports and other queries should go to <ogorman at users.sourceforge.net>
-
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-
diff --git a/Modules/_ctypes/darwin/README b/Modules/_ctypes/darwin/README
deleted file mode 100644
index 4d63f3dfa5eb..000000000000
--- a/Modules/_ctypes/darwin/README
+++ /dev/null
@@ -1,95 +0,0 @@
-dlcompat for Darwin
-=========================
-
-This is dlcompat, a small library that emulates the dlopen()
-interface on top of Darwin's dyld API.
-
-dlcompat allows loading a ".dylib" library (as long as the RTLD_LOCAL 
-flag isn't passed to dlopen()). It can be configured to yield a warning 
-when trying to close it (dynamic libraries cannot currently be unloaded).
-
-It automatically searches for modules in several directories when no 
-absolute path is specified and the module is not found in the current 
-directory.
-
-The paths searched are those specified in the environment variables
-LD_LIBRARY_PATH and DYLD_LIBRARY_PATH plus /lib, /usr/local/lib and 
-/usr/lib or the path specified in the environment variable 
-DYLD_FALLBACK_LIBRARY_PATH.
-
-In the default install the behavior of dlsym is to automatically prepend
-an underscore to passed in symbol names, this allows easier porting of
-applications which were written specifically for ELF based lifeforms.
-
-Installation
---------------
-Type:
-	./configure
-	make
-	sudo make install
-
-This will compile the source file, generate both a static and shared
-library called libdl and install it into /usr/local/lib. The header
-file dlfcn.h will be installed in /usr/local/include.
-
-If you want to place the files somewhere else, run
-
-  make clean
-  ./configure --prefix=<prefix>
-  make
-  sudo make install
-
-where <prefix> is the hierarchy you want to install into, e.g. /usr
-for /usr/lib and /usr/include (_NOT_ recommended!).
-
-To enable debugging output (useful for me), run
-
-  make clean
-  ./configure --enable-debug
-  make
-  sudo make install
-  
-If you want old dlcompat style behavior of not prepending the underscore
-on calls to dlsym then type:
-
-  make clean
-  ./configure --enable-fink
-  make
-  sudo make install
-
-Usage
--------
-Software that uses GNU autoconf will likely check for a library called
-libdl, that's why I named it that way. For software that doesn't find
-the library on its own, you must add a '-ldl' to the appropriate
-Makefile (or environment) variable, usually LIBS.
-
-If you installed dlcompat into a directory other than /usr/local/lib,
-you must tell the compiler where to find it. Add '-L<prefix>/lib' to
-LDFLAGS (or CFLAGS) and '-I<prefix>/include' to CPPFLAGS (or CFLAGS).
-
-Notes
------
-If you are writing new software and plan to have Mac OX X compatibility you
-should look at the dyld api's in /usr/include/mach-o/dyld.h, rather than
-using dlcompat, using the native api's is the supported method of loading
-dynamically on Mac OS X, if you want an small example, look at dlfcn_simple.c,
-which should help get you started.
-
-Also note that the functions in dlcompat are not thread safe, and while it is not
-POSIX spec compliant, it is about as close to compliance as it is going to get though.
-
-You can always get the latest version from opendarwin cvs:
-
-  cvs -d :pserver:anonymous at anoncvs.opendarwin.org:/cvs/od login
-  cvs -z3 -d :pserver:anonymous at anoncvs.opendarwin.org:/cvs/od \
-               co -d dlcompat proj/dlcompat
-
-
-It is hoped that this library will be useful, and as bug free as possible, if you find
-any bugs please let us know about them so they can be fixed.
-
-Please send bug reports to Peter O'Gorman <ogorman at users.sourceforge.net>
-
-Thanks.
-
diff --git a/Modules/_ctypes/darwin/README.ctypes b/Modules/_ctypes/darwin/README.ctypes
deleted file mode 100644
index 8520b01f49da..000000000000
--- a/Modules/_ctypes/darwin/README.ctypes
+++ /dev/null
@@ -1,11 +0,0 @@
-The files in this directory are taken from
-http://www.opendarwin.org/cgi-bin/cvsweb.cgi/~checkout~/proj/dlcompat/
-
-The LICENSE in this directory applies to these files.
-
-Thomas Heller, Jan 2003
-
-These files have been modified so they fall back to the system
-dlfcn calls if available in libSystem.
-
-Bob Ippolito, Feb 2006
diff --git a/Modules/_ctypes/darwin/dlfcn.h b/Modules/_ctypes/darwin/dlfcn.h
deleted file mode 100644
index a2afc3eeb847..000000000000
--- a/Modules/_ctypes/darwin/dlfcn.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-Copyright (c) 2002 Jorge Acereda  <jacereda at users.sourceforge.net> &
-                   Peter O'Gorman <ogorman at users.sourceforge.net>
-                   
-Portions may be copyright others, see the AUTHORS file included with this
-distribution.
-
-Maintained by Peter O'Gorman <ogorman at users.sourceforge.net>
-
-Bug Reports and other queries should go to <ogorman at users.sourceforge.net>
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#ifndef _DLFCN_H_
-#define _DLFCN_H_
-
-#include <AvailabilityMacros.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/*
- * Structure filled in by dladdr().
- */
-
-typedef struct dl_info {
-        const char      *dli_fname;     /* Pathname of shared object */
-        void            *dli_fbase;     /* Base address of shared object */
-        const char      *dli_sname;     /* Name of nearest symbol */
-        void            *dli_saddr;     /* Address of nearest symbol */
-} Dl_info;
-
-
-#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_2
-#warning CTYPES_DARWIN_DLFCN
-#define CTYPES_DARWIN_DLFCN
-extern void * (*ctypes_dlopen)(const char *path, int mode);
-extern void * (*ctypes_dlsym)(void * handle, const char *symbol);
-extern const char * (*ctypes_dlerror)(void);
-extern int (*ctypes_dlclose)(void * handle);
-extern int (*ctypes_dladdr)(const void *, Dl_info *);
-#else
-extern void * dlopen(const char *path, int mode);
-extern void * dlsym(void * handle, const char *symbol);
-extern const char * dlerror(void);
-extern int dlclose(void * handle);
-extern int dladdr(const void *, Dl_info *);
-#endif
-
-#define RTLD_LAZY	0x1
-#define RTLD_NOW	0x2
-#define RTLD_LOCAL	0x4
-#define RTLD_GLOBAL	0x8
-#define RTLD_NOLOAD	0x10
-#define RTLD_NODELETE	0x80
-
-/* These are from the Mac OS X 10.4 headers */
-#define RTLD_NEXT       ((void *) -1)   /* Search subsequent objects. */
-#define RTLD_DEFAULT    ((void *) -2)   /* Use default search algorithm. */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _DLFCN_H_ */
diff --git a/Modules/_ctypes/darwin/dlfcn_simple.c b/Modules/_ctypes/darwin/dlfcn_simple.c
deleted file mode 100644
index 2b293bb8695b..000000000000
--- a/Modules/_ctypes/darwin/dlfcn_simple.c
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
-Copyright (c) 2002 Peter O'Gorman <ogorman at users.sourceforge.net>
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-
-/* Just to prove that it isn't that hard to add Mac calls to your code :)
-   This works with pretty much everything, including kde3 xemacs and the gimp,
-   I'd guess that it'd work in at least 95% of cases, use this as your starting
-   point, rather than the mess that is dlfcn.c, assuming that your code does not
-   require ref counting or symbol lookups in dependent libraries
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <stdarg.h>
-#include <limits.h>
-#include <mach-o/dyld.h>
-#include <AvailabilityMacros.h>
-#include "dlfcn.h"
-
-#ifdef CTYPES_DARWIN_DLFCN
-
-#define ERR_STR_LEN 256
-
-#ifndef MAC_OS_X_VERSION_10_3
-#define MAC_OS_X_VERSION_10_3 1030
-#endif
-
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3
-#define DARWIN_HAS_DLOPEN
-extern void * dlopen(const char *path, int mode) __attribute__((weak_import));
-extern void * dlsym(void * handle, const char *symbol) __attribute__((weak_import));
-extern const char * dlerror(void) __attribute__((weak_import));
-extern int dlclose(void * handle) __attribute__((weak_import));
-extern int dladdr(const void *, Dl_info *) __attribute__((weak_import));
-#endif /* MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3 */
-
-#ifndef DARWIN_HAS_DLOPEN
-#define dlopen darwin_dlopen
-#define dlsym darwin_dlsym
-#define dlerror darwin_dlerror
-#define dlclose darwin_dlclose
-#define dladdr darwin_dladdr
-#endif
-
-void * (*ctypes_dlopen)(const char *path, int mode);
-void * (*ctypes_dlsym)(void * handle, const char *symbol);
-const char * (*ctypes_dlerror)(void);
-int (*ctypes_dlclose)(void * handle);
-int (*ctypes_dladdr)(const void *, Dl_info *);
-
-#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_3
-/* Mac OS X 10.3+ has dlopen, so strip all this dead code to avoid warnings */
-
-static void *dlsymIntern(void *handle, const char *symbol);
-
-static const char *error(int setget, const char *str, ...);
-
-/* Set and get the error string for use by dlerror */
-static const char *error(int setget, const char *str, ...)
-{
-    static char errstr[ERR_STR_LEN];
-    static int err_filled = 0;
-    const char *retval;
-    va_list arg;
-    if (setget == 0)
-    {
-        va_start(arg, str);
-        strncpy(errstr, "dlcompat: ", ERR_STR_LEN);
-        vsnprintf(errstr + 10, ERR_STR_LEN - 10, str, arg);
-        va_end(arg);
-        err_filled = 1;
-        retval = NULL;
-    }
-    else
-    {
-        if (!err_filled)
-            retval = NULL;
-        else
-            retval = errstr;
-        err_filled = 0;
-    }
-    return retval;
-}
-
-/* darwin_dlopen */
-static void *darwin_dlopen(const char *path, int mode)
-{
-    void *module = 0;
-    NSObjectFileImage ofi = 0;
-    NSObjectFileImageReturnCode ofirc;
-
-    /* If we got no path, the app wants the global namespace, use -1 as the marker
-       in this case */
-    if (!path)
-        return (void *)-1;
-
-    /* Create the object file image, works for things linked with the -bundle arg to ld */
-    ofirc = NSCreateObjectFileImageFromFile(path, &ofi);
-    switch (ofirc)
-    {
-        case NSObjectFileImageSuccess:
-            /* It was okay, so use NSLinkModule to link in the image */
-            module = NSLinkModule(ofi, path,
-                                                      NSLINKMODULE_OPTION_RETURN_ON_ERROR
-                                                      | (mode & RTLD_GLOBAL) ? 0 : NSLINKMODULE_OPTION_PRIVATE
-                                                      | (mode & RTLD_LAZY) ? 0 : NSLINKMODULE_OPTION_BINDNOW);
-            NSDestroyObjectFileImage(ofi);
-            break;
-        case NSObjectFileImageInappropriateFile:
-            /* It may have been a dynamic library rather than a bundle, try to load it */
-            module = (void *)NSAddImage(path, NSADDIMAGE_OPTION_RETURN_ON_ERROR);
-            break;
-        default:
-            /* God knows what we got */
-            error(0, "Can not open \"%s\"", path);
-            return 0;
-    }
-    if (!module)
-        error(0, "Can not open \"%s\"", path);
-    return module;
-
-}
-
-/* dlsymIntern is used by dlsym to find the symbol */
-static void *dlsymIntern(void *handle, const char *symbol)
-{
-    NSSymbol nssym = 0;
-    /* If the handle is -1, if is the app global context */
-    if (handle == (void *)-1)
-    {
-        /* Global context, use NSLookupAndBindSymbol */
-        if (NSIsSymbolNameDefined(symbol))
-        {
-            nssym = NSLookupAndBindSymbol(symbol);
-        }
-
-    }
-    /* Now see if the handle is a struch mach_header* or not, use NSLookupSymbol in image
-       for libraries, and NSLookupSymbolInModule for bundles */
-    else
-    {
-        /* Check for both possible magic numbers depending on x86/ppc byte order */
-        if ((((struct mach_header *)handle)->magic == MH_MAGIC) ||
-            (((struct mach_header *)handle)->magic == MH_CIGAM))
-        {
-            if (NSIsSymbolNameDefinedInImage((struct mach_header *)handle, symbol))
-            {
-                nssym = NSLookupSymbolInImage((struct mach_header *)handle,
-                                                                          symbol,
-                                                                          NSLOOKUPSYMBOLINIMAGE_OPTION_BIND
-                                                                          | NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR);
-            }
-
-        }
-        else
-        {
-            nssym = NSLookupSymbolInModule(handle, symbol);
-        }
-    }
-    if (!nssym)
-    {
-        error(0, "Symbol \"%s\" Not found", symbol);
-        return NULL;
-    }
-    return NSAddressOfSymbol(nssym);
-}
-
-static const char *darwin_dlerror(void)
-{
-    return error(1, (char *)NULL);
-}
-
-static int darwin_dlclose(void *handle)
-{
-    if ((((struct mach_header *)handle)->magic == MH_MAGIC) ||
-        (((struct mach_header *)handle)->magic == MH_CIGAM))
-    {
-        error(0, "Can't remove dynamic libraries on darwin");
-        return 0;
-    }
-    if (!NSUnLinkModule(handle, 0))
-    {
-        error(0, "unable to unlink module %s", NSNameOfModule(handle));
-        return 1;
-    }
-    return 0;
-}
-
-
-/* dlsym, prepend the underscore and call dlsymIntern */
-static void *darwin_dlsym(void *handle, const char *symbol)
-{
-    static char undersym[257];          /* Saves calls to malloc(3) */
-    int sym_len = strlen(symbol);
-    void *value = NULL;
-    char *malloc_sym = NULL;
-
-    if (sym_len < 256)
-    {
-        snprintf(undersym, 256, "_%s", symbol);
-        value = dlsymIntern(handle, undersym);
-    }
-    else
-    {
-        malloc_sym = malloc(sym_len + 2);
-        if (malloc_sym)
-        {
-            sprintf(malloc_sym, "_%s", symbol);
-            value = dlsymIntern(handle, malloc_sym);
-            free(malloc_sym);
-        }
-        else
-        {
-            error(0, "Unable to allocate memory");
-        }
-    }
-    return value;
-}
-
-static int darwin_dladdr(const void *handle, Dl_info *info) {
-    return 0;
-}
-#endif /* MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_3 */
-
-#if __GNUC__ < 4
-#pragma CALL_ON_LOAD ctypes_dlfcn_init
-#else
-static void __attribute__ ((constructor)) ctypes_dlfcn_init(void);
-static
-#endif
-void ctypes_dlfcn_init(void) {
-    if (dlopen != NULL) {
-        ctypes_dlsym = dlsym;
-        ctypes_dlopen = dlopen;
-        ctypes_dlerror = dlerror;
-        ctypes_dlclose = dlclose;
-        ctypes_dladdr = dladdr;
-    } else {
-#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_3
-        ctypes_dlsym = darwin_dlsym;
-        ctypes_dlopen = darwin_dlopen;
-        ctypes_dlerror = darwin_dlerror;
-        ctypes_dlclose = darwin_dlclose;
-        ctypes_dladdr = darwin_dladdr;
-#endif /* MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_3 */
-    }
-}
-
-#endif /* CTYPES_DARWIN_DLFCN */
diff --git a/PCbuild/_ctypes.vcxproj b/PCbuild/_ctypes.vcxproj
index 6ac26f1916c9..253da31e9ce1 100644
--- a/PCbuild/_ctypes.vcxproj
+++ b/PCbuild/_ctypes.vcxproj
@@ -102,7 +102,6 @@
   </ItemDefinitionGroup>
   <ItemGroup>
     <ClInclude Include="..\Modules\_ctypes\ctypes.h" />
-    <ClInclude Include="..\Modules\_ctypes\ctypes_dlfcn.h" />
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\Modules\_ctypes\_ctypes.c" />
diff --git a/PCbuild/_ctypes.vcxproj.filters b/PCbuild/_ctypes.vcxproj.filters
index 118c4f0698cc..a38473e3e81d 100644
--- a/PCbuild/_ctypes.vcxproj.filters
+++ b/PCbuild/_ctypes.vcxproj.filters
@@ -15,9 +15,6 @@
     <ClInclude Include="..\Modules\_ctypes\ctypes.h">
       <Filter>Header Files</Filter>
     </ClInclude>
-    <ClInclude Include="..\Modules\_ctypes\ctypes_dlfcn.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\Modules\_ctypes\_ctypes.c">
diff --git a/Tools/c-analyzer/cpython/_parser.py b/Tools/c-analyzer/cpython/_parser.py
index ac1721c061f0..ab1d6257f1b1 100644
--- a/Tools/c-analyzer/cpython/_parser.py
+++ b/Tools/c-analyzer/cpython/_parser.py
@@ -51,7 +51,6 @@ def clean_lines(text):
 # @begin=conf@
 
 # OSX
-#Modules/_ctypes/darwin/*.c
 Modules/_scproxy.c                # SystemConfiguration/SystemConfiguration.h
 
 # Windows
diff --git a/configure b/configure
index 6afd1e9c367c..946218fd8d85 100755
--- a/configure
+++ b/configure
@@ -12802,8 +12802,7 @@ if test "x$have_libffi" = xyes; then :
   case $ac_sys_system in #(
   Darwin) :
 
-            as_fn_append LIBFFI_CFLAGS " -I\$(srcdir)/Modules/_ctypes/darwin"
-      ctypes_malloc_closure=yes
+            ctypes_malloc_closure=yes
      ;; #(
   sunos5) :
     as_fn_append LIBFFI_LIBS " -mimpure-text"
diff --git a/configure.ac b/configure.ac
index 48736649a98e..22028972cb3d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3741,7 +3741,6 @@ AS_VAR_IF([have_libffi], [yes], [
   AS_CASE([$ac_sys_system],
     [Darwin], [
       dnl when do we need USING_APPLE_OS_LIBFFI?
-      AS_VAR_APPEND([LIBFFI_CFLAGS], [" -I\$(srcdir)/Modules/_ctypes/darwin"])
       ctypes_malloc_closure=yes
     ],
     [sunos5], [AS_VAR_APPEND([LIBFFI_LIBS], [" -mimpure-text"])]



More information about the Python-checkins mailing list