| Index: pylib/gyp/generator/analyzer.py
|
| ===================================================================
|
| --- pylib/gyp/generator/analyzer.py (revision 1962)
|
| +++ pylib/gyp/generator/analyzer.py (working copy)
|
| @@ -64,22 +64,17 @@
|
| 'CONFIGURATION_NAME']:
|
| generator_default_variables[unused] = ''
|
|
|
| +
|
| def _ToGypPath(path):
|
| """Converts a path to the format used by gyp."""
|
| if os.sep == '\\' and os.altsep == '/':
|
| return path.replace('\\', '/')
|
| return path
|
|
|
| -def __ExtractBasePath(target):
|
| - """Extracts the path components of the specified gyp target path."""
|
| - last_index = target.rfind('/')
|
| - if last_index == -1:
|
| - return ''
|
| - return target[0:(last_index + 1)]
|
|
|
| -def __ResolveParent(path, base_path_components):
|
| +def _ResolveParent(path, base_path_components):
|
| """Resolves |path|, which starts with at least one '../'. Returns an empty
|
| - string if the path shouldn't be considered. See __AddSources() for a
|
| + string if the path shouldn't be considered. See _AddSources() for a
|
| description of |base_path_components|."""
|
| depth = 0
|
| while path.startswith('../'):
|
| @@ -94,7 +89,8 @@
|
| return '/'.join(base_path_components[0:len(base_path_components) - depth]) + \
|
| '/' + path
|
|
|
| -def __AddSources(sources, base_path, base_path_components, result):
|
| +
|
| +def _AddSources(sources, base_path, base_path_components, result):
|
| """Extracts valid sources from |sources| and adds them to |result|. Each
|
| source file is relative to |base_path|, but may contain '..'. To make
|
| resolving '..' easier |base_path_components| contains each of the
|
| @@ -109,7 +105,7 @@
|
| org_source = source
|
| source = source[0] + source[1:].replace('//', '/')
|
| if source.startswith('../'):
|
| - source = __ResolveParent(source, base_path_components)
|
| + source = _ResolveParent(source, base_path_components)
|
| if len(source):
|
| result.append(source)
|
| continue
|
| @@ -117,12 +113,14 @@
|
| if debug:
|
| print 'AddSource', org_source, result[len(result) - 1]
|
|
|
| -def __ExtractSourcesFromAction(action, base_path, base_path_components,
|
| - results):
|
| +
|
| +def _ExtractSourcesFromAction(action, base_path, base_path_components,
|
| + results):
|
| if 'inputs' in action:
|
| - __AddSources(action['inputs'], base_path, base_path_components, results)
|
| + _AddSources(action['inputs'], base_path, base_path_components, results)
|
|
|
| -def __ExtractSources(target, target_dict, toplevel_dir):
|
| +
|
| +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.
|
| @@ -134,7 +132,7 @@
|
| base_path = posixpath.dirname(base_path)
|
| base_path_components = base_path.split('/')
|
|
|
| - # Add a trailing '/' so that __AddSources() can easily build paths.
|
| + # Add a trailing '/' so that _AddSources() can easily build paths.
|
| if len(base_path):
|
| base_path += '/'
|
|
|
| @@ -143,20 +141,21 @@
|
|
|
| results = []
|
| if 'sources' in target_dict:
|
| - __AddSources(target_dict['sources'], base_path, base_path_components,
|
| - results)
|
| + _AddSources(target_dict['sources'], base_path, base_path_components,
|
| + results)
|
| # Include the inputs from any actions. Any changes to these effect the
|
| # resulting output.
|
| if 'actions' in target_dict:
|
| for action in target_dict['actions']:
|
| - __ExtractSourcesFromAction(action, base_path, base_path_components,
|
| - results)
|
| + _ExtractSourcesFromAction(action, base_path, base_path_components,
|
| + results)
|
| if 'rules' in target_dict:
|
| for rule in target_dict['rules']:
|
| - __ExtractSourcesFromAction(rule, base_path, base_path_components, results)
|
| + _ExtractSourcesFromAction(rule, base_path, base_path_components, results)
|
|
|
| return results
|
|
|
| +
|
| class Target(object):
|
| """Holds information about a particular target:
|
| deps: set of the names of direct dependent targets.
|
| @@ -165,6 +164,7 @@
|
| self.deps = set()
|
| self.match_status = MATCH_STATUS_TBD
|
|
|
| +
|
| class Config(object):
|
| """Details what we're looking for
|
| look_for_dependency_only: if true only search for a target listing any of
|
| @@ -219,6 +219,7 @@
|
| except IOError:
|
| raise Exception('Unable to open file', file_path)
|
|
|
| +
|
| def _WasBuildFileModified(build_file, data, files):
|
| """Returns true if the build file |build_file| is either in |files| or
|
| one of the files included by |build_file| is in |files|."""
|
| @@ -242,7 +243,8 @@
|
| return True
|
| return False
|
|
|
| -def __GenerateTargets(data, target_list, target_dicts, toplevel_dir, files):
|
| +
|
| +def _GenerateTargets(data, target_list, target_dicts, toplevel_dir, files):
|
| """Generates a dictionary with the key the name of a target and the value a
|
| Target. |toplevel_dir| is the root of the source tree. If the sources of
|
| a target match that of |files|, then |target.matched| is set to True.
|
| @@ -278,8 +280,8 @@
|
| target.match_status = MATCH_STATUS_MATCHES
|
| matched = True
|
| else:
|
| - sources = __ExtractSources(target_name, target_dicts[target_name],
|
| - toplevel_dir)
|
| + sources = _ExtractSources(target_name, target_dicts[target_name],
|
| + toplevel_dir)
|
| for source in sources:
|
| if source in files:
|
| target.match_status = MATCH_STATUS_MATCHES
|
| @@ -292,6 +294,7 @@
|
|
|
| return targets, matched
|
|
|
| +
|
| def _GetUnqualifiedToQualifiedMapping(all_targets, to_find):
|
| """Returns a mapping (dictionary) from unqualified name to qualified name for
|
| all the targets in |to_find|."""
|
| @@ -308,6 +311,7 @@
|
| return result
|
| return result
|
|
|
| +
|
| def _DoesTargetDependOn(target, all_targets):
|
| """Returns true if |target| or any of its dependencies matches the supplied
|
| set of paths. This updates |matches| of the Targets as it recurses.
|
| @@ -327,6 +331,7 @@
|
| dep_target.match_status = MATCH_STATUS_DOESNT_MATCH
|
| return False
|
|
|
| +
|
| def _GetTargetsDependingOn(all_targets, possible_targets):
|
| """Returns the list of targets in |possible_targets| that depend (either
|
| directly on indirectly) on the matched files.
|
| @@ -339,6 +344,7 @@
|
| found.append(gyp.common.ParseQualifiedTarget(target)[1])
|
| return found
|
|
|
| +
|
| def _WriteOutput(params, **values):
|
| """Writes the output, either to stdout or a file is specified."""
|
| output_path = params.get('generator_flags', {}).get(
|
| @@ -353,6 +359,7 @@
|
| except IOError as e:
|
| print 'Error writing to output file', output_path, str(e)
|
|
|
| +
|
| def CalculateVariables(default_variables, params):
|
| """Calculate additional variables for use in the build (called by gyp)."""
|
| flavor = gyp.common.GetFlavor(params)
|
| @@ -375,6 +382,7 @@
|
| operating_system = 'linux' # Keep this legacy behavior for now.
|
| default_variables.setdefault('OS', operating_system)
|
|
|
| +
|
| def GenerateOutput(target_list, target_dicts, data, params):
|
| """Called by gyp as the final stage. Outputs results."""
|
| config = Config()
|
| @@ -406,9 +414,9 @@
|
| break
|
|
|
| if not matched:
|
| - all_targets, matched = __GenerateTargets(data, target_list, target_dicts,
|
| - toplevel_dir,
|
| - frozenset(config.files))
|
| + all_targets, matched = _GenerateTargets(data, target_list, target_dicts,
|
| + toplevel_dir,
|
| + frozenset(config.files))
|
|
|
| # Set of targets that refer to one of the files.
|
| if config.look_for_dependency_only:
|
|
|