Allow BuildParams to override ninja description

Allow the ninja description variable to be set on build statements
as well as rules.

Change-Id: I6abb2a8ec83a0c662348cc957fa1a307e6c9c6bb
diff --git a/live_tracker.go b/live_tracker.go
index 8348988..63bdf8a 100644
--- a/live_tracker.go
+++ b/live_tracker.go
@@ -68,6 +68,13 @@
 		return err
 	}
 
+	for _, value := range def.Variables {
+		err = l.addNinjaStringDeps(value)
+		if err != nil {
+			return err
+		}
+	}
+
 	for _, value := range def.Args {
 		err = l.addNinjaStringDeps(value)
 		if err != nil {
diff --git a/ninja_defs.go b/ninja_defs.go
index 8737ed2..64bab16 100644
--- a/ninja_defs.go
+++ b/ninja_defs.go
@@ -79,6 +79,7 @@
 	Comment         string            // The comment that will appear above the definition.
 	Depfile         string            // The dependency file name.
 	Deps            Deps              // The format of the dependency file.
+	Description     string            // The description that Ninja will print for the build.
 	Rule            Rule              // The rule to invoke.
 	Outputs         []string          // The list of explicit output targets.
 	ImplicitOutputs []string          // The list of implicit output targets.
@@ -265,6 +266,13 @@
 		Rule:    rule,
 	}
 
+	setVariable := func(name string, value *ninjaString) {
+		if b.Variables == nil {
+			b.Variables = make(map[string]*ninjaString)
+		}
+		b.Variables[name] = value
+	}
+
 	if !scope.IsRuleVisible(rule) {
 		return nil, fmt.Errorf("Rule %s is not visible in this scope", rule)
 	}
@@ -301,22 +309,24 @@
 
 	b.Optional = params.Optional
 
-	if params.Depfile != "" || params.Deps != DepsNone {
-		if b.Variables == nil {
-			b.Variables = make(map[string]*ninjaString)
-		}
-	}
-
 	if params.Depfile != "" {
 		value, err := parseNinjaString(scope, params.Depfile)
 		if err != nil {
 			return nil, fmt.Errorf("error parsing Depfile param: %s", err)
 		}
-		b.Variables["depfile"] = value
+		setVariable("depfile", value)
 	}
 
 	if params.Deps != DepsNone {
-		b.Variables["deps"] = simpleNinjaString(params.Deps.String())
+		setVariable("deps", simpleNinjaString(params.Deps.String()))
+	}
+
+	if params.Description != "" {
+		value, err := parseNinjaString(scope, params.Description)
+		if err != nil {
+			return nil, fmt.Errorf("error parsing Description param: %s", err)
+		}
+		setVariable("description", value)
 	}
 
 	argNameScope := rule.scope()