# Copyright (c) 2017 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.

import("../../../../webrtc.gni")

group("py_quality_assessment") {
  testonly = true
  deps = [
    ":scripts",
    ":unit_tests",
  ]
}

copy("scripts") {
  testonly = true
  sources = [
    "README.md",
    "apm_quality_assessment.py",
    "apm_quality_assessment.sh",
    "apm_quality_assessment_boxplot.py",
    "apm_quality_assessment_export.py",
    "apm_quality_assessment_gencfgs.py",
    "apm_quality_assessment_optimize.py",
  ]
  outputs = [
    "$root_build_dir/py_quality_assessment/{{source_file_part}}",
  ]
  deps = [
    ":apm_configs",
    ":lib",
    ":output",
    "../..:audioproc_f",
    "../../../../resources/audio_processing/test/py_quality_assessment:probing_signals",
  ]
}

copy("apm_configs") {
  testonly = true
  sources = [
    "apm_configs/default.json",
  ]
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  outputs = [
    "$root_build_dir/py_quality_assessment/apm_configs/{{source_file_part}}",
  ]
}  # apm_configs

copy("lib") {
  testonly = true
  sources = [
    "quality_assessment/__init__.py",
    "quality_assessment/annotations.py",
    "quality_assessment/audioproc_wrapper.py",
    "quality_assessment/collect_data.py",
    "quality_assessment/data_access.py",
    "quality_assessment/echo_path_simulation.py",
    "quality_assessment/echo_path_simulation_factory.py",
    "quality_assessment/eval_scores.py",
    "quality_assessment/eval_scores_factory.py",
    "quality_assessment/evaluation.py",
    "quality_assessment/exceptions.py",
    "quality_assessment/export.py",
    "quality_assessment/export_unittest.py",
    "quality_assessment/external_vad.py",
    "quality_assessment/input_mixer.py",
    "quality_assessment/input_signal_creator.py",
    "quality_assessment/results.css",
    "quality_assessment/results.js",
    "quality_assessment/signal_processing.py",
    "quality_assessment/simulation.py",
    "quality_assessment/test_data_generation.py",
    "quality_assessment/test_data_generation_factory.py",
  ]
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  outputs = [
    "$root_build_dir/py_quality_assessment/quality_assessment/{{source_file_part}}",
  ]
  deps = [
    "../../../../resources/audio_processing/test/py_quality_assessment:noise_tracks",
  ]
}

copy("output") {
  testonly = true
  sources = [
    "output/README.md",
  ]
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  outputs = [
    "$root_build_dir/py_quality_assessment/output/{{source_file_part}}",
  ]
}

group("unit_tests") {
  testonly = true
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  deps = [
    ":apm_vad",
    ":fake_polqa",
    ":lib_unit_tests",
    ":scripts_unit_tests",
    ":vad",
  ]
}

rtc_executable("fake_polqa") {
  testonly = true
  sources = [
    "quality_assessment/fake_polqa.cc",
  ]
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  output_name = "py_quality_assessment/quality_assessment/fake_polqa"
  deps = [
    "../../../..:webrtc_common",
    "../../../../rtc_base:checks",
    "../../../../rtc_base:rtc_base_approved",
  ]
}

rtc_executable("vad") {
  sources = [
    "quality_assessment/vad.cc",
  ]
  deps = [
    "../../../..:webrtc_common",
    "../../../../common_audio",
    "../../../../rtc_base:rtc_base_approved",
  ]
}

rtc_executable("apm_vad") {
  sources = [
    "quality_assessment/apm_vad.cc",
  ]
  deps = [
    "../..",
    "../../../..:webrtc_common",
    "../../../../common_audio",
    "../../../../rtc_base:rtc_base_approved",
    "../../../../system_wrappers:metrics_default",
    "../../vad",
  ]
}

rtc_executable("sound_level") {
  sources = [
    "quality_assessment/sound_level.cc",
  ]
  deps = [
    "../..",
    "../../../..:webrtc_common",
    "../../../../common_audio",
    "../../../../rtc_base:rtc_base_approved",
    "../../../../system_wrappers:metrics_default",
  ]
}

copy("lib_unit_tests") {
  testonly = true
  sources = [
    "quality_assessment/annotations_unittest.py",
    "quality_assessment/echo_path_simulation_unittest.py",
    "quality_assessment/eval_scores_unittest.py",
    "quality_assessment/fake_external_vad.py",
    "quality_assessment/input_mixer_unittest.py",
    "quality_assessment/signal_processing_unittest.py",
    "quality_assessment/simulation_unittest.py",
    "quality_assessment/test_data_generation_unittest.py",
  ]
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  outputs = [
    "$root_build_dir/py_quality_assessment/quality_assessment/{{source_file_part}}",
  ]
}

copy("scripts_unit_tests") {
  testonly = true
  sources = [
    "apm_quality_assessment_unittest.py",
  ]
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  outputs = [
    "$root_build_dir/py_quality_assessment/{{source_file_part}}",
  ]
}
