Support deps and depfile properties on build statements
Ninja supports deps and depfile properties specified on build statements, allow them to be specified in BuildParams. Change-Id: I46eac5571350426f1419908def21f7d042f8739a
This commit is contained in:
parent
8c5b1d1f60
commit
aa873e1c65
1 changed files with 46 additions and 11 deletions
|
@ -77,6 +77,8 @@ type RuleParams struct {
|
|||
// that are set within the build statement's scope in the Ninja file.
|
||||
type BuildParams struct {
|
||||
Comment string // The comment that will appear above the definition.
|
||||
Depfile string // The dependency file name.
|
||||
Deps Deps // The format of the dependency file.
|
||||
Rule Rule // The rule to invoke.
|
||||
Outputs []string // The list of explicit output targets.
|
||||
ImplicitOutputs []string // The list of implicit output targets.
|
||||
|
@ -229,18 +231,10 @@ func (r *ruleDef) WriteTo(nw *ninjaWriter, name string,
|
|||
}
|
||||
}
|
||||
|
||||
var keys []string
|
||||
for k := range r.Variables {
|
||||
keys = append(keys, k)
|
||||
}
|
||||
sort.Strings(keys)
|
||||
|
||||
for _, name := range keys {
|
||||
err = nw.ScopedAssign(name, r.Variables[name].Value(pkgNames))
|
||||
err = writeVariables(nw, r.Variables, pkgNames)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
@ -256,6 +250,7 @@ type buildDef struct {
|
|||
Implicits []*ninjaString
|
||||
OrderOnly []*ninjaString
|
||||
Args map[Variable]*ninjaString
|
||||
Variables map[string]*ninjaString
|
||||
Optional bool
|
||||
}
|
||||
|
||||
|
@ -306,6 +301,24 @@ func parseBuildParams(scope scope, params *BuildParams) (*buildDef,
|
|||
|
||||
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
|
||||
}
|
||||
|
||||
if params.Deps != DepsNone {
|
||||
b.Variables["deps"] = simpleNinjaString(params.Deps.String())
|
||||
}
|
||||
|
||||
argNameScope := rule.scope()
|
||||
|
||||
if len(params.Args) > 0 {
|
||||
|
@ -360,6 +373,11 @@ func (b *buildDef) WriteTo(nw *ninjaWriter, pkgNames map[*packageContext]string)
|
|||
args[argVar.fullName(pkgNames)] = value.Value(pkgNames)
|
||||
}
|
||||
|
||||
err = writeVariables(nw, b.Variables, pkgNames)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var keys []string
|
||||
for k := range args {
|
||||
keys = append(keys, k)
|
||||
|
@ -389,3 +407,20 @@ func valueList(list []*ninjaString, pkgNames map[*packageContext]string,
|
|||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func writeVariables(nw *ninjaWriter, variables map[string]*ninjaString,
|
||||
pkgNames map[*packageContext]string) error {
|
||||
var keys []string
|
||||
for k := range variables {
|
||||
keys = append(keys, k)
|
||||
}
|
||||
sort.Strings(keys)
|
||||
|
||||
for _, name := range keys {
|
||||
err := nw.ScopedAssign(name, variables[name].Value(pkgNames))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue