# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/linux/pkg_config.gni")
import("//media/media_options.gni")
import("//tools/generate_stubs/rules.gni")

# When libpulse is not directly linked, use stubs to allow for dlopening of the
# binary.
if (use_pulseaudio && !link_pulseaudio) {
  generate_stubs("libpulse_stubs") {
    extra_header = "pulse/pulse_stub_header.fragment"
    sigs = [ "pulse/pulse.sigs" ]
    output_name = "pulse/pulse_stubs"
    deps = [
      "//base",
    ]
  }
}

config("platform_config") {
  defines = []
  if (is_chromecast) {
    defines += [ "IS_CHROMECAST" ]
  }
  if (use_alsa) {
    defines += [ "USE_ALSA" ]
  }
}

source_set("audio") {
  # Do not expand the visibility here without double-checking with OWNERS, this
  # is a roll-up target which is part of the //media component. Most other DEPs
  # should be using //media and not directly DEP this roll-up target.
  visibility = [
    "//media",

    "//media/renderers",

    # TODO(dalecurtis): CoreAudioUtil::IsCoreAudioSupported() should probably
    # move into media/base/win.
    "//media/device_monitors",

    # TODO(dalecurtis): Move android audio pieces into //media/audio.
    "//media/base/android",
  ]
  sources = [
    "agc_audio_stream.h",
    "alive_checker.cc",
    "alive_checker.h",
    "audio_debug_file_writer.cc",
    "audio_debug_file_writer.h",
    "audio_debug_recording_helper.cc",
    "audio_debug_recording_helper.h",
    "audio_debug_recording_manager.cc",
    "audio_debug_recording_manager.h",
    "audio_debug_recording_session.h",
    "audio_debug_recording_session_impl.cc",
    "audio_debug_recording_session_impl.h",
    "audio_device_description.cc",
    "audio_device_description.h",
    "audio_device_name.cc",
    "audio_device_name.h",
    "audio_device_thread.cc",
    "audio_device_thread.h",
    "audio_features.cc",
    "audio_features.h",
    "audio_input_controller.cc",
    "audio_input_controller.h",
    "audio_input_delegate.cc",
    "audio_input_delegate.h",
    "audio_input_device.cc",
    "audio_input_device.h",
    "audio_input_ipc.cc",
    "audio_input_ipc.h",
    "audio_input_stream_data_interceptor.cc",
    "audio_input_stream_data_interceptor.h",
    "audio_input_sync_writer.cc",
    "audio_input_sync_writer.h",
    "audio_io.h",
    "audio_manager.cc",
    "audio_manager.h",
    "audio_manager_base.cc",
    "audio_manager_base.h",
    "audio_output_controller.cc",
    "audio_output_controller.h",
    "audio_output_delegate.cc",
    "audio_output_delegate.h",
    "audio_output_device.cc",
    "audio_output_device.h",
    "audio_output_device_thread_callback.cc",
    "audio_output_device_thread_callback.h",
    "audio_output_dispatcher.cc",
    "audio_output_dispatcher.h",
    "audio_output_dispatcher_impl.cc",
    "audio_output_dispatcher_impl.h",
    "audio_output_ipc.cc",
    "audio_output_ipc.h",
    "audio_output_proxy.cc",
    "audio_output_proxy.h",
    "audio_output_resampler.cc",
    "audio_output_resampler.h",
    "audio_output_stream_sink.cc",
    "audio_output_stream_sink.h",
    "audio_power_monitor.cc",
    "audio_power_monitor.h",
    "audio_processing.cc",
    "audio_processing.h",
    "audio_sink_parameters.cc",
    "audio_sink_parameters.h",
    "audio_source_diverter.h",
    "audio_source_parameters.cc",
    "audio_source_parameters.h",
    "audio_sync_reader.cc",
    "audio_sync_reader.h",
    "audio_system.cc",
    "audio_system.h",
    "audio_system_helper.cc",
    "audio_system_helper.h",
    "audio_system_impl.cc",
    "audio_system_impl.h",
    "audio_thread.h",
    "audio_thread_hang_monitor.cc",
    "audio_thread_hang_monitor.h",
    "audio_thread_impl.cc",
    "audio_thread_impl.h",
    "clockless_audio_sink.cc",
    "clockless_audio_sink.h",
    "fake_audio_input_stream.cc",
    "fake_audio_input_stream.h",
    "fake_audio_log_factory.cc",
    "fake_audio_log_factory.h",
    "fake_audio_manager.cc",
    "fake_audio_manager.h",
    "fake_audio_output_stream.cc",
    "fake_audio_output_stream.h",
    "null_audio_sink.cc",
    "null_audio_sink.h",
    "power_observer_helper.cc",
    "power_observer_helper.h",
    "scoped_task_runner_observer.cc",
    "scoped_task_runner_observer.h",
    "simple_sources.cc",
    "simple_sources.h",
    "sounds/audio_stream_handler.cc",
    "sounds/audio_stream_handler.h",
    "sounds/sounds_manager.cc",
    "sounds/sounds_manager.h",
    "sounds/wav_audio_handler.cc",
    "sounds/wav_audio_handler.h",
    "virtual_audio_input_stream.cc",
    "virtual_audio_input_stream.h",
    "virtual_audio_output_stream.cc",
    "virtual_audio_output_stream.h",
    "virtual_audio_sink.cc",
    "virtual_audio_sink.h",
  ]
  deps = [
    "//base",
    "//media/base",
    "//url",
  ]
  libs = []
  configs += [
    ":platform_config",
    "//media:subcomponent_config",
  ]

  if (is_mac) {
    sources += [
      "mac/audio_auhal_mac.cc",
      "mac/audio_auhal_mac.h",
      "mac/audio_device_listener_mac.cc",
      "mac/audio_device_listener_mac.h",
      "mac/audio_input_mac.cc",
      "mac/audio_input_mac.h",
      "mac/audio_low_latency_input_mac.cc",
      "mac/audio_low_latency_input_mac.h",
      "mac/audio_manager_mac.cc",
      "mac/audio_manager_mac.h",
      "mac/core_audio_util_mac.cc",
      "mac/core_audio_util_mac.h",
      "mac/coreaudio_dispatch_override.cc",
      "mac/coreaudio_dispatch_override.h",
      "mac/scoped_audio_unit.cc",
      "mac/scoped_audio_unit.h",
    ]
    libs += [
      "AudioToolbox.framework",
      "AudioUnit.framework",
      "CoreAudio.framework",
      "CoreFoundation.framework",
    ]
  }

  if (is_win) {
    sources += [
      "win/audio_device_listener_win.cc",
      "win/audio_device_listener_win.h",
      "win/audio_low_latency_input_win.cc",
      "win/audio_low_latency_input_win.h",
      "win/audio_low_latency_output_win.cc",
      "win/audio_low_latency_output_win.h",
      "win/audio_manager_win.cc",
      "win/audio_manager_win.h",
      "win/avrt_wrapper_win.cc",
      "win/avrt_wrapper_win.h",
      "win/core_audio_util_win.cc",
      "win/core_audio_util_win.h",
      "win/device_enumeration_win.cc",
      "win/device_enumeration_win.h",
      "win/waveout_output_win.cc",
      "win/waveout_output_win.h",
    ]

    libs += [
      "dxguid.lib",
      "setupapi.lib",
      "winmm.lib",
    ]
  }

  if (is_android) {
    sources += [
      "android/audio_manager_android.cc",
      "android/audio_manager_android.h",
      "android/audio_record_input.cc",
      "android/audio_record_input.h",
      "android/audio_track_output_stream.cc",
      "android/audio_track_output_stream.h",
      "android/muteable_audio_output_stream.h",
      "android/opensles_input.cc",
      "android/opensles_input.h",
      "android/opensles_output.cc",
      "android/opensles_output.h",
      "android/opensles_util.cc",
      "android/opensles_util.h",
      "android/opensles_wrapper.cc",
    ]

    deps += [ "//media/base/android:media_jni_headers" ]
  }

  if (is_linux) {
    sources += [ "linux/audio_manager_linux.cc" ]
  }

  if (use_alsa) {
    libs += [ "asound" ]
    sources += [
      "alsa/alsa_input.cc",
      "alsa/alsa_input.h",
      "alsa/alsa_output.cc",
      "alsa/alsa_output.h",
      "alsa/alsa_util.cc",
      "alsa/alsa_util.h",
      "alsa/alsa_wrapper.cc",
      "alsa/alsa_wrapper.h",
      "alsa/audio_manager_alsa.cc",
      "alsa/audio_manager_alsa.h",
    ]
  }

  if (use_cras) {
    sources += [
      "cras/audio_manager_cras.cc",
      "cras/audio_manager_cras.h",
      "cras/cras_input.cc",
      "cras/cras_input.h",
      "cras/cras_unified.cc",
      "cras/cras_unified.h",
    ]
    configs += [ ":libcras" ]
    deps += [
      "//chromeos/audio",
      "//chromeos/dbus",
    ]
  }

  if (use_pulseaudio) {
    sources += [
      "pulse/audio_manager_pulse.cc",
      "pulse/audio_manager_pulse.h",
      "pulse/pulse_input.cc",
      "pulse/pulse_input.h",
      "pulse/pulse_output.cc",
      "pulse/pulse_output.h",
      "pulse/pulse_util.cc",
      "pulse/pulse_util.h",
    ]

    if (link_pulseaudio) {
      configs += [ ":libpulse" ]
    } else {
      deps += [ ":libpulse_stubs" ]
    }
  }

  if (is_fuchsia) {
    sources += [
      "fuchsia/audio_manager_fuchsia.cc",
      "fuchsia/audio_manager_fuchsia.h",
      "fuchsia/audio_output_stream_fuchsia.cc",
      "fuchsia/audio_output_stream_fuchsia.h",
    ]
    deps += [ "//third_party/fuchsia-sdk/sdk:media" ]
  }

  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
}

if (use_cras) {
  pkg_config("libcras") {
    packages = [ "libcras" ]
  }
}

if (use_pulseaudio && link_pulseaudio) {
  pkg_config("libpulse") {
    packages = [ "libpulse" ]
  }
}

# Note: This is a roll-up only target; do not expand the visibility. DEPS should
# depend on the //media:test_support target instead.
static_library("test_support") {
  visibility = [ "//media:test_support" ]
  testonly = true
  sources = [
    "audio_debug_recording_test.cc",
    "audio_debug_recording_test.h",
    "audio_device_info_accessor_for_tests.cc",
    "audio_device_info_accessor_for_tests.h",
    "audio_system_test_util.cc",
    "audio_system_test_util.h",
    "audio_unittest_util.cc",
    "audio_unittest_util.h",
    "mock_audio_debug_recording_manager.cc",
    "mock_audio_debug_recording_manager.h",
    "mock_audio_manager.cc",
    "mock_audio_manager.h",
    "mock_audio_source_callback.cc",
    "mock_audio_source_callback.h",
    "test_audio_thread.cc",
    "test_audio_thread.h",
  ]
  configs += [
    ":platform_config",
    "//media:media_config",
  ]
  deps = [
    "//base",
    "//base/test:test_support",

    # Do not add any other //media deps except this; it will automatically pull
    # a dep on //media which is required to ensure test_support targets all use
    # the same //media component and not build a target's sources individually.
    "//media/base:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
  if (use_alsa) {
    sources += [
      "alsa/mock_alsa_wrapper.cc",
      "alsa/mock_alsa_wrapper.h",
    ]
  }
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "alive_checker_unittest.cc",
    "audio_debug_file_writer_unittest.cc",
    "audio_debug_recording_helper_unittest.cc",
    "audio_debug_recording_manager_unittest.cc",
    "audio_debug_recording_session_impl_unittest.cc",
    "audio_input_controller_unittest.cc",
    "audio_input_device_unittest.cc",
    "audio_input_stream_data_interceptor_unittest.cc",
    "audio_input_sync_writer_unittest.cc",
    "audio_input_unittest.cc",
    "audio_manager_unittest.cc",
    "audio_output_controller_unittest.cc",
    "audio_output_device_unittest.cc",
    "audio_output_proxy_unittest.cc",
    "audio_output_unittest.cc",
    "audio_power_monitor_unittest.cc",
    "audio_sync_reader_unittest.cc",
    "audio_system_impl_unittest.cc",
    "audio_thread_hang_monitor_unittest.cc",
    "power_observer_helper_unittest.cc",
    "simple_sources_unittest.cc",
    "virtual_audio_input_stream_unittest.cc",
    "virtual_audio_output_stream_unittest.cc",
  ]

  deps = [
    "//base",
    "//base/test:test_support",
    "//media:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//url",
  ]

  configs += [
    ":platform_config",
    "//build/config/compiler:no_size_t_to_int_warning",
    "//media:media_config",
  ]

  if (is_android) {
    sources += [ "android/audio_android_unittest.cc" ]
    deps += [ "//ui/gl" ]
  }

  if (is_mac) {
    sources += [
      "mac/audio_auhal_mac_unittest.cc",
      "mac/audio_device_listener_mac_unittest.cc",
      "mac/audio_low_latency_input_mac_unittest.cc",
    ]
  }

  if (is_chromeos || is_chromecast) {
    sources += [
      "sounds/audio_stream_handler_unittest.cc",
      "sounds/sounds_manager_unittest.cc",
      "sounds/test_data.cc",
      "sounds/test_data.h",
      "sounds/wav_audio_handler_unittest.cc",
    ]

    if (!is_chromecast) {
      deps += [
        "//chromeos/audio",
        "//chromeos/dbus:test_support",
      ]
    }

    if (use_cras) {
      sources += [
        "cras/cras_input_unittest.cc",
        "cras/cras_unified_unittest.cc",
      ]
    }
  }

  if (is_win) {
    sources += [
      "win/audio_device_listener_win_unittest.cc",
      "win/audio_low_latency_input_win_unittest.cc",
      "win/audio_low_latency_output_win_unittest.cc",
      "win/audio_output_win_unittest.cc",
      "win/core_audio_util_win_unittest.cc",
      "win/device_enumeration_win_unittest.cc",
    ]
  }

  if (use_alsa) {
    sources += [
      "alsa/alsa_output_unittest.cc",
      "alsa/alsa_util_unittest.cc",
      "audio_low_latency_input_output_unittest.cc",
    ]
  }
}
