diff --git a/cibuildwheel/__main__.py b/cibuildwheel/__main__.py index 9b237f76..03646698 100644 --- a/cibuildwheel/__main__.py +++ b/cibuildwheel/__main__.py @@ -61,25 +61,30 @@ def main(): args = parser.parse_args() detect_obsolete_options() - + if args.platform != 'auto': platform = args.platform else: ci = strtobool(os.environ.get('CI', 'false')) or 'BITRISE_BUILD_NUMBER' in os.environ or 'AZURE_HTTP_USER_AGENT' in os.environ - if ci: - if sys.platform.startswith('linux'): - platform = 'linux' - elif sys.platform == 'darwin': - platform = 'macos' - elif sys.platform == 'win32': - platform = 'windows' - if platform is None: + if not ci: print('cibuildwheel: Unable to detect platform. cibuildwheel should run on your CI server, ' 'Travis CI, AppVeyor, Azure Pipelines and CircleCI are supported. You can run on your ' 'development machine or other CI providers using the --platform argument. Check --help ' 'output for more information.', file=sys.stderr) exit(2) + if sys.platform.startswith('linux'): + platform = 'linux' + elif sys.platform == 'darwin': + platform = 'macos' + elif sys.platform == 'win32': + platform = 'windows' + else: + print('cibuildwheel: Unable to detect platform from "sys.platform" in a CI environment. You can run ' + 'cibuildwheel using the --platform argument. Check --help output for more information.', + file=sys.stderr) + exit(2) + output_dir = args.output_dir test_command = get_option_from_environment('CIBW_TEST_COMMAND', platform=platform) @@ -174,7 +179,7 @@ def main(): elif platform == 'macos': cibuildwheel.macos.build(**build_options) else: - raise Exception('Unsupported platform') + raise Exception('Unsupported platform: {}'.format(platform)) def detect_obsolete_options(): diff --git a/unit_test/platform_test.py b/unit_test/platform_test.py new file mode 100644 index 00000000..ca69524b --- /dev/null +++ b/unit_test/platform_test.py @@ -0,0 +1,39 @@ +import sys +import os + +import pytest + +from cibuildwheel.__main__ import main + + +def test_unknown_platform_non_ci(monkeypatch, capsys): + monkeypatch.setattr(os, 'environ', {}) + monkeypatch.setattr(sys, "argv", ["python", "."]) + with pytest.raises(SystemExit) as exit: + main() + assert exit.value.code == 2 + _, err = capsys.readouterr() + assert 'cibuildwheel: Unable to detect platform.' in err + assert "cibuildwheel should run on your CI server" in err + + +def test_unknown_platform_on_ci(monkeypatch, capsys): + monkeypatch.setattr(os, 'environ', {"CI": "true"}) + monkeypatch.setattr(sys, "argv", ["python", "."]) + + monkeypatch.setattr(sys, "platform", "Something") + + with pytest.raises(SystemExit) as exit: + main() + _, err = capsys.readouterr() + assert exit.value.code == 2 + assert 'cibuildwheel: Unable to detect platform from "sys.platform"' in err + + +def test_unknown_platform(monkeypatch): + monkeypatch.setattr(os, 'environ', {"CIBW_PLATFORM": "Something"}) + monkeypatch.setattr(sys, "argv", ["python", "."]) + + with pytest.raises(Exception) as exc: + main() + assert exc.value.args[0] == 'Unsupported platform: Something'