# Copyright (c) 2022 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/config/linux/pkg_config.gni")
import("//tools/generate_stubs/rules.gni")
import("../../webrtc.gni")

if ((is_linux || is_chromeos) && rtc_use_pipewire) {
  pkg_config("gio") {
    packages = [
      "gio-2.0",
      "gio-unix-2.0",
    ]
  }

  pkg_config("pipewire") {
    packages = [ "libpipewire-0.3" ]
    if (!rtc_link_pipewire) {
      ignore_libs = true
    }
  }

  pkg_config("gbm") {
    packages = [ "gbm" ]
  }
  pkg_config("egl") {
    packages = [ "egl" ]
  }
  pkg_config("epoxy") {
    packages = [ "epoxy" ]
    ignore_libs = true
  }
  pkg_config("libdrm") {
    packages = [ "libdrm" ]
  }

  if (!rtc_link_pipewire) {
    # When libpipewire is not directly linked, use stubs to allow for dlopening of
    # the binary.
    generate_stubs("pipewire_stubs") {
      configs = [
        "../../:common_config",
        ":pipewire",
      ]
      deps = [ "../../rtc_base:logging" ]
      extra_header = "pipewire_stub_header.fragment"
      logging_function = "RTC_LOG(LS_VERBOSE)"
      logging_include = "rtc_base/logging.h"
      output_name = "pipewire_stubs"
      path_from_source = "modules/portal"
      sigs = [ "pipewire.sigs" ]
      if (!build_with_chromium) {
        macro_include = "rtc_base/system/no_cfi_icall.h"
        macro_deps = [ "../../rtc_base/system:no_cfi_icall" ]
      }
    }
  }

  config("pipewire_base") {
    configs = [
      ":gio",
      ":pipewire",
    ]
  }

  config("pipewire_all") {
    configs = [
      ":pipewire_base",
      ":gbm",
      ":egl",
      ":epoxy",
      ":libdrm",
    ]
  }

  config("pipewire_config") {
    defines = [ "WEBRTC_USE_PIPEWIRE" ]

    # Chromecast build config overrides `WEBRTC_USE_PIPEWIRE` even when
    # `rtc_use_pipewire` is not set, which causes pipewire_config to not be
    # included in targets. More details in: webrtc:13898
    if (is_linux && !is_castos) {
      defines += [ "WEBRTC_USE_GIO" ]
    }
  }

  rtc_library("portal") {
    sources = [
      "pipewire_utils.cc",
      "pipewire_utils.h",
      "portal_request_response.h",
      "scoped_glib.cc",
      "scoped_glib.h",
      "xdg_desktop_portal_utils.cc",
      "xdg_desktop_portal_utils.h",
      "xdg_session_details.h",
    ]

    configs += [
      ":gio",
      ":pipewire",
      ":pipewire_config",
    ]

    deps = [
      "../../rtc_base:checks",
      "../../rtc_base:logging",
      "../../rtc_base:sanitizer",
      "../../rtc_base/system:rtc_export",
    ]
    absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]

    if (!rtc_link_pipewire) {
      defines = [ "WEBRTC_DLOPEN_PIPEWIRE" ]

      deps += [ ":pipewire_stubs" ]
    }
  }
}
