diff --git a/ognibuild/buildsystem.py b/ognibuild/buildsystem.py index b9d7259..4991dd3 100644 --- a/ognibuild/buildsystem.py +++ b/ognibuild/buildsystem.py @@ -241,6 +241,10 @@ class SetupPy(BuildSystem): for require in self.result.get_requires(): yield "core", PythonPackageRequirement.from_requirement_str(require) # Not present for distutils-only packages + if getattr(self.result, "setup_requires", []): + for require in self.result.setup_requires: + yield "build", PythonPackageRequirement.from_requirement_str(require) + # Not present for distutils-only packages if getattr(self.result, "install_requires", []): for require in self.result.install_requires: yield "core", PythonPackageRequirement.from_requirement_str(require) diff --git a/ognibuild/debian/fix_build.py b/ognibuild/debian/fix_build.py index 62170fd..3933fa6 100644 --- a/ognibuild/debian/fix_build.py +++ b/ognibuild/debian/fix_build.py @@ -696,16 +696,19 @@ def main(argv=None): help="force updating of the changelog", default=None, ) + parser.add_argument( + '--schroot', + type=str, + help='chroot to use.') args = parser.parse_args() from breezy.workingtree import WorkingTree from .apt import AptManager from ..session.plain import PlainSession + from ..session.schroot import SchrootSession import tempfile import contextlib - apt = AptManager(PlainSession()) - logging.basicConfig(level=logging.INFO, format="%(message)s") with contextlib.ExitStack() as es: @@ -716,17 +719,38 @@ def main(argv=None): output_directory = args.output_directory tree = WorkingTree.open(".") - build_incrementally( - tree, - apt, - args.suffix, - args.suite, - output_directory, - args.build_command, - None, - committer=args.committer, - update_changelog=args.update_changelog, - ) + if args.schroot: + session = SchrootSession(args.schroot) + es.enter_context(session) + else: + session = PlainSession() + + apt = AptManager(session) + + try: + build_incrementally( + tree, + apt, + args.suffix, + args.suite, + output_directory, + args.build_command, + None, + committer=args.committer, + update_changelog=args.update_changelog, + ) + except SbuildFailure as e: + if e.phase is None: + phase = 'unknown phase' + elif len(e.phase) == 1: + phase = e.phase[0] + else: + phase = '%s (%s)' % (e.phase[0], e.phase[1]) + if e.error: + logging.fatal('Error during %s: %s', phase, e.error) + else: + logging.fatal('Error during %s: %s', phase, e.description) + return 1 if __name__ == "__main__": diff --git a/ognibuild/dist.py b/ognibuild/dist.py index cfdb5db..578ee05 100644 --- a/ognibuild/dist.py +++ b/ognibuild/dist.py @@ -37,7 +37,6 @@ from buildlog_consultant.common import ( from . import DetailedFailure from .buildsystem import NoBuildToolsFound from .session.schroot import SchrootSession -from .vcs import dupe_vcs_tree, export_vcs_tree SUPPORTED_DIST_EXTENSIONS = [ @@ -142,20 +141,14 @@ def create_dist_schroot( from .debian import satisfy_build_deps satisfy_build_deps(session, packaging_tree) - build_dir = os.path.join(session.location, "build") try: - directory = tempfile.mkdtemp(dir=build_dir) + export_directory, reldir = session.setup_from_vcs( + tree, include_controldir=include_controldir, subdir=subdir) except OSError as e: if e.errno == errno.ENOSPC: raise DetailedFailure(1, ["mkdtemp"], NoSpaceOnDevice()) - reldir = "/" + os.path.relpath(directory, session.location) - - export_directory = os.path.join(directory, subdir) - if not include_controldir: - export_vcs_tree(tree, export_directory) - else: - dupe_vcs_tree(tree, export_directory) + raise buildsystems = list(detect_buildsystems(export_directory)) resolver = AptResolver.from_session(session) diff --git a/ognibuild/session/schroot.py b/ognibuild/session/schroot.py index 3677262..ba1a281 100644 --- a/ognibuild/session/schroot.py +++ b/ognibuild/session/schroot.py @@ -19,6 +19,7 @@ import logging import os import shlex import subprocess +import tempfile from typing import Optional, List, Dict @@ -167,3 +168,20 @@ class SchrootSession(Session): def scandir(self, path: str): fullpath = self._fullpath(path) return os.scandir(fullpath) + + def setup_from_vcs( + self, tree, include_controldir=False, subdir="package"): + from ..vcs import dupe_vcs_tree, export_vcs_tree + build_dir = os.path.join(self.location, "build") + + directory = tempfile.mkdtemp(dir=build_dir) + reldir = "/" + os.path.relpath(directory, self.location) + os.chdir(reldir) + + export_directory = os.path.join(directory, subdir) + if not include_controldir: + export_vcs_tree(tree, export_directory) + else: + dupe_vcs_tree(tree, export_directory) + + return export_directory, reldir