-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request pypa#8 from pfmoore/wheel_install_platcheck
Add platform checks to wheel location code
- Loading branch information
Showing
4 changed files
with
128 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
"""Generate and work with PEP 425 Compatibility Tags.""" | ||
|
||
import sys | ||
|
||
try: | ||
import sysconfig | ||
except ImportError: # pragma nocover | ||
# Python < 2.7 | ||
import distutils.sysconfig as sysconfig | ||
import distutils.util | ||
|
||
|
||
def get_abbr_impl(): | ||
"""Return abbreviated implementation name.""" | ||
if hasattr(sys, 'pypy_version_info'): | ||
pyimpl = 'pp' | ||
elif sys.platform.startswith('java'): | ||
pyimpl = 'jy' | ||
elif sys.platform == 'cli': | ||
pyimpl = 'ip' | ||
else: | ||
pyimpl = 'cp' | ||
return pyimpl | ||
|
||
|
||
def get_impl_ver(): | ||
"""Return implementation version.""" | ||
impl_ver = sysconfig.get_config_var("py_version_nodot") | ||
if not impl_ver: | ||
impl_ver = ''.join(map(str, sys.version_info[:2])) | ||
return impl_ver | ||
|
||
|
||
def get_platform(): | ||
"""Return our platform name 'win32', 'linux_x86_64'""" | ||
# XXX remove distutils dependency | ||
return distutils.util.get_platform().replace('.', '_').replace('-', '_') | ||
|
||
|
||
def get_supported(versions=None): | ||
"""Return a list of supported tags for each version specified in | ||
`versions`. | ||
:param versions: a list of string versions, of the form ["33", "32"], | ||
or None. The first version will be assumed to support our ABI. | ||
""" | ||
supported = [] | ||
|
||
# Versions must be given with respect to the preference | ||
if versions is None: | ||
versions = [] | ||
major = sys.version_info[0] | ||
# Support all previous minor Python versions. | ||
for minor in range(sys.version_info[1], -1, -1): | ||
versions.append(''.join(map(str, (major, minor)))) | ||
|
||
impl = get_abbr_impl() | ||
|
||
abis = [] | ||
|
||
soabi = sysconfig.get_config_var('SOABI') | ||
if soabi and soabi.startswith('cpython-'): | ||
abis[0:0] = ['cp' + soabi.split('-', 1)[-1]] | ||
|
||
abi3s = set() | ||
import imp | ||
for suffix in imp.get_suffixes(): | ||
if suffix[0].startswith('.abi'): | ||
abi3s.add(suffix[0].split('.', 2)[1]) | ||
|
||
abis.extend(sorted(list(abi3s))) | ||
|
||
abis.append('none') | ||
|
||
arch = get_platform() | ||
|
||
# Current version, current API (built specifically for our Python): | ||
for abi in abis: | ||
supported.append(('%s%s' % (impl, versions[0]), abi, arch)) | ||
|
||
# No abi / arch, but requires our implementation: | ||
for i, version in enumerate(versions): | ||
supported.append(('%s%s' % (impl, version), 'none', 'any')) | ||
if i == 0: | ||
# Tagged specifically as being cross-version compatible | ||
# (with just the major version specified) | ||
supported.append(('%s%s' % (impl, versions[0][0]), 'none', 'any')) | ||
|
||
# No abi / arch, generic Python | ||
for i, version in enumerate(versions): | ||
supported.append(('py%s' % (version,), 'none', 'any')) | ||
if i == 0: | ||
supported.append(('py%s' % (version[0]), 'none', 'any')) | ||
|
||
return supported | ||
|
||
|
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters