Some support for setup.cfg files.

This commit is contained in:
Jelmer Vernooij 2021-03-19 20:38:08 +00:00
parent e5182a4bc9
commit 514f57435a
No known key found for this signature in database
GPG key ID: 579C160D4C9E23E8

View file

@ -215,6 +215,11 @@ class SetupPy(BuildSystem):
else: else:
self.has_setup_py = False self.has_setup_py = False
try:
self.config = self.load_setup_cfg()
except FileNotFoundError:
self.config = None
try: try:
self.pyproject = self.load_toml() self.pyproject = self.load_toml()
except FileNotFoundError: except FileNotFoundError:
@ -229,6 +234,10 @@ class SetupPy(BuildSystem):
with open(os.path.join(self.path, "pyproject.toml"), "r") as pf: with open(os.path.join(self.path, "pyproject.toml"), "r") as pf:
return toml.load(pf) return toml.load(pf)
def load_setup_cfg(self):
from setuptools.config import read_configuration
return read_configuration(os.path.join(self.path, 'setup.cfg'))
def _extract_setup(self, session=None, fixers=None): def _extract_setup(self, session=None, fixers=None):
if session is None: if session is None:
return self._extract_setup_direct() return self._extract_setup_direct()
@ -353,34 +362,48 @@ class SetupPy(BuildSystem):
def get_declared_dependencies(self, session, fixers=None): def get_declared_dependencies(self, session, fixers=None):
distribution = self._extract_setup(session, fixers) distribution = self._extract_setup(session, fixers)
if distribution is None: if distribution is not None:
raise NotImplementedError for require in distribution['requires']:
for require in distribution['requires']: yield "core", PythonPackageRequirement.from_requirement_str(require)
yield "core", PythonPackageRequirement.from_requirement_str(require) # Not present for distutils-only packages
# Not present for distutils-only packages for require in distribution['setup_requires']:
for require in distribution['setup_requires']: yield "build", PythonPackageRequirement.from_requirement_str(require)
yield "build", PythonPackageRequirement.from_requirement_str(require) # Not present for distutils-only packages
# Not present for distutils-only packages for require in distribution['install_requires']:
for require in distribution['install_requires']: yield "core", PythonPackageRequirement.from_requirement_str(require)
yield "core", PythonPackageRequirement.from_requirement_str(require) # Not present for distutils-only packages
# Not present for distutils-only packages for require in distribution['tests_require']:
for require in distribution['tests_require']: yield "test", PythonPackageRequirement.from_requirement_str(require)
yield "test", PythonPackageRequirement.from_requirement_str(require)
if self.pyproject: if self.pyproject:
if "build-system" in self.pyproject: if "build-system" in self.pyproject:
for require in self.pyproject['build-system'].get("requires", []): for require in self.pyproject['build-system'].get("requires", []):
yield "build", PythonPackageRequirement.from_requirement_str(require) yield "build", PythonPackageRequirement.from_requirement_str(require)
if self.config:
options = self.config.get('options', {})
for require in options.get('setup_requires', []):
yield "build", PythonPackageRequirement.from_requirement_str(require)
for require in options.get('install_requires', []):
yield "core", PythonPackageRequirement.from_requirement_str(require)
def get_declared_outputs(self, session, fixers=None): def get_declared_outputs(self, session, fixers=None):
distribution = self._extract_setup(session, fixers) distribution = self._extract_setup(session, fixers)
if distribution is None: all_packages = set()
raise NotImplementedError if distribution is not None:
for script in distribution['scripts']: for script in distribution['scripts']:
yield BinaryOutput(os.path.basename(script)) yield BinaryOutput(os.path.basename(script))
for script in distribution["entry_points"].get("console_scripts", []): for script in distribution["entry_points"].get("console_scripts", []):
yield BinaryOutput(script.split("=")[0]) yield BinaryOutput(script.split("=")[0])
all_packages.update(distribution['packages'])
if self.config:
options = self.config.get('options', {})
all_packages.update(options.get('packages', []))
for script in options.get('scripts', []):
yield BinaryOutput(os.path.basename(script))
for script in options.get("entry_points", {}).get("console_scripts", []):
yield BinaryOutput(script.split("=")[0])
packages = set() packages = set()
for package in sorted(distribution['packages']): for package in sorted(all_packages):
pts = package.split('.') pts = package.split('.')
b = [] b = []
for e in pts: for e in pts: