def load(self): super(NativeRecipe, self).load() name = utils.canonical(self.path) loader = SourceFileLoader("joltfile_{0}".format(name), self.path) module = ModuleType(loader.name) module.__file__ = self.path loader.exec_module(module) sys.modules[loader.name] = module classes = inspection.getmoduleclasses(module, [Task, TaskGenerator], NativeRecipe._is_abstract) generators = [] for cls in classes[TaskGenerator]: cls.joltdir = self.joltdir or os.path.dirname(self.path) generators.append(cls()) for generator in generators: generated_tasks = utils.as_list(generator.generate()) classes[Task] += filter(NativeRecipe._is_task, generated_tasks) for task in classes[Task]: task.name = task.name or task.__name__.lower() task.joltdir = self.joltdir or os.path.dirname(self.path) task.joltproject = self.project self.tasks.append(task) log.verbose("Loaded: {0}", self.path)
def task_finished(self, task): if not task.has_artifact(): return srcpath = cache.ArtifactCache.get().get_path(task) destpath = fs.path.join(loader.get_workspacedir(), self._path, utils.canonical(task.short_qualified_name)) if fs.path.exists(srcpath): fs.unlink(destpath, ignore_errors=True) fs.makedirs(fs.path.dirname(destpath)) fs.symlink(srcpath, destpath)
def task_pre_ninja_file(self, task, deps, tools): if not isinstance(task.task, ninja.CXXLibrary) or task.task.shared: return cli = fs.path.join(fs.path.dirname(__file__), "ninjacli.py") disabled = config.getboolean("ninja-cache", "disable", False) tools.setenv("CCWRAP", "{} {} -- ".format(sys.executable, cli)) tools.setenv("CXXWRAP", "{} {} -- ".format(sys.executable, cli)) tools.setenv("JOLT_CACHEDIR", cache.ArtifactCache.get().root) tools.setenv("JOLT_CANONTASK", utils.canonical(task.task.name)) tools.setenv("NINJACACHE_DISABLE", "1" if disabled else "0") tools.setenv("NINJACACHE_MAXARTIFACTS", config.getint("ninja-cache", "maxartifacts", 0)) if log.is_verbose(): tools.setenv("NINJACACHE_VERBOSE", "1")
def load(self): super(NativeRecipe, self).load() name = utils.canonical(self.path) module = imp.load_source("joltfile_{0}".format(name), self.path) classes = inspect.getmoduleclasses(module, [Task, TaskGenerator], NativeRecipe._is_abstract) for cls in classes[TaskGenerator]: cls.joltdir = self.joltdir or os.path.dirname(self.path) generated_tasks = utils.as_list(cls().generate()) classes[Task] += filter(NativeRecipe._is_task, generated_tasks) for task in classes[Task]: task.name = task.name or task.__name__.lower() task.joltdir = self.joltdir or os.path.dirname(self.path) task.joltproject = self.project self.tasks.append(task) log.verbose("Loaded: {0}", self.path)