# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

from _emerge.AbstractEbuildProcess import AbstractEbuildProcess
import portage

portage.proxy.lazyimport.lazyimport(
    globals(), "portage.package.ebuild.doebuild:_doebuild_spawn,_spawn_actionmap"
)


class EbuildProcess(AbstractEbuildProcess):

    __slots__ = ("actionmap",)

    def _spawn(self, args, **kwargs):

        actionmap = self.actionmap
        if actionmap is None:
            actionmap = _spawn_actionmap(self.settings)

        if self._dummy_pipe_fd is not None:
            self.settings["PORTAGE_PIPE_FD"] = str(self._dummy_pipe_fd)

        try:
            return _doebuild_spawn(
                self.phase, self.settings, actionmap=actionmap, **kwargs
            )
        finally:
            self.settings.pop("PORTAGE_PIPE_FD", None)
