示例#1
0
    def execute(self, makefile, context):
        if context.weak:
            raise errors.DataError(
                "Static pattern rules not allowed in includedeps",
                self.targetexp.loc)

        targets = list(
            _expandwildcards(
                makefile,
                data.stripdotslashes(
                    self.targetexp.resolvesplit(makefile,
                                                makefile.variables))))

        if not len(targets):
            context.currule = DummyRule()
            return

        patterns = list(
            data.stripdotslashes(
                self.patternexp.resolvesplit(makefile, makefile.variables)))
        if len(patterns) != 1:
            raise errors.DataError(
                "Static pattern rules must have a single pattern",
                self.patternexp.loc)
        pattern = data.Pattern(patterns[0])

        deps = [
            data.Pattern(p) for p in _expandwildcards(
                makefile,
                data.stripdotslashes(
                    self.depexp.resolvesplit(makefile, makefile.variables)))
        ]

        rule = data.PatternRule([pattern],
                                deps,
                                self.doublecolon,
                                loc=self.targetexp.loc)

        for t in targets:
            if data.Pattern(t).ispattern():
                raise errors.DataError(
                    "Target '%s' of a static pattern rule must not be a pattern"
                    % (t, ), self.targetexp.loc)
            stem = pattern.match(t)
            if stem is None:
                raise errors.DataError(
                    "Target '%s' does not match the static pattern '%s'" %
                    (t, pattern), self.targetexp.loc)
            makefile.gettarget(t).addrule(
                data.PatternRuleInstance(rule, '', stem, pattern.ismatchany()))

        makefile.foundtarget(targets[0])
        context.currule = rule
示例#2
0
    def _execute(self, makefile, context):
        assert not context.weak

        atargets = data.stripdotslashes(
            self.targetexp.resolvesplit(makefile, makefile.variables))
        targets = [
            data.Pattern(p) for p in _expandwildcards(makefile, atargets)
        ]

        if not len(targets):
            context.currule = DummyRule()
            return

        ispatterns = set((t.ispattern() for t in targets))
        if len(ispatterns) == 2:
            raise errors.DataError("Mixed implicit and normal rule",
                                   self.targetexp.loc)
        ispattern, = ispatterns

        deps = list(
            _expandwildcards(
                makefile,
                data.stripdotslashes(
                    self.depexp.resolvesplit(makefile, makefile.variables))))
        if ispattern:
            prerequisites = [data.Pattern(d) for d in deps]
            rule = data.PatternRule(targets,
                                    prerequisites,
                                    self.doublecolon,
                                    loc=self.targetexp.loc)
            makefile.appendimplicitrule(rule)
        else:
            rule = data.Rule(deps,
                             self.doublecolon,
                             loc=self.targetexp.loc,
                             weakdeps=False)
            for t in targets:
                makefile.gettarget(t.gettarget()).addrule(rule)

            makefile.foundtarget(targets[0].gettarget())

        context.currule = rule