示例#1
0
    def strict_deps_for_target(self, target, predicate=None):
        """Get the dependencies of `target` filtered by `predicate`, accounting for 'strict_deps'.

    If 'strict_deps' is on, instead of using the transitive closure of dependencies, targets will
    only be able to see their immediate dependencies declared in the BUILD file. The 'strict_deps'
    setting is obtained from the result of `get_compile_settings()`.

    NB: This includes the current target in the result.
    """
        if self._native_build_settings.get_strict_deps_value_for_target(
                target):
            strict_deps = target.strict_dependencies(DependencyContext())
            if predicate:
                filtered_deps = list(filter(predicate, strict_deps))
            else:
                filtered_deps = strict_deps
            deps = [target] + filtered_deps
        else:
            deps = self.context.build_graph.transitive_subgraph_of_addresses(
                [target.address], predicate=predicate)

        # Filter out the beginning target depending on whether it matches the predicate.
        # TODO: There should be a cleaner way to do this.
        deps = filter(predicate, deps)

        return deps
示例#2
0
  def strict_deps_for_target(self, target, predicate=None):
    """Get the dependencies of `target` filtered by `predicate`, accounting for 'strict_deps'.

    If 'strict_deps' is on, instead of using the transitive closure of dependencies, targets will
    only be able to see their immediate dependencies declared in the BUILD file. The 'strict_deps'
    setting is obtained from the result of `get_compile_settings()`.

    NB: This includes the current target in the result.
    """
    if self._compile_settings.get_subsystem_target_mirrored_field_value('strict_deps', target):
      strict_deps = target.strict_dependencies(DependencyContext())
      if predicate:
        filtered_deps = list(filter(predicate, strict_deps))
      else:
        filtered_deps = strict_deps
      deps = [target] + filtered_deps
    else:
      deps = self.context.build_graph.transitive_subgraph_of_addresses(
        [target.address], predicate=predicate)

    return deps