summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Moore <p.f.moore@gmail.com>2014-03-22 15:08:16 +0000
committerPaul Moore <p.f.moore@gmail.com>2014-03-22 15:08:16 +0000
commit90f7aeb1572f05aadefc9bd1de0399cc540f6b6b (patch)
tree3018251f8040e9cdba77f4115d03761b91aed0e6
parentc1826b74eb031270fe1218ee55c9ebc5997b2bf5 (diff)
downloadwheel-90f7aeb1572f05aadefc9bd1de0399cc540f6b6b.tar.gz
Add a --python-tag argument for bdist_wheel
-rw-r--r--wheel/bdist_wheel.py21
-rw-r--r--wheel/test/test_tagopt.py112
2 files changed, 123 insertions, 10 deletions
diff --git a/wheel/bdist_wheel.py b/wheel/bdist_wheel.py
index c63f291..1922b3b 100644
--- a/wheel/bdist_wheel.py
+++ b/wheel/bdist_wheel.py
@@ -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']
@@ -97,6 +100,7 @@ class bdist_wheel(Command):
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:
@@ -129,27 +133,24 @@ class bdist_wheel(Command):
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]
diff --git a/wheel/test/test_tagopt.py b/wheel/test/test_tagopt.py
new file mode 100644
index 0000000..1635857
--- /dev/null
+++ b/wheel/test/test_tagopt.py
@@ -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'
+