Home | History | Annotate | Download | only in generator
      1 # Copyright (c) 2012 Google Inc. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import collections
      6 import os
      7 import gyp
      8 import gyp.common
      9 import gyp.msvs_emulation
     10 import json
     11 import sys
     12 
     13 generator_supports_multiple_toolsets = True
     14 
     15 generator_wants_static_library_dependencies_adjusted = False
     16 
     17 generator_default_variables = {
     18 }
     19 for dirname in ['INTERMEDIATE_DIR', 'SHARED_INTERMEDIATE_DIR', 'PRODUCT_DIR',
     20                 'LIB_DIR', 'SHARED_LIB_DIR']:
     21   # Some gyp steps fail if these are empty(!).
     22   generator_default_variables[dirname] = 'dir'
     23 for unused in ['RULE_INPUT_PATH', 'RULE_INPUT_ROOT', 'RULE_INPUT_NAME',
     24                'RULE_INPUT_DIRNAME', 'RULE_INPUT_EXT',
     25                'EXECUTABLE_PREFIX', 'EXECUTABLE_SUFFIX',
     26                'STATIC_LIB_PREFIX', 'STATIC_LIB_SUFFIX',
     27                'SHARED_LIB_PREFIX', 'SHARED_LIB_SUFFIX',
     28                'CONFIGURATION_NAME']:
     29   generator_default_variables[unused] = ''
     30 
     31 
     32 def CalculateVariables(default_variables, params):
     33   generator_flags = params.get('generator_flags', {})
     34   for key, val in generator_flags.items():
     35     default_variables.setdefault(key, val)
     36   default_variables.setdefault('OS', gyp.common.GetFlavor(params))
     37 
     38   flavor = gyp.common.GetFlavor(params)
     39   if flavor =='win':
     40     # Copy additional generator configuration data from VS, which is shared
     41     # by the Windows Ninja generator.
     42     import gyp.generator.msvs as msvs_generator
     43     generator_additional_non_configuration_keys = getattr(msvs_generator,
     44         'generator_additional_non_configuration_keys', [])
     45     generator_additional_path_sections = getattr(msvs_generator,
     46         'generator_additional_path_sections', [])
     47 
     48     gyp.msvs_emulation.CalculateCommonVariables(default_variables, params)
     49 
     50 
     51 def CalculateGeneratorInputInfo(params):
     52   """Calculate the generator specific info that gets fed to input (called by
     53   gyp)."""
     54   generator_flags = params.get('generator_flags', {})
     55   if generator_flags.get('adjust_static_libraries', False):
     56     global generator_wants_static_library_dependencies_adjusted
     57     generator_wants_static_library_dependencies_adjusted = True
     58 
     59 
     60 def GenerateOutput(target_list, target_dicts, data, params):
     61   # Map of target -> list of targets it depends on.
     62   edges = {}
     63 
     64   # Queue of targets to visit.
     65   targets_to_visit = target_list[:]
     66 
     67   while len(targets_to_visit) > 0:
     68     target = targets_to_visit.pop()
     69     if target in edges:
     70       continue
     71     edges[target] = []
     72 
     73     for dep in target_dicts[target].get('dependencies', []):
     74       edges[target].append(dep)
     75       targets_to_visit.append(dep)
     76 
     77   filename = 'dump.json'
     78   f = open(filename, 'w')
     79   json.dump(edges, f)
     80   f.close()
     81   print 'Wrote json to %s.' % filename
     82