Index: pylib/gyp/generator/analyzer.py |
=================================================================== |
--- pylib/gyp/generator/analyzer.py (revision 1971) |
+++ pylib/gyp/generator/analyzer.py (working copy) |
@@ -128,16 +128,20 @@ |
_AddSources(action['inputs'], base_path, base_path_components, results) |
+def _ToLocalPath(toplevel_dir, path): |
+ """Converts |path| to a path relative to |toplevel_dir|.""" |
+ if path == toplevel_dir: |
+ return '' |
+ if path.startswith(toplevel_dir + '/'): |
scottmg
2014/09/02 22:06:45
will there be any problems with \ here?
sky
2014/09/02 22:11:29
Paths should have been mapped to / by the time we
|
+ return path[len(toplevel_dir) + len('/'):] |
+ return path |
+ |
+ |
def _ExtractSources(target, target_dict, toplevel_dir): |
# |target| is either absolute or relative and in the format of the OS. Gyp |
# source paths are always posix. Convert |target| to a posix path relative to |
# |toplevel_dir_|. This is done to make it easy to build source paths. |
- base_path = _ToGypPath(target) |
- if base_path == toplevel_dir: |
- base_path = '' |
- elif base_path.startswith(toplevel_dir + '/'): |
- base_path = base_path[len(toplevel_dir) + len('/'):] |
- base_path = posixpath.dirname(base_path) |
+ base_path = posixpath.dirname(_ToLocalPath(toplevel_dir, _ToGypPath(target))) |
base_path_components = base_path.split('/') |
# Add a trailing '/' so that _AddSources() can easily build paths. |
@@ -223,10 +227,11 @@ |
self.targets = set(config.get('targets', [])) |
-def _WasBuildFileModified(build_file, data, files): |
+def _WasBuildFileModified(build_file, data, files, toplevel_dir): |
"""Returns true if the build file |build_file| is either in |files| or |
- one of the files included by |build_file| is in |files|.""" |
- if _ToGypPath(build_file) in files: |
+ one of the files included by |build_file| is in |files|. |toplevel_dir| is |
+ the root of the source tree.""" |
+ if _ToLocalPath(toplevel_dir, _ToGypPath(build_file)) in files: |
if debug: |
print 'gyp file modified', build_file |
return True |
@@ -239,7 +244,7 @@ |
# |included_files| are relative to the directory of the |build_file|. |
rel_include_file = \ |
_ToGypPath(gyp.common.UnrelativePath(include_file, build_file)) |
- if rel_include_file in files: |
+ if _ToLocalPath(toplevel_dir, rel_include_file) in files: |
if debug: |
print 'included gyp file modified, gyp_file=', build_file, \ |
'included file=', rel_include_file |
@@ -309,7 +314,7 @@ |
build_file = gyp.common.ParseQualifiedTarget(target_name)[0] |
if not build_file in build_file_in_files: |
build_file_in_files[build_file] = \ |
- _WasBuildFileModified(build_file, data, files) |
+ _WasBuildFileModified(build_file, data, files, toplevel_dir) |
if build_file in build_files: |
build_file_targets.add(target) |