Add ninja generator flag for writing library deps.

This adds a flag to the ninja generator to specify a file to write library
deps to as generation proceeds. This is so GN can suck the deps out.

BUG=288991
Review=https://codereview.chromium.org/23601020/


git-svn-id: http://gyp.googlecode.com/svn/trunk@1723 78cadc50-ecff-11dd-a971-7dbc132099af
diff --git a/pylib/gyp/generator/ninja.py b/pylib/gyp/generator/ninja.py
index f37d440..01df42f 100644
--- a/pylib/gyp/generator/ninja.py
+++ b/pylib/gyp/generator/ninja.py
@@ -211,7 +211,7 @@
 class NinjaWriter:
   def __init__(self, qualified_target, target_outputs, base_dir, build_dir,
                output_file, toplevel_build, output_file_name, flavor,
-               toplevel_dir=None):
+               deps_file=None, toplevel_dir=None):
     """
     base_dir: path from source root to directory containing this gyp file,
               by gyp semantics, all input paths are relative to this
@@ -245,6 +245,7 @@
     # Relative path from base dir to build dir.
     base_to_top = gyp.common.InvertRelativePath(base_dir, toplevel_dir)
     self.base_to_build = os.path.join(base_to_top, build_dir)
+    self.link_deps_file = deps_file
 
   def ExpandSpecial(self, path, product_dir=None):
     """Expand specials like $!PRODUCT_DIR in |path|.
@@ -982,6 +983,13 @@
           continue
         linkable = target.Linkable()
         if linkable:
+          if self.link_deps_file:
+            # Save the mapping of link deps.
+            self.link_deps_file.write(self.qualified_target)
+            self.link_deps_file.write(' ')
+            self.link_deps_file.write(target.binary)
+            self.link_deps_file.write('\n')
+
           if (self.flavor == 'win' and
               target.component_objs and
               self.msvs_settings.IsUseLibraryDependencyInputs(config_name)):
@@ -2006,6 +2014,14 @@
   # target_short_names is a map from target short name to a list of Target
   # objects.
   target_short_names = {}
+
+  # Extract the optional link deps file name.
+  LINK_DEPS_FILE = 'link_deps_file'
+  if LINK_DEPS_FILE in generator_flags:
+    link_deps_file = open(generator_flags.get(LINK_DEPS_FILE), 'wb')
+  else:
+    link_deps_file = None
+
   for qualified_target in target_list:
     # qualified_target is like: third_party/icu/icu.gyp:icui18n#target
     build_file, name, toolset = \
@@ -2031,7 +2047,9 @@
     writer = NinjaWriter(qualified_target, target_outputs, base_path, build_dir,
                          ninja_output,
                          toplevel_build, output_file,
-                         flavor, toplevel_dir=options.toplevel_dir)
+                         flavor, link_deps_file,
+                         toplevel_dir=options.toplevel_dir)
+
     target = writer.WriteSpec(spec, config_name, generator_flags)
 
     if ninja_output.tell() > 0: