refactor: standard arch checking in one place

This commit is contained in:
Henry Schreiner
2021-01-05 13:23:54 -05:00
parent a99e0ded76
commit fce7c70a63
5 changed files with 45 additions and 18 deletions
+3 -1
View File
@@ -8,7 +8,7 @@ from .docker_container import DockerContainer
from .logger import log from .logger import log
from .util import ( from .util import (
Architecture, BuildOptions, BuildSelector, NonPlatformWheelError, Architecture, BuildOptions, BuildSelector, NonPlatformWheelError,
get_build_verbosity_extra_flags, prepare_command, allowed_architectures_check, get_build_verbosity_extra_flags, prepare_command,
) )
from .typing import PathOrStr from .typing import PathOrStr
@@ -71,6 +71,8 @@ def get_python_configurations(
def build(options: BuildOptions) -> None: def build(options: BuildOptions) -> None:
allowed_architectures_check("linux", options)
try: try:
subprocess.check_output(['docker', '--version']) subprocess.check_output(['docker', '--version'])
except Exception: except Exception:
+3 -8
View File
@@ -4,15 +4,14 @@ import shutil
import subprocess import subprocess
import sys import sys
import tempfile import tempfile
import textwrap
from pathlib import Path from pathlib import Path
from typing import Dict, List, NamedTuple, Optional, Sequence from typing import Dict, List, NamedTuple, Optional, Sequence
from .environment import ParsedEnvironment from .environment import ParsedEnvironment
from .logger import log from .logger import log
from .util import (Architecture, BuildOptions, BuildSelector, NonPlatformWheelError, from .util import (BuildOptions, BuildSelector, NonPlatformWheelError,
download, get_build_verbosity_extra_flags, get_pip_script, download, get_build_verbosity_extra_flags, get_pip_script,
install_certifi_script, prepare_command) install_certifi_script, prepare_command, allowed_architectures_check)
from .typing import PathOrStr from .typing import PathOrStr
@@ -187,11 +186,7 @@ def setup_python(python_configuration: PythonConfiguration,
def build(options: BuildOptions) -> None: def build(options: BuildOptions) -> None:
if not options.architectures <= {Architecture.x86_64}: allowed_architectures_check("macos", options)
raise ValueError(textwrap.dedent(f'''
Invalid archs option {options.architectures}. macOS only supports x86_64 for the moment.
If you want to set emulation architectures on Linux, use CIBW_ARCHS_LINUX instead.
'''))
temp_dir = Path(tempfile.mkdtemp(prefix='cibuildwheel')) temp_dir = Path(tempfile.mkdtemp(prefix='cibuildwheel'))
built_wheel_dir = temp_dir / 'built_wheel' built_wheel_dir = temp_dir / 'built_wheel'
+36
View File
@@ -2,6 +2,7 @@ import os
import platform as platform_module import platform as platform_module
import re import re
import ssl import ssl
import sys
import functools import functools
import textwrap import textwrap
import urllib.request import urllib.request
@@ -16,6 +17,11 @@ import certifi
from .environment import ParsedEnvironment from .environment import ParsedEnvironment
from .typing import PathOrStr from .typing import PathOrStr
if sys.version_info < (3, 8):
from typing_extensions import Literal
else:
from typing import Literal
def prepare_command(command: str, **kwargs: PathOrStr) -> str: def prepare_command(command: str, **kwargs: PathOrStr) -> str:
''' '''
@@ -237,3 +243,33 @@ def detect_ci_provider() -> Optional[CIProvider]:
return CIProvider.other return CIProvider.other
else: else:
return None return None
PRETTY_NAMES = {'linux': 'Linux', 'macos': 'macOS', 'windows': 'Windows'}
ALLOWED_ARCHITECTURES = {
'linux': {Architecture.x86_64, Architecture.i686, Architecture.aarch64, Architecture.ppc64le, Architecture.s390x},
'macos': {Architecture.x86_64},
'windows': {Architecture.AMD64, Architecture.x86},
}
def allowed_architectures_check(
name: Literal['linux', 'macos', 'windows'],
options: BuildOptions,
) -> None:
allowed_architectures = ALLOWED_ARCHITECTURES[name]
msg = f'{PRETTY_NAMES[name]} only supports {sorted(allowed_architectures)} at the moment.'
if name != 'linux':
msg += ' If you want to set emulation architectures on Linux, use CIBW_ARCHS_LINUX instead.'
if not options.architectures <= allowed_architectures:
msg = f'Invalid archs option {options.architectures}. ' + msg
raise ValueError(msg)
if not options.architectures:
msg = 'Empty archs option set. ' + msg
raise ValueError(msg)
+2 -9
View File
@@ -3,7 +3,6 @@ import shutil
import subprocess import subprocess
import sys import sys
import tempfile import tempfile
import textwrap
from pathlib import Path from pathlib import Path
from typing import Dict, List, NamedTuple, Optional, Sequence, Set from typing import Dict, List, NamedTuple, Optional, Sequence, Set
from zipfile import ZipFile from zipfile import ZipFile
@@ -14,7 +13,7 @@ from .environment import ParsedEnvironment
from .logger import log from .logger import log
from .util import (Architecture, BuildOptions, BuildSelector, NonPlatformWheelError, from .util import (Architecture, BuildOptions, BuildSelector, NonPlatformWheelError,
download, get_build_verbosity_extra_flags, get_pip_script, download, get_build_verbosity_extra_flags, get_pip_script,
prepare_command) prepare_command, allowed_architectures_check)
from .typing import PathOrStr from .typing import PathOrStr
IS_RUNNING_ON_AZURE = Path('C:\\hostedtoolcache').exists() IS_RUNNING_ON_AZURE = Path('C:\\hostedtoolcache').exists()
@@ -210,13 +209,7 @@ def pep_518_cp35_workaround(package_dir: Path, env: Dict[str, str]) -> None:
def build(options: BuildOptions) -> None: def build(options: BuildOptions) -> None:
allowed_architectures = {Architecture.AMD64, Architecture.x86} allowed_architectures_check("windows", options)
if not options.architectures <= allowed_architectures:
raise ValueError(textwrap.dedent(f'''
Invalid archs option {options.architectures}. Windows only supports
{sorted(allowed_architectures)}. If you want to set emulation
architectures on Linux, use CIBW_ARCHS_LINUX instead.
'''))
temp_dir = Path(tempfile.mkdtemp(prefix='cibuildwheel')) temp_dir = Path(tempfile.mkdtemp(prefix='cibuildwheel'))
built_wheel_dir = temp_dir / 'built_wheel' built_wheel_dir = temp_dir / 'built_wheel'
+1
View File
@@ -31,6 +31,7 @@ install_requires =
bashlex!=0.13 bashlex!=0.13
toml toml
certifi certifi
typing_extensions; python_version < '3.8'
[options.package_data] [options.package_data]
cibuildwheel = resources/* cibuildwheel = resources/*