1014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch# Copyright 2015 the V8 project authors. All rights reserved. 2014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch# Use of this source code is governed by a BSD-style license that can be 3014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch# found in the LICENSE file. 4014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 5014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 6014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochimport os 7014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochimport os.path 8014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 9014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 10014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochdef GetNinjaOutputDirectory(v8_root, configuration=None): 11014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch """Returns <v8_root>/<output_dir>/(Release|Debug). 12014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 13014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch The configuration chosen is the one most recently generated/built, but can be 14014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch overriden via the <configuration> parameter. Detects a custom output_dir 15014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch specified by GYP_GENERATOR_FLAGS.""" 16014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 17014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch output_dir = 'out' 18014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch generator_flags = os.getenv('GYP_GENERATOR_FLAGS', '').split(' ') 19014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch for flag in generator_flags: 20014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch name_value = flag.split('=', 1) 21014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch if len(name_value) == 2 and name_value[0] == 'output_dir': 22014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch output_dir = name_value[1] 23014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 24014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch root = os.path.join(v8_root, output_dir) 25014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch if configuration: 26014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os.path.join(root, configuration) 27014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 28014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch debug_path = os.path.join(root, 'Debug') 29014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch release_path = os.path.join(root, 'Release') 30014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 31014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch def is_release_newer(test_path): 32014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch try: 33014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch debug_mtime = os.path.getmtime(os.path.join(debug_path, test_path)) 34014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch except os.error: 35014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch debug_mtime = 0 36014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch try: 37014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch rel_mtime = os.path.getmtime(os.path.join(release_path, test_path)) 38014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch except os.error: 39014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch rel_mtime = 0 40014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return rel_mtime >= debug_mtime 41014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 42014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch if is_release_newer('.ninja_log') or is_release_newer('.ninja_deps'): 43014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return release_path 44014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return debug_path 45