| import os |
| import shutil |
| import subprocess |
| |
| import infra |
| |
| class Builder(object): |
| def __init__(self, config, builddir, logtofile): |
| self.config = config |
| self.builddir = builddir |
| self.logfile = infra.open_log_file(builddir, "build", logtofile) |
| |
| def build(self): |
| if not os.path.isdir(self.builddir): |
| os.makedirs(self.builddir) |
| |
| config_file = os.path.join(self.builddir, ".config") |
| with open(config_file, "w+") as cf: |
| cf.write(self.config) |
| # dump the defconfig to the logfile for easy debugging |
| self.logfile.write("> start defconfig\n" + self.config + |
| "> end defconfig\n") |
| self.logfile.flush() |
| |
| cmd = ["make", |
| "O={}".format(self.builddir), |
| "olddefconfig"] |
| ret = subprocess.call(cmd, stdout=self.logfile, stderr=self.logfile) |
| if ret != 0: |
| raise SystemError("Cannot olddefconfig") |
| |
| cmd = ["make", "-C", self.builddir] |
| ret = subprocess.call(cmd, stdout=self.logfile, stderr=self.logfile) |
| if ret != 0: |
| raise SystemError("Build failed") |
| |
| open(self.stamp_path(), 'a').close() |
| |
| def stamp_path(self): |
| return os.path.join(self.builddir, "build-done") |
| |
| def is_finished(self): |
| return os.path.exists(self.stamp_path()) |
| |
| def delete(self): |
| if os.path.exists(self.builddir): |
| shutil.rmtree(self.builddir) |