# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
{
  'variables': {
    'webrtc_all_dependencies': [
      'base/base.gyp:*',
      'common.gyp:*',
      'common_audio/common_audio.gyp:*',
      'common_video/common_video.gyp:*',
      'media/media.gyp:*',
      'modules/modules.gyp:*',
      'p2p/p2p.gyp:*',
      'pc/pc.gyp:*',
      'system_wrappers/system_wrappers.gyp:*',
      'tools/tools.gyp:*',
      'voice_engine/voice_engine.gyp:*',
      '<(webrtc_vp8_dir)/vp8.gyp:*',
      '<(webrtc_vp9_dir)/vp9.gyp:*',
    ],
  },
  'conditions': [
    ['build_with_chromium==0', {
      # TODO(kjellander): Move this to webrtc_all_dependencies once all of talk/
      # has been moved to webrtc/. It can't be processed by Chromium since the
      # reference to buid/java.gypi is using an absolute path (and includes
      # entries cannot contain variables).
      'variables': {
        'webrtc_all_dependencies': [
          'api/api.gyp:*',
        ],
      },
    }],
    ['build_with_chromium==0 and'
     '(OS=="ios" or (OS=="mac" and mac_deployment_target=="10.7"))', {
      # TODO(kjellander): Move this to webrtc_all_dependencies once all of talk/
      # has been moved to webrtc/. It can't be processed by Chromium since the
      # reference to buid/java.gypi is using an absolute path (and includes
      # entries cannot contain variables).
      'variables': {
        'webrtc_all_dependencies': [
          'sdk/sdk.gyp:*',
        ],
      },
    }],
    ['include_tests==1', {
      'includes': [
        'webrtc_tests.gypi',
      ],
    }],
    ['enable_protobuf==1', {
      'targets': [
        {
          # This target should only be built if enable_protobuf is defined
          'target_name': 'rtc_event_log_proto',
          'type': 'static_library',
          'sources': ['call/rtc_event_log.proto',],
          'variables': {
            'proto_in_dir': 'call',
            'proto_out_dir': 'webrtc/call',
          },
        'includes': ['build/protoc.gypi'],
        },
      ],
    }],
    ['enable_protobuf==1', {
      'targets': [
        {
          'target_name': 'rtc_event_log_parser',
          'type': 'static_library',
          'sources': [
            'call/rtc_event_log_parser.cc',
            'call/rtc_event_log_parser.h',
          ],
          'dependencies': [
            'rtc_event_log_proto',
          ],
          'export_dependent_settings': [
            'rtc_event_log_proto',
          ],
        },
      ],
    }],
    ['include_tests==1 and enable_protobuf==1', {
      'targets': [
        {
          'target_name': 'rtc_event_log2rtp_dump',
          'type': 'executable',
          'sources': ['call/rtc_event_log2rtp_dump.cc',],
          'dependencies': [
            '<(DEPTH)/third_party/gflags/gflags.gyp:gflags',
            'rtc_event_log_parser',
            'rtc_event_log_proto',
            'test/test.gyp:rtp_test_utils'
          ],
        },
      ],
    }],
  ],
  'includes': [
    'build/common.gypi',
    'audio/webrtc_audio.gypi',
    'call/webrtc_call.gypi',
    'video/webrtc_video.gypi',
  ],
  'targets': [
    {
      'target_name': 'webrtc_all',
      'type': 'none',
      'dependencies': [
        '<@(webrtc_all_dependencies)',
        'webrtc',
      ],
      'conditions': [
        ['include_tests==1', {
          'dependencies': [
            'api/api_tests.gyp:*',
            'common_video/common_video_unittests.gyp:*',
            'rtc_unittests',
            'system_wrappers/system_wrappers_tests.gyp:*',
            'test/metrics.gyp:*',
            'test/test.gyp:*',
            'webrtc_tests',
          ],
        }],
        ['include_tests==1 and'
         '(OS=="ios" or (OS=="mac" and mac_deployment_target=="10.7"))', {
           'dependencies': [
             'sdk/sdk_tests.gyp:*',
           ],
        }],
      ],
    },
    {
      'target_name': 'webrtc',
      'type': 'static_library',
      'sources': [
        'audio_receive_stream.h',
        'audio_send_stream.h',
        'audio_state.h',
        'call.h',
        'config.h',
        'transport.h',
        'video_receive_stream.h',
        'video_send_stream.h',

        '<@(webrtc_audio_sources)',
        '<@(webrtc_call_sources)',
        '<@(webrtc_video_sources)',
      ],
      'dependencies': [
        'common.gyp:*',
        '<@(webrtc_audio_dependencies)',
        '<@(webrtc_call_dependencies)',
        '<@(webrtc_video_dependencies)',
        'rtc_event_log',
      ],
      'conditions': [
        # TODO(andresp): Chromium should link directly with this and no if
        # conditions should be needed on webrtc build files.
        ['build_with_chromium==1', {
          'dependencies': [
            '<(webrtc_root)/modules/modules.gyp:video_capture',
          ],
        }],
      ],
    },
    {
      'target_name': 'rtc_event_log',
      'type': 'static_library',
      'sources': [
        'call/rtc_event_log.cc',
        'call/rtc_event_log.h',
        'call/rtc_event_log_helper_thread.cc',
        'call/rtc_event_log_helper_thread.h',
      ],
      'conditions': [
        # If enable_protobuf is defined, we want to compile the protobuf
        # and add rtc_event_log.pb.h and rtc_event_log.pb.cc to the sources.
        ['enable_protobuf==1', {
          'dependencies': [
            'rtc_event_log_proto',
          ],
          'defines': [
            'ENABLE_RTC_EVENT_LOG',
          ],
        }],
      ],
    },

  ],
}
