unexport Logf, LogAlways, Warn*, Error*
diff --git a/parser.go b/parser.go
index 53f6185..06e5f74 100644
--- a/parser.go
+++ b/parser.go
@@ -193,7 +193,7 @@
 }
 
 func (p *parser) parseAssign(line []byte, sep, esep int) ast {
-	Logf("parseAssign %q op:%q", line, line[sep:esep])
+	logf("parseAssign %q op:%q", line, line[sep:esep])
 	aast := newAssignAST(p, bytes.TrimSpace(line[:sep]), trimLeftSpaceBytes(line[esep:]), string(line[sep:esep]))
 	aast.filename = p.mk.filename
 	aast.lineno = p.lineno
@@ -289,7 +289,7 @@
 		s = s[end+1:]
 	}
 	if len(s) > 0 {
-		Error(p.mk.filename, p.lineno, `extraneous text after %q directive`, op)
+		errorExit(p.mk.filename, p.lineno, `extraneous text after %q directive`, op)
 	}
 	return args, true
 }
@@ -327,7 +327,7 @@
 	op := line[:oplen]
 	lhsBytes, rhsBytes, ok := p.parseEq(strings.TrimSpace(line[oplen+1:]), op)
 	if !ok {
-		Error(p.mk.filename, p.lineno, `*** invalid syntax in conditional.`)
+		errorExit(p.mk.filename, p.lineno, `*** invalid syntax in conditional.`)
 	}
 
 	lhs, _, err := parseExpr([]byte(lhsBytes), nil, true)
@@ -354,7 +354,7 @@
 
 func (p *parser) checkIfStack(curKeyword string) {
 	if len(p.ifStack) == 0 {
-		Error(p.mk.filename, p.lineno, `*** extraneous %q.`, curKeyword)
+		errorExit(p.mk.filename, p.lineno, `*** extraneous %q.`, curKeyword)
 	}
 }
 
@@ -362,7 +362,7 @@
 	p.checkIfStack("else")
 	state := &p.ifStack[len(p.ifStack)-1]
 	if state.inElse {
-		Error(p.mk.filename, p.lineno, `*** only one "else" per conditional.`)
+		errorExit(p.mk.filename, p.lineno, `*** only one "else" per conditional.`)
 	}
 	state.inElse = true
 	p.outStmts = &state.ast.falseStmts
@@ -384,7 +384,7 @@
 		return
 	}
 	p.numIfNest = 0
-	WarnNoPrefix(p.mk.filename, p.lineno, "extraneous text after `else` directive")
+	warnNoPrefix(p.mk.filename, p.lineno, "extraneous text after `else` directive")
 }
 
 func (p *parser) parseEndif(line string) {
@@ -561,7 +561,7 @@
 	if found >= 0 && s[:found] == "endef" {
 		rest := strings.TrimSpace(s[found+1:])
 		if rest != "" && rest[0] != '#' {
-			WarnNoPrefix(p.mk.filename, p.lineno, "extraneous text after \"endef\" directive")
+			warnNoPrefix(p.mk.filename, p.lineno, "extraneous text after \"endef\" directive")
 		}
 		return true
 	}
@@ -580,7 +580,7 @@
 		if len(p.inDef) > 0 {
 			lineStr := string(p.processDefineLine(line))
 			if p.isEndef(lineStr) {
-				Logf("multilineAssign %q", p.inDef)
+				logf("multilineAssign %q", p.inDef)
 				aast := newAssignAST(p, []byte(p.inDef[0]), []byte(strings.Join(p.inDef[1:], "\n")), "=")
 				aast.filename = p.mk.filename
 				aast.lineno = p.lineno - len(p.inDef)
@@ -626,7 +626,7 @@
 				parenStack = append(parenStack, ch)
 			case ')', '}':
 				if len(parenStack) == 0 {
-					Warn(p.mk.filename, p.lineno, "Unmatched parens: %s", line)
+					warn(p.mk.filename, p.lineno, "Unmatched parens: %s", line)
 				} else {
 					cp := closeParen(parenStack[len(parenStack)-1])
 					if cp == ch {
@@ -685,7 +685,7 @@
 			return filename
 		}
 	}
-	ErrorNoLocation("no targets specified and no makefile found.")
+	errorNoLocationExit("no targets specified and no makefile found.")
 	panic("") // Cannot be reached.
 }
 
@@ -737,16 +737,16 @@
 }
 
 func (mc *makefileCacheT) parse(filename string) (makefile, [sha1.Size]byte, error) {
-	Logf("parse Makefile %q", filename)
+	logf("parse Makefile %q", filename)
 	mk, hash, ok, err := makefileCache.lookup(filename)
 	if ok {
 		if LogFlag {
-			Logf("makefile cache hit for %q", filename)
+			logf("makefile cache hit for %q", filename)
 		}
 		return mk, hash, err
 	}
 	if LogFlag {
-		Logf("reading makefile %q", filename)
+		logf("reading makefile %q", filename)
 	}
 	c, err := ioutil.ReadFile(filename)
 	if err != nil {