Example #1
0
    def register(self, job):
        """Register a build job as a dependency."""
        from .signal import Signal

        assert job.port not in self.ports
        self.ports[job.port] = Signal()
        self.method[job.port] = None
        job.connect(self._clean)
Example #2
0
    def add(self, port):
        """Add a port to be configured."""
        assert port.stage < Port.CONFIG

        if port in self.ports:
            return self.ports[port]
        else:
            from .job import PortJob

            # Create a config stage job and add it to the queue
            job = PortJob(port, Port.CONFIG)
            job.connect(self._cleanup)
            self.ports[port] = job
            self.update.emit(self, Builder.ADDED, port)
            self.queue.add(job)
            self.update.emit(self, Builder.QUEUED, port)
            return job
Example #3
0
    def add(self, port):
        """Add a port to be build for this stage."""
        assert not port.failed

        if port in self.ports:
            return self.ports[port]
        else:
            from .job import PortJob

            # Create stage job
            job = PortJob(port, self.stage)
            job.connect(self._cleanup)
            self.ports[port] = job
            self.update.emit(self, Builder.ADDED, port)

            # Configure port then process it
            if port.stage < Port.DEPEND:
                depend.add(port).connect(self._add)
            else:
                assert port not in depend.ports
                self._add(port)
            return job
Example #4
0
    def _resolve(self, port, method):
        """Try resolve the port using various methods."""
        from .env import flags

        if port.stage > Port.DEPEND:
            port.reset()
        elif port.failed:
            return False
        if method == "build":
            if "package" in flags["target"]:
                # Connect to install job and give package ownership
                job = package(port)
                if port in install.ports:
                    # Use the install job if it exists otherwise use the package
                    # job.
                    job = install.ports[port]
            elif "install" in flags["target"]:
                job = install(port)
            else:
                assert not "Unknown dependency target"
        elif method == "package":
            if not os.path.isfile(flags["chroot"] + port.attr["pkgfile"]) or \
                port.attr["no_package"]:
                pkginstall.update.emit(pkginstall, Builder.ADDED, port)
                pkginstall.update.emit(pkginstall, Builder.FAILED, port)
                return False
            job = pkginstall(port)
        elif method == "repo":
            if port.attr["no_package"]:
                repoinstall.update.emit(repoinstall, Builder.ADDED, port)
                repoinstall.update.emit(repoinstall, Builder.FAILED, port)
                return False
            job = repoinstall(port)
        else:
            assert not "Unknown port resolve method"
        job.connect(self._clean)
        return True