Index: build/scripts/slave/build_directory.py |
=================================================================== |
--- build/scripts/slave/build_directory.py (revision 230600) |
+++ build/scripts/slave/build_directory.py (working copy) |
@@ -8,61 +8,63 @@ |
import sys |
+def IsFileNewerThanFile(file_a, file_b): |
+ """Returns True if file_a's mtime is newer than file_b's.""" |
+ def getmtime(f): |
+ try: |
+ return os.path.getmtime(f) |
+ except os.error: |
+ return 0 |
+ return getmtime(file_a) >= getmtime(file_b) |
+ |
+ |
def AreNinjaFilesNewerThanXcodeFiles(src_dir=None): |
"""Returns True if the generated ninja files are newer than the generated |
xcode files. |
- |
+ |
Parameters: |
src_dir: The path to the src directory. If None, it's assumed to be |
at src/ relative to the current working directory. |
""" |
- xcode_stat = 0 |
- ninja_stat = 0 |
- |
src_dir = src_dir or 'src' |
- |
ninja_path = os.path.join(src_dir, 'out', 'Release', 'build.ninja') |
- try: |
- ninja_stat = os.path.getmtime(ninja_path) |
- except os.error: |
- pass |
- |
xcode_path = os.path.join( |
src_dir, 'build', 'all.xcodeproj', 'project.pbxproj') |
- try: |
- xcode_stat = os.path.getmtime(xcode_path) |
- except os.error: |
- pass |
+ return IsFileNewerThanFile(ninja_path, xcode_path) |
- return ninja_stat > xcode_stat |
+def AreNinjaFilesNewerThanMSVSFiles(src_dir=None): |
+ """Returns True if the generated ninja files are newer than the generated |
+ msvs files. |
+ Parameters: |
+ src_dir: The path to the src directory. If None, it's assumed to be |
+ at src/ relative to the current working directory. |
+ """ |
+ src_dir = src_dir or 'src' |
+ ninja_path = os.path.join(src_dir, 'out', 'Release', 'build.ninja') |
+ msvs_path = os.path.join(src_dir, 'build', 'all.sln') |
+ return IsFileNewerThanFile(ninja_path, msvs_path) |
+ |
+ |
def ConvertBuildDirToLegacy(build_dir, use_out=False): |
- """Returns a tuple of (build_dir<str>, legacy<bool>). |
+ """Returns the path to the build directory, relative to the checkout root. |
+ |
+ Assumes that the current working directory is the checkout root. |
""" |
- # TODO(thakis): Make this the canonical source of truth for build_dir for |
- # slave scripts, remove all parameters. |
- legacy_paths = { |
- 'darwin': 'xcodebuild', |
- } |
- bad = False |
+ # TODO(thakis): Remove parameters of this function, rename it to |
+ # GetBuildDirectory(), make it return just a path not a tuple. |
+ if sys.platform.startswith('linux'): |
+ return 'src/out', False |
- platform_key = None |
- for key in legacy_paths: |
- if sys.platform.startswith(key): |
- platform_key = key |
- break |
+ if sys.platform == 'darwin': |
+ if AreNinjaFilesNewerThanXcodeFiles(): |
+ return 'src/out', False |
+ return 'src/xcodebuild', False |
- if (build_dir == 'src/build' and (platform_key or use_out)): |
- print >> sys.stderr, ( |
- 'WARNING: Passed "%s" as --build-dir option on %s. ' |
- 'This is almost certainly incorrect.' % (build_dir, platform_key)) |
- if use_out: |
- legacy_path = 'out' |
- else: |
- legacy_path = legacy_paths[platform_key] |
- build_dir = os.path.join(os.path.dirname(build_dir), legacy_path) |
- print >> sys.stderr, ('Assuming you meant "%s"' % build_dir) |
- bad = True |
+ if sys.platform == 'cygwin' or sys.platform.startswith('win'): |
+ if AreNinjaFilesNewerThanMSVSFiles(): |
+ return 'src/out', False |
+ return 'src/build', False |
- return (build_dir, bad) |
+ raise NotImplementedError('Unexpected platform %s' % sys.platform) |