Commit 7608eea2 authored by Samuel Giddins's avatar Samuel Giddins

[BuildSettings] Ensure aggregate targets that inherit search paths link against…

[BuildSettings] Ensure aggregate targets that inherit search paths link against dynamic dependencies
parent 32d37754
...@@ -35,7 +35,7 @@ module Pod ...@@ -35,7 +35,7 @@ module Pod
# @!method $1 # @!method $1
# #
def self.define_build_settings_method(method_name, build_setting: false, def self.define_build_settings_method(method_name, build_setting: false,
memoized: false, sorted: false, uniqued: false, frozen: true, memoized: false, sorted: false, uniqued: false, compacted: false, frozen: true,
from_search_paths_aggregate_targets: false, from_pod_targets: false, from_search_paths_aggregate_targets: false, from_pod_targets: false,
&implementation) &implementation)
...@@ -63,13 +63,9 @@ module Pod ...@@ -63,13 +63,9 @@ module Pod
retval = retval.dup if dup_before_freeze && retval.frozen? retval = retval.dup if dup_before_freeze && retval.frozen?
retval.concat(pod_targets.flat_map { |pod_target| pod_target.build_settings.public_send("#{method_name}_to_import") }) if from_pod_targets retval.concat(pod_targets.flat_map { |pod_target| pod_target.build_settings.public_send("#{method_name}_to_import") }) if from_pod_targets
retval.concat(target.search_paths_aggregate_targets.flat_map do |aggregate_target| retval.concat(search_paths_aggregate_target_pod_target_build_settings.flat_map(&from_search_paths_aggregate_targets)) if from_search_paths_aggregate_targets
unless build_settings = aggregate_target.build_settings(configuration_name)
raise("#{aggregate_target.inspect} has no build settings for configuration #{configuration_name.inspect}")
end
build_settings.public_send(method_name)
end) if from_search_paths_aggregate_targets
retval.compact! if compacted
retval.uniq! if uniqued retval.uniq! if uniqued
retval.sort! if sorted retval.sort! if sorted
retval.freeze if frozen retval.freeze if frozen
...@@ -515,36 +511,40 @@ module Pod ...@@ -515,36 +511,40 @@ module Pod
target.search_paths_aggregate_targets.each { |at| at.build_settings(configuration_name).__clear__ } target.search_paths_aggregate_targets.each { |at| at.build_settings(configuration_name).__clear__ }
end end
define_build_settings_method :libraries, :memoized => true, :sorted => true, :uniqued => true, :from_pod_targets => true do define_build_settings_method :libraries, :memoized => true, :sorted => true, :uniqued => true, :from_pod_targets => true, :from_search_paths_aggregate_targets => :dynamic_libraries_to_import do
[] []
end end
define_build_settings_method :library_search_paths, :build_setting => true, :memoized => true, :sorted => true, :uniqued => true, :from_pod_targets => true do define_build_settings_method :library_search_paths, :build_setting => true, :memoized => true, :sorted => true, :uniqued => true, :from_pod_targets => true, :from_search_paths_aggregate_targets => :vendored_dynamic_library_search_paths do
[] []
end end
define_build_settings_method :frameworks, :memoized => true, :sorted => true, :uniqued => true, :from_pod_targets => true, :from_search_paths_aggregate_targets => true do define_build_settings_method :frameworks, :memoized => true, :sorted => true, :uniqued => true, :from_pod_targets => true, :from_search_paths_aggregate_targets => :dynamic_frameworks_to_import do
[] []
end end
define_build_settings_method :weak_frameworks, :memoized => true, :sorted => true, :uniqued => true, :from_pod_targets => true, :from_search_paths_aggregate_targets => true do define_build_settings_method :weak_frameworks, :memoized => true, :sorted => true, :uniqued => true, :from_pod_targets => true, :from_search_paths_aggregate_targets => :weak_frameworks do
[] []
end end
define_build_settings_method :framework_search_paths, :build_setting => true, :memoized => true, :sorted => true, :uniqued => true, :from_pod_targets => true, :from_search_paths_aggregate_targets => true do define_build_settings_method :framework_search_paths, :build_setting => true, :memoized => true, :sorted => true, :uniqued => true, :from_pod_targets => true, :from_search_paths_aggregate_targets => :framework_search_paths_to_import do
[] []
end end
define_build_settings_method :swift_include_paths, :build_setting => true, :memoized => true, :sorted => true, :uniqued => true, :from_pod_targets => true, :from_search_paths_aggregate_targets => true do define_build_settings_method :swift_include_paths, :build_setting => true, :memoized => true, :sorted => true, :uniqued => true, :from_pod_targets => true, :from_search_paths_aggregate_targets => :swift_include_paths_to_import do
[] []
end end
define_build_settings_method :header_search_paths, :build_setting => true, :memoized => true, :sorted => true, :uniqued => true, :from_search_paths_aggregate_targets => true do define_build_settings_method :header_search_paths, :build_setting => true, :memoized => true, :sorted => true, :uniqued => true do
if target.requires_frameworks? && pod_targets.all?(&:should_build?) paths = []
[]
else if !target.requires_frameworks? || !pod_targets.all?(&:should_build?)
target.sandbox.public_headers.search_paths(target.platform).dup paths.concat target.sandbox.public_headers.search_paths(target.platform)
end end
paths.concat target.search_paths_aggregate_targets.flat_map { |at| at.build_settings(configuration_name).header_search_paths }
paths
end end
define_build_settings_method :pods_podfile_dir_path, :build_setting => true, :memoized => true do define_build_settings_method :pods_podfile_dir_path, :build_setting => true, :memoized => true do
...@@ -558,10 +558,12 @@ module Pod ...@@ -558,10 +558,12 @@ module Pod
framework_header_paths_for_iquote.flat_map { |p| ['-iquote', p] } framework_header_paths_for_iquote.flat_map { |p| ['-iquote', p] }
end end
define_build_settings_method :framework_header_paths_for_iquote, :memoized => true, :sorted => true, :uniqued => true, :from_search_paths_aggregate_targets => true do define_build_settings_method :framework_header_paths_for_iquote, :memoized => true, :sorted => true, :uniqued => true do
pod_targets. paths = pod_targets.
select { |pt| pt.should_build? && pt.requires_frameworks? }. select { |pt| pt.should_build? && pt.requires_frameworks? }.
map { |pt| "#{pt.build_product_path}/Headers" } map { |pt| "#{pt.build_product_path}/Headers" }
paths.concat target.search_paths_aggregate_targets.flat_map { |at| at.build_settings(configuration_name).framework_header_paths_for_iquote }
paths
end end
define_build_settings_method :pods_root, :build_setting => true, :memoized => true do define_build_settings_method :pods_root, :build_setting => true, :memoized => true do
...@@ -589,8 +591,8 @@ module Pod ...@@ -589,8 +591,8 @@ module Pod
target.spec_consumers.any?(&:requires_arc?) target.spec_consumers.any?(&:requires_arc?)
end end
define_build_settings_method :module_map_files, :memoized => true, :sorted => true, :uniqued => true, :from_search_paths_aggregate_targets => true do define_build_settings_method :module_map_files, :memoized => true, :sorted => true, :uniqued => true, :compacted => true, :from_search_paths_aggregate_targets => :module_map_file_to_import do
pod_targets.map { |t| t.build_settings.module_map_file_to_import }.compact.sort pod_targets.map { |t| t.build_settings.module_map_file_to_import }
end end
define_build_settings_method :always_embed_swift_standard_libraries, :build_setting => true, :memoized => true do define_build_settings_method :always_embed_swift_standard_libraries, :build_setting => true, :memoized => true do
...@@ -632,6 +634,10 @@ module Pod ...@@ -632,6 +634,10 @@ module Pod
target.pod_targets_for_build_configuration(configuration_name) target.pod_targets_for_build_configuration(configuration_name)
end end
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) }
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
# consumers grouped by keys # consumers grouped by keys
# #
......
...@@ -535,12 +535,22 @@ module Pod ...@@ -535,12 +535,22 @@ module Pod
end end
describe 'with inherited targets' do describe 'with inherited targets' do
it 'should include inherited search paths' do before do
# It's the responsibility of the analyzer to # It's the responsibility of the analyzer to
# populate this when the file is loaded. # populate this when the file is loaded.
@blank_target.search_paths_aggregate_targets.replace [@target] @blank_target.search_paths_aggregate_targets.replace [@target]
end
it 'should include inherited search paths' do
@xcconfig = @generator.generate @xcconfig = @generator.generate
@xcconfig.to_hash['FRAMEWORK_SEARCH_PATHS'].should.not.be.nil @xcconfig.to_hash['FRAMEWORK_SEARCH_PATHS'].should == '$(inherited) "${PODS_ROOT}/../../spec/fixtures/banana-lib"'
end
it 'should include OTHER_LDFLAGS to link against dynamic libraries' do
@target.pod_targets.each { |pt| pt.spec_consumers.each { |sc| sc.stubs(:frameworks => %w(UIKit), :libraries => %w(z c++)) } }
@xcconfig = @generator.generate
@xcconfig.to_hash['OTHER_LDFLAGS'].should == '$(inherited) -ObjC -l"c++" -l"z" -framework "UIKit"'
end end
end end
end end
......
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