106 lines
3.3 KiB
Python
106 lines
3.3 KiB
Python
"""
|
|
Errors that can cause the build to fail. Each subclass of FatalError has
|
|
a different return code, by defining them all here, we can ensure that they're
|
|
semantically clear and unique.
|
|
"""
|
|
|
|
import textwrap
|
|
|
|
|
|
class FatalError(BaseException):
|
|
"""
|
|
Raising an error of this type will cause the message to be printed to
|
|
stderr and the process to be terminated. Within cibuildwheel, raising this
|
|
exception produces a better error message, and optional traceback.
|
|
"""
|
|
|
|
return_code: int = 1
|
|
|
|
|
|
class ConfigurationError(FatalError):
|
|
return_code = 2
|
|
|
|
|
|
class NothingToDoError(FatalError):
|
|
return_code = 3
|
|
|
|
|
|
class DeprecationError(FatalError):
|
|
return_code = 4
|
|
|
|
|
|
class NonPlatformWheelError(FatalError):
|
|
def __init__(self) -> None:
|
|
message = textwrap.dedent(
|
|
"""
|
|
Build failed because a pure Python wheel was generated.
|
|
|
|
If you intend to build a pure-Python wheel, you don't need
|
|
cibuildwheel - use `pip wheel .`, `pipx run build --wheel`, `uv
|
|
build --wheel`, etc. instead. You only need cibuildwheel if you
|
|
have compiled (not Python) code in your wheels making them depend
|
|
on the platform.
|
|
|
|
If you expected a platform wheel, check your project configuration,
|
|
or run cibuildwheel with CIBW_BUILD_VERBOSITY=1 to view build logs.
|
|
"""
|
|
)
|
|
super().__init__(message)
|
|
self.return_code = 5
|
|
|
|
|
|
class AlreadyBuiltWheelError(FatalError):
|
|
def __init__(self, wheel_name: str) -> None:
|
|
message = textwrap.dedent(
|
|
f"""
|
|
Build failed because a wheel named {wheel_name} was already generated in the current run.
|
|
|
|
If you expected another wheel to be generated, check your project configuration, or run
|
|
cibuildwheel with CIBW_BUILD_VERBOSITY=1 to view build logs.
|
|
"""
|
|
)
|
|
super().__init__(message)
|
|
self.return_code = 6
|
|
|
|
|
|
class OCIEngineTooOldError(FatalError):
|
|
def __init__(self, message: str) -> None:
|
|
super().__init__(message)
|
|
self.return_code = 7
|
|
|
|
|
|
class RepairStepProducedNoWheelError(FatalError):
|
|
def __init__(self) -> None:
|
|
message = textwrap.dedent(
|
|
"""
|
|
Build failed because the repair step completed successfully but
|
|
did not produce a wheel.
|
|
|
|
Your `repair-wheel-command` is expected to place the repaired
|
|
wheel in the {dest_dir} directory. See the documentation for
|
|
example configurations:
|
|
|
|
https://cibuildwheel.pypa.io/en/stable/options/#repair-wheel-command
|
|
"""
|
|
)
|
|
super().__init__(message)
|
|
self.return_code = 8
|
|
|
|
|
|
class RepairStepProducedMultipleWheelsError(FatalError):
|
|
def __init__(self, wheels: list[str]) -> None:
|
|
message = textwrap.dedent(
|
|
f"""
|
|
Build failed because the repair step completed successfully but
|
|
produced multiple wheels: {wheels}
|
|
|
|
Your `repair-wheel-command` is expected to place one repaired
|
|
wheel in the {{dest_dir}} directory. See the documentation for
|
|
example configurations:
|
|
|
|
https://cibuildwheel.pypa.io/en/stable/options/#repair-wheel-command
|
|
"""
|
|
)
|
|
super().__init__(message)
|
|
self.return_code = 8
|