[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
if test_xcconfig? select_maximal_pod_targets(
target.all_dependent_targets if test_xcconfig?
else target.all_dependent_targets
target.recursive_dependent_targets else
end target.recursive_dependent_targets
end,
)
end end
# @return [Hash<String => String>] # @return [Hash<String => String>]
...@@ -1030,12 +1051,14 @@ module Pod ...@@ -1030,12 +1051,14 @@ module Pod
# @return [Array<PodTarget>] # @return [Array<PodTarget>]
define_build_settings_method :pod_targets_to_link, :memoized => true do define_build_settings_method :pod_targets_to_link, :memoized => true do
pod_targets - pod_targets -
target.search_paths_aggregate_targets.flat_map { |at| at.build_settings(configuration_name).pod_targets_to_link } target.search_paths_aggregate_targets.flat_map { |at| at.build_settings(configuration_name).pod_targets_to_link }
end end
# @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