# 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 ((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",
  ]
}

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_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/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) {
      # rebase_path does not accept an empty string
      if (use_sysroot) {
        cups_sysroot = rebase_path(sysroot)
      } else {
        cups_sysroot = ""
      }
      cups_version = exec_script("cups_config_helper.py",
                                 [
                                   "--api-version",
                                   cups_sysroot,
                                 ],
                                 "trim string")

      if (cups_version == "1.6" || cups_version == "1.7") {
        cflags += [
          # CUPS 1.6 deprecated the PPD APIs, but we will stay with this
          # API for now as supported Linux and Mac OS'es are still using
          # older versions of CUPS. More info: crbug.com/226176
          "-Wno-deprecated-declarations",
          # CUPS 1.7 deprecates httpConnectEncrypt(), see the mac section
          # below.
        ]
      }
    }

    if (is_mac) {
      # The 10.9 SDK includes cups 1.7, which deprecates
      # httpConnectEncrypt() in favor of httpConnect2(). hhttpConnect2()
      # is new in 1.7, so it doesn't exist on OS X 10.6-10.8 and we
      # can't use it until 10.9 is our minimum system version.
      # (cups_version isn't reliable on OS X, so key the check off of
      # mac_sdk).
      # With a 10.8 deployment target, several other APIs are deprecated.
      # We're still on CUPS 1.4 until Linux no longer needs to support it, see
      # comment above.
      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) {
      sources += [
        "backend/cups_connection.cc",
        "backend/cups_connection.h",
        "backend/cups_deleters.cc",
        "backend/cups_deleters.h",
        "backend/cups_ipp_util.cc",
        "backend/cups_ipp_util.h",
        "backend/cups_jobs.cc",
        "backend/cups_jobs.h",
        "backend/cups_printer.cc",
        "backend/cups_printer.h",
        "backend/print_backend_cups_ipp.cc",
        "backend/print_backend_cups_ipp.h",
        "printing_context_chromeos.cc",
        "printing_context_chromeos.h",
      ]
    } 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_util.cc",
          "backend/cups_ipp_util.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",
      "printing_features_chromeos.cc",
      "printing_features_chromeos.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_util_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",
      "//ui/android:ui_java",
    ]
    java_files = [
      "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",
    ]
  }
}
