# Copyright 2017 Google LLC

require 'pathname'

# Uncomment the next two lines for pre-release testing on internal repo
#source 'sso://cpdc-internal/firebase'
#source 'https://cdn.cocoapods.org/'

source 'https://github.com/firebase/SpecsDev.git'
source 'https://github.com/firebase/SpecsStaging.git'
source 'https://cdn.cocoapods.org/'

use_frameworks!

install! 'cocoapods',
    :generate_multiple_pod_projects => true,
    :incremental_installation => true,
    # Disable input/output path checking for generated frameworks to make
    # incremental builds work properly. Without this, changes to the framework
    # may not be picked up in between test runs.
    #
    # See:
    #   https://github.com/CocoaPods/CocoaPods/issues/8073
    #   https://www.ralfebert.de/ios/blog/cocoapods-clean-input-output-files/
    :disable_input_output_paths => true

# Invoke sync_project.rb after installation to force all tests to be a part of
# the project.
post_install do |installer|
  sync = Pathname.new(__FILE__).dirname.join('../../scripts/sync_project.rb')
  system('ruby', sync.to_s)
  if !$?.success?
    raise "sync_project.rb failed with status #{$?.exitstatus}"
  end
end

# Returns true if the user has explicitly requested local sources or if this is
# a non-PR Travis build.
def use_local_sources()
  return ENV.has_key?('USE_LOCAL_SOURCES') || ENV['TRAVIS_PULL_REQUEST'] == 'false'
end

# Adds a `pod name, :path => ../..` declaration to use local sources if the
# Podfile has been configured to operate that way.
#
# This is a build optimization that allows most CI builds to run more quickly
# by just using local sources but allows for nightly and other builds to
# validate that Firestore remains compatible with existing published pods.
def maybe_local_pod(name)
  if use_local_sources()
    pod name, :path => '../..'
  end
end

# Adds local pod declarations for all Firestore's transitive dependencies if
# required.
def configure_local_pods()
  # Firestore is always local; that's what's under development here.
  pod 'FirebaseFirestore', :path => '../..'

  # FirebaseCore must always be a local pod so that CI builds that make changes
  # to its podspec can still function. See Firestore-*-xcodebuild in
  # scripts/install_prereqs.sh for more details.
  pod 'FirebaseCore', :path => '../..'
  pod 'FirebaseCoreDiagnostics', :path => '../..'

  # Pull in local sources conditionally.
  maybe_local_pod 'FirebaseAuth'
  maybe_local_pod 'FirebaseCoreDiagnostics'
end

# Reads the value of the PLATFORM environment variable, converts it to the
# equivalent symbol (e.g. 'iOS' => :ios, 'macOS' => :osx) and returns true if
# the argument matches.
def is_platform(symbol)
  platform = ENV['PLATFORM'] || 'all'
  platform = platform.downcase  # If set, will be frozen.

  if platform == 'macos'
    # CocoaPods calls this osx
    platform = 'osx'
  end
  platform = platform.to_sym

  if symbol == platform || platform == :all
    puts "Adding #{symbol} targets to the project"
    return true
  else
    return false
  end
end

if is_platform(:ios)
  target 'Firestore_Example_iOS' do
    platform :ios, '10.0'

    configure_local_pods()

    target 'Firestore_Tests_iOS' do
      inherit! :search_paths

      pod 'GoogleBenchmark', :podspec => 'GoogleBenchmark.podspec'
      pod 'GoogleTest', :podspec => 'GoogleTest.podspec'
      pod 'ProtobufCpp', :podspec => 'ProtobufCpp.podspec'

      pod 'leveldb-library'
    end

    target 'Firestore_Benchmarks_iOS' do
      inherit! :search_paths

      pod 'GoogleBenchmark', :podspec => 'GoogleBenchmark.podspec'
    end

    target 'Firestore_IntegrationTests_iOS' do
      inherit! :search_paths

      pod 'FirebaseFirestoreSwift', :path => '../../'
      pod 'GoogleBenchmark', :podspec => 'GoogleBenchmark.podspec'
      pod 'GoogleTest', :podspec => 'GoogleTest.podspec'
      pod 'ProtobufCpp', :podspec => 'ProtobufCpp.podspec'

      pod 'leveldb-library'
    end

    target 'Firestore_FuzzTests_iOS' do
      inherit! :search_paths
      platform :ios, '10.0'

      pod 'LibFuzzer', :podspec => 'LibFuzzer.podspec', :inhibit_warnings => true
    end
  end
end

if is_platform(:osx)
  target 'Firestore_Example_macOS' do
    platform :osx, '10.12'

    configure_local_pods()

    target 'Firestore_Tests_macOS' do
      inherit! :search_paths

      pod 'GoogleBenchmark', :podspec => 'GoogleBenchmark.podspec'
      pod 'GoogleTest', :podspec => 'GoogleTest.podspec'
      pod 'ProtobufCpp', :podspec => 'ProtobufCpp.podspec'

      pod 'leveldb-library'
    end

    target 'Firestore_IntegrationTests_macOS' do
      inherit! :search_paths

      pod 'FirebaseFirestoreSwift', :path => '../../'
      pod 'GoogleBenchmark', :podspec => 'GoogleBenchmark.podspec'
      pod 'GoogleTest', :podspec => 'GoogleTest.podspec'
      pod 'ProtobufCpp', :podspec => 'ProtobufCpp.podspec'

      pod 'leveldb-library'
    end
  end
end

if is_platform(:tvos)
  target 'Firestore_Example_tvOS' do
    platform :tvos, '10.0'

    configure_local_pods()

    target 'Firestore_Tests_tvOS' do
      inherit! :search_paths

      pod 'GoogleBenchmark', :podspec => 'GoogleBenchmark.podspec'
      pod 'GoogleTest', :podspec => 'GoogleTest.podspec'
      pod 'ProtobufCpp', :podspec => 'ProtobufCpp.podspec'

      pod 'leveldb-library'
    end

    target 'Firestore_IntegrationTests_tvOS' do
      inherit! :search_paths

      pod 'FirebaseFirestoreSwift', :path => '../../'
      pod 'GoogleBenchmark', :podspec => 'GoogleBenchmark.podspec'
      pod 'GoogleTest', :podspec => 'GoogleTest.podspec'
      pod 'ProtobufCpp', :podspec => 'ProtobufCpp.podspec'

      pod 'leveldb-library'
    end
  end
end
