# 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/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 = [
    ":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:rtc_base_approved",
  ]
}

rtc_executable("vad") {
  sources = [
    "quality_assessment/vad.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/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}}",
  ]
}
