| Index: pylib/gyp/generator/ninja.py | 
| =================================================================== | 
| --- pylib/gyp/generator/ninja.py	(revision 1718) | 
| +++ pylib/gyp/generator/ninja.py	(working copy) | 
| @@ -15,6 +15,7 @@ | 
| import gyp.msvs_emulation | 
| import gyp.MSVSUtil as MSVSUtil | 
| import gyp.xcode_emulation | 
| +from cStringIO import StringIO | 
|  | 
| from gyp.common import GetEnvironFallback | 
| import gyp.ninja_syntax as ninja_syntax | 
| @@ -2019,13 +2020,20 @@ | 
| obj += '.' + toolset | 
| output_file = os.path.join(obj, base_path, name + '.ninja') | 
|  | 
| +    ninja_output = StringIO() | 
| writer = NinjaWriter(qualified_target, target_outputs, base_path, build_dir, | 
| -                         OpenOutput(os.path.join(toplevel_build, output_file)), | 
| +                         ninja_output, | 
| toplevel_build, output_file, | 
| flavor, toplevel_dir=options.toplevel_dir) | 
| -    master_ninja.subninja(output_file) | 
| +    target = writer.WriteSpec(spec, config_name, generator_flags) | 
|  | 
| -    target = writer.WriteSpec(spec, config_name, generator_flags) | 
| +    if ninja_output.tell() > 0: | 
| +      # Only create files for ninja files that actually have contents. | 
| +      with OpenOutput(os.path.join(toplevel_build, output_file)) as ninja_file: | 
| +        ninja_file.write(ninja_output.getvalue()) | 
| +      ninja_output.close() | 
| +      master_ninja.subninja(output_file) | 
| + | 
| if target: | 
| if name != target.FinalOutput() and spec['toolset'] == 'target': | 
| target_short_names.setdefault(name, []).append(target) | 
|  |