Implement $(warning)
diff --git a/eval.go b/eval.go
index 333e6be..590a7ae 100644
--- a/eval.go
+++ b/eval.go
@@ -27,6 +27,9 @@
 	refs     map[string]bool
 	vars     map[string]string
 	curRule  *Rule
+
+	filename string
+	lineno   int
 }
 
 func newEvaluator() *Evaluator {
@@ -63,6 +66,10 @@
 			panic(err)
 		}
 		return string(re.ReplaceAllString(string(out), " ")), true
+	} else if strings.HasPrefix(ex, "warning ") {
+		arg := ex[len("warning "):]
+		fmt.Printf("%s:%d: %s\n", ev.filename, ev.lineno, arg)
+		return "", true
 	}
 	return "", false
 }
@@ -122,6 +129,9 @@
 }
 
 func (ev *Evaluator) evalAssign(ast *AssignAST) {
+	ev.filename = ast.filename
+	ev.lineno = ast.lineno
+
 	lhs := ev.evalExpr(ast.lhs)
 	var rhs string
 	switch ast.assign_type {
@@ -137,6 +147,9 @@
 }
 
 func (ev *Evaluator) evalRule(ast *RuleAST) {
+	ev.filename = ast.filename
+	ev.lineno = ast.lineno
+
 	ev.curRule = &Rule{}
 	lhs := ev.evalExpr(ast.lhs)
 	ev.curRule.output = lhs
@@ -155,6 +168,9 @@
 }
 
 func (ev *Evaluator) evalRawExpr(ast *RawExprAST) {
+	ev.filename = ast.filename
+	ev.lineno = ast.lineno
+
 	result := ev.evalExpr(ast.expr)
 	if result != "" {
 		fmt.Printf("%s:%d: *** missing separator.  Stop.\n", ast.filename, ast.lineno)