125bb94a194859e03fb9a7be8e34294c412d97db9scottmg@chromium.org# Copyright (c) 2012 Google Inc. All rights reserved. 26d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org# Use of this source code is governed by a BSD-style license that can be 36d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org# found in the LICENSE file. 46d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org 56d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.orgimport collections 625bb94a194859e03fb9a7be8e34294c412d97db9scottmg@chromium.orgimport os 76d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.orgimport gyp 86d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.orgimport gyp.common 925bb94a194859e03fb9a7be8e34294c412d97db9scottmg@chromium.orgimport gyp.msvs_emulation 106d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.orgimport json 113e35424d0f99be22e6de6eb3e2c4a60254ee9167thakis@chromium.orgimport sys 126d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org 13de68fc77635d5aff76e52ca8255f7f4e16847116thakis@chromium.orggenerator_supports_multiple_toolsets = True 14de68fc77635d5aff76e52ca8255f7f4e16847116thakis@chromium.org 156d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.orggenerator_wants_static_library_dependencies_adjusted = False 166d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org 176d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.orggenerator_default_variables = { 186d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org} 196d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.orgfor dirname in ['INTERMEDIATE_DIR', 'SHARED_INTERMEDIATE_DIR', 'PRODUCT_DIR', 206d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org 'LIB_DIR', 'SHARED_LIB_DIR']: 216d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org # Some gyp steps fail if these are empty(!). 226d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org generator_default_variables[dirname] = 'dir' 236d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.orgfor unused in ['RULE_INPUT_PATH', 'RULE_INPUT_ROOT', 'RULE_INPUT_NAME', 243e35424d0f99be22e6de6eb3e2c4a60254ee9167thakis@chromium.org 'RULE_INPUT_DIRNAME', 'RULE_INPUT_EXT', 256d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org 'EXECUTABLE_PREFIX', 'EXECUTABLE_SUFFIX', 266d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org 'STATIC_LIB_PREFIX', 'STATIC_LIB_SUFFIX', 2720568c84a371274c21a763a5680bad0b9bea081atorne@chromium.org 'SHARED_LIB_PREFIX', 'SHARED_LIB_SUFFIX', 2820568c84a371274c21a763a5680bad0b9bea081atorne@chromium.org 'CONFIGURATION_NAME']: 296d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org generator_default_variables[unused] = '' 306d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org 316d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org 326d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.orgdef CalculateVariables(default_variables, params): 336d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org generator_flags = params.get('generator_flags', {}) 34315c6d71c86e47204686753a91c10693b0e17d9cthakis@chromium.org for key, val in generator_flags.items(): 35315c6d71c86e47204686753a91c10693b0e17d9cthakis@chromium.org default_variables.setdefault(key, val) 36315c6d71c86e47204686753a91c10693b0e17d9cthakis@chromium.org default_variables.setdefault('OS', gyp.common.GetFlavor(params)) 376d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org 3825bb94a194859e03fb9a7be8e34294c412d97db9scottmg@chromium.org flavor = gyp.common.GetFlavor(params) 3925bb94a194859e03fb9a7be8e34294c412d97db9scottmg@chromium.org if flavor =='win': 4025bb94a194859e03fb9a7be8e34294c412d97db9scottmg@chromium.org # Copy additional generator configuration data from VS, which is shared 4125bb94a194859e03fb9a7be8e34294c412d97db9scottmg@chromium.org # by the Windows Ninja generator. 4225bb94a194859e03fb9a7be8e34294c412d97db9scottmg@chromium.org import gyp.generator.msvs as msvs_generator 4325bb94a194859e03fb9a7be8e34294c412d97db9scottmg@chromium.org generator_additional_non_configuration_keys = getattr(msvs_generator, 4425bb94a194859e03fb9a7be8e34294c412d97db9scottmg@chromium.org 'generator_additional_non_configuration_keys', []) 4525bb94a194859e03fb9a7be8e34294c412d97db9scottmg@chromium.org generator_additional_path_sections = getattr(msvs_generator, 4625bb94a194859e03fb9a7be8e34294c412d97db9scottmg@chromium.org 'generator_additional_path_sections', []) 4725bb94a194859e03fb9a7be8e34294c412d97db9scottmg@chromium.org 48d298d5f26cc170b170ccb42a913dddb401581e27scottmg@chromium.org gyp.msvs_emulation.CalculateCommonVariables(default_variables, params) 4925bb94a194859e03fb9a7be8e34294c412d97db9scottmg@chromium.org 506d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org 5136504c0ed15cf167c2fff375b7e0ee663c6f2076thakis@chromium.orgdef CalculateGeneratorInputInfo(params): 5236504c0ed15cf167c2fff375b7e0ee663c6f2076thakis@chromium.org """Calculate the generator specific info that gets fed to input (called by 5336504c0ed15cf167c2fff375b7e0ee663c6f2076thakis@chromium.org gyp).""" 5436504c0ed15cf167c2fff375b7e0ee663c6f2076thakis@chromium.org generator_flags = params.get('generator_flags', {}) 5536504c0ed15cf167c2fff375b7e0ee663c6f2076thakis@chromium.org if generator_flags.get('adjust_static_libraries', False): 5636504c0ed15cf167c2fff375b7e0ee663c6f2076thakis@chromium.org global generator_wants_static_library_dependencies_adjusted 5736504c0ed15cf167c2fff375b7e0ee663c6f2076thakis@chromium.org generator_wants_static_library_dependencies_adjusted = True 5836504c0ed15cf167c2fff375b7e0ee663c6f2076thakis@chromium.org 5936504c0ed15cf167c2fff375b7e0ee663c6f2076thakis@chromium.org 606d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.orgdef GenerateOutput(target_list, target_dicts, data, params): 616d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org # Map of target -> list of targets it depends on. 626d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org edges = {} 636d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org 646d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org # Queue of targets to visit. 656d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org targets_to_visit = target_list[:] 666d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org 676d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org while len(targets_to_visit) > 0: 686d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org target = targets_to_visit.pop() 696d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org if target in edges: 706d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org continue 716d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org edges[target] = [] 726d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org 736d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org for dep in target_dicts[target].get('dependencies', []): 746d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org edges[target].append(dep) 756d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org targets_to_visit.append(dep) 766d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org 776d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org filename = 'dump.json' 786d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org f = open(filename, 'w') 796d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org json.dump(edges, f) 806d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org f.close() 816d8d580da0b6bcedf646b1b4fbc6e580d0254ff9evan@chromium.org print 'Wrote json to %s.' % filename 82