From 8336ac61132ae67d548a17fedcdc3aee4c269544 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jelmer=20Vernoo=C4=B3?= Date: Fri, 19 Mar 2021 20:57:38 +0000 Subject: [PATCH] Get setup_requires from pyproject and setup.cfg. --- ognibuild/buildlog.py | 2 ++ ognibuild/buildsystem.py | 22 +++++++++++++--------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/ognibuild/buildlog.py b/ognibuild/buildlog.py index a44bef9..d67270b 100644 --- a/ognibuild/buildlog.py +++ b/ognibuild/buildlog.py @@ -235,6 +235,8 @@ class ExplainInstallFixer(BuildFixer): def install_missing_reqs(session, resolver, reqs, explain=False): + if not reqs: + return missing = [] for req in reqs: try: diff --git a/ognibuild/buildsystem.py b/ognibuild/buildsystem.py index 943103d..5657eed 100644 --- a/ognibuild/buildsystem.py +++ b/ognibuild/buildsystem.py @@ -347,15 +347,9 @@ class SetupPy(BuildSystem): def _run_setup(self, session, resolver, args, fixers): from .buildlog import install_missing_reqs - distribution = self._extract_setup(session, fixers) - if distribution is not None: - # Install the setup_requires beforehand, since otherwise - # setuptools might fetch eggs instead of our preferred resolver. - install_missing_reqs( - session, - resolver, - [PythonPackageRequirement.from_requirement_str(require) - for require in distribution['setup_requires']]) + # Install the setup_requires beforehand, since otherwise + # setuptools might fetch eggs instead of our preferred resolver. + install_missing_reqs(session, resolver, list(self._setup_requires())) interpreter = shebang_binary(os.path.join(self.path, 'setup.py')) if interpreter is not None: run_with_build_fixers(session, ["./setup.py"] + args, fixers) @@ -363,6 +357,16 @@ class SetupPy(BuildSystem): # Just assume it's Python 3 run_with_build_fixers(session, [self.DEFAULT_PYTHON, "./setup.py"] + args, fixers) + def _setup_requires(self): + if self.pyproject: + if "build-system" in self.pyproject: + for require in self.pyproject['build-system'].get("requires", []): + yield PythonPackageRequirement.from_requirement_str(require) + if self.config: + options = self.config.get('options', {}) + for require in options.get('setup_requires', []): + yield PythonPackageRequirement.from_requirement_str(require) + def get_declared_dependencies(self, session, fixers=None): distribution = self._extract_setup(session, fixers) if distribution is not None: