chromium/printing/backend/BUILD.gn

# Copyright 2021 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("//printing/buildflags/buildflags.gni")
if (use_cups && is_chromeos) {
  import("//printing/backend/tools/code_generator.gni")

  ipp_handler_map_path = "$target_gen_dir/backend/ipp_handler_map.cc"

  ipp_code_generate("ipp_handlers_generate") {
    outputs = [ ipp_handler_map_path ]
    args = [ "--ipp-handler-map=" +
             rebase_path(ipp_handler_map_path, root_build_dir) ]
  }
}

component("backend") {
  # Avoid producing a very generic "backend.dll" or "libbackend.so".
  output_name = "printing_backend"

  sources = [
    "print_backend.cc",
    "print_backend.h",
    "print_backend_consts.cc",
    "print_backend_consts.h",
    "print_backend_dummy.cc",
    "print_backend_utils.cc",
    "print_backend_utils.h",
    "printing_restrictions.cc",
    "printing_restrictions.h",
  ]

  public_configs = []
  configs += [ "//printing/:strict" ]
  cflags = []
  defines = [ "IS_PRINT_BACKEND_IMPL" ]

  public_deps = [ "//printing/buildflags" ]
  deps = [
    "//base",
    "//build:chromeos_buildflags",
    "//printing:printing_base",
    "//printing/mojom",
    "//ui/gfx/geometry",
    "//url",
  ]

  if (is_chromeos) {
    # PRINT_BACKEND_AVAILABLE disables the default dummy implementation
    # print backend and enables a custom implementation instead.
    defines += [ "PRINT_BACKEND_AVAILABLE" ]

    sources += [ "print_backend_chromeos.cc" ]
  }

  if (is_win) {
    # PRINT_BACKEND_AVAILABLE disables the default dummy implementation of the
    # print backend and enables a custom implementation instead.
    defines += [ "PRINT_BACKEND_AVAILABLE" ]
    sources += [
      "print_backend_win.cc",
      "print_backend_win.h",
      "printing_info_win.cc",
      "printing_info_win.h",
      "spooler_win.cc",
      "spooler_win.h",
      "win_helper.cc",
      "win_helper.h",
      "xps_utils_win.cc",
      "xps_utils_win.h",
    ]
    public_deps += [ "//printing/mojom" ]
    deps += [ "//services/data_decoder/public/cpp:safe_xml_parser" ]
  }

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

    sources += [
      "cups_deleters.cc",
      "cups_deleters.h",
      "cups_helper.cc",
      "cups_helper.h",
      "cups_weak_functions.h",
    ]

    if (is_linux || is_chromeos) {
      # CUPS 1.6 deprecated the PPD APIs, but we will stay with this API
      # for now as the suitability of the replacement is unclear.
      # More info: crbug.com/226176
      cflags += [ "-Wno-deprecated-declarations" ]
    }

    if (is_mac) {
      # CUPS 1.6 deprecated the PPD APIs. We need to evaluate the
      # effect of migrating Mac. More info: crbug.com/226176
      cflags += [ "-Wno-deprecated-declarations" ]
    }

    # PRINT_BACKEND_AVAILABLE disables the default dummy implementation
    # of the print backend and enables a custom implementation instead.
    defines += [ "PRINT_BACKEND_AVAILABLE" ]

    if (use_cups_ipp) {
      sources += [
        "cups_connection.cc",
        "cups_connection.h",
        "cups_ipp_constants.cc",
        "cups_ipp_constants.h",
        "cups_ipp_helper.cc",
        "cups_ipp_helper.h",
        "cups_jobs.cc",
        "cups_jobs.h",
        "cups_printer.cc",
        "cups_printer.h",
        "print_backend_cups_ipp.cc",
        "print_backend_cups_ipp.h",
      ]
    }

    if (is_chromeos) {
      deps += [ ":ipp_handlers_generate" ]

      sources += [
        "cups_connection_pool.cc",
        "cups_connection_pool.h",
        "ipp_handler_map.h",
        "ipp_handlers.cc",
        "ipp_handlers.h",
        ipp_handler_map_path,
      ]
    }
    if (!is_chromeos_ash) {
      # TODO(crbug.com/40122734): Remove the original CUPS backend for macOS
      # when Cloud Print support is terminated. Follow up after Jan 1, 2021.
      sources += [
        "print_backend_cups.cc",
        "print_backend_cups.h",
      ]

      # We still build the utils for fuzzing if not already built.
      if (use_fuzzing_engine && !use_cups_ipp) {
        sources += [
          "cups_ipp_constants.cc",
          "cups_ipp_constants.h",
          "cups_ipp_helper.cc",
          "cups_ipp_helper.h",
        ]
      }
    }
  }
}

source_set("test_support") {
  testonly = true
  sources = [
    "print_backend_test_constants.cc",
    "print_backend_test_constants.h",
    "test_print_backend.cc",
    "test_print_backend.h",
  ]

  if (use_cups) {
    sources += [
      "mock_cups_printer.cc",
      "mock_cups_printer.h",
    ]
  }

  deps = [
    ":backend",
    "//base",
    "//printing/backend/mojom",
    "//printing/mojom",
    "//testing/gmock",
    "//ui/gfx/geometry",
  ]
}