# 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/buildflag_header.gni")
import("//build/config/features.gni")
import("//build/config/jumbo.gni")
import("//pdf/features.gni")
import("//testing/test.gni")
import("//third_party/pdfium/pdfium.gni")

# Generate a buildflag header for compile-time checking of PDF support.
buildflag_header("buildflags") {
  header = "buildflags.h"
  flags = [ "ENABLE_PDF=$enable_pdf" ]
}

if (enable_pdf) {
  pdf_engine = 0  # 0 PDFium

  jumbo_static_library("pdf") {
    deps = [
      "//base",
      "//gin",
      "//net",
      "//ppapi/cpp:objects",
      "//ppapi/cpp/private:internal_module",
      "//ui/base",
      "//ui/gfx/range",
    ]

    public = [
      "pdf.h",
      "pdf_ppapi.h",
    ]

    sources = [
      "chunk_stream.h",
      "document_loader.h",
      "document_loader_impl.cc",
      "document_loader_impl.h",
      "draw_utils.cc",
      "draw_utils.h",
      "out_of_process_instance.cc",
      "out_of_process_instance.h",
      "paint_aggregator.cc",
      "paint_aggregator.h",
      "paint_manager.cc",
      "paint_manager.h",
      "pdf.cc",
      "pdf.h",
      "pdf_engine.cc",
      "pdf_engine.h",
      "pdf_ppapi.cc",
      "pdf_ppapi.h",
      "pdf_transform.cc",
      "pdf_transform.h",
      "preview_mode_client.cc",
      "preview_mode_client.h",
      "range_set.cc",
      "range_set.h",
      "url_loader_wrapper.h",
      "url_loader_wrapper_impl.cc",
      "url_loader_wrapper_impl.h",
    ]

    include_dirs = []
    defines = []

    if (pdf_engine == 0) {
      deps += [
        "//pdf/pdfium/fuzzers",
        "//printing",
        "//third_party/pdfium",
      ]

      sources += [
        "pdfium/pdfium_api_string_buffer_adapter.cc",
        "pdfium/pdfium_api_string_buffer_adapter.h",
        "pdfium/pdfium_assert_matching_enums.cc",
        "pdfium/pdfium_engine.cc",
        "pdfium/pdfium_engine.h",
        "pdfium/pdfium_engine_exports.cc",
        "pdfium/pdfium_engine_exports.h",
        "pdfium/pdfium_form_filler.cc",
        "pdfium/pdfium_form_filler.h",
        "pdfium/pdfium_mem_buffer_file_read.cc",
        "pdfium/pdfium_mem_buffer_file_read.h",
        "pdfium/pdfium_mem_buffer_file_write.cc",
        "pdfium/pdfium_mem_buffer_file_write.h",
        "pdfium/pdfium_page.cc",
        "pdfium/pdfium_page.h",
        "pdfium/pdfium_print.cc",
        "pdfium/pdfium_print.h",
        "pdfium/pdfium_range.cc",
        "pdfium/pdfium_range.h",
        "pdfium/pdfium_unsupported_features.cc",
        "pdfium/pdfium_unsupported_features.h",
      ]

      include_dirs += [ "//third_party/pdfium" ]

      defines += [ "PDFIUM_PRINT_TEXT_WITH_GDI" ]
      if (pdf_enable_xfa) {
        defines += [ "PDF_ENABLE_XFA" ]
      }
    }
  }

  test("pdf_unittests") {
    sources = [
      "chunk_stream_unittest.cc",
      "document_loader_impl_unittest.cc",
      "pdf_transform_unittest.cc",
      "range_set_unittest.cc",
      "run_all_unittests.cc",
    ]

    deps = [
      ":pdf",
      "//base",
      "//base/test:test_support",
      "//ppapi/c",
      "//ppapi/cpp",
      "//testing/gmock",
      "//testing/gtest",
      "//ui/gfx/range",
    ]

    data = [
      "test/data/",
    ]

    if (pdf_engine == 0) {
      sources += [ "pdfium/findtext_unittest.cc" ]
      include_dirs = [ "//third_party/pdfium" ]
    }
  }
} else {
  # Dummy group when PDF support is disabled so targets can unconditionally
  # depend on it.
  group("pdf") {
  }
}
