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)
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
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
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