# Copyright 2016 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("//build/config/linux/gtk/gtk.gni")
import("//build/config/linux/pkg_config.gni")

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

declare_args() {
  # The (major) version of GTK to build against.  A different version may be
  # loaded at runtime.
  gtk_version = 3
}

# GN doesn't check visibility for configs so we give this an obviously internal
# name to discourage random targets from accidentally depending on this and
# bypassing the GTK target's visibility.
pkg_config("gtk_internal_config") {
  # 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" ]
  } else {
    assert(gtk_version == 4)
    packages += [ "gtk4" ]
  }
}

group("gtk") {
  visibility = [
    # This is the only target that can depend on GTK.  Do not add more targets
    # to this list.
    "//ui/gtk:gtk_stubs",

    # These are allow-listed for WebRTC builds.
    "//examples:peerconnection_client",
    "//remoting/host:common",
    "//remoting/host:remoting_me2me_host_static",
    "//remoting/host/file_transfer",
    "//remoting/host/it2me:common",
    "//remoting/host/it2me:remote_assistance_host",
    "//remoting/host/linux",
    "//remoting/test:it2me_standalone_host_main",
    "//webrtc/examples:peerconnection_client",
  ]

  public_configs = [ ":gtk_internal_config" ]
}

# Depend on "gtkprint" to get this.
pkg_config("gtkprint_internal_config") {
  if (gtk_version == 3) {
    packages = [ "gtk+-unix-print-3.0" ]
  } else {
    assert(gtk_version == 4)
    packages = [ "gtk4-unix-print" ]
  }
}

group("gtkprint") {
  visibility = [ "//ui/gtk:*" ]
  public_configs = [ ":gtkprint_internal_config" ]
}
