aboutsummaryrefslogtreecommitdiff
path: root/dep.go
diff options
context:
space:
mode:
authorFumitoshi Ukai <fumitoshi.ukai@gmail.com>2015-07-21 14:28:26 +0900
committerFumitoshi Ukai <fumitoshi.ukai@gmail.com>2015-07-21 14:29:36 +0900
commitb8b8050935da948fc4fbbb813dcd74f2880d825f (patch)
treef350451d7a0dde0684a01167d67171e512de19d9 /dep.go
parentb92f028d3f269e69b71daff58a75089df85a489e (diff)
downloadkati-b8b8050935da948fc4fbbb813dcd74f2880d825f.tar.gz
[go] fix ninja generation for ckati
including backport [C++] Fixes for depfile detection $ ./kati -ninja $ ./ninja.sh ckati
Diffstat (limited to 'dep.go')
-rw-r--r--dep.go37
1 files changed, 21 insertions, 16 deletions
diff --git a/dep.go b/dep.go
index 39b7ccb..2cb46ff 100644
--- a/dep.go
+++ b/dep.go
@@ -442,23 +442,28 @@ func mergeRules(oldRule, r *rule, output string, isSuffixRule bool) (*rule, erro
// expandPattern expands static pattern (target: target-pattern: prereq-pattern).
-func expandPattern(r *rule) {
+func expandPattern(r *rule) []*rule {
if len(r.outputs) == 0 {
- return
+ return []*rule{r}
}
if len(r.outputPatterns) != 1 {
- return
+ return []*rule{r}
}
+ var rules []*rule
pat := r.outputPatterns[0]
- var inputs []string
for _, output := range r.outputs {
+ nr := new(rule)
+ *nr = *r
+ nr.outputs = []string{output}
+ nr.outputPatterns = nil
+ nr.inputs = nil
for _, input := range r.inputs {
- inputs = append(inputs, intern(pat.subst(input, output)))
+ nr.inputs = append(nr.inputs, intern(pat.subst(input, output)))
}
+ rules = append(rules, nr)
}
- glog.V(1).Infof("expand static pattern: outputs=%q inputs=%q -> %q", r.outputs, r.inputs, inputs)
- r.outputPatterns = nil
- r.inputs = inputs
+ glog.V(1).Infof("expand static pattern: outputs=%q inputs=%q -> %q", r.outputs, r.inputs, rules)
+ return rules
}
func (db *depBuilder) populateExplicitRule(r *rule) error {
@@ -466,7 +471,6 @@ func (db *depBuilder) populateExplicitRule(r *rule) error {
if len(r.outputs) == 0 {
return nil
}
- expandPattern(r)
for _, output := range r.outputs {
output = trimLeadingCurdir(output)
@@ -505,15 +509,16 @@ func (db *depBuilder) populateRules(er *evalResult) error {
for i, orderOnlyInput := range r.orderOnlyInputs {
r.orderOnlyInputs[i] = trimLeadingCurdir(orderOnlyInput)
}
- err := db.populateExplicitRule(r)
- if err != nil {
- return err
- }
- if len(r.outputs) == 0 {
- db.populateImplicitRule(r)
+ for _, r := range expandPattern(r) {
+ err := db.populateExplicitRule(r)
+ if err != nil {
+ return err
+ }
+ if len(r.outputs) == 0 {
+ db.populateImplicitRule(r)
+ }
}
}
-
return nil
}