Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #3
0
    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")
Exemple #4
0
    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)