diff --git a/cibuildwheel/__main__.py b/cibuildwheel/__main__.py index 2ae108d3..99fea065 100644 --- a/cibuildwheel/__main__.py +++ b/cibuildwheel/__main__.py @@ -99,7 +99,7 @@ def main(): traceback.print_exc(None, sys.stderr) exit(2) - selection = BuildSelector(build_config, skip_config) + build_selector = BuildSelector(build_config, skip_config) # Add CIBUILDWHEEL environment variable # This needs to be passed on to the docker container in linux.py @@ -134,7 +134,7 @@ def main(): test_requires=test_requires, before_build=before_build, build_verbosity=build_verbosity, - selection=selection, + build_selector=build_selector, environment=environment, ) diff --git a/cibuildwheel/linux.py b/cibuildwheel/linux.py index 400295cc..ee221443 100644 --- a/cibuildwheel/linux.py +++ b/cibuildwheel/linux.py @@ -9,7 +9,7 @@ except ImportError: from pipes import quote as shlex_quote -def build(project_dir, package_name, output_dir, test_command, test_requires, before_build, build_verbosity, selection, environment, manylinux1_images): +def build(project_dir, package_name, output_dir, test_command, test_requires, before_build, build_verbosity, build_selector, environment, manylinux1_images): try: subprocess.check_call(['docker', '--version']) except: @@ -36,7 +36,7 @@ def build(project_dir, package_name, output_dir, test_command, test_requires, be ] # skip builds as required - python_configurations = [c for c in python_configurations if selection(c.identifier)] + python_configurations = [c for c in python_configurations if build_selector(c.identifier)] platforms = [ ('manylinux1_x86_64', manylinux1_images.get('x86_64') or 'quay.io/pypa/manylinux1_x86_64'), diff --git a/cibuildwheel/macos.py b/cibuildwheel/macos.py index f45bb1f6..74e1990c 100644 --- a/cibuildwheel/macos.py +++ b/cibuildwheel/macos.py @@ -10,7 +10,7 @@ except ImportError: from .util import prepare_command, get_build_verbosity_extra_flags -def build(project_dir, package_name, output_dir, test_command, test_requires, before_build, build_verbosity, selection, environment): +def build(project_dir, package_name, output_dir, test_command, test_requires, before_build, build_verbosity, build_selector, environment): PythonConfiguration = namedtuple('PythonConfiguration', ['version', 'identifier', 'url']) python_configurations = [ PythonConfiguration(version='2.7', identifier='cp27-macosx_10_6_intel', url='https://www.python.org/ftp/python/2.7.15/python-2.7.15-macosx10.6.pkg'), @@ -42,7 +42,7 @@ def build(project_dir, package_name, output_dir, test_command, test_requires, be call(['curl', '-L', '-o', get_pip_script, get_pip_url]) for config in python_configurations: - if not selection(config.identifier): + if not build_selector(config.identifier): print('cibuildwheel: Skipping build %s' % config.identifier, file=sys.stderr) continue diff --git a/cibuildwheel/windows.py b/cibuildwheel/windows.py index 34dafb0c..fe9d496d 100644 --- a/cibuildwheel/windows.py +++ b/cibuildwheel/windows.py @@ -10,7 +10,7 @@ from glob import glob from .util import prepare_command, get_build_verbosity_extra_flags -def build(project_dir, package_name, output_dir, test_command, test_requires, before_build, build_verbosity, selection, environment): +def build(project_dir, package_name, output_dir, test_command, test_requires, before_build, build_verbosity, build_selector, environment): # run_with_env is a cmd file that sets the right environment variables to run_with_env = os.path.join(tempfile.gettempdir(), 'appveyor_run_with_env.cmd') if not os.path.exists(run_with_env): @@ -45,7 +45,7 @@ def build(project_dir, package_name, output_dir, test_command, test_requires, be built_wheel_dir = os.path.join(temp_dir, 'built_wheel') for config in python_configurations: - if not selection(config.identifier): + if not build_selector(config.identifier): print('cibuildwheel: Skipping build %s' % config.identifier, file=sys.stderr) continue diff --git a/test/04_build_skip/environment.json b/test/04_build_skip/environment.json index 06a0eb59..a47c85d2 100644 --- a/test/04_build_skip/environment.json +++ b/test/04_build_skip/environment.json @@ -1,4 +1,4 @@ { "CIBW_BUILD": "cp3?-*", - "CIBW_SKIP": "cp33-*" + "CIBW_SKIP": "cp34-*" } diff --git a/test/04_build_skip/setup.py b/test/04_build_skip/setup.py index f4434cf0..75b1232b 100644 --- a/test/04_build_skip/setup.py +++ b/test/04_build_skip/setup.py @@ -5,8 +5,8 @@ if sys.argv[-1] != '--name': # explode if run on Python 2.7 or Python 3.3 (these should be skipped) if sys.version_info[0:2] == (2, 7): raise Exception('Python 2.7 should not be built') - if sys.version_info[0:2] == (3, 3): - raise Exception('Python 3.3 should be skipped') + if sys.version_info[0:2] == (3, 4): + raise Exception('Python 3.4 should be skipped') setup( name="spam", diff --git a/unit_test/build_selector_test.py b/unit_test/build_selector_test.py new file mode 100644 index 00000000..8737ee6b --- /dev/null +++ b/unit_test/build_selector_test.py @@ -0,0 +1,61 @@ +from cibuildwheel.util import BuildSelector + + +def test_build(): + build_selector = BuildSelector(build_config="cp3?-* *-manylinux1*", skip_config="") + + assert build_selector('cp27-manylinux1_x86_64') + assert build_selector('cp36-manylinux1_x86_64') + assert build_selector('cp37-manylinux1_x86_64') + assert build_selector('cp27-manylinux1_i686') + assert build_selector('cp36-manylinux1_i686') + assert build_selector('cp37-manylinux1_i686') + assert not build_selector('cp27-macosx_10_6_intel') + assert build_selector('cp36-macosx_10_6_intel') + assert build_selector('cp37-macosx_10_6_intel') + assert not build_selector('cp27-win32') + assert build_selector('cp36-win32') + assert build_selector('cp37-win32') + assert not build_selector('cp27-win_amd64') + assert build_selector('cp36-win_amd64') + assert build_selector('cp37-win_amd64') + + +def test_skip(): + build_selector = BuildSelector(build_config="*", skip_config="cp27-* cp3?-manylinux1_i686 cp36-win* *-win32") + + assert not build_selector('cp27-manylinux1_x86_64') + assert build_selector('cp36-manylinux1_x86_64') + assert build_selector('cp37-manylinux1_x86_64') + assert not build_selector('cp27-manylinux1_i686') + assert not build_selector('cp36-manylinux1_i686') + assert not build_selector('cp37-manylinux1_i686') + assert not build_selector('cp27-macosx_10_6_intel') + assert build_selector('cp36-macosx_10_6_intel') + assert build_selector('cp37-macosx_10_6_intel') + assert not build_selector('cp27-win32') + assert not build_selector('cp36-win32') + assert not build_selector('cp37-win32') + assert not build_selector('cp27-win_amd64') + assert not build_selector('cp36-win_amd64') + assert build_selector('cp37-win_amd64') + + +def test_build_and_skip(): + build_selector = BuildSelector(build_config="cp36-* cp37-macosx* *-manylinux1*", skip_config="cp27-* cp37-manylinux1_i686") + + assert not build_selector('cp27-manylinux1_x86_64') + assert build_selector('cp36-manylinux1_x86_64') + assert build_selector('cp37-manylinux1_x86_64') + assert not build_selector('cp27-manylinux1_i686') + assert build_selector('cp36-manylinux1_i686') + assert not build_selector('cp37-manylinux1_i686') + assert not build_selector('cp27-macosx_10_6_intel') + assert build_selector('cp36-macosx_10_6_intel') + assert build_selector('cp37-macosx_10_6_intel') + assert not build_selector('cp27-win32') + assert build_selector('cp36-win32') + assert not build_selector('cp37-win32') + assert not build_selector('cp27-win_amd64') + assert build_selector('cp36-win_amd64') + assert not build_selector('cp37-win_amd64')