%YAML 1.2
--- |
  # This file has been automatically generated from a template file.
  # Please make modifications to
  # `templates/gRPC-RxLibrary.podspec.template` instead. This file can be
  # regenerated from the template by running
  # `tools/buildgen/generate_projects.sh`.

  # Copyright 2015 gRPC authors.
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  #     http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.


  Pod::Spec.new do |s|
    s.name     = 'gRPC-RxLibrary'
    version = '${settings.version}'
    s.version  = version
    s.summary  = 'Reactive Extensions library for iOS/OSX.'
    s.homepage = 'https://grpc.io'
    s.license  = 'Apache License, Version 2.0'
    s.authors  = { 'The gRPC contributors' => 'grpc-packages@google.com' }

    s.source = {
      :git => 'https://github.com/grpc/grpc.git',
      :tag => "v#{version}",
    }

    s.ios.deployment_target = '7.0'
    s.osx.deployment_target = '10.9'
    s.tvos.deployment_target = '10.0'

    name = 'RxLibrary'
    s.module_name = name
    s.header_dir = name

    src_dir = 'src/objective-c/RxLibrary'
    s.source_files = "#{src_dir}/*.{h,m}", "#{src_dir}/**/*.{h,m}"
    s.private_header_files = "#{src_dir}/private/*.h"
    s.header_mappings_dir = "#{src_dir}"

    s.pod_target_xcconfig = {
      'CLANG_WARN_STRICT_PROTOTYPES' => 'NO',
    }
  end
