# 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/features/features.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.")
}

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_wrapper.cc",
    "metafile_skia_wrapper.h",
    "native_drawing_context.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_metafile_skia.cc",
    "pdf_metafile_skia.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_export.h",
    "printing_utils.cc",
    "printing_utils.h",
    "pwg_raster_settings.h",
    "units.cc",
    "units.h",
  ]

  cflags = []
  defines = [ "PRINTING_IMPLEMENTATION" ]

  public_deps = [
    "//printing/features",
  ]
  deps = [
    "//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",
      "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 (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",
      ]
    }
  }

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

    sources += [
      "backend/print_backend_chromeos.cc",
      "printed_document_chromeos.cc",
      "printing_context_no_system_dialog.cc",
      "printing_context_no_system_dialog.h",
    ]
  } else if (is_android) {
    sources += [
      "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",
    ]
  }

  if (!is_android) {
    sources += [
      "pdf_transform.cc",
      "pdf_transform.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" ]
  }

  public_deps = [
    "//printing",
    "//ui/gfx/geometry",
  ]
  deps = [
    "//base",
    "//skia",
    "//ui/gfx",
  ]
}

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

  deps = [
    ":printing",
    "//base/test:run_all_unittests",
    "//base/test:test_support",
    "//testing/gtest",
    "//ui/base",
    "//ui/gfx",
    "//ui/gfx:test_support",
    "//ui/gfx/geometry",
  ]

  if (!is_android) {
    sources += [ "pdf_transform_unittest.cc" ]
  }

  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 (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",
    ]
    jni_package = "printing"
  }

  android_library("printing_java") {
    deps = [
      "//base:base_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/PrintingContextInterface.java",
      "android/java/src/org/chromium/printing/PrintingController.java",
      "android/java/src/org/chromium/printing/PrintingControllerImpl.java",
    ]
  }
}
