diff options
-rw-r--r-- | ninja.go | 11 | ||||
-rw-r--r-- | testcase/override_export.mk | 3 |
2 files changed, 10 insertions, 4 deletions
@@ -24,6 +24,8 @@ import ( "sort" "strings" "time" + + "github.com/golang/glog" ) // NinjaGenerator generates ninja build files from DepGraph. @@ -554,14 +556,17 @@ func (n *NinjaGenerator) generateShell() (err error) { fmt.Fprintf(f, "if [ -f %s ]; then\n export $(cat %s)\nfi\n", n.envlistName(), n.envlistName()) } for name, export := range n.exports { + // export "a b"=c will error on bash + // bash: export `a b=c': not a valid identifier + if strings.ContainsAny(name, " \t\n\r") { + glog.V(1).Infof("ignore export %q (export:%t)", name, export) + continue + } if export { v, err := n.ctx.ev.EvaluateVar(name) if err != nil { return err } - // TODO(ukai): if name contains space, ignore it? - // export "a b"=c will error on bash - // bash: export `a b=c': not a valid identifier fmt.Fprintf(f, "export %q=%q\n", name, v) } else { fmt.Fprintf(f, "unset %q\n", name) diff --git a/testcase/override_export.mk b/testcase/override_export.mk index 322d9f5..669bded 100644 --- a/testcase/override_export.mk +++ b/testcase/override_export.mk @@ -1,4 +1,5 @@ -# TODO(c): it overrides "export A" and exports(?) "override B" +# TODO(c|ninja): it overrides "export A" and exports(?) "override B" +# ninja: can't export variable with space in name (by bash). override export A:=override_A export override B:=export_B |