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

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

copy("lib_unit_tests") {
  testonly = true
  sources = [
    "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}}",
  ]
}
