[go] implement vpath directive
diff --git a/parser.go b/parser.go
index d21ea5c..84f633a 100644
--- a/parser.go
+++ b/parser.go
@@ -471,6 +471,21 @@
return
}
+func (p *parser) parseVpath(data []byte) {
+ vline, _ := removeComment(concatline(data))
+ vline = trimLeftSpaceBytes(vline)
+ v, _, err := parseExpr(vline, nil, parseOp{})
+ if err != nil {
+ p.err = p.srcpos().errorf("parse error %q: %v", string(vline), err)
+ return
+ }
+ vast := &vpathAST{
+ expr: v,
+ }
+ vast.srcpos = p.srcpos()
+ p.addStatement(vast)
+}
+
type directiveFunc func(*parser, []byte)
var makeDirectives map[string]directiveFunc
@@ -490,6 +505,7 @@
"override": overrideDirective,
"export": exportDirective,
"unexport": unexportDirective,
+ "vpath": vpathDirective,
}
}
@@ -595,6 +611,10 @@
return
}
+func vpathDirective(p *parser, data []byte) {
+ p.parseVpath(data)
+}
+
func (p *parser) parse() (mk makefile, err error) {
for !p.done {
line := p.readLine()