Commit cdb5eeae authored by Paul Ganssle's avatar Paul Ganssle Committed by GitHub

Merge pull request #1675 from pganssle/optional_setup_py

Add support for setup.cfg-only projects
parents c1243e96 6bda3d5f
Added support for ``setup.cfg``-only projects when using the ``setuptools.build_meta`` backend. Projects that have enabled PEP 517 no longer need to have a ``setup.py`` and can use the purely declarative ``setup.cfg`` configuration file instead.
......@@ -26,6 +26,7 @@ bug reports or API stability):
Again, this is not a formal definition! Just a "taste" of the module.
"""
import io
import os
import sys
import tokenize
......@@ -95,6 +96,14 @@ def _file_with_extension(directory, extension):
return file
def _open_setup_script(setup_script):
if not os.path.exists(setup_script):
# Supply a default setup.py
return io.StringIO(u"from setuptools import setup; setup()")
return getattr(tokenize, 'open', open)(setup_script)
class _BuildMetaBackend(object):
def _fix_config(self, config_settings):
......@@ -120,9 +129,10 @@ class _BuildMetaBackend(object):
# Correctness comes first, then optimization later
__file__ = setup_script
__name__ = '__main__'
f = getattr(tokenize, 'open', open)(__file__)
code = f.read().replace('\\r\\n', '\\n')
f.close()
with _open_setup_script(__file__) as f:
code = f.read().replace(r'\r\n', r'\n')
exec(compile(code, __file__, 'exec'), locals())
def get_requires_for_build_wheel(self, config_settings=None):
......
......@@ -110,6 +110,21 @@ defns = [
print('hello')
"""),
},
{
'setup.cfg': DALS("""
[metadata]
name = foo
version='0.0.0'
[options]
py_modules=hello
setup_requires=six
"""),
'hello.py': DALS("""
def run():
print('hello')
""")
},
]
......@@ -183,9 +198,13 @@ class TestBuildMetaBackend:
# if the setup.py changes subsequent call of the build meta
# should still succeed, given the
# sdist_directory the frontend specifies is empty
with open(os.path.abspath("setup.py"), 'rt') as file_handler:
setup_loc = os.path.abspath("setup.py")
if not os.path.exists(setup_loc):
setup_loc = os.path.abspath("setup.cfg")
with open(setup_loc, 'rt') as file_handler:
content = file_handler.read()
with open(os.path.abspath("setup.py"), 'wt') as file_handler:
with open(setup_loc, 'wt') as file_handler:
file_handler.write(
content.replace("version='0.0.0'", "version='0.0.1'"))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment