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

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_export.h",
    "printing_utils.cc",
    "printing_utils.h",
    "pwg_raster_settings.h",
    "units.cc",
    "units.h",
  ]

  cflags = []
  defines = [ "PRINTING_IMPLEMENTATION" ]

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

  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",
  ]

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