2018-08-01 17:45:08 +02:00
|
|
|
from pip._vendor import pytoml
|
|
|
|
|
2018-08-01 16:51:17 +02:00
|
|
|
from pip._internal.build_env import BuildEnvironment
|
|
|
|
from pip._internal.download import PipSession
|
|
|
|
from pip._internal.index import PackageFinder
|
|
|
|
from pip._internal.req import InstallRequirement
|
|
|
|
|
|
|
|
|
|
|
|
def make_project(tmpdir, requires=[], backend=None):
|
2018-10-10 12:25:26 +02:00
|
|
|
project_dir = (tmpdir / 'project').mkdir()
|
2018-08-01 16:51:17 +02:00
|
|
|
buildsys = {'requires': requires}
|
|
|
|
if backend:
|
|
|
|
buildsys['build-backend'] = backend
|
|
|
|
data = pytoml.dumps({'build-system': buildsys})
|
2018-10-10 12:25:26 +02:00
|
|
|
project_dir.join('pyproject.toml').write(data)
|
|
|
|
return project_dir
|
2018-08-01 16:51:17 +02:00
|
|
|
|
|
|
|
|
|
|
|
def test_backend(tmpdir, data):
|
2018-10-10 12:25:26 +02:00
|
|
|
"""Check we can call a requirement's backend successfully"""
|
|
|
|
project_dir = make_project(tmpdir, backend="dummy_backend")
|
|
|
|
req = InstallRequirement(None, None, source_dir=project_dir)
|
2018-08-02 20:48:56 +02:00
|
|
|
req.load_pyproject_toml()
|
2018-08-01 16:51:17 +02:00
|
|
|
env = BuildEnvironment()
|
|
|
|
finder = PackageFinder([data.backends], [], session=PipSession())
|
2018-10-25 17:35:25 +02:00
|
|
|
env.install_requirements(finder, ["dummy_backend"], 'normal', "Installing")
|
|
|
|
conflicting, missing = env.check_requirements(["dummy_backend"])
|
|
|
|
assert not conflicting and not missing
|
2018-08-01 16:51:17 +02:00
|
|
|
assert hasattr(req.pep517_backend, 'build_wheel')
|
|
|
|
with env:
|
|
|
|
assert req.pep517_backend.build_wheel("dir") == "Backend called"
|
2018-10-10 12:25:26 +02:00
|
|
|
|
|
|
|
|
|
|
|
def test_pep517_install(script, tmpdir, data):
|
|
|
|
"""Check we can build with a custom backend"""
|
|
|
|
project_dir = make_project(
|
|
|
|
tmpdir, requires=['test_backend'],
|
|
|
|
backend="test_backend"
|
|
|
|
)
|
|
|
|
result = script.pip(
|
|
|
|
'install', '--no-index', '-f', data.backends, project_dir
|
|
|
|
)
|
|
|
|
result.assert_installed('project', editable=False)
|
|
|
|
|
|
|
|
|
|
|
|
def test_pep517_install_with_reqs(script, tmpdir, data):
|
|
|
|
"""Backend generated requirements are installed in the build env"""
|
|
|
|
project_dir = make_project(
|
|
|
|
tmpdir, requires=['test_backend'],
|
|
|
|
backend="test_backend"
|
|
|
|
)
|
|
|
|
project_dir.join("backend_reqs.txt").write("simplewheel")
|
|
|
|
result = script.pip(
|
|
|
|
'install', '--no-index',
|
|
|
|
'-f', data.backends,
|
|
|
|
'-f', data.packages,
|
|
|
|
project_dir
|
|
|
|
)
|
|
|
|
result.assert_installed('project', editable=False)
|
|
|
|
|
|
|
|
|
|
|
|
def test_no_use_pep517_without_setup_py(script, tmpdir, data):
|
|
|
|
"""Using --no-use-pep517 requires setup.py"""
|
|
|
|
project_dir = make_project(
|
|
|
|
tmpdir, requires=['test_backend'],
|
|
|
|
backend="test_backend"
|
|
|
|
)
|
|
|
|
result = script.pip(
|
|
|
|
'install', '--no-index', '--no-use-pep517',
|
|
|
|
'-f', data.backends,
|
|
|
|
project_dir,
|
|
|
|
expect_error=True
|
|
|
|
)
|
|
|
|
assert 'project does not have a setup.py' in result.stderr
|