chromium/ui/gtk/BUILD.gn

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

import("//build/config/chromeos/ui_mode.gni")
import("//build/config/features.gni")
import("//build/config/linux/gtk/gtk.gni")
import("//build/config/linux/pkg_config.gni")
import("//build/config/ozone.gni")
import("//build/config/ui.gni")
import("//printing/buildflags/buildflags.gni")
import("//testing/test.gni")
import("//tools/generate_stubs/rules.gni")

assert(is_linux || is_chromeos,
       "This file should only be referenced on Linux or Chrome OS")
assert(use_gio, "GIO is required for building with GTK")

source_set("gtk_types") {
  visibility = [ ":gtk_stubs" ]
  public = [ "gtk_types.h" ]
}

pkg_config("gtk_internal_config") {
  # We dlopen() GTK, so make sure not to add a link-time dependency on it.
  ignore_libs = true

  # Gtk requires gmodule, but it does not list it as a dependency in some
  # misconfigured systems.
  packages = [
    "gmodule-2.0",
    "gthread-2.0",
  ]
  if (gtk_version == 3) {
    packages += [
      "gtk+-3.0",
      "gtk+-unix-print-3.0",
    ]
  } else {
    assert(gtk_version == 4)
    packages += [
      "gtk4",
      "gtk4-unix-print",
    ]
  }
}

group("gtk_config") {
  public_configs = [ ":gtk_internal_config" ]
}

generate_stubs("gtk_stubs") {
  visibility = [ ":gtk" ]
  sigs = [
    "gdk_pixbuf.sigs",
    "gdk.sigs",
    "gsk.sigs",
    "gtk.sigs",
    "gio.sigs",
  ]
  extra_header = "gtk.fragment"
  output_name = "gtk_stubs"
  public_deps = [
    ":gtk_config",
    ":gtk_types",
  ]
  logging_function = "LogNoop()"
  logging_include = "ui/gtk/log_noop.h"
}

component("gtk") {
  visibility = [ "//ui/linux:linux_ui_factory" ]
  public = [ "gtk_ui_factory.h" ]

  sources = [
    "gtk_color_mixers.cc",
    "gtk_color_mixers.h",
    "gtk_compat.cc",
    "gtk_compat.h",
    "gtk_key_bindings_handler.cc",
    "gtk_key_bindings_handler.h",
    "gtk_ui.cc",
    "gtk_ui.h",
    "gtk_ui_factory.cc",
    "gtk_ui_platform.h",
    "gtk_ui_platform_stub.cc",
    "gtk_ui_platform_stub.h",
    "gtk_util.cc",
    "gtk_util.h",
    "input_method_context_impl_gtk.cc",
    "input_method_context_impl_gtk.h",
    "native_theme_gtk.cc",
    "native_theme_gtk.h",
    "nav_button_provider_gtk.cc",
    "nav_button_provider_gtk.h",
    "printing/print_dialog_gtk.cc",
    "printing/print_dialog_gtk.h",
    "printing/printing_gtk_util.cc",
    "printing/printing_gtk_util.h",
    "select_file_dialog_linux_gtk.cc",
    "select_file_dialog_linux_gtk.h",
    "settings_provider.h",
    "settings_provider_gtk.cc",
    "settings_provider_gtk.h",
    "window_frame_provider_gtk.cc",
    "window_frame_provider_gtk.h",
  ]
  defines = [ "IS_GTK_IMPL" ]
  configs += [
    "//build/config/linux/pangocairo",
    "//build/linux:gio_config",
  ]

  deps = [
    ":gtk_stubs",
    "//base",
    "//printing/buildflags",
    "//skia",

    # GTK pulls pangoft2, which requires HarfBuzz symbols. When linking
    # our own HarfBuzz avoid mixing symbols from system HarfBuzz and
    # our own through the indirect dependency to harfbuzz-ng here.
    "//third_party:freetype_harfbuzz",
    "//ui/aura",
    "//ui/base",
    "//ui/base:buildflags",
    "//ui/base:ozone_buildflags",
    "//ui/base/ime",
    "//ui/base/ime/linux",
    "//ui/color",
    "//ui/color:mixers",
    "//ui/display",
    "//ui/events",
    "//ui/events:dom_keyboard_layout",
    "//ui/events:dom_keycode_converter",
    "//ui/gfx",
    "//ui/gfx:native_widget_types",
    "//ui/gfx/geometry",
    "//ui/linux:linux_ui",
    "//ui/native_theme",
    "//ui/shell_dialogs",
    "//ui/strings",
    "//ui/views",
    "//url",
  ]

  if (enable_printing) {
    deps += [ "//printing" ]
  }

  if (use_cups) {
    deps += [ "//printing/mojom" ]
  }

  if (ozone_platform_x11) {
    sources += [
      "x/gtk_event_loop_x11.cc",
      "x/gtk_event_loop_x11.h",
      "x/gtk_ui_platform_x11.cc",
      "x/gtk_ui_platform_x11.h",
    ]
    deps += [
      "//ui/base/x",
      "//ui/events/platform/x11",
      "//ui/gfx/x",
    ]
  }

  if (ozone_platform_wayland) {
    sources += [
      "wayland/gtk_ui_platform_wayland.cc",
      "wayland/gtk_ui_platform_wayland.h",
    ]
  }

  # TODO: This should be removed.
  deps += [ "//ui/ozone" ]
}