# 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" ]
      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",
    ]
    absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]

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

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