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 5import collections 6import os 7import gyp 8import gyp.common 9import gyp.msvs_emulation 10import json 11import sys 12 13generator_supports_multiple_toolsets = True 14 15generator_wants_static_library_dependencies_adjusted = False 16 17generator_default_variables = { 18} 19for 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' 23for 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 32def 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 51def 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 60def 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