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

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

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