[BuildSettings] Properly filter out pod targets whose specs are subsets of another target

parent 70036af6
...@@ -434,6 +434,25 @@ module Pod ...@@ -434,6 +434,25 @@ module Pod
end end
end end
# Filters out pod targets whose `specs` are a subset of
# another target's.
#
# @param [Array<PodTarget>] dependent_targets
#
# @return [Array<PodTarget>]
#
def select_maximal_pod_targets(pod_targets)
subset_targets = []
pod_targets.uniq.combination(2) do |a, b|
if (a.specs - b.specs).empty?
subset_targets << a
elsif (b.specs - a.specs).empty?
subset_targets << b
end
end
pod_targets - subset_targets
end
# A subclass that generates build settings for a {PodTarget} # A subclass that generates build settings for a {PodTarget}
class PodTargetSettings < BuildSettings class PodTargetSettings < BuildSettings
#-------------------------------------------------------------------------# #-------------------------------------------------------------------------#
...@@ -755,11 +774,13 @@ module Pod ...@@ -755,11 +774,13 @@ module Pod
# @return [Array<PodTarget>] # @return [Array<PodTarget>]
define_build_settings_method :dependent_targets, :memoized => true do define_build_settings_method :dependent_targets, :memoized => true do
select_maximal_pod_targets(
if test_xcconfig? if test_xcconfig?
target.all_dependent_targets target.all_dependent_targets
else else
target.recursive_dependent_targets target.recursive_dependent_targets
end end,
)
end end
# @return [Hash<String => String>] # @return [Hash<String => String>]
...@@ -1035,7 +1056,9 @@ module Pod ...@@ -1035,7 +1056,9 @@ module Pod
# @return [Array<PodTarget>] # @return [Array<PodTarget>]
define_build_settings_method :search_paths_aggregate_target_pod_target_build_settings, :memoized => true, :uniqued => true do define_build_settings_method :search_paths_aggregate_target_pod_target_build_settings, :memoized => true, :uniqued => true do
target.search_paths_aggregate_targets.flat_map { |at| at.build_settings(configuration_name).pod_targets.flat_map(&:build_settings) } pod_targets = target.search_paths_aggregate_targets.flat_map { |at| at.build_settings(configuration_name).pod_targets }
pod_targets = select_maximal_pod_targets(pod_targets)
pod_targets.flat_map(&:build_settings)
end end
# Returns the +user_target_xcconfig+ for all pod targets and their spec # Returns the +user_target_xcconfig+ for all pod targets and their spec
......
...@@ -44,6 +44,7 @@ module Pod ...@@ -44,6 +44,7 @@ module Pod
:spec_consumers => [consumer], :spec_consumers => [consumer],
:uses_modular_headers? => false, :uses_modular_headers? => false,
:uses_swift? => false, :uses_swift? => false,
:specs => [vspec],
) )
vendored_dep_target.stubs(:build_settings => PodTargetSettings.new(vendored_dep_target, false)) vendored_dep_target.stubs(:build_settings => PodTargetSettings.new(vendored_dep_target, false))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment