fix equal_in_target.mk
diff --git a/parser.go b/parser.go
index d8f2487..6b53f6f 100644
--- a/parser.go
+++ b/parser.go
@@ -162,7 +162,8 @@
 	if p.handleAssign(line) {
 		return
 	}
-	// not assignment
+	// not assignment.
+	// ie. no '=' found or ':' found before '=' (except ':=')
 	p.parseMaybeRule(rline, semi)
 	return
 }
@@ -213,6 +214,54 @@
 		p.err = p.srcpos().errorf("*** commands commence before first target.")
 		return
 	}
+	var assign *assignAST
+	ci := findLiteralChar(line, []byte{':'}, true)
+	if ci >= 0 {
+		eqi := findLiteralChar(line[ci+1:], []byte{'='}, true)
+		if eqi == 0 {
+			panic(fmt.Sprintf("unexpected eq after colon: %q", line))
+		}
+		if eqi > 0 {
+			var lhsbytes []byte
+			op := "="
+			switch line[ci+1+eqi-1] {
+			case ':', '+', '?':
+				lhsbytes = append(lhsbytes, line[ci+1:ci+1+eqi-1]...)
+				op = string(line[ci+1+eqi-1 : ci+1+eqi+1])
+			default:
+				lhsbytes = append(lhsbytes, line[ci+1:ci+1+eqi]...)
+			}
+
+			lhsbytes = trimSpaceBytes(lhsbytes)
+			lhs, _, err := parseExpr(lhsbytes, nil, parseOp{})
+			if err != nil {
+				p.err = p.srcpos().error(err)
+				return
+			}
+			var rhsbytes []byte
+			rhsbytes = append(rhsbytes, line[ci+1+eqi+1:]...)
+			if semi != nil {
+				rhsbytes = append(rhsbytes, ';')
+				rhsbytes = append(rhsbytes, concatline(semi)...)
+			}
+			rhsbytes = trimLeftSpaceBytes(rhsbytes)
+			semi = nil
+			rhs, _, err := parseExpr(rhsbytes, nil, parseOp{})
+			if err != nil {
+				p.err = p.srcpos().error(err)
+				return
+			}
+
+			// TODO(ukai): support override, export in target specific var.
+			assign = &assignAST{
+				lhs: lhs,
+				rhs: rhs,
+				op:  op,
+			}
+			assign.srcpos = p.srcpos()
+			line = line[:ci+1]
+		}
+	}
 	expr, _, err := parseExpr(line, nil, parseOp{})
 	if err != nil {
 		p.err = p.srcpos().error(err)
@@ -220,10 +269,13 @@
 	}
 	// TODO(ukai): remove ast, and eval here.
 	rast := &maybeRuleAST{
-		expr: expr,
-		semi: semi,
+		isRule: ci >= 0,
+		expr:   expr,
+		assign: assign,
+		semi:   semi,
 	}
 	rast.srcpos = p.srcpos()
+	logf("stmt: %#v", rast)
 	p.addStatement(rast)
 }