Anonymous committed 4bf55a6

Split ``get_platform()`` into ``get_supported_platform()`` and
``get_build_platform()`` to work around a Mac versioning problem that caused
the behavior of ``compatible_platforms()`` to be platform specific.

(Backport from 0.7 trunk, rev 45536)

Comments (0)

Files changed (3)

 from os import utime, rename, unlink    # capture these to bypass sandboxing
 from os import open as os_open
-def _get_max_platform(plat):
+def get_supported_platform():
     """Return this platform's maximum compatible version.
     distutils.util.get_platform() normally reports the minimum version
     If this condition occurs for any other platform with a version in its
     platform strings, this function should be extended accordingly.
-    m = macosVersionString.match(plat)
+    plat = get_build_platform(); m = macosVersionString.match(plat)
     if m is not None and sys.platform == "darwin":
             plat = 'macosx-%s-%s' % ('.'.join(_macosx_vers()[:2]),
 def _macosx_arch(machine):
     return {'PowerPC':'ppc', 'Power_Macintosh':'ppc'}.get(machine,machine)
-def get_platform():
+def get_build_platform():
     """Return this platform's string for platform-specific distributions
     XXX Currently this is the same as ``distutils.util.get_platform()``, but it
 macosVersionString = re.compile(r"macosx-(\d+)\.(\d+)-(.*)")
 darwinVersionString = re.compile(r"darwin-(\d+)\.(\d+)\.(\d+)-(.*)")
+get_platform = get_build_platform   # XXX backward compat
     if provided is None or required is None or provided==required:
         return True     # easy case
-    provided = _get_max_platform(provided)
-    if provided==required: return True
     # Mac OS X special cases
     reqMac = macosVersionString.match(required)
             return False
         # is the required OS major update >= the provided one?
         if int( > int(
             return False
 class Environment(object):
     """Searchable snapshot of distributions on a search path"""
-    def __init__(self,search_path=None,platform=get_platform(),python=PY_MAJOR):
+    def __init__(self, search_path=None, platform=get_supported_platform(), python=PY_MAJOR):
         """Snapshot distributions available on a search path
         Any distributions found on `search_path` are added to the environment.


 ``Environment`` objects are used by ``pkg_resources`` to index available
 distributions during dependency resolution.
-``Environment(search_path=None, platform=get_platform(), python=PY_MAJOR)``
+``Environment(search_path=None, platform=get_supported_platform(), python=PY_MAJOR)``
     Create an environment snapshot by scanning `search_path` for distributions
     compatible with `platform` and `python`.  `search_path` should be a
     sequence of strings such as might be used on ``sys.path``.  If a
 Platform Utilities
     Return this platform's identifier string.  For Windows, the return value
     is ``"win32"``, and for Mac OS X it is a string of the form
     ``"macosx-10.4-ppc"``.  All other platforms return the same uname-based
     string that the ``distutils.util.get_platform()`` function returns.
+    This string is the minimum platform version required by distributions built
+    on the local machine.  (Backward compatibility note: setuptools versions
+    prior to 0.6b1 called this function ``get_platform()``, and the function is
+    still available under that name for backward compatibility reasons.)
+``get_supported_platform()`` (New in 0.6b1)
+    This is the similar to ``get_build_platform()``, but is the maximum
+    platform version that the local machine supports.  You will usually want
+    to use this value as the ``provided`` argument to the
+    ``compatible_platforms()`` function.
 ``compatible_platforms(provided, required)``
     Return true if a distribution built on the `provided` platform may be used
 Release Notes/Change History
+ * Split ``get_platform()`` into ``get_supported_platform()`` and
+   ``get_build_platform()`` to work around a Mac versioning problem that caused
+   the behavior of ``compatible_platforms()`` to be platform specific.
  * Added ``ExtractionError`` and ``ResourceManager.extraction_error()`` so that
    cache permission problems get a more user-friendly explanation of the


 from distutils.dir_util import remove_tree, mkpath
 from distutils.sysconfig import get_python_version, get_python_lib
 from distutils import log
-from pkg_resources import get_platform, Distribution
+from pkg_resources import get_build_platform, Distribution
 from types import CodeType
 from setuptools.extension import Library
             "temporary directory for creating the distribution"),
         ('plat-name=', 'p',
                      "platform name to embed in generated filenames "
-                     "(default: %s)" % get_platform()),
+                     "(default: %s)" % get_build_platform()),
         ('exclude-source-files', None,
                      "remove all .py files from the generated egg"),
         ('keep-temp', 'k',
             self.bdist_dir = os.path.join(bdist_base, 'egg')
         if self.plat_name is None:
-            self.plat_name = get_platform()
+            self.plat_name = get_build_platform()
         self.set_undefined_options('bdist',('dist_dir', 'dist_dir'))
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.