[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()