Skip to content

Commit

Permalink
Add a --python-tag argument for bdist_wheel
Browse files Browse the repository at this point in the history
  • Loading branch information
pfmoore committed Mar 22, 2014
1 parent 698dae8 commit b101589
Show file tree
Hide file tree
Showing 2 changed files with 123 additions and 10 deletions.
21 changes: 11 additions & 10 deletions wheel/bdist_wheel.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,9 @@ class bdist_wheel(Command):
('universal', None,
"make a universal wheel"
" (default: false)"),
('python-tag=', None,
"Python implementation compatibility tag"
" (default: py%s)" % get_impl_ver()[0]),
]

boolean_options = ['keep-temp', 'skip-build', 'relative', 'universal']
Expand All @@ -97,6 +100,7 @@ def initialize_options(self):
self.group = None
self.skip_scripts = False
self.universal = False
self.python_tag = 'py' + get_impl_ver()[0]

def finalize_options(self):
if self.bdist_dir is None:
Expand Down Expand Up @@ -129,27 +133,24 @@ def wheel_dist_name(self):
def get_tag(self):
supported_tags = pep425tags.get_supported()

purity = self.distribution.is_pure()
impl_ver = get_impl_ver()
abi_tag = 'none'
plat_name = 'any'
impl_name = 'py'
if purity:
if self.distribution.is_pure():
if self.universal:
impl_name = 'py2.py3'
impl_ver = ''
tag = (impl_name + impl_ver, abi_tag, plat_name)
impl = 'py2.py3'
else:
impl = self.python_tag
tag = (impl, 'none', 'any')
else:
plat_name = self.plat_name
if plat_name is None:
plat_name = get_platform()
plat_name = plat_name.replace('-', '_').replace('.', '_')
impl_name = get_abbr_impl()
impl_ver = get_impl_ver()
# PEP 3149 -- no SOABI in Py 2
# For PyPy?
# "pp%s%s" % (sys.pypy_version_info.major,
# sys.pypy_version_info.minor)
abi_tag = sysconfig.get_config_vars().get('SOABI', abi_tag)
abi_tag = sysconfig.get_config_vars().get('SOABI', 'none')
if abi_tag.startswith('cpython-'):
abi_tag = 'cp' + abi_tag.rsplit('-', 1)[-1]

Expand Down
112 changes: 112 additions & 0 deletions wheel/test/test_tagopt.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
"""
Tests for the bdist_wheel --python-tag option
"""

import os
import sys
import pytest
import py.path
import tempfile
import subprocess

SETUP_PY = """\
from setuptools import setup
setup(
name="Test",
version="1.0",
author_email="author@example.com",
py_modules=["test"],
)
"""

@pytest.fixture
def temp_pkg(request):
tempdir = tempfile.TemporaryDirectory()
def fin():
tempdir.cleanup()
request.addfinalizer(fin)
temppath = py.path.local(tempdir.name)
temppath.join('test.py').write('print("Hello, world")')
temppath.join('setup.py').write(SETUP_PY)
return temppath

def test_default_tag(temp_pkg):
subprocess.check_call([sys.executable, 'setup.py', 'bdist_wheel'],
cwd=str(temp_pkg))
dist_dir = temp_pkg.join('dist')
assert dist_dir.check(dir=1)
wheels = dist_dir.listdir()
assert len(wheels) == 1
assert wheels[0].basename.startswith('Test-1.0-py%s-' % (sys.version[0],))
assert wheels[0].ext == '.whl'

def test_explicit_tag(temp_pkg):
subprocess.check_call(
[sys.executable, 'setup.py', 'bdist_wheel', '--python-tag=py32'],
cwd=str(temp_pkg))
dist_dir = temp_pkg.join('dist')
assert dist_dir.check(dir=1)
wheels = dist_dir.listdir()
assert len(wheels) == 1
assert wheels[0].basename.startswith('Test-1.0-py32-')
assert wheels[0].ext == '.whl'

def test_universal_tag(temp_pkg):
subprocess.check_call(
[sys.executable, 'setup.py', 'bdist_wheel', '--universal'],
cwd=str(temp_pkg))
dist_dir = temp_pkg.join('dist')
assert dist_dir.check(dir=1)
wheels = dist_dir.listdir()
assert len(wheels) == 1
assert wheels[0].basename.startswith('Test-1.0-py2.py3-')
assert wheels[0].ext == '.whl'

def test_universal_beats_explicit_tag(temp_pkg):
subprocess.check_call(
[sys.executable, 'setup.py', 'bdist_wheel', '--universal', '--python-tag=py32'],
cwd=str(temp_pkg))
dist_dir = temp_pkg.join('dist')
assert dist_dir.check(dir=1)
wheels = dist_dir.listdir()
assert len(wheels) == 1
assert wheels[0].basename.startswith('Test-1.0-py2.py3-')
assert wheels[0].ext == '.whl'

def test_universal_in_setup_cfg(temp_pkg):
temp_pkg.join('setup.cfg').write('[bdist_wheel]\nuniversal=1')
subprocess.check_call(
[sys.executable, 'setup.py', 'bdist_wheel'],
cwd=str(temp_pkg))
dist_dir = temp_pkg.join('dist')
assert dist_dir.check(dir=1)
wheels = dist_dir.listdir()
assert len(wheels) == 1
assert wheels[0].basename.startswith('Test-1.0-py2.py3-')
assert wheels[0].ext == '.whl'

def test_pythontag_in_setup_cfg(temp_pkg):
temp_pkg.join('setup.cfg').write('[bdist_wheel]\npython_tag=py32')
subprocess.check_call(
[sys.executable, 'setup.py', 'bdist_wheel'],
cwd=str(temp_pkg))
dist_dir = temp_pkg.join('dist')
assert dist_dir.check(dir=1)
wheels = dist_dir.listdir()
assert len(wheels) == 1
assert wheels[0].basename.startswith('Test-1.0-py32-')
assert wheels[0].ext == '.whl'

def test_legacy_wheel_section_in_setup_cfg(temp_pkg):
temp_pkg.join('setup.cfg').write('[wheel]\nuniversal=1')
subprocess.check_call(
[sys.executable, 'setup.py', 'bdist_wheel'],
cwd=str(temp_pkg))
dist_dir = temp_pkg.join('dist')
assert dist_dir.check(dir=1)
wheels = dist_dir.listdir()
assert len(wheels) == 1
assert wheels[0].basename.startswith('Test-1.0-py2.py3-')
assert wheels[0].ext == '.whl'

0 comments on commit b101589

Please sign in to comment.