@@ -1,6 +1,19 @@
|
|||||||
version: 2
|
version: 2
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
flake8:
|
||||||
|
docker:
|
||||||
|
- image: circleci/python:3.6
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
|
||||||
|
- run:
|
||||||
|
name: Install flake8
|
||||||
|
command: sudo python -m pip install flake8
|
||||||
|
- run:
|
||||||
|
name: Test.
|
||||||
|
command: flake8 --exclude=.git,.venv,site .
|
||||||
|
|
||||||
osx-python3.6:
|
osx-python3.6:
|
||||||
macos:
|
macos:
|
||||||
xcode: "9.4.1"
|
xcode: "9.4.1"
|
||||||
@@ -51,6 +64,7 @@ workflows:
|
|||||||
version: 2
|
version: 2
|
||||||
all-tests:
|
all-tests:
|
||||||
jobs:
|
jobs:
|
||||||
|
- flake8
|
||||||
- osx-python3.6
|
- osx-python3.6
|
||||||
- osx-python3.7
|
- osx-python3.7
|
||||||
- linux-python3.6
|
- linux-python3.6
|
||||||
|
|||||||
+4
-3
@@ -1,6 +1,9 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
import os, sys, subprocess, shutil
|
import argparse
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
def single_run(test_project):
|
def single_run(test_project):
|
||||||
@@ -11,8 +14,6 @@ def single_run(test_project):
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
import argparse
|
|
||||||
|
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument("test_project_dir")
|
parser.add_argument("test_project_dir")
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|||||||
+5
-3
@@ -1,17 +1,19 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
import os, sys, subprocess, shutil, json
|
import os
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
from glob import glob
|
from glob import glob
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
# move cwd to the project root
|
# move cwd to the project root
|
||||||
os.chdir(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
os.chdir(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||||
|
|
||||||
### run the unit tests
|
# run the unit tests
|
||||||
|
|
||||||
subprocess.check_call([sys.executable, '-m', 'pytest', 'unit_test'])
|
subprocess.check_call([sys.executable, '-m', 'pytest', 'unit_test'])
|
||||||
|
|
||||||
### run the integration tests
|
# run the integration tests
|
||||||
|
|
||||||
test_projects = sorted(glob('test/??_*'))
|
test_projects = sorted(glob('test/??_*'))
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,22 @@
|
|||||||
import argparse, os, subprocess, sys, textwrap
|
import argparse
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import textwrap
|
||||||
|
import traceback
|
||||||
|
|
||||||
import cibuildwheel
|
import cibuildwheel
|
||||||
import cibuildwheel.linux, cibuildwheel.windows, cibuildwheel.macos
|
import cibuildwheel.linux
|
||||||
from cibuildwheel.environment import parse_environment, EnvironmentParseError
|
import cibuildwheel.macos
|
||||||
from cibuildwheel.util import BuildSelector, Unbuffered
|
import cibuildwheel.windows
|
||||||
|
from cibuildwheel.environment import (
|
||||||
|
EnvironmentParseError,
|
||||||
|
parse_environment,
|
||||||
|
)
|
||||||
|
from cibuildwheel.util import (
|
||||||
|
BuildSelector,
|
||||||
|
Unbuffered
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_option_from_environment(option_name, platform=None, default=None):
|
def get_option_from_environment(option_name, platform=None, default=None):
|
||||||
'''
|
'''
|
||||||
@@ -84,7 +97,6 @@ def main():
|
|||||||
file=sys.stderr)
|
file=sys.stderr)
|
||||||
exit(2)
|
exit(2)
|
||||||
|
|
||||||
|
|
||||||
output_dir = args.output_dir
|
output_dir = args.output_dir
|
||||||
test_command = get_option_from_environment('CIBW_TEST_COMMAND', platform=platform)
|
test_command = get_option_from_environment('CIBW_TEST_COMMAND', platform=platform)
|
||||||
test_requires = get_option_from_environment('CIBW_TEST_REQUIRES', platform=platform, default='').split()
|
test_requires = get_option_from_environment('CIBW_TEST_REQUIRES', platform=platform, default='').split()
|
||||||
@@ -112,9 +124,8 @@ def main():
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
environment = parse_environment(environment_config)
|
environment = parse_environment(environment_config)
|
||||||
except (EnvironmentParseError, ValueError) as e:
|
except (EnvironmentParseError, ValueError):
|
||||||
print('cibuildwheel: Malformed environment option "%s"' % environment_config, file=sys.stderr)
|
print('cibuildwheel: Malformed environment option "%s"' % environment_config, file=sys.stderr)
|
||||||
import traceback
|
|
||||||
traceback.print_exc(None, sys.stderr)
|
traceback.print_exc(None, sys.stderr)
|
||||||
exit(2)
|
exit(2)
|
||||||
|
|
||||||
@@ -210,6 +221,7 @@ def detect_obsolete_options():
|
|||||||
))
|
))
|
||||||
os.environ[option] = os.environ[option].replace(deprecated, alternative)
|
os.environ[option] = os.environ[option].replace(deprecated, alternative)
|
||||||
|
|
||||||
|
|
||||||
def print_preamble(platform, build_options):
|
def print_preamble(platform, build_options):
|
||||||
print(textwrap.dedent('''
|
print(textwrap.dedent('''
|
||||||
_ _ _ _ _ _ _
|
_ _ _ _ _ _ _
|
||||||
@@ -220,7 +232,6 @@ def print_preamble(platform, build_options):
|
|||||||
|
|
||||||
print('cibuildwheel version %s\n' % cibuildwheel.__version__)
|
print('cibuildwheel version %s\n' % cibuildwheel.__version__)
|
||||||
|
|
||||||
|
|
||||||
print('Build options:')
|
print('Build options:')
|
||||||
print(' platform: %r' % platform)
|
print(' platform: %r' % platform)
|
||||||
for option, value in sorted(build_options.items()):
|
for option, value in sorted(build_options.items()):
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
import subprocess, shlex, sys
|
import shlex
|
||||||
|
import subprocess
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
import bashlex
|
import bashlex
|
||||||
|
|
||||||
NodeExecutionContext = namedtuple('NodeExecutionContext', ['environment', 'input'])
|
NodeExecutionContext = namedtuple('NodeExecutionContext', ['environment', 'input'])
|
||||||
|
|
||||||
|
|
||||||
def evaluate(value, environment):
|
def evaluate(value, environment):
|
||||||
if not value:
|
if not value:
|
||||||
# empty string evaluates to empty string
|
# empty string evaluates to empty string
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import bashlex
|
import bashlex
|
||||||
|
|
||||||
from . import bashlex_eval
|
from . import bashlex_eval
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+15
-7
@@ -1,6 +1,15 @@
|
|||||||
import os, shlex, subprocess, sys, textwrap, uuid
|
import os
|
||||||
|
import shlex
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
import textwrap
|
||||||
|
import uuid
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from .util import prepare_command, get_build_verbosity_extra_flags
|
|
||||||
|
from .util import (
|
||||||
|
get_build_verbosity_extra_flags,
|
||||||
|
prepare_command,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_python_configurations(build_selector):
|
def get_python_configurations(build_selector):
|
||||||
@@ -27,7 +36,7 @@ def get_python_configurations(build_selector):
|
|||||||
def build(project_dir, output_dir, test_command, test_requires, test_extras, before_build, build_verbosity, build_selector, repair_command, environment, manylinux_images):
|
def build(project_dir, output_dir, test_command, test_requires, test_extras, before_build, build_verbosity, build_selector, repair_command, environment, manylinux_images):
|
||||||
try:
|
try:
|
||||||
subprocess.check_call(['docker', '--version'])
|
subprocess.check_call(['docker', '--version'])
|
||||||
except:
|
except Exception:
|
||||||
print('cibuildwheel: Docker not found. Docker is required to run Linux builds. '
|
print('cibuildwheel: Docker not found. Docker is required to run Linux builds. '
|
||||||
'If you\'re building on Travis CI, add `services: [docker]` to your .travis.yml.'
|
'If you\'re building on Travis CI, add `services: [docker]` to your .travis.yml.'
|
||||||
'If you\'re building on Circle CI in Linux, add a `setup_remote_docker` step to your .circleci/config.yml',
|
'If you\'re building on Circle CI in Linux, add a `setup_remote_docker` step to your .circleci/config.yml',
|
||||||
@@ -123,7 +132,7 @@ def build(project_dir, output_dir, test_command, test_requires, test_extras, bef
|
|||||||
for repaired_wheel in "${{repaired_wheels[@]}}"; do chown {uid}:{gid} "/output/$(basename "$repaired_wheel")"; done
|
for repaired_wheel in "${{repaired_wheels[@]}}"; do chown {uid}:{gid} "/output/$(basename "$repaired_wheel")"; done
|
||||||
done
|
done
|
||||||
'''.format(
|
'''.format(
|
||||||
pybin_paths=' '.join(c.path+'/bin' for c in platform_configs),
|
pybin_paths=' '.join(c.path + '/bin' for c in platform_configs),
|
||||||
test_requires=' '.join(test_requires),
|
test_requires=' '.join(test_requires),
|
||||||
test_extras=test_extras,
|
test_extras=test_extras,
|
||||||
test_command=shlex.quote(
|
test_command=shlex.quote(
|
||||||
@@ -148,8 +157,7 @@ def build(project_dir, output_dir, test_command, test_requires, test_extras, bef
|
|||||||
'--name', container_name,
|
'--name', container_name,
|
||||||
'-i',
|
'-i',
|
||||||
'-v', '/:/host', # ignored on CircleCI
|
'-v', '/:/host', # ignored on CircleCI
|
||||||
docker_image, '/bin/bash'],
|
docker_image, '/bin/bash'], check=True)
|
||||||
check=True)
|
|
||||||
subprocess.run(['docker', 'cp', os.path.abspath(project_dir) + '/.', container_name + ':/project'], check=True)
|
subprocess.run(['docker', 'cp', os.path.abspath(project_dir) + '/.', container_name + ':/project'], check=True)
|
||||||
subprocess.run(['docker', 'start', '-i', '-a', container_name], input=bash_script, universal_newlines=True, check=True)
|
subprocess.run(['docker', 'start', '-i', '-a', container_name], input=bash_script, universal_newlines=True, check=True)
|
||||||
subprocess.run(['docker', 'cp', container_name + ':/output/.', os.path.abspath(output_dir)], check=True)
|
subprocess.run(['docker', 'cp', container_name + ':/output/.', os.path.abspath(output_dir)], check=True)
|
||||||
@@ -184,5 +192,5 @@ def troubleshoot(project_dir, error):
|
|||||||
'''))
|
'''))
|
||||||
|
|
||||||
print(' Files detected:')
|
print(' Files detected:')
|
||||||
print('\n'.join([' '+f for f in so_files]))
|
print('\n'.join([' ' + f for f in so_files]))
|
||||||
print('')
|
print('')
|
||||||
|
|||||||
@@ -1,9 +1,16 @@
|
|||||||
|
import os
|
||||||
|
import shlex
|
||||||
|
import shutil
|
||||||
|
import subprocess
|
||||||
import tempfile
|
import tempfile
|
||||||
import os, subprocess, shlex, sys, shutil
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from glob import glob
|
from glob import glob
|
||||||
|
|
||||||
from .util import prepare_command, get_build_verbosity_extra_flags, download
|
from .util import (
|
||||||
|
download,
|
||||||
|
get_build_verbosity_extra_flags,
|
||||||
|
prepare_command,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_python_configurations(build_selector):
|
def get_python_configurations(build_selector):
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
|
import os
|
||||||
|
import urllib.request
|
||||||
from fnmatch import fnmatch
|
from fnmatch import fnmatch
|
||||||
import warnings
|
|
||||||
import os, urllib.request
|
|
||||||
from time import sleep
|
from time import sleep
|
||||||
|
|
||||||
|
|
||||||
@@ -64,7 +64,7 @@ def download(url, dest):
|
|||||||
for i in range(repeat_num):
|
for i in range(repeat_num):
|
||||||
try:
|
try:
|
||||||
response = urllib.request.urlopen(url)
|
response = urllib.request.urlopen(url)
|
||||||
except:
|
except Exception:
|
||||||
if i == repeat_num - 1:
|
if i == repeat_num - 1:
|
||||||
raise
|
raise
|
||||||
sleep(3)
|
sleep(3)
|
||||||
|
|||||||
+10
-2
@@ -1,8 +1,15 @@
|
|||||||
import os, tempfile, subprocess, shutil, sys
|
import os
|
||||||
|
import shutil
|
||||||
|
import subprocess
|
||||||
|
import tempfile
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from glob import glob
|
from glob import glob
|
||||||
|
|
||||||
from .util import prepare_command, get_build_verbosity_extra_flags, download
|
from .util import (
|
||||||
|
download,
|
||||||
|
get_build_verbosity_extra_flags,
|
||||||
|
prepare_command,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
IS_RUNNING_ON_AZURE = os.path.exists('C:\\hostedtoolcache')
|
IS_RUNNING_ON_AZURE = os.path.exists('C:\\hostedtoolcache')
|
||||||
@@ -20,6 +27,7 @@ def get_nuget_args(configuration):
|
|||||||
python_name = python_name + "x86"
|
python_name = python_name + "x86"
|
||||||
return [python_name, "-Version", configuration.version, "-OutputDirectory", "C:/cibw/python"]
|
return [python_name, "-Version", configuration.version, "-OutputDirectory", "C:/cibw/python"]
|
||||||
|
|
||||||
|
|
||||||
def get_python_configurations(build_selector):
|
def get_python_configurations(build_selector):
|
||||||
PythonConfiguration = namedtuple('PythonConfiguration', ['version', 'arch', 'identifier'])
|
PythonConfiguration = namedtuple('PythonConfiguration', ['version', 'arch', 'identifier'])
|
||||||
python_configurations = [
|
python_configurations = [
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
import mkdocs, re, os, io, cgi
|
import cgi
|
||||||
|
import io
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
|
||||||
|
import mkdocs
|
||||||
|
|
||||||
INCLUDE_TAG_REGEX = re.compile(
|
INCLUDE_TAG_REGEX = re.compile(
|
||||||
r'''
|
r'''
|
||||||
@@ -28,6 +33,7 @@ INCLUDEMARKDOWN_TAG_REGEX = re.compile(
|
|||||||
flags=re.VERBOSE,
|
flags=re.VERBOSE,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class ImportMarkdownPlugin(mkdocs.plugins.BasePlugin):
|
class ImportMarkdownPlugin(mkdocs.plugins.BasePlugin):
|
||||||
def on_page_markdown(self, markdown, page, **kwargs):
|
def on_page_markdown(self, markdown, page, **kwargs):
|
||||||
page_src_path = page.file.abs_src_path
|
page_src_path = page.file.abs_src_path
|
||||||
@@ -49,7 +55,6 @@ class ImportMarkdownPlugin(mkdocs.plugins.BasePlugin):
|
|||||||
|
|
||||||
return text_to_include
|
return text_to_include
|
||||||
|
|
||||||
|
|
||||||
def found_includemarkdown_tag(match):
|
def found_includemarkdown_tag(match):
|
||||||
filename = match.group('filename')
|
filename = match.group('filename')
|
||||||
start = match.group('start')
|
start = match.group('start')
|
||||||
@@ -80,4 +85,3 @@ class ImportMarkdownPlugin(mkdocs.plugins.BasePlugin):
|
|||||||
markdown = re.sub(INCLUDE_TAG_REGEX, found_include_tag, markdown)
|
markdown = re.sub(INCLUDE_TAG_REGEX, found_include_tag, markdown)
|
||||||
markdown = re.sub(INCLUDEMARKDOWN_TAG_REGEX, found_includemarkdown_tag, markdown)
|
markdown = re.sub(INCLUDEMARKDOWN_TAG_REGEX, found_includemarkdown_tag, markdown)
|
||||||
return markdown
|
return markdown
|
||||||
|
|
||||||
@@ -19,3 +19,6 @@ replace = cibuildwheel=={new_version}
|
|||||||
[bdist_wheel]
|
[bdist_wheel]
|
||||||
universal = 1
|
universal = 1
|
||||||
|
|
||||||
|
[flake8]
|
||||||
|
ignore = E501,W503
|
||||||
|
application-import-names = cibuildwheel
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import os, io
|
import io
|
||||||
|
import os
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from setuptools import setup
|
from setuptools import setup
|
||||||
@@ -20,7 +21,7 @@ setup(
|
|||||||
author="Joe Rickerby",
|
author="Joe Rickerby",
|
||||||
author_email='joerick@mac.com',
|
author_email='joerick@mac.com',
|
||||||
url='https://github.com/joerick/cibuildwheel',
|
url='https://github.com/joerick/cibuildwheel',
|
||||||
packages=['cibuildwheel',],
|
packages=['cibuildwheel', ],
|
||||||
license="BSD",
|
license="BSD",
|
||||||
zip_safe=False,
|
zip_safe=False,
|
||||||
package_data={
|
package_data={
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
import utils
|
import utils
|
||||||
|
|
||||||
|
|
||||||
project_dir = os.path.dirname(__file__)
|
project_dir = os.path.dirname(__file__)
|
||||||
|
|
||||||
|
|
||||||
def test():
|
def test():
|
||||||
# build the wheels
|
# build the wheels
|
||||||
actual_wheels = utils.cibuildwheel_run(project_dir)
|
actual_wheels = utils.cibuildwheel_run(project_dir)
|
||||||
@@ -20,6 +21,6 @@ def test_build_identifiers():
|
|||||||
# can be multiple wheels for each wheel, though, so we need to limit
|
# can be multiple wheels for each wheel, though, so we need to limit
|
||||||
# the expected wheels
|
# the expected wheels
|
||||||
expected_wheels = [w for w in utils.expected_wheels('spam', '0.1.0')
|
expected_wheels = [w for w in utils.expected_wheels('spam', '0.1.0')
|
||||||
if not '-manylinux' in w or '-manylinux1' in w]
|
if '-manylinux' not in w or '-manylinux1' in w]
|
||||||
build_identifiers = utils.cibuildwheel_get_build_identifiers(project_dir)
|
build_identifiers = utils.cibuildwheel_get_build_identifiers(project_dir)
|
||||||
assert len(expected_wheels) == len(build_identifiers)
|
assert len(expected_wheels) == len(build_identifiers)
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
from setuptools import setup, Extension
|
from setuptools import (
|
||||||
|
Extension,
|
||||||
|
setup,
|
||||||
|
)
|
||||||
|
|
||||||
if os.environ.get('CIBUILDWHEEL', '0') != '1':
|
if os.environ.get('CIBUILDWHEEL', '0') != '1':
|
||||||
raise Exception('CIBUILDWHEEL environment variable is not set to 1')
|
raise Exception('CIBUILDWHEEL environment variable is not set to 1')
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
import os, subprocess
|
import os
|
||||||
|
import subprocess
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
import utils
|
import utils
|
||||||
|
|
||||||
|
|
||||||
def test():
|
def test():
|
||||||
project_dir = os.path.dirname(__file__)
|
project_dir = os.path.dirname(__file__)
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
from setuptools import setup, Extension
|
from setuptools import (
|
||||||
|
Extension,
|
||||||
|
setup,
|
||||||
|
)
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="spam",
|
name="spam",
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
import spam
|
import spam
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
import utils
|
import utils
|
||||||
|
|
||||||
|
|
||||||
def test():
|
def test():
|
||||||
project_dir = os.path.dirname(__file__)
|
project_dir = os.path.dirname(__file__)
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
from setuptools import setup, Extension
|
import os
|
||||||
import sys, os
|
import sys
|
||||||
|
|
||||||
|
from setuptools import (
|
||||||
|
Extension,
|
||||||
|
setup,
|
||||||
|
)
|
||||||
|
|
||||||
# assert that the Python version as written to pythonversion.txt in the CIBW_BEFORE_BUILD step
|
# assert that the Python version as written to pythonversion.txt in the CIBW_BEFORE_BUILD step
|
||||||
# is the same one as is currently running.
|
# is the same one as is currently running.
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
import utils
|
import utils
|
||||||
|
|
||||||
|
|
||||||
def test():
|
def test():
|
||||||
project_dir = os.path.dirname(__file__)
|
project_dir = os.path.dirname(__file__)
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
from setuptools import setup, Extension
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
from setuptools import (
|
||||||
|
Extension,
|
||||||
|
setup,
|
||||||
|
)
|
||||||
|
|
||||||
# explode if run on Python 2.7 or Python 3.4 (these should be skipped)
|
# explode if run on Python 2.7 or Python 3.4 (these should be skipped)
|
||||||
if sys.version_info[0:2] == (2, 7):
|
if sys.version_info[0:2] == (2, 7):
|
||||||
raise Exception('Python 2.7 should not be built')
|
raise Exception('Python 2.7 should not be built')
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
import utils
|
import utils
|
||||||
|
|
||||||
|
|
||||||
def test():
|
def test():
|
||||||
project_dir = os.path.dirname(__file__)
|
project_dir = os.path.dirname(__file__)
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
from setuptools import setup, Extension
|
import os
|
||||||
import sys, os
|
|
||||||
|
from setuptools import (
|
||||||
|
Extension,
|
||||||
|
setup,
|
||||||
|
)
|
||||||
|
|
||||||
# explode if environment isn't correct, as set in CIBW_ENVIRONMENT
|
# explode if environment isn't correct, as set in CIBW_ENVIRONMENT
|
||||||
CIBW_TEST_VAR = os.environ.get('CIBW_TEST_VAR')
|
CIBW_TEST_VAR = os.environ.get('CIBW_TEST_VAR')
|
||||||
@@ -15,7 +19,6 @@ if '/opt/cibw_test_path' not in PATH:
|
|||||||
if '$PATH' in PATH:
|
if '$PATH' in PATH:
|
||||||
raise Exception('$PATH should be expanded in PATH. It was "%s"' % PATH)
|
raise Exception('$PATH should be expanded in PATH. It was "%s"' % PATH)
|
||||||
|
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="spam",
|
name="spam",
|
||||||
ext_modules=[Extension('spam', sources=['spam.c'])],
|
ext_modules=[Extension('spam', sources=['spam.c'])],
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
import os, pytest
|
import os
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
import utils
|
import utils
|
||||||
|
|
||||||
|
|
||||||
def test():
|
def test():
|
||||||
project_dir = os.path.dirname(__file__)
|
project_dir = os.path.dirname(__file__)
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
import os, sys
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
from setuptools import setup, Extension
|
from setuptools import (
|
||||||
|
Extension,
|
||||||
|
setup,
|
||||||
|
)
|
||||||
|
|
||||||
# check that we're running in the correct docker image as specified in the
|
# check that we're running in the correct docker image as specified in the
|
||||||
# environment options CIBW_MANYLINUX1_*_IMAGE
|
# environment options CIBW_MANYLINUX1_*_IMAGE
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
import utils
|
import utils
|
||||||
|
|
||||||
|
|
||||||
def test():
|
def test():
|
||||||
project_dir = os.path.dirname(__file__)
|
project_dir = os.path.dirname(__file__)
|
||||||
# this test checks that SSL is working in the build environment using
|
# this test checks that SSL is working in the build environment using
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
import ssl
|
import ssl
|
||||||
import sys
|
import sys
|
||||||
from setuptools import setup, Extension
|
|
||||||
|
from setuptools import (
|
||||||
|
Extension,
|
||||||
|
setup,
|
||||||
|
)
|
||||||
|
|
||||||
if sys.version_info[0] == 2:
|
if sys.version_info[0] == 2:
|
||||||
from urllib2 import urlopen
|
from urllib2 import urlopen
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
import os, pytest
|
import os
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
import utils
|
import utils
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
from setuptools import setup, Extension
|
from setuptools import (
|
||||||
|
Extension,
|
||||||
|
setup,
|
||||||
|
)
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="spam",
|
name="spam",
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
import utils
|
import utils
|
||||||
|
|
||||||
|
|
||||||
project_dir = os.path.dirname(__file__)
|
project_dir = os.path.dirname(__file__)
|
||||||
|
|
||||||
|
|
||||||
def test():
|
def test():
|
||||||
# build the wheels
|
# build the wheels
|
||||||
actual_wheels = utils.cibuildwheel_run(project_dir)
|
actual_wheels = utils.cibuildwheel_run(project_dir)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import os
|
from setuptools import (
|
||||||
|
Extension,
|
||||||
from setuptools import setup, Extension
|
setup,
|
||||||
|
)
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
ext_modules=[Extension('spam.spam', sources=['spam/spam.c'])],
|
ext_modules=[Extension('spam.spam', sources=['spam/spam.c'])],
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
import os
|
import os
|
||||||
import sys
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
import utils
|
import utils
|
||||||
|
|
||||||
|
|
||||||
project_dir = os.path.dirname(__file__)
|
project_dir = os.path.dirname(__file__)
|
||||||
|
|
||||||
|
|
||||||
def test_cpp11(tmp_path):
|
def test_cpp11(tmp_path):
|
||||||
# This test checks that the C++11 standard is supported
|
# This test checks that the C++11 standard is supported
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
import os, sys
|
import os
|
||||||
from setuptools import setup, Extension
|
|
||||||
import platform
|
import platform
|
||||||
|
|
||||||
|
from setuptools import (
|
||||||
|
Extension,
|
||||||
|
setup,
|
||||||
|
)
|
||||||
|
|
||||||
standard = os.environ["STANDARD"]
|
standard = os.environ["STANDARD"]
|
||||||
|
|
||||||
language_standard = "/std:c++" + standard if platform.system() == "Windows" else "-std=c++" + standard
|
language_standard = "/std:c++" + standard if platform.system() == "Windows" else "-std=c++" + standard
|
||||||
|
|||||||
@@ -4,10 +4,12 @@ Utility functions used by the cibuildwheel tests.
|
|||||||
This file is added to the PYTHONPATH in the test runner at bin/run_test.py.
|
This file is added to the PYTHONPATH in the test runner at bin/run_test.py.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
import subprocess, sys, os, shutil
|
import os
|
||||||
from tempfile import mkdtemp
|
import shutil
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
|
from tempfile import mkdtemp
|
||||||
|
|
||||||
IS_WINDOWS_RUNNING_ON_AZURE = os.path.exists('C:\\hostedtoolcache')
|
IS_WINDOWS_RUNNING_ON_AZURE = os.path.exists('C:\\hostedtoolcache')
|
||||||
IS_WINDOWS_RUNNING_ON_TRAVIS = os.environ.get('TRAVIS_OS_NAME') == 'windows'
|
IS_WINDOWS_RUNNING_ON_TRAVIS = os.environ.get('TRAVIS_OS_NAME') == 'windows'
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
from cibuildwheel.environment import parse_environment
|
from cibuildwheel.environment import parse_environment
|
||||||
|
|
||||||
|
|
||||||
@@ -13,6 +14,7 @@ def test_basic_parsing():
|
|||||||
assert environment_dict == {'VAR': '1', 'VBR': '2'}
|
assert environment_dict == {'VAR': '1', 'VBR': '2'}
|
||||||
assert environment_cmds == ['export VAR=1', 'export VBR=2']
|
assert environment_cmds == ['export VAR=1', 'export VBR=2']
|
||||||
|
|
||||||
|
|
||||||
def test_quotes():
|
def test_quotes():
|
||||||
environment_recipe = parse_environment('A=1 VAR="1 NOT_A_VAR=2" VBR=\'vbr\'')
|
environment_recipe = parse_environment('A=1 VAR="1 NOT_A_VAR=2" VBR=\'vbr\'')
|
||||||
|
|
||||||
@@ -24,6 +26,7 @@ def test_quotes():
|
|||||||
assert environment_dict == {'A': '1', 'VAR': '1 NOT_A_VAR=2', 'VBR': 'vbr'}
|
assert environment_dict == {'A': '1', 'VAR': '1 NOT_A_VAR=2', 'VBR': 'vbr'}
|
||||||
assert environment_cmds == ['export A=1', 'export VAR="1 NOT_A_VAR=2"', 'export VBR=\'vbr\'']
|
assert environment_cmds == ['export A=1', 'export VAR="1 NOT_A_VAR=2"', 'export VBR=\'vbr\'']
|
||||||
|
|
||||||
|
|
||||||
def test_inheritance():
|
def test_inheritance():
|
||||||
environment_recipe = parse_environment('PATH=$PATH:/usr/local/bin')
|
environment_recipe = parse_environment('PATH=$PATH:/usr/local/bin')
|
||||||
|
|
||||||
@@ -35,6 +38,7 @@ def test_inheritance():
|
|||||||
assert environment_dict == {'PATH': '/usr/bin:/usr/local/bin'}
|
assert environment_dict == {'PATH': '/usr/bin:/usr/local/bin'}
|
||||||
assert environment_cmds == ['export PATH=$PATH:/usr/local/bin']
|
assert environment_cmds == ['export PATH=$PATH:/usr/local/bin']
|
||||||
|
|
||||||
|
|
||||||
def test_shell_eval():
|
def test_shell_eval():
|
||||||
environment_recipe = parse_environment('VAR="$(echo "a test" string)"')
|
environment_recipe = parse_environment('VAR="$(echo "a test" string)"')
|
||||||
|
|
||||||
@@ -49,6 +53,7 @@ def test_shell_eval():
|
|||||||
assert environment_dict['VAR'] == 'a test string'
|
assert environment_dict['VAR'] == 'a test string'
|
||||||
assert environment_cmds == ['export VAR="$(echo "a test" string)"']
|
assert environment_cmds == ['export VAR="$(echo "a test" string)"']
|
||||||
|
|
||||||
|
|
||||||
def test_shell_eval_and_env():
|
def test_shell_eval_and_env():
|
||||||
environment_recipe = parse_environment('VAR="$(echo "$PREV_VAR" string)"')
|
environment_recipe = parse_environment('VAR="$(echo "$PREV_VAR" string)"')
|
||||||
|
|
||||||
@@ -60,6 +65,7 @@ def test_shell_eval_and_env():
|
|||||||
assert environment_dict == {'PREV_VAR': '1 2 3', 'VAR': '1 2 3 string'}
|
assert environment_dict == {'PREV_VAR': '1 2 3', 'VAR': '1 2 3 string'}
|
||||||
assert environment_cmds == ['export VAR="$(echo "$PREV_VAR" string)"']
|
assert environment_cmds == ['export VAR="$(echo "$PREV_VAR" string)"']
|
||||||
|
|
||||||
|
|
||||||
def test_empty_var():
|
def test_empty_var():
|
||||||
environment_recipe = parse_environment('CFLAGS=')
|
environment_recipe = parse_environment('CFLAGS=')
|
||||||
|
|
||||||
@@ -71,6 +77,7 @@ def test_empty_var():
|
|||||||
assert environment_dict == {'CFLAGS': ''}
|
assert environment_dict == {'CFLAGS': ''}
|
||||||
assert environment_cmds == ['export CFLAGS=']
|
assert environment_cmds == ['export CFLAGS=']
|
||||||
|
|
||||||
|
|
||||||
def test_no_vars():
|
def test_no_vars():
|
||||||
environment_recipe = parse_environment('')
|
environment_recipe = parse_environment('')
|
||||||
|
|
||||||
@@ -80,6 +87,7 @@ def test_no_vars():
|
|||||||
assert environment_dict == {}
|
assert environment_dict == {}
|
||||||
assert environment_cmds == []
|
assert environment_cmds == []
|
||||||
|
|
||||||
|
|
||||||
def test_no_vars_pass_through():
|
def test_no_vars_pass_through():
|
||||||
environment_recipe = parse_environment('')
|
environment_recipe = parse_environment('')
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,15 @@
|
|||||||
import pytest
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
from cibuildwheel import linux, macos, windows, util
|
import pytest
|
||||||
|
|
||||||
|
from cibuildwheel import (
|
||||||
|
linux,
|
||||||
|
macos,
|
||||||
|
util,
|
||||||
|
windows,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ArgsInterceptor:
|
class ArgsInterceptor:
|
||||||
@@ -15,6 +20,7 @@ class ArgsInterceptor:
|
|||||||
|
|
||||||
MOCK_PROJECT_DIR = 'some_project_dir'
|
MOCK_PROJECT_DIR = 'some_project_dir'
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(autouse=True)
|
@pytest.fixture(autouse=True)
|
||||||
def mock_protection(monkeypatch):
|
def mock_protection(monkeypatch):
|
||||||
'''
|
'''
|
||||||
@@ -31,13 +37,14 @@ def mock_protection(monkeypatch):
|
|||||||
monkeypatch.setattr(linux, 'build', fail_on_call)
|
monkeypatch.setattr(linux, 'build', fail_on_call)
|
||||||
monkeypatch.setattr(macos, 'build', fail_on_call)
|
monkeypatch.setattr(macos, 'build', fail_on_call)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(autouse=True)
|
@pytest.fixture(autouse=True)
|
||||||
def fake_project_dir(monkeypatch):
|
def fake_project_dir(monkeypatch):
|
||||||
'''
|
'''
|
||||||
Monkey-patch enough for the main() function to run
|
Monkey-patch enough for the main() function to run
|
||||||
'''
|
'''
|
||||||
|
|
||||||
real_os_path_exists = os.path.exists
|
real_os_path_exists = os.path.exists
|
||||||
|
|
||||||
def mock_os_path_exists(path):
|
def mock_os_path_exists(path):
|
||||||
if path == os.path.join(MOCK_PROJECT_DIR, 'setup.py'):
|
if path == os.path.join(MOCK_PROJECT_DIR, 'setup.py'):
|
||||||
return True
|
return True
|
||||||
@@ -1,14 +1,11 @@
|
|||||||
import pytest
|
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
from cibuildwheel.__main__ import main
|
from cibuildwheel.__main__ import main
|
||||||
from cibuildwheel.environment import ParsedEnvironment
|
from cibuildwheel.environment import ParsedEnvironment
|
||||||
from cibuildwheel.util import BuildSelector
|
from cibuildwheel.util import BuildSelector
|
||||||
|
|
||||||
from main_util_fixtures import mock_protection, fake_project_dir, platform, intercepted_build_args
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# CIBW_PLATFORM is tested in main_platform_test.py
|
# CIBW_PLATFORM is tested in main_platform_test.py
|
||||||
|
|
||||||
@@ -93,6 +90,7 @@ def get_default_repair_command(platform):
|
|||||||
else:
|
else:
|
||||||
raise ValueError('Unknown platform', platform)
|
raise ValueError('Unknown platform', platform)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('repair_command', [None, 'repair', 'repair -w {dest_dir} {wheel}'])
|
@pytest.mark.parametrize('repair_command', [None, 'repair', 'repair -w {dest_dir} {wheel}'])
|
||||||
@pytest.mark.parametrize('platform_specific', [False, True])
|
@pytest.mark.parametrize('platform_specific', [False, True])
|
||||||
def test_repair_command(repair_command, platform_specific, platform, intercepted_build_args, monkeypatch):
|
def test_repair_command(repair_command, platform_specific, platform, intercepted_build_args, monkeypatch):
|
||||||
@@ -225,5 +223,3 @@ def test_build_selector_migrations(intercepted_build_args, monkeypatch, option_n
|
|||||||
assert intercepted_build_selector.build_patterns == build_selector_patterns
|
assert intercepted_build_selector.build_patterns == build_selector_patterns
|
||||||
else:
|
else:
|
||||||
assert intercepted_build_selector.skip_patterns == build_selector_patterns
|
assert intercepted_build_selector.skip_patterns == build_selector_patterns
|
||||||
|
|
||||||
|
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
import pytest
|
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
from cibuildwheel.__main__ import main
|
from cibuildwheel.__main__ import main
|
||||||
|
|
||||||
from main_util_fixtures import MOCK_PROJECT_DIR, mock_protection, fake_project_dir, platform, intercepted_build_args
|
from conftest import MOCK_PROJECT_DIR # noqa: I100
|
||||||
|
|
||||||
|
|
||||||
def test_unknown_platform_non_ci(monkeypatch, capsys):
|
def test_unknown_platform_non_ci(monkeypatch, capsys):
|
||||||
Reference in New Issue
Block a user