Skip to content

Commit

Permalink
refactor: identifiers in a file
Browse files Browse the repository at this point in the history
  • Loading branch information
henryiii committed Jan 2, 2021
1 parent 10c052b commit bf2a023
Show file tree
Hide file tree
Showing 8 changed files with 266 additions and 82 deletions.
20 changes: 14 additions & 6 deletions cibuildwheel/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
Unbuffered,
detect_ci_provider,
resources_dir,
read_python_configs,
)


Expand Down Expand Up @@ -124,6 +125,10 @@ def main() -> None:
file=sys.stderr)
exit(2)

if platform not in {"linux", "macos", "windows"}:
print(f'cibuildwheel: Unsupported platform: {platform}', file=sys.stderr)
exit(2)

package_dir = Path(args.package_dir)
output_dir = Path(args.output_dir)

Expand Down Expand Up @@ -219,6 +224,8 @@ def main() -> None:

manylinux_images[build_platform] = image

python_configs = read_python_configs(resources_dir / f"{platform}.toml")

build_options = BuildOptions(
architectures=archs,
package_dir=package_dir,
Expand All @@ -235,6 +242,7 @@ def main() -> None:
environment=environment,
dependency_constraints=dependency_constraints,
manylinux_images=manylinux_images,
python_configs=python_configs,
)

# Python is buffering by default when running on the CI platforms, giving problems interleaving subprocess call output with unflushed calls to 'print'
Expand All @@ -251,9 +259,6 @@ def main() -> None:
cibuildwheel.windows.build(build_options)
elif platform == 'macos':
cibuildwheel.macos.build(build_options)
else:
print(f'cibuildwheel: Unsupported platform: {platform}', file=sys.stderr)
exit(2)


def detect_obsolete_options() -> None:
Expand Down Expand Up @@ -306,13 +311,16 @@ def print_preamble(platform: str, build_options: BuildOptions) -> None:
def print_build_identifiers(
platform: str, build_selector: BuildSelector, architectures: List[Architecture]
) -> None:

python_configs = read_python_configs(resources_dir / f"{platform}.toml")

python_configurations: List[Any] = []
if platform == 'linux':
python_configurations = cibuildwheel.linux.get_python_configurations(build_selector, architectures)
python_configurations = cibuildwheel.linux.get_python_configurations(python_configs, build_selector, architectures)
elif platform == 'windows':
python_configurations = cibuildwheel.windows.get_python_configurations(build_selector)
python_configurations = cibuildwheel.windows.get_python_configurations(python_configs, build_selector)
elif platform == 'macos':
python_configurations = cibuildwheel.macos.get_python_configurations(build_selector)
python_configurations = cibuildwheel.macos.get_python_configurations(python_configs, build_selector)

for config in python_configurations:
print(config.identifier)
Expand Down
44 changes: 7 additions & 37 deletions cibuildwheel/linux.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import textwrap
from os import PathLike
from pathlib import Path, PurePath
from typing import List, NamedTuple, Union
from typing import List, NamedTuple, Union, Dict

from .docker_container import DockerContainer
from .logger import log
Expand All @@ -24,42 +24,12 @@ def path(self):


def get_python_configurations(
build_selector: BuildSelector, architectures: List[Architecture]
python_configs: List[Dict[str, str]],
build_selector: BuildSelector,
architectures: List[Architecture]
) -> List[PythonConfiguration]:
python_configurations = [
PythonConfiguration(version='2.7', identifier='cp27-manylinux_x86_64', path_str='/opt/python/cp27-cp27m'),
PythonConfiguration(version='2.7', identifier='cp27-manylinux_x86_64', path_str='/opt/python/cp27-cp27mu'),
PythonConfiguration(version='3.5', identifier='cp35-manylinux_x86_64', path_str='/opt/python/cp35-cp35m'),
PythonConfiguration(version='3.6', identifier='cp36-manylinux_x86_64', path_str='/opt/python/cp36-cp36m'),
PythonConfiguration(version='3.7', identifier='cp37-manylinux_x86_64', path_str='/opt/python/cp37-cp37m'),
PythonConfiguration(version='3.8', identifier='cp38-manylinux_x86_64', path_str='/opt/python/cp38-cp38'),
PythonConfiguration(version='3.9', identifier='cp39-manylinux_x86_64', path_str='/opt/python/cp39-cp39'),
PythonConfiguration(version='2.7', identifier='cp27-manylinux_i686', path_str='/opt/python/cp27-cp27m'),
PythonConfiguration(version='2.7', identifier='cp27-manylinux_i686', path_str='/opt/python/cp27-cp27mu'),
PythonConfiguration(version='3.5', identifier='cp35-manylinux_i686', path_str='/opt/python/cp35-cp35m'),
PythonConfiguration(version='3.6', identifier='cp36-manylinux_i686', path_str='/opt/python/cp36-cp36m'),
PythonConfiguration(version='3.7', identifier='cp37-manylinux_i686', path_str='/opt/python/cp37-cp37m'),
PythonConfiguration(version='3.8', identifier='cp38-manylinux_i686', path_str='/opt/python/cp38-cp38'),
PythonConfiguration(version='3.9', identifier='cp39-manylinux_i686', path_str='/opt/python/cp39-cp39'),
PythonConfiguration(version='2.7', identifier='pp27-manylinux_x86_64', path_str='/opt/python/pp27-pypy_73'),
PythonConfiguration(version='3.6', identifier='pp36-manylinux_x86_64', path_str='/opt/python/pp36-pypy36_pp73'),
PythonConfiguration(version='3.7', identifier='pp37-manylinux_x86_64', path_str='/opt/python/pp37-pypy37_pp73'),
PythonConfiguration(version='3.5', identifier='cp35-manylinux_aarch64', path_str='/opt/python/cp35-cp35m'),
PythonConfiguration(version='3.6', identifier='cp36-manylinux_aarch64', path_str='/opt/python/cp36-cp36m'),
PythonConfiguration(version='3.7', identifier='cp37-manylinux_aarch64', path_str='/opt/python/cp37-cp37m'),
PythonConfiguration(version='3.8', identifier='cp38-manylinux_aarch64', path_str='/opt/python/cp38-cp38'),
PythonConfiguration(version='3.9', identifier='cp39-manylinux_aarch64', path_str='/opt/python/cp39-cp39'),
PythonConfiguration(version='3.5', identifier='cp35-manylinux_ppc64le', path_str='/opt/python/cp35-cp35m'),
PythonConfiguration(version='3.6', identifier='cp36-manylinux_ppc64le', path_str='/opt/python/cp36-cp36m'),
PythonConfiguration(version='3.7', identifier='cp37-manylinux_ppc64le', path_str='/opt/python/cp37-cp37m'),
PythonConfiguration(version='3.8', identifier='cp38-manylinux_ppc64le', path_str='/opt/python/cp38-cp38'),
PythonConfiguration(version='3.9', identifier='cp39-manylinux_ppc64le', path_str='/opt/python/cp39-cp39'),
PythonConfiguration(version='3.5', identifier='cp35-manylinux_s390x', path_str='/opt/python/cp35-cp35m'),
PythonConfiguration(version='3.6', identifier='cp36-manylinux_s390x', path_str='/opt/python/cp36-cp36m'),
PythonConfiguration(version='3.7', identifier='cp37-manylinux_s390x', path_str='/opt/python/cp37-cp37m'),
PythonConfiguration(version='3.8', identifier='cp38-manylinux_s390x', path_str='/opt/python/cp38-cp38'),
PythonConfiguration(version='3.9', identifier='cp39-manylinux_s390x', path_str='/opt/python/cp39-cp39'),
]

python_configurations = [PythonConfiguration(**item) for item in python_configs]

# return all configurations whose arch is in our `architectures` list,
# and match the build/skip rules
Expand All @@ -81,7 +51,7 @@ def build(options: BuildOptions) -> None:
exit(2)

assert options.manylinux_images is not None
python_configurations = get_python_configurations(options.build_selector, options.architectures)
python_configurations = get_python_configurations(options.python_configs, options.build_selector, options.architectures)
platforms = [
('cp', 'manylinux_x86_64', options.manylinux_images['x86_64']),
('cp', 'manylinux_i686', options.manylinux_images['i686']),
Expand Down
21 changes: 6 additions & 15 deletions cibuildwheel/macos.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,20 +32,11 @@ class PythonConfiguration(NamedTuple):
url: str


def get_python_configurations(build_selector: BuildSelector) -> List[PythonConfiguration]:
python_configurations = [
# CPython
PythonConfiguration(version='2.7', identifier='cp27-macosx_x86_64', url='https://www.python.org/ftp/python/2.7.18/python-2.7.18-macosx10.9.pkg'),
PythonConfiguration(version='3.5', identifier='cp35-macosx_x86_64', url='https://www.python.org/ftp/python/3.5.4/python-3.5.4-macosx10.6.pkg'),
PythonConfiguration(version='3.6', identifier='cp36-macosx_x86_64', url='https://www.python.org/ftp/python/3.6.8/python-3.6.8-macosx10.9.pkg'),
PythonConfiguration(version='3.7', identifier='cp37-macosx_x86_64', url='https://www.python.org/ftp/python/3.7.9/python-3.7.9-macosx10.9.pkg'),
PythonConfiguration(version='3.8', identifier='cp38-macosx_x86_64', url='https://www.python.org/ftp/python/3.8.7/python-3.8.7-macosx10.9.pkg'),
PythonConfiguration(version='3.9', identifier='cp39-macosx_x86_64', url='https://www.python.org/ftp/python/3.9.1/python-3.9.1-macosx10.9.pkg'),
# PyPy
PythonConfiguration(version='2.7', identifier='pp27-macosx_x86_64', url='https://downloads.python.org/pypy/pypy2.7-v7.3.3-osx64.tar.bz2'),
PythonConfiguration(version='3.6', identifier='pp36-macosx_x86_64', url='https://downloads.python.org/pypy/pypy3.6-v7.3.3-osx64.tar.bz2'),
PythonConfiguration(version='3.7', identifier='pp37-macosx_x86_64', url='https://downloads.python.org/pypy/pypy3.7-v7.3.3-osx64.tar.bz2'),
]
def get_python_configurations(
python_configs: List[Dict[str, str]],
build_selector: BuildSelector) -> List[PythonConfiguration]:

python_configurations = [PythonConfiguration(**item) for item in python_configs]

# skip builds as required
return [c for c in python_configurations if build_selector(c.identifier)]
Expand Down Expand Up @@ -204,7 +195,7 @@ def build(options: BuildOptions) -> None:
before_all_prepared = prepare_command(options.before_all, project='.', package=options.package_dir)
call([before_all_prepared], shell=True, env=env)

python_configurations = get_python_configurations(options.build_selector)
python_configurations = get_python_configurations(options.python_configs, options.build_selector)

for config in python_configurations:
log.build_start(config.identifier)
Expand Down
119 changes: 119 additions & 0 deletions cibuildwheel/resources/linux.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
[cp27-manylinux_x86_64]
version="2.7"
path_str="/opt/python/cp27-cp27m"

[cp35-manylinux_x86_64]
version="3.5"
path_str="/opt/python/cp35-cp35m"

[cp36-manylinux_x86_64]
version="3.6"
path_str="/opt/python/cp36-cp36m"

[cp37-manylinux_x86_64]
version="3.7"
path_str="/opt/python/cp37-cp37m"

[cp38-manylinux_x86_64]
version="3.8"
path_str="/opt/python/cp38-cp38"

[cp39-manylinux_x86_64]
version="3.9"
path_str="/opt/python/cp39-cp39"

[cp27-manylinux_i686]
version="2.7"
path_str="/opt/python/cp27-cp27m"

[cp35-manylinux_i686]
version="3.5"
path_str="/opt/python/cp35-cp35m"

[cp36-manylinux_i686]
version="3.6"
path_str="/opt/python/cp36-cp36m"

[cp37-manylinux_i686]
version="3.7"
path_str="/opt/python/cp37-cp37m"

[cp38-manylinux_i686]
version="3.8"
path_str="/opt/python/cp38-cp38"

[cp39-manylinux_i686]
version="3.9"
path_str="/opt/python/cp39-cp39"

[pp27-manylinux_x86_64]
version="2.7"
path_str="/opt/python/pp27-pypy_73"

[pp36-manylinux_x86_64]
version="3.6"
path_str="/opt/python/pp36-pypy36_pp73"

[pp37-manylinux_x86_64]
version="3.7"
path_str="/opt/python/pp37-pypy37_pp73"

[cp35-manylinux_aarch64]
version="3.5"
path_str="/opt/python/cp35-cp35m"

[cp36-manylinux_aarch64]
version="3.6"
path_str="/opt/python/cp36-cp36m"

[cp37-manylinux_aarch64]
version="3.7"
path_str="/opt/python/cp37-cp37m"

[cp38-manylinux_aarch64]
version="3.8"
path_str="/opt/python/cp38-cp38"

[cp39-manylinux_aarch64]
version="3.9"
path_str="/opt/python/cp39-cp39"

[cp35-manylinux_ppc64le]
version="3.5"
path_str="/opt/python/cp35-cp35m"

[cp36-manylinux_ppc64le]
version="3.6"
path_str="/opt/python/cp36-cp36m"

[cp37-manylinux_ppc64le]
version="3.7"
path_str="/opt/python/cp37-cp37m"

[cp38-manylinux_ppc64le]
version="3.8"
path_str="/opt/python/cp38-cp38"

[cp39-manylinux_ppc64le]
version="3.9"
path_str="/opt/python/cp39-cp39"

[cp35-manylinux_s390x]
version="3.5"
path_str="/opt/python/cp35-cp35m"

[cp36-manylinux_s390x]
version="3.6"
path_str="/opt/python/cp36-cp36m"

[cp37-manylinux_s390x]
version="3.7"
path_str="/opt/python/cp37-cp37m"

[cp38-manylinux_s390x]
version="3.8"
path_str="/opt/python/cp38-cp38"

[cp39-manylinux_s390x]
version="3.9"
path_str="/opt/python/cp39-cp39"
35 changes: 35 additions & 0 deletions cibuildwheel/resources/macos.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
[cp27-macosx_x86_64]
version="2.7"
url="https://www.python.org/ftp/python/2.7.18/python-2.7.18-macosx10.9.pkg"

[cp35-macosx_x86_64]
version="3.5"
url="https://www.python.org/ftp/python/3.5.4/python-3.5.4-macosx10.6.pkg"

[cp36-macosx_x86_64]
version="3.6"
url="https://www.python.org/ftp/python/3.6.8/python-3.6.8-macosx10.9.pkg"

[cp37-macosx_x86_64]
version="3.7"
url="https://www.python.org/ftp/python/3.7.9/python-3.7.9-macosx10.9.pkg"

[cp38-macosx_x86_64]
version="3.8"
url="https://www.python.org/ftp/python/3.8.7/python-3.8.7-macosx10.9.pkg"

[cp39-macosx_x86_64]
version="3.9"
url="https://www.python.org/ftp/python/3.9.1/python-3.9.1-macosx10.9.pkg"

[pp27-macosx_x86_64]
version="2.7"
url="https://downloads.python.org/pypy/pypy2.7-v7.3.3-osx64.tar.bz2"

[pp36-macosx_x86_64]
version="3.6"
url="https://downloads.python.org/pypy/pypy3.6-v7.3.3-osx64.tar.bz2"

[pp37-macosx_x86_64]
version="3.7"
url="https://downloads.python.org/pypy/pypy3.7-v7.3.3-osx64.tar.bz2"
62 changes: 62 additions & 0 deletions cibuildwheel/resources/windows.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
[cp27-win32]
version="2.7.18"
arch="32"

[cp27-win_amd64]
version="2.7.18"
arch="64"

[cp35-win32]
version="3.5.4"
arch="32"

[cp35-win_amd64]
version="3.5.4"
arch="64"

[cp36-win32]
version="3.6.8"
arch="32"

[cp36-win_amd64]
version="3.6.8"
arch="64"

[cp37-win32]
version="3.7.9"
arch="32"

[cp37-win_amd64]
version="3.7.9"
arch="64"

[cp38-win32]
version="3.8.7"
arch="32"

[cp38-win_amd64]
version="3.8.7"
arch="64"

[cp39-win32]
version="3.9.1"
arch="32"

[cp39-win_amd64]
version="3.9.1"
arch="64"

[pp27-win32]
version="2.7"
arch="32"
url="https://downloads.python.org/pypy/pypy2.7-v7.3.3-win32.zip"

[pp36-win32]
version="3.6"
arch="32"
url="https://downloads.python.org/pypy/pypy3.6-v7.3.3-win32.zip"

[pp37-win32]
version="3.7"
arch="32"
url="https://downloads.python.org/pypy/pypy3.7-v7.3.3-win32.zip"
Loading

0 comments on commit bf2a023

Please sign in to comment.