fix $(eval foo := $$x) case
in ./repo/android.sh time kati -n, it failed
this was because
repo/android/build/core/definitions.mk
define my-dir
..
$(eval LOCAL_MODULE_MAKEFILE := $$(lastword $$(MAKEFILE_LIST))) \
..
endef
this was parsed as
funcEvalAssign{
lhs: "LOCAL_MODULE_MAKEFILE"
op: ":="
rhs: "$(lastword $(MAKEFILE_LIST))"
}
so, LOCAL_MODULE_MAKEFILE becomes `$(lastword $(MAKEFILE_LIST))`,
but it should be result of $(lastword $(MAKEFILE_LIST)).
if rhs contains '$' in literal, it should be evaluated again.
diff --git a/parser.go b/parser.go
index 7d8f290..cef4a4d 100644
--- a/parser.go
+++ b/parser.go
@@ -80,7 +80,7 @@
if err == io.EOF {
p.done = true
} else if err != nil {
- panic(err)
+ panic(fmt.Errorf("readline %s:%d: %v", p.mk.filename, p.lineno, err))
}
line = bytes.TrimRight(line, "\r\n")
@@ -414,7 +414,7 @@
func (p *parser) parse() (mk Makefile, err error) {
defer func() {
if r := recover(); r != nil {
- err = fmt.Errorf("panic: %v", r)
+ err = fmt.Errorf("panic in parse %s: %v", mk.filename, r)
}
}()
for !p.done {
@@ -520,6 +520,7 @@
}
func ParseMakefile(filename string) (Makefile, error) {
+ Log("ParseMakefile %q", filename)
f, err := os.Open(filename)
if err != nil {
return Makefile{}, err