Merge commit '79278364898eccc08d6bbe6e956b6774bb332c24' into template-tests
# Conflicts: # CI.md # test/02_test/test/spam_test.py # test/10_cpp_standards/cibuildwheel_test.py
This commit is contained in:
@@ -105,14 +105,12 @@ def test_cpp14(tmp_path):
|
||||
|
||||
# VC++ for Python 2.7 does not support modern standards
|
||||
# The manylinux1 docker image does not have a compiler which supports C++11
|
||||
# Python 3.4 and 3.5 are compiled with MSVC 10, which does not support C++14
|
||||
add_env = {'CIBW_SKIP': 'cp27-win* pp27-win32 cp35-win*'}
|
||||
add_env = {'CIBW_SKIP': 'cp27-win* pp27-win32'}
|
||||
|
||||
actual_wheels = utils.cibuildwheel_run(project_dir, add_env=add_env)
|
||||
expected_wheels = [w for w in utils.expected_wheels('spam', '0.1.0')
|
||||
if 'cp27-cp27m-win' not in w
|
||||
and 'pp27-pypy_73-win32' not in w
|
||||
and 'cp35-cp35m-win' not in w]
|
||||
and 'pp27-pypy_73-win32' not in w]
|
||||
|
||||
assert set(actual_wheels) == set(expected_wheels)
|
||||
|
||||
@@ -139,7 +137,7 @@ def test_cpp17(tmp_path):
|
||||
if os.environ.get('APPVEYOR_BUILD_WORKER_IMAGE', '') == 'Visual Studio 2015':
|
||||
pytest.skip('Visual Studio 2015 does not support C++17')
|
||||
|
||||
add_env = {'CIBW_SKIP': 'cp27-win* pp27-win32 cp35-win* pp36-win32'}
|
||||
add_env = {'CIBW_SKIP': 'cp27-win* pp27-win32'}
|
||||
|
||||
if utils.platform == 'macos':
|
||||
add_env['MACOSX_DEPLOYMENT_TARGET'] = '10.13'
|
||||
@@ -147,8 +145,56 @@ def test_cpp17(tmp_path):
|
||||
actual_wheels = utils.cibuildwheel_run(project_dir, add_env=add_env)
|
||||
expected_wheels = [w for w in utils.expected_wheels('spam', '0.1.0', macosx_deployment_target='10.13')
|
||||
if 'cp27-cp27m-win' not in w
|
||||
and 'pp27-pypy_73-win32' not in w
|
||||
and 'cp35-cp35m-win' not in w
|
||||
and 'pp36-pypy36_pp73-win32' not in w]
|
||||
and 'pp27-pypy_73-win32' not in w]
|
||||
|
||||
assert set(actual_wheels) == set(expected_wheels)
|
||||
|
||||
|
||||
def test_cpp17_py27_modern_msvc_workaround():
|
||||
# This test checks the workaround for building Python 2.7 wheel with MSVC 14
|
||||
|
||||
if utils.platform != 'windows':
|
||||
pytest.skip('the test is only relevant to the Windows build')
|
||||
|
||||
if os.environ.get('APPVEYOR_BUILD_WORKER_IMAGE', '') == 'Visual Studio 2015':
|
||||
pytest.skip('Visual Studio 2015 does not support C++17')
|
||||
|
||||
# VC++ for Python 2.7 (i.e., MSVC 9) does not support modern standards
|
||||
# This is a workaround which forces distutils/setupstools to a newer version
|
||||
# Wheels compiled need a more modern C++ redistributable installed, which is not
|
||||
# included with Python: see documentation for more info
|
||||
# DISTUTILS_USE_SDK and MSSdk=1 tell distutils/setuptools that we are adding
|
||||
# MSVC's compiler, tools, and libraries to PATH ourselves
|
||||
add_env = {'CIBW_ENVIRONMENT': 'STANDARD=17',
|
||||
'DISTUTILS_USE_SDK': '1', 'MSSdk': '1'}
|
||||
|
||||
# Use existing setuptools code to run Visual Studio's vcvarsall.bat and get the
|
||||
# necessary environment variables, since running vcvarsall.bat in a subprocess
|
||||
# does not keep the relevant environment variables
|
||||
# There are different environment variables for 32-bit/64-bit targets, so we
|
||||
# need to run cibuildwheel twice, once for 32-bit with `vcvarsall.bat x86, and
|
||||
# once for 64-bit with `vcvarsall.bat x64`
|
||||
# In a normal CI setup, just run vcvarsall.bat before running cibuildwheel and set
|
||||
# DISTUTILS_USE_SDK and MSSdk
|
||||
import setuptools
|
||||
|
||||
def add_vcvars(prev_env, platform):
|
||||
vcvarsall_env = setuptools.msvc.msvc14_get_vc_env(platform)
|
||||
env = prev_env.copy()
|
||||
for vcvar in ['path', 'include', 'lib']:
|
||||
env[vcvar] = vcvarsall_env[vcvar]
|
||||
return env
|
||||
|
||||
add_env_x86 = add_vcvars(add_env, 'x86')
|
||||
add_env_x86['CIBW_BUILD'] = '?p27-win32'
|
||||
actual_wheels = utils.cibuildwheel_run(project_dir, add_env=add_env_x86)
|
||||
|
||||
add_env_x64 = add_vcvars(add_env, 'x64')
|
||||
add_env_x64['CIBW_BUILD'] = 'cp27-win_amd64'
|
||||
actual_wheels += utils.cibuildwheel_run(project_dir, add_env=add_env_x64)
|
||||
|
||||
expected_wheels = [w for w in utils.expected_wheels('spam', '0.1.0')
|
||||
if 'cp27-cp27m-win' in w
|
||||
or 'pp27-pypy_73-win32' in w]
|
||||
|
||||
assert set(actual_wheels) == set(expected_wheels)
|
||||
|
||||
@@ -15,13 +15,52 @@ project_with_a_test = CTemplateProject(
|
||||
)
|
||||
|
||||
project_with_a_test.files['test/spam_test.py'] = r'''
|
||||
import os
|
||||
import platform
|
||||
import sys
|
||||
import struct
|
||||
from unittest import TestCase
|
||||
|
||||
import spam
|
||||
|
||||
|
||||
def path_contains(parent, child):
|
||||
""" returns True if `child` is inside `parent`.
|
||||
Works around path-comparison bugs caused by short-paths on Windows e.g.
|
||||
vssadm~1 instead of vssadministrator
|
||||
"""
|
||||
parent = os.path.abspath(parent)
|
||||
child = os.path.abspath(child)
|
||||
|
||||
while child != os.path.dirname(child):
|
||||
child = os.path.dirname(child)
|
||||
if os.stat(parent) == os.stat(child):
|
||||
# parent and child refer to the same directory on the filesystem
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
class TestSpam(TestCase):
|
||||
def test_system(self):
|
||||
self.assertEqual(0, spam.system('python -c "exit(0)"'))
|
||||
self.assertNotEqual(0, spam.system('python -c "exit(1)"'))
|
||||
|
||||
def test_virtualenv(self):
|
||||
virtualenv_path = os.environ.get("__CIBW_VIRTUALENV_PATH__")
|
||||
if not virtualenv_path:
|
||||
self.fail("No virtualenv path defined in environment variable __CIBW_VIRTUALENV_PATH__")
|
||||
|
||||
self.assertTrue(path_contains(virtualenv_path, sys.executable))
|
||||
self.assertTrue(path_contains(virtualenv_path, spam.__file__))
|
||||
|
||||
def test_uname(self):
|
||||
if platform.system() == "Windows":
|
||||
return
|
||||
# if we're running in 32-bit Python, check that the machine is i686.
|
||||
# See #336 for more info.
|
||||
bits = struct.calcsize("P") * 8
|
||||
if bits == 32:
|
||||
self.assertEqual(platform.machine(), "i686")
|
||||
'''
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user