Chromium Code Reviews| OLD | NEW | 
|---|---|
| 1 # Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2013 The Chromium Authors. All rights reserved. | 
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be | 
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. | 
| 4 | 4 | 
| 5 """Functions for discovering the build directory.""" | 5 """Functions for discovering the build directory.""" | 
| 6 | 6 | 
| 7 import os | 7 import os | 
| 8 import sys | 8 import sys | 
| 9 | 9 | 
| 10 | 10 | 
| 11 def IsFileNewerThanFile(file_a, file_b): | |
| 12 """Returns True if file_a's mtime is newer than file_b's.""" | |
| 13 def getmtime(f): | |
| 14 try: | |
| 15 return os.path.getmtime(f) | |
| 16 except os.error: | |
| 17 return 0 | |
| 18 return getmtime(file_a) > getmtime(file_b) | |
| 19 | |
| 20 | |
| 11 def AreNinjaFilesNewerThanXcodeFiles(src_dir=None): | 21 def AreNinjaFilesNewerThanXcodeFiles(src_dir=None): | 
| 12 """Returns True if the generated ninja files are newer than the generated | 22 """Returns True if the generated ninja files are newer than the generated | 
| 13 xcode files. | 23 xcode files. | 
| 14 | 24 | 
| 15 Parameters: | 25 Parameters: | 
| 16 src_dir: The path to the src directory. If None, it's assumed to be | 26 src_dir: The path to the src directory. If None, it's assumed to be | 
| 17 at src/ relative to the current working directory. | 27 at src/ relative to the current working directory. | 
| 18 """ | 28 """ | 
| 19 xcode_stat = 0 | |
| 20 ninja_stat = 0 | |
| 21 | |
| 22 src_dir = src_dir or 'src' | 29 src_dir = src_dir or 'src' | 
| 23 | |
| 24 ninja_path = os.path.join(src_dir, 'out', 'Release', 'build.ninja') | 30 ninja_path = os.path.join(src_dir, 'out', 'Release', 'build.ninja') | 
| 25 try: | |
| 26 ninja_stat = os.path.getmtime(ninja_path) | |
| 27 except os.error: | |
| 28 pass | |
| 29 | |
| 30 xcode_path = os.path.join( | 31 xcode_path = os.path.join( | 
| 31 src_dir, 'build', 'all.xcodeproj', 'project.pbxproj') | 32 src_dir, 'build', 'all.xcodeproj', 'project.pbxproj') | 
| 32 try: | 33 return IsFileNewerThanFile(ninja_path, xcode_path) | 
| 33 xcode_stat = os.path.getmtime(xcode_path) | |
| 34 except os.error: | |
| 35 pass | |
| 36 | 34 | 
| 37 return ninja_stat > xcode_stat | 35 | 
| 36 def AreNinjaFilesNewerThanMSVSFiles(src_dir=None): | |
| 37 """Returns True if the generated ninja files are newer than the generated | |
| 38 msvs files. | |
| 39 | |
| 40 Parameters: | |
| 41 src_dir: The path to the src directory. If None, it's assumed to be | |
| 42 at src/ relative to the current working directory. | |
| 43 """ | |
| 44 src_dir = src_dir or 'src' | |
| 45 ninja_path = os.path.join(src_dir, 'out', 'Release', 'build.ninja') | |
| 46 msvs_path = os.path.join(src_dir, 'build', 'all.sln') | |
| 47 return IsFileNewerThanFile(ninja_path, msvs_path) | |
| 38 | 48 | 
| 39 | 49 | 
| 40 def ConvertBuildDirToLegacy(build_dir, use_out=False): | 50 def ConvertBuildDirToLegacy(build_dir, use_out=False): | 
| 41 """Returns a tuple of (build_dir<str>, legacy<bool>). | 51 """Returns the path to the build directory, relative to the checkout root. | 
| 52 | |
| 53 Assumes that the current working directory is the checkout root. | |
| 42 """ | 54 """ | 
| 43 # TODO(thakis): Make this the canonical source of truth for build_dir for | 55 # TODO(thakis): Remove parameters of this function, rename it to | 
| 44 # slave scripts, remove all parameters. | 56 # GetBuildDirectory(), make it return just a path not a tuple. | 
| 45 legacy_paths = { | 57 if sys.platform.startswith('linux'): | 
| 46 'darwin': 'xcodebuild', | 58 return 'src/out', False | 
| 47 } | |
| 48 bad = False | |
| 49 | 59 | 
| 50 platform_key = None | 60 if sys.platform == 'darwin': | 
| 51 for key in legacy_paths: | 61 if AreNinjaFilesNewerThanXcodeFiles(): | 
| 52 if sys.platform.startswith(key): | 62 return 'src/out', False | 
| 53 platform_key = key | 63 return 'src/xcodebuild', False | 
| 54 break | |
| 55 | 64 | 
| 56 if (build_dir == 'src/build' and (platform_key or use_out)): | 65 if sys.platform == 'cygwin' or sys.platform.startswith('win'): | 
| 
 
iannucci
2013/10/22 02:31:55
nit: if sys.platform.startswith(('win', 'cygwin'))
 
 | |
| 57 print >> sys.stderr, ( | 66 if AreNinjaFilesNewerThanMSVSFiles(): | 
| 58 'WARNING: Passed "%s" as --build-dir option on %s. ' | 67 return 'src/out', False | 
| 59 'This is almost certainly incorrect.' % (build_dir, platform_key)) | 68 return 'src/build', False | 
| 60 if use_out: | |
| 61 legacy_path = 'out' | |
| 62 else: | |
| 63 legacy_path = legacy_paths[platform_key] | |
| 64 build_dir = os.path.join(os.path.dirname(build_dir), legacy_path) | |
| 65 print >> sys.stderr, ('Assuming you meant "%s"' % build_dir) | |
| 66 bad = True | |
| 67 | 69 | 
| 68 return (build_dir, bad) | 70 raise NotImplementedError('Unexpected platform %s' % sys.platform) | 
| OLD | NEW |