| Index: pylib/gyp/generator/ninja.py
 | 
| ===================================================================
 | 
| --- pylib/gyp/generator/ninja.py	(revision 1214)
 | 
| +++ pylib/gyp/generator/ninja.py	(working copy)
 | 
| @@ -5,6 +5,7 @@
 | 
|  import copy
 | 
|  import gyp
 | 
|  import gyp.common
 | 
| +import gyp.msvs_emulation
 | 
|  import gyp.system_test
 | 
|  import gyp.xcode_emulation
 | 
|  import os.path
 | 
| @@ -55,17 +56,17 @@
 | 
|      return arg[len(prefix):]
 | 
|    return arg
 | 
|  
 | 
| -
 | 
| -def QuoteShellArgument(arg):
 | 
| +def QuoteShellArgument(arg, flavor):
 | 
|    """Quote a string such that it will be interpreted as a single argument
 | 
|    by the shell."""
 | 
|    # Rather than attempting to enumerate the bad shell characters, just
 | 
|    # whitelist common OK ones and quote anything else.
 | 
|    if re.match(r'^[a-zA-Z0-9_=-]+$', arg):
 | 
|      return arg  # No quoting necessary.
 | 
| +  if flavor == 'win':
 | 
| +    return gyp.msvs_emulation.QuoteCmdExeArgument(arg)
 | 
|    return "'" + arg.replace("'", "'" + '"\'"' + "'")  + "'"
 | 
|  
 | 
| -
 | 
|  def InvertRelativePath(path):
 | 
|    """Given a relative path like foo/bar, return the inverse relative path:
 | 
|    the path from the relative path back to the origin dir.
 | 
| @@ -556,7 +557,8 @@
 | 
|        intermediate_plist = self.GypPathToUniqueOutput(
 | 
|            os.path.basename(info_plist))
 | 
|        defines = ' '.join(
 | 
| -          [QuoteShellArgument(ninja_syntax.escape('-D' + d)) for d in defines])
 | 
| +          [QuoteShellArgument(ninja_syntax.escape('-D' + d), self.flavor)
 | 
| +           for d in defines])
 | 
|        info_plist = self.ninja.build(intermediate_plist, 'infoplist', info_plist,
 | 
|                                      variables=[('defines',defines)])
 | 
|  
 | 
| @@ -589,7 +591,7 @@
 | 
|        cflags_cc = config.get('cflags_cc', [])
 | 
|  
 | 
|      self.WriteVariableList('defines',
 | 
| -        [QuoteShellArgument(ninja_syntax.escape('-D' + d))
 | 
| +        [QuoteShellArgument(ninja_syntax.escape('-D' + d), self.flavor)
 | 
|           for d in config.get('defines', [])])
 | 
|      self.WriteVariableList('includes',
 | 
|                             ['-I' + self.GypPathToNinja(i)
 | 
| @@ -785,9 +787,12 @@
 | 
|      returned string will start with ' && '."""
 | 
|      if not self.xcode_settings or spec['type'] == 'none' or not output:
 | 
|        return ''
 | 
| -    output = QuoteShellArgument(output)
 | 
| +    output = QuoteShellArgument(output, self.flavor)
 | 
|      target_postbuilds = self.xcode_settings.GetTargetPostbuilds(
 | 
| -        self.config_name, output, QuoteShellArgument(output_binary), quiet=True)
 | 
| +        self.config_name,
 | 
| +        output,
 | 
| +        QuoteShellArgument(output_binary, self.flavor),
 | 
| +        quiet=True)
 | 
|      postbuilds = gyp.xcode_emulation.GetSpecPostbuildCommands(
 | 
|          spec, self.GypPathToNinja, quiet=True)
 | 
|      postbuilds = target_postbuilds + postbuilds
 | 
| 
 |