# 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_dir = "${root_out_dir}/py_quality_assessment/quality_assessment"
  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",
    "../../vad",
  ]
}

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

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}}",
  ]
}
