# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//chromecast/chromecast.gni")

config("public_config") {
  include_dirs = [ "//chromecast/public" ]
}

cast_source_set("public") {
  sources = [
    "avsettings.h",
    "cast_egl_platform.h",
    "cast_egl_platform_shlib.h",
    "cast_media_shlib.h",
    "cast_sys_info.h",
    "cast_sys_info_shlib.h",
    "chromecast_export.h",
    "graphics_properties_shlib.h",
    "graphics_types.h",
    "osd_plane.h",
    "osd_plane_shlib.h",
    "osd_surface.h",
    "reboot_shlib.h",
    "task_runner.h",
    "video_plane.h",
    "volume_control.h",
  ]

  public_configs = [ ":public_config" ]
}

if (is_android) {
  import("//build/config/android/rules.gni")

  java_cpp_enum("java_enums") {
    sources = [
      "avsettings.h",
    ]
  }

  java_cpp_enum("java_enums_volume_control") {
    sources = [
      "volume_control.h",
    ]
  }

  android_library("volume_control_enums_java") {
    srcjar_deps = [ ":java_enums_volume_control" ]
    deps = [
      "//third_party/android_tools:android_support_annotations_java",
    ]
  }
}
