# Copyright (c) 2014 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("../build/webrtc.gni")

source_set("tools") {
  deps = [
    ":command_line_parser",
  ]
}

source_set("command_line_parser") {
  sources = [
    "simple_command_line_parser.cc",
    "simple_command_line_parser.h",
  ]
  deps = [
    "../base:gtest_prod",
  ]
  configs += [ "..:common_config" ]
  public_configs = [ "..:common_inherited_config" ]
}

source_set("video_quality_analysis") {
  sources = [
    "frame_analyzer/video_quality_analysis.cc",
    "frame_analyzer/video_quality_analysis.h",
  ]
  deps = [
    "../common_video",
  ]
  public_deps = [
    "../common_video",
  ]
}

executable("frame_analyzer") {
  sources = [
    "frame_analyzer/frame_analyzer.cc",
  ]
  deps = [
    ":command_line_parser",
    ":video_quality_analysis",
  ]
}

executable("rgba_to_i420_converter") {
  sources = [
    "converter/converter.cc",
    "converter/converter.h",
    "converter/rgba_to_i420_converter.cc",
  ]
  deps = [
    ":command_line_parser",
    "../common_video",
  ]
}

# TODO(kjellander): Convert all of tools.gyp into GN here.

if (!build_with_chromium) {
  executable("tools_unittests") {
    testonly = true

    sources = [
      "simple_command_line_parser_unittest.cc",
    ]

    configs += [ "..:common_config" ]
    public_configs = [ "..:common_inherited_config" ]

    deps = [
      ":command_line_parser",
      "../test:test_support_main",
      "//testing/gtest",
    ]
  }
}
