[Python-checkins] cpython: Issue #18393: Remove use of deprecated API on OSX

ronald.oussoren python-checkins at python.org
Mon Jul 15 18:32:24 CEST 2013


http://hg.python.org/cpython/rev/ccbaf6762b54
changeset:   84634:ccbaf6762b54
user:        Ronald Oussoren <ronaldoussoren at mac.com>
date:        Mon Jul 15 18:32:09 2013 +0200
summary:
  Issue #18393: Remove use of deprecated API on OSX

The "Gestalt" function on OSX is deprecated (starting with OSX 10.8),
remove its usage from the stdlib. The patch removes a number of private
functions and a private module, but does not change the public API.

The removed code was effectively dead, the platform module has used
other code to fetch the OSX version for years and could only use
on the Gestalt-based code as a fallback. That fallback can only trigger
on broken OSX installs (that is, someone has removed parts of the system
install)

files:
  Lib/platform.py    |  64 +-------------------------
  Misc/NEWS          |   4 +
  Modules/_gestalt.c |  84 ----------------------------------
  setup.py           |   4 -
  4 files changed, 5 insertions(+), 151 deletions(-)


diff --git a/Lib/platform.py b/Lib/platform.py
--- a/Lib/platform.py
+++ b/Lib/platform.py
@@ -634,62 +634,6 @@
     RegCloseKey(keyCurVer)
     return release,version,csd,ptype
 
-def _mac_ver_lookup(selectors,default=None):
-
-    from _gestalt import gestalt
-    l = []
-    append = l.append
-    for selector in selectors:
-        try:
-            append(gestalt(selector))
-        except (RuntimeError, OSError):
-            append(default)
-    return l
-
-def _bcd2str(bcd):
-
-    return hex(bcd)[2:]
-
-def _mac_ver_gestalt():
-    """
-        Thanks to Mark R. Levinson for mailing documentation links and
-        code examples for this function. Documentation for the
-        gestalt() API is available online at:
-
-           http://www.rgaros.nl/gestalt/
-    """
-    # Check whether the version info module is available
-    try:
-        import _gestalt
-    except ImportError:
-        return None
-    # Get the infos
-    sysv, sysa = _mac_ver_lookup(('sysv','sysa'))
-    # Decode the infos
-    if sysv:
-        major = (sysv & 0xFF00) >> 8
-        minor = (sysv & 0x00F0) >> 4
-        patch = (sysv & 0x000F)
-
-        if (major, minor) >= (10, 4):
-            # the 'sysv' gestald cannot return patchlevels
-            # higher than 9. Apple introduced 3 new
-            # gestalt codes in 10.4 to deal with this
-            # issue (needed because patch levels can
-            # run higher than 9, such as 10.4.11)
-            major,minor,patch = _mac_ver_lookup(('sys1','sys2','sys3'))
-            release = '%i.%i.%i' %(major, minor, patch)
-        else:
-            release = '%s.%i.%i' % (_bcd2str(major),minor,patch)
-
-    if sysa:
-        machine = {0x1: '68k',
-                   0x2: 'PowerPC',
-                   0xa: 'i386'}.get(sysa,'')
-
-    versioninfo=('', '', '')
-    return release,versioninfo,machine
-
 def _mac_ver_xml():
     fn = '/System/Library/CoreServices/SystemVersion.plist'
     if not os.path.exists(fn):
@@ -705,7 +649,7 @@
     versioninfo=('', '', '')
     machine = os.uname().machine
     if machine in ('ppc', 'Power Macintosh'):
-        # for compatibility with the gestalt based code
+        # Cannonical name
         machine = 'PowerPC'
 
     return release,versioninfo,machine
@@ -727,12 +671,6 @@
     if info is not None:
         return info
 
-    # If that doesn't work for some reason fall back to reading the
-    # information using gestalt calls.
-    info = _mac_ver_gestalt()
-    if info is not None:
-        return info
-
     # If that also doesn't work return the default values
     return release,versioninfo,machine
 
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -156,6 +156,10 @@
 Library
 -------
 
+- Issue #18393: The private module _gestalt and private functions platform._mac_ver_gestalt,
+  platform._mac_ver_lookup and platform._bcd2str have been removed. This does not
+  affect the public interface of the platform module.
+
 - Issue #17482: functools.update_wrapper (and functools.wraps) now set the
   __wrapped__ attribute correctly even if the underlying function has a
   __wrapped__ attribute set.
diff --git a/Modules/_gestalt.c b/Modules/_gestalt.c
deleted file mode 100644
--- a/Modules/_gestalt.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/***********************************************************
-Copyright 1991-1997 by Stichting Mathematisch Centrum, Amsterdam,
-The Netherlands.
-
-                        All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the names of Stichting Mathematisch
-Centrum or CWI not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior permission.
-
-STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
-THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
-FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
-OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-******************************************************************/
-
-/* Macintosh Gestalt interface */
-
-#include "Python.h"
-
-#include <Carbon/Carbon.h>
-
-/* Convert a 4-char string object argument to an OSType value */
-static int
-convert_to_OSType(PyObject *v, OSType *pr)
-{
-    uint32_t tmp;
-    if (!PyUnicode_Check(v) || PyUnicode_GetLength(v) != 4) {
-    PyErr_SetString(PyExc_TypeError,
-                    "OSType arg must be string of 4 chars");
-    return 0;
-    }
-    memcpy((char *)&tmp, _PyUnicode_AsString(v), 4);
-    *pr = (OSType)ntohl(tmp);
-    return 1;
-}
-
-static PyObject *
-gestalt_gestalt(PyObject *self, PyObject *args)
-{
-    OSErr iErr;
-    OSType selector;
-    SInt32 response;
-    if (!PyArg_ParseTuple(args, "O&", convert_to_OSType, &selector))
-        return NULL;
-    iErr = Gestalt(selector, &response);
-    if (iErr != 0) {
-    PyErr_SetString(PyExc_OSError,
-                    "non-zero exit code!");
-    return NULL;
-    }
-    return PyLong_FromLong(response);
-}
-
-static struct PyMethodDef gestalt_methods[] = {
-    {"gestalt", gestalt_gestalt, METH_VARARGS},
-    {NULL, NULL} /* Sentinel */
-};
-
-static struct PyModuleDef gestaltmodule = {
-    PyModuleDef_HEAD_INIT,
-    "_gestalt",
-    NULL,
-    -1,
-    gestalt_methods,
-    NULL,
-    NULL,
-    NULL,
-    NULL
-};
-
-PyMODINIT_FUNC
-PyInit__gestalt(void)
-{
-    return PyModule_Create(&gestaltmodule);
-}
diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -1520,10 +1520,6 @@
 
         if host_platform == 'darwin':
             exts.append(
-                       Extension('_gestalt', ['_gestalt.c'],
-                       extra_link_args=['-framework', 'Carbon'])
-                       )
-            exts.append(
                        Extension('_scproxy', ['_scproxy.c'],
                        extra_link_args=[
                            '-framework', 'SystemConfiguration',

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list