# Copyright 2014 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/features.gni")
import("//build/config/sysroot.gni")
import("//build/config/ui.gni")
import("//pdf/features.gni")
import("//printing/buildflags/buildflags.gni")
import("//testing/test.gni")
if (is_mac) {
  import("//build/config/mac/mac_sdk.gni")
}
if (is_android) {
  import("//build/config/android/rules.gni")
}
if (use_cups && is_chromeos) {
  import("//printing/backend/tools/code_generator.gni")
}

if ((enable_basic_printing && is_win) || enable_print_preview) {
  # Windows basic printing or print preview requires pdf enabled.
  assert(enable_pdf,
         "Windows basic printing or print preview needs pdf: " +
             "set enable_pdf=true.")
}

# Several targets want to include this header file. We separate it out
# here so multiple targets can depend on it.
source_set("printing_export") {
  sources = [ "printing_export.h" ]
}

if (use_cups && is_chromeos) {
  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("printing") {
  sources = [
    "backend/print_backend.cc",
    "backend/print_backend.h",
    "backend/print_backend_consts.cc",
    "backend/print_backend_consts.h",
    "backend/print_backend_dummy.cc",
    "backend/printing_info_win.cc",
    "backend/printing_info_win.h",
    "emf_win.cc",
    "emf_win.h",
    "metafile.cc",
    "metafile.h",
    "metafile_skia.cc",
    "metafile_skia.h",
    "native_drawing_context.h",
    "nup_parameters.cc",
    "nup_parameters.h",
    "page_number.cc",
    "page_number.h",
    "page_range.cc",
    "page_range.h",
    "page_setup.cc",
    "page_setup.h",
    "page_size_margins.h",
    "pdf_metafile_cg_mac.cc",
    "pdf_metafile_cg_mac.h",
    "pdf_render_settings.h",
    "print_dialog_gtk_interface.h",
    "print_job_constants.cc",
    "print_job_constants.h",
    "print_settings.cc",
    "print_settings.h",
    "print_settings_conversion.cc",
    "print_settings_conversion.h",
    "print_settings_initializer_mac.cc",
    "print_settings_initializer_mac.h",
    "print_settings_initializer_win.cc",
    "print_settings_initializer_win.h",
    "printed_document.cc",
    "printed_document.h",
    "printed_document_mac.cc",
    "printed_document_win.cc",
    "printing_context.cc",
    "printing_context.h",
    "printing_features.cc",
    "printing_features.h",
    "printing_utils.cc",
    "printing_utils.h",
    "pwg_raster_settings.h",
    "units.cc",
    "units.h",
  ]

  configs += [ "//build/config/compiler:noshadowing" ]
  cflags = []
  defines = [ "PRINTING_IMPLEMENTATION" ]

  public_deps = [ "//printing/buildflags" ]
  deps = [
    ":printing_export",
    "//base",
    "//base:i18n",
    "//base/third_party/dynamic_annotations",
    "//cc/paint",
    "//printing/common",
    "//skia",
    "//third_party/icu",
    "//ui/accessibility",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//url",
  ]

  if (use_aura) {
    deps += [ "//ui/aura" ]
  }

  if (is_mac) {
    # Mac-Aura does not support printing.
    if (use_aura) {
      sources -= [ "printed_document_mac.cc" ]
    } else {
      sources += [
        "printing_context_mac.h",
        "printing_context_mac.mm",
      ]
    }
    libs = [
      "AppKit.framework",
      "QuartzCore.framework",
      "ApplicationServices.framework",
      "CoreFoundation.framework",
      "CoreGraphics.framework",
    ]
  }

  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 += [
      "backend/print_backend_win.cc",
      "backend/win_helper.cc",
      "backend/win_helper.h",
      "printed_page_win.cc",
      "printed_page_win.h",
      "printing_context_system_dialog_win.cc",
      "printing_context_system_dialog_win.h",
      "printing_context_win.cc",
      "printing_context_win.h",
    ]
  }

  if (is_android) {
    deps += [ "//ui/android" ]
  }

  if (use_cups) {
    configs += [ ":cups" ]

    if (is_linux) {
      cflags += [
        # 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
        "-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 (is_chromeos) {
      deps += [ ":ipp_handlers_generate" ]

      sources += [
        "backend/cups_connection.cc",
        "backend/cups_connection.h",
        "backend/cups_deleters.cc",
        "backend/cups_deleters.h",
        "backend/cups_ipp_constants.cc",
        "backend/cups_ipp_constants.h",
        "backend/cups_ipp_helper.cc",
        "backend/cups_ipp_helper.h",
        "backend/cups_ipp_utils.cc",
        "backend/cups_ipp_utils.h",
        "backend/cups_jobs.cc",
        "backend/cups_jobs.h",
        "backend/cups_printer.cc",
        "backend/cups_printer.h",
        "backend/ipp_handler_map.h",
        "backend/ipp_handlers.cc",
        "backend/ipp_handlers.h",
        "backend/print_backend_cups_ipp.cc",
        "backend/print_backend_cups_ipp.h",
        "printing_context_chromeos.cc",
        "printing_context_chromeos.h",
        ipp_handler_map_path,
      ]
    } else {
      sources += [
        "backend/cups_helper.cc",
        "backend/cups_helper.h",
        "backend/print_backend_cups.cc",
        "backend/print_backend_cups.h",
      ]

      # We still build the utils for fuzzing.
      if (use_fuzzing_engine) {
        sources += [
          "backend/cups_ipp_constants.cc",
          "backend/cups_ipp_constants.h",
          "backend/cups_ipp_helper.cc",
          "backend/cups_ipp_helper.h",
        ]
      }
    }
  }

  if (is_chromeos) {
    defines += [ "PRINT_BACKEND_AVAILABLE" ]

    sources += [
      "backend/print_backend_chromeos.cc",
      "backend/printing_restrictions.cc",
      "backend/printing_restrictions.h",
      "printed_document_chromeos.cc",
      "printer_query_result_chromeos.h",
      "printing_context_no_system_dialog.cc",
      "printing_context_no_system_dialog.h",
    ]
  } else if (is_android) {
    sources += [
      "printed_document_android.cc",
      "printing_context_android.cc",
      "printing_context_android.h",
    ]

    deps += [ ":printing_jni_headers" ]
  } else if (is_linux) {  # Desktop Linux.
    sources += [
      "printed_document_linux.cc",
      "printing_context_linux.cc",
      "printing_context_linux.h",
    ]
  }
}

static_library("test_support") {
  testonly = true
  sources = [
    "backend/test_print_backend.cc",
    "backend/test_print_backend.h",
    "image.cc",
    "image.h",
    "image_android.cc",
    "image_linux.cc",
    "image_mac.cc",
    "image_win.cc",
  ]
  if (is_fuchsia) {
    sources += [ "image_fuchsia.cc" ]
  }

  configs += [ "//build/config/compiler:noshadowing" ]
  public_deps = [
    "//printing",
    "//ui/gfx/geometry",
  ]
  deps = [
    "//base",
    "//skia",
    "//ui/gfx",
  ]
}

test("printing_unittests") {
  sources = [
    "emf_win_unittest.cc",
    "metafile_skia_unittest.cc",
    "nup_parameters_unittest.cc",
    "page_number_unittest.cc",
    "page_range_unittest.cc",
    "page_setup_unittest.cc",
    "pdf_metafile_cg_mac_unittest.cc",
    "print_settings_conversion_unittest.cc",
    "printing_context_win_unittest.cc",
    "printing_test.h",
    "printing_utils_unittest.cc",
    "units_unittest.cc",
  ]

  configs += [ "//build/config/compiler:noshadowing" ]
  deps = [
    ":printing",
    "//base/test:run_all_unittests",
    "//base/test:test_support",
    "//printing/common",
    "//testing/gmock",
    "//testing/gtest",
    "//ui/base",
    "//ui/gfx",
    "//ui/gfx:test_support",
    "//ui/gfx/geometry",
  ]

  if (is_win || is_mac) {
    sources += [ "printed_document_unittest.cc" ]
  }

  if (is_win) {
    sources += [ "printed_page_win_unittest.cc" ]
  }

  if (use_cups) {
    configs += [ ":cups" ]

    if (is_chromeos) {
      sources += [ "backend/cups_ipp_helper_unittest.cc" ]
    } else {
      sources += [ "backend/cups_helper_unittest.cc" ]
      if (is_linux) {
        sources += [ "backend/print_backend_cups_linux_unittest.cc" ]
      }
      if (is_mac) {
        sources += [ "backend/print_backend_cups_mac_unittest.cc" ]
      }
    }
  }
}

if (use_cups) {
  config("cups") {
    defines = [ "USE_CUPS" ]

    if (is_mac) {
      libs = [ "cups" ]
      lib_dirs = [ "$mac_sdk_path/usr/lib" ]
    } else {
      # rebase_path does not accept an empty string
      if (use_sysroot) {
        cups_sysroot = rebase_path(sysroot)
      } else {
        cups_sysroot = ""
      }
      libs = exec_script("cups_config_helper.py",
                         [
                           "--libs-for-gn",
                           cups_sysroot,
                         ],
                         "value")
    }
  }
}

if (is_android) {
  generate_jni("printing_jni_headers") {
    sources = [ "android/java/src/org/chromium/printing/PrintingContext.java" ]
  }

  android_library("printing_java") {
    deps = [
      "//base:base_java",
      "//base:jni_java",
      "//ui/android:ui_java",
    ]
    sources = [
      "android/java/src/org/chromium/printing/PrintDocumentAdapterWrapper.java",
      "android/java/src/org/chromium/printing/PrintManagerDelegate.java",
      "android/java/src/org/chromium/printing/PrintManagerDelegateImpl.java",
      "android/java/src/org/chromium/printing/Printable.java",
      "android/java/src/org/chromium/printing/PrintingContext.java",
      "android/java/src/org/chromium/printing/PrintingController.java",
      "android/java/src/org/chromium/printing/PrintingControllerImpl.java",
    ]
    annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
  }
}
