fix run_integration_test android case
diff --git a/func.go b/func.go
index 458e739..d05c6f5 100644
--- a/func.go
+++ b/func.go
@@ -1065,8 +1065,8 @@
 		return err
 	}
 	s := abuf.Bytes()
-	logf("eval %q at %s", s, ev.srcpos)
-	mk, err := parseMakefileBytes(s, ev.srcpos)
+	logf("eval %v=>%q at %s", f.args[1], s, ev.srcpos)
+	mk, err := parseMakefileBytes(trimSpaceBytes(s), ev.srcpos)
 	if err != nil {
 		return ev.errorf("%v", err)
 	}
@@ -1193,11 +1193,13 @@
 
 func (f *funcEvalAssign) Eval(w evalWriter, ev *Evaluator) error {
 	var abuf buffer
+	abuf.resetSpace()
 	err := f.rhs.Eval(&abuf, ev)
 	if err != nil {
 		return err
 	}
 	rhs := trimLeftSpaceBytes(abuf.Bytes())
+	logf("evalAssign: lhs=%q rhs=%s %q", f.lhs, f.rhs, rhs)
 	var rvalue Var
 	switch f.op {
 	case ":=":
@@ -1359,6 +1361,7 @@
 		return nil
 	}
 	var abuf buffer
+	abuf.resetSpace()
 	err = f.args[1].Eval(&abuf, ev)
 	if err != nil {
 		return err
diff --git a/parser.go b/parser.go
index d5f5a41..f1d23e4 100644
--- a/parser.go
+++ b/parser.go
@@ -197,7 +197,7 @@
 			lhs, op = line[:sep-1], line[sep-1:sep+1]
 		}
 	}
-	logf("parseAssign %s op:%s opt:%s", line, op, p.defOpt)
+	logf("parseAssign %s op:%q opt:%s", line, op, p.defOpt)
 	lhs = trimSpaceBytes(lhs)
 	rhs = trimLeftSpaceBytes(rhs)
 	aast, err := newAssignAST(p, lhs, rhs, string(op))
@@ -596,7 +596,9 @@
 func (p *parser) parse() (mk makefile, err error) {
 	for !p.done {
 		line := p.readLine()
-		logf("line: %q", line)
+		if LogFlag {
+			logf("%s: %q", p.srcpos(), line)
+		}
 		if p.defineVar != nil {
 			p.processDefine(line)
 			if p.err != nil {
@@ -626,7 +628,9 @@
 	if len(cline) == 0 {
 		return
 	}
-	logf("concatline:%q", cline)
+	if LogFlag {
+		logf("concatline:%q", cline)
+	}
 	var dline []byte
 	cline, _ = removeComment(cline)
 	dline = append(dline, cline...)
@@ -634,17 +638,23 @@
 	if len(dline) == 0 {
 		return
 	}
-	logf("directive?: %q", dline)
+	if LogFlag {
+		logf("directive?: %q", dline)
+	}
 	if p.handleDirective(dline, makeDirectives) {
 		return
 	}
-	logf("rule or assign?: %q", line)
+	if LogFlag {
+		logf("rule or assign?: %q", line)
+	}
 	p.handleRuleOrAssign(line)
 }
 
 func (p *parser) processDefine(line []byte) {
 	line = concatline(line)
-	logf("concatline:%q", line)
+	if LogFlag {
+		logf("concatline:%q", line)
+	}
 	if !p.isEndef(line) {
 		if p.inDef != nil {
 			p.inDef = append(p.inDef, '\n')
diff --git a/pathutil.go b/pathutil.go
index f1c89ee..7dd3df1 100644
--- a/pathutil.go
+++ b/pathutil.go
@@ -495,11 +495,8 @@
 func (c *androidFindCacheT) findleaves(w evalWriter, dir, name string, prunes []string, mindepth int) bool {
 	var found []string
 	var dirs []string
-	topdir := filepath.Clean(dir)
+	dir = filepath.Clean(dir)
 	topdepth := strings.Count(dir, "/")
-	if topdir == "." {
-		topdepth++
-	}
 	dirs = append(dirs, dir)
 	for len(dirs) > 0 {
 		dir = filepath.Clean(dirs[0]) + "/"
diff --git a/strutil.go b/strutil.go
index c20ab83..6431eb9 100644
--- a/strutil.go
+++ b/strutil.go
@@ -387,6 +387,9 @@
 			continue
 		}
 		if i+1 == len(line) {
+			if line[i-1] != '\\' {
+				line = line[:i]
+			}
 			break
 		}
 		if line[i+1] == '\n' {
diff --git a/strutil_test.go b/strutil_test.go
index 2c798db..56bfe87 100644
--- a/strutil_test.go
+++ b/strutil_test.go
@@ -236,6 +236,14 @@
 			in:   "foo \\\n   \\\n\t bar",
 			want: "foo bar",
 		},
+		{
+			in:   `foo \`,
+			want: `foo `,
+		},
+		{
+			in:   `foo \\`,
+			want: `foo \\`,
+		},
 	} {
 		got := string(concatline([]byte(tc.in)))
 		if got != tc.want {