# Copyright 2014 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.

assert(is_linux, "This file should only be referenced on Linux")

import("//build/config/features.gni")
import("//build/config/ui.gni")
import("//printing/features/features.gni")

# gn orders flags on a target before flags from configs. The default config
# adds -Wall, and these flags have to be after -Wall -- so they need to come
# from a config and can't be on the target directly.
config("libgtkui_warnings") {
  if (is_clang) {
    cflags = [
      # G_DEFINE_TYPE automatically generates a *get_instance_private inline
      # function after glib 2.37. That's unused. Prevent to complain about it.
      "-Wno-unused-function",

      # G_STATIC_ASSERT uses a typedef as a static_assert.
      "-Wno-unused-local-typedef",
    ]
  }
}

common_sources = [
  "app_indicator_icon.cc",
  "app_indicator_icon.h",
  "app_indicator_icon_menu.cc",
  "app_indicator_icon_menu.h",
  "chrome_gtk_frame.cc",
  "chrome_gtk_frame.h",
  "chrome_gtk_menu_subclasses.cc",
  "chrome_gtk_menu_subclasses.h",
  "gtk_event_loop.cc",
  "gtk_event_loop.h",
  "gtk_key_bindings_handler.cc",
  "gtk_key_bindings_handler.h",
  "gtk_status_icon.cc",
  "gtk_status_icon.h",
  "gtk_ui.cc",
  "gtk_ui.h",
  "gtk_util.cc",
  "gtk_util.h",
  "libgtkui_export.h",
  "menu_util.cc",
  "menu_util.h",
  "native_theme_gtk.cc",
  "native_theme_gtk.h",
  "print_dialog_gtk.cc",
  "print_dialog_gtk.h",
  "printing_gtk_util.cc",
  "printing_gtk_util.h",
  "select_file_dialog_impl.cc",
  "select_file_dialog_impl.h",
  "select_file_dialog_impl_gtk.cc",
  "select_file_dialog_impl_gtk.h",
  "select_file_dialog_impl_kde.cc",
  "skia_utils_gtk.cc",
  "skia_utils_gtk.h",
  "unity_service.cc",
  "unity_service.h",
  "x11_input_method_context_impl_gtk.cc",
  "x11_input_method_context_impl_gtk.h",
]

common_configs = []

if (use_gconf) {
  common_sources += [
    "gconf_listener.cc",
    "gconf_listener.h",
  ]
  common_configs += [ "//build/config/linux/gconf" ]
}

if (use_cups) {
  common_configs += [ "//printing:cups" ]
}

common_configs += [
  ":libgtkui_warnings",
  "//build/config/linux:x11",
]

common_deps = [
  "//base",
  "//base:i18n",
  "//base/third_party/dynamic_annotations",
  "//chrome:extra_resources",
  "//chrome:resources",
  "//chrome:strings",
  "//chrome/app:command_ids",
  "//chrome/app/theme:theme_resources",
  "//components/resources",
  "//content/public/browser",
  "//printing",
  "//skia",
  "//ui/aura",
  "//ui/base",
  "//ui/base/ime",
  "//ui/display",
  "//ui/events",
  "//ui/events:events_base",
  "//ui/events/platform/x11",
  "//ui/gfx",
  "//ui/gfx/geometry",
  "//ui/gfx/x",
  "//ui/native_theme",
  "//ui/resources",
  "//ui/shell_dialogs",
  "//ui/strings",
  "//ui/views",
]

component("libgtk2ui") {
  sources = common_sources
  configs += common_configs
  defines = [ "LIBGTKUI_IMPLEMENTATION" ]

  # GTK2 pulls pangoft2 as dependency, and pangoft2 depends on harfbuzz.
  # To avoid missing indirectly referenced harfbuzz symbols from pango,
  # some hack is required when bundled harfbuzz is used and component build is
  # disabled.
  # See crbug.com/462689 for details.
  all_dependent_configs = [ "//third_party/harfbuzz-ng:pangoft2_link_hack" ]

  deps = common_deps + [
           "//build/config/linux/gtk2",
           "//build/config/linux/gtk2:gtkprint2",
         ]
  public_deps = [
    "//chrome/browser:theme_properties",
  ]
}

component("libgtk3ui") {
  sources = common_sources
  configs += common_configs
  defines = [ "LIBGTKUI_IMPLEMENTATION" ]

  deps = common_deps + [
           "//build/config/linux/gtk3",
           "//build/config/linux/gtk3:gtkprint3",
         ]
  public_deps = [
    "//chrome/browser:theme_properties",
  ]
}
