Allow rules to specify order-only dependencies
Commands that contain tools that don't affect the build results may want an order-only dependency on the tool. Allow rules to specify order-only dependencies the same way they specify implicit dependencies. Test: builds Change-Id: I3e0f886ae047b0fadf7a5c0dfeb9827d2c5c411d
This commit is contained in:
parent
afa12b4744
commit
47113641cd
2 changed files with 19 additions and 6 deletions
|
@ -109,6 +109,11 @@ func (l *liveTracker) addRule(r Rule) (def *ruleDef, err error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = l.addNinjaStringListDeps(def.CommandOrderOnly)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
for _, value := range def.Variables {
|
for _, value := range def.Variables {
|
||||||
err = l.addNinjaStringDeps(value)
|
err = l.addNinjaStringDeps(value)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -67,8 +67,9 @@ type RuleParams struct {
|
||||||
RspfileContent string // The response file content.
|
RspfileContent string // The response file content.
|
||||||
|
|
||||||
// These fields are used internally in Blueprint
|
// These fields are used internally in Blueprint
|
||||||
CommandDeps []string // Command-specific implicit dependencies to prepend to builds
|
CommandDeps []string // Command-specific implicit dependencies to prepend to builds
|
||||||
Comment string // The comment that will appear above the definition.
|
CommandOrderOnly []string // Command-specific order-only dependencies to prepend to builds
|
||||||
|
Comment string // The comment that will appear above the definition.
|
||||||
}
|
}
|
||||||
|
|
||||||
// A BuildParams object contains the set of parameters that make up a Ninja
|
// A BuildParams object contains the set of parameters that make up a Ninja
|
||||||
|
@ -127,10 +128,11 @@ func (p *poolDef) WriteTo(nw *ninjaWriter, name string) error {
|
||||||
// A ruleDef describes a rule definition. It does not include the name of the
|
// A ruleDef describes a rule definition. It does not include the name of the
|
||||||
// rule.
|
// rule.
|
||||||
type ruleDef struct {
|
type ruleDef struct {
|
||||||
CommandDeps []*ninjaString
|
CommandDeps []*ninjaString
|
||||||
Comment string
|
CommandOrderOnly []*ninjaString
|
||||||
Pool Pool
|
Comment string
|
||||||
Variables map[string]*ninjaString
|
Pool Pool
|
||||||
|
Variables map[string]*ninjaString
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseRuleParams(scope scope, params *RuleParams) (*ruleDef,
|
func parseRuleParams(scope scope, params *RuleParams) (*ruleDef,
|
||||||
|
@ -207,6 +209,11 @@ func parseRuleParams(scope scope, params *RuleParams) (*ruleDef,
|
||||||
return nil, fmt.Errorf("error parsing CommandDeps param: %s", err)
|
return nil, fmt.Errorf("error parsing CommandDeps param: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
r.CommandOrderOnly, err = parseNinjaStrings(scope, params.CommandOrderOnly)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("error parsing CommandDeps param: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
return r, nil
|
return r, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -370,6 +377,7 @@ func (b *buildDef) WriteTo(nw *ninjaWriter, pkgNames map[*packageContext]string)
|
||||||
|
|
||||||
if b.RuleDef != nil {
|
if b.RuleDef != nil {
|
||||||
implicitDeps = append(valueList(b.RuleDef.CommandDeps, pkgNames, inputEscaper), implicitDeps...)
|
implicitDeps = append(valueList(b.RuleDef.CommandDeps, pkgNames, inputEscaper), implicitDeps...)
|
||||||
|
orderOnlyDeps = append(valueList(b.RuleDef.CommandOrderOnly, pkgNames, inputEscaper), orderOnlyDeps...)
|
||||||
}
|
}
|
||||||
|
|
||||||
err := nw.Build(comment, rule, outputs, implicitOuts, explicitDeps, implicitDeps, orderOnlyDeps)
|
err := nw.Build(comment, rule, outputs, implicitOuts, explicitDeps, implicitDeps, orderOnlyDeps)
|
||||||
|
|
Loading…
Reference in a new issue