source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'

install! 'cocoapods', :deterministic_uuids => false

# Location of gRPC's repo root relative to this file.
GRPC_LOCAL_SRC = '../../..'

# Install the dependencies in the main target plus all test targets.
%w(
GrpcIosTest
).each do |target_name|
  target target_name do
    pod 'Protobuf', :path => "#{GRPC_LOCAL_SRC}/third_party/protobuf", :inhibit_warnings => true

    pod '!ProtoCompiler',            :path => "#{GRPC_LOCAL_SRC}/src/objective-c"
    pod '!ProtoCompiler-gRPCPlugin', :path => "#{GRPC_LOCAL_SRC}/src/objective-c"

    pod 'BoringSSL-GRPC',       :podspec => "#{GRPC_LOCAL_SRC}/src/objective-c", :inhibit_warnings => true

    pod 'gRPC/CFStream',           :path => GRPC_LOCAL_SRC
    pod 'gRPC-Core/CFStream-Implementation',      :path => GRPC_LOCAL_SRC
    pod 'gRPC-RxLibrary', :path => GRPC_LOCAL_SRC
    pod 'gRPC-ProtoRPC',  :path => GRPC_LOCAL_SRC, :inhibit_warnings => true
    pod 'RemoteTest', :path => "../tests/RemoteTestClient", :inhibit_warnings => true
  end
end

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['GCC_TREAT_WARNINGS_AS_ERRORS'] = 'YES'
    end

    # CocoaPods creates duplicated library targets of gRPC-Core when the test targets include
    # non-default subspecs of gRPC-Core. All of these library targets start with prefix 'gRPC-Core'
    # and require the same error suppresion.
    if target.name.start_with?('gRPC-Core')
      target.build_configurations.each do |config|
        # TODO(zyc): Remove this setting after the issue is resolved
        # GPR_UNREACHABLE_CODE causes "Control may reach end of non-void
        # function" warning
        config.build_settings['GCC_WARN_ABOUT_RETURN_TYPE'] = 'NO'
        # Abseil isn't free from the following warning
        config.build_settings['GCC_WARN_64_TO_32_BIT_CONVERSION'] = 'NO'
        config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] = '$(inherited) COCOAPODS=1 GRPC_CRONET_WITH_PACKET_COALESCING=1'
      end
    end

    # Activate Cronet for the dedicated build configuration 'Cronet', which will be used solely by
    # the test target 'InteropTestsRemoteWithCronet'
    # Activate GRPCCall+InternalTests functions for the dedicated build configuration 'Test', which will
    # be used by all test targets using it.
    if target.name == 'gRPC' || target.name.start_with?('gRPC.')
      target.build_configurations.each do |config|
        config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] = '$(inherited) COCOAPODS=1 GRPC_TEST_OBJC=1'
      end
    end

    # Enable NSAssert on gRPC
    if target.name == 'gRPC' || target.name.start_with?('gRPC.') ||
        target.name == 'ProtoRPC' || target.name.start_with?('ProtoRPC.') ||
        target.name == 'RxLibrary' || target.name.start_with?('RxLibrary.') 
      target.build_configurations.each do |config|
        if config.name != 'Release'
          config.build_settings['ENABLE_NS_ASSERTIONS'] = 'YES'
        end
      end
    end
  end
end
