# Copyright 2018 The PDFium 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("../../../pdfium.gni")
import("../../../testing/test.gni")

source_set("parser") {
  sources = [
    "cfdf_document.cpp",
    "cfdf_document.h",
    "cpdf_array.cpp",
    "cpdf_array.h",
    "cpdf_boolean.cpp",
    "cpdf_boolean.h",
    "cpdf_cross_ref_avail.cpp",
    "cpdf_cross_ref_avail.h",
    "cpdf_cross_ref_table.cpp",
    "cpdf_cross_ref_table.h",
    "cpdf_crypto_handler.cpp",
    "cpdf_crypto_handler.h",
    "cpdf_data_avail.cpp",
    "cpdf_data_avail.h",
    "cpdf_dictionary.cpp",
    "cpdf_dictionary.h",
    "cpdf_document.cpp",
    "cpdf_document.h",
    "cpdf_encryptor.cpp",
    "cpdf_encryptor.h",
    "cpdf_flateencoder.cpp",
    "cpdf_flateencoder.h",
    "cpdf_hint_tables.cpp",
    "cpdf_hint_tables.h",
    "cpdf_indirect_object_holder.cpp",
    "cpdf_indirect_object_holder.h",
    "cpdf_linearized_header.cpp",
    "cpdf_linearized_header.h",
    "cpdf_name.cpp",
    "cpdf_name.h",
    "cpdf_null.cpp",
    "cpdf_null.h",
    "cpdf_number.cpp",
    "cpdf_number.h",
    "cpdf_object.cpp",
    "cpdf_object.h",
    "cpdf_object_avail.cpp",
    "cpdf_object_avail.h",
    "cpdf_object_stream.cpp",
    "cpdf_object_stream.h",
    "cpdf_object_walker.cpp",
    "cpdf_object_walker.h",
    "cpdf_page_object_avail.cpp",
    "cpdf_page_object_avail.h",
    "cpdf_parser.cpp",
    "cpdf_parser.h",
    "cpdf_read_validator.cpp",
    "cpdf_read_validator.h",
    "cpdf_reference.cpp",
    "cpdf_reference.h",
    "cpdf_security_handler.cpp",
    "cpdf_security_handler.h",
    "cpdf_simple_parser.cpp",
    "cpdf_simple_parser.h",
    "cpdf_stream.cpp",
    "cpdf_stream.h",
    "cpdf_stream_acc.cpp",
    "cpdf_stream_acc.h",
    "cpdf_string.cpp",
    "cpdf_string.h",
    "cpdf_syntax_parser.cpp",
    "cpdf_syntax_parser.h",
    "fpdf_parser_decode.cpp",
    "fpdf_parser_decode.h",
    "fpdf_parser_utility.cpp",
    "fpdf_parser_utility.h",
  ]
  configs += [ "../../../:pdfium_core_config" ]
  deps = [
    "../../../constants",
    "../../fdrm",
    "../../fxcodec",
    "../../fxcrt",
    "../../fxge",
  ]
  allow_circular_includes_from = []
  visibility = [ "../../../*" ]

  if (pdf_enable_xfa) {
    sources += [
      "cpdf_seekablemultistream.cpp",
      "cpdf_seekablemultistream.h",
    ]
  }
  if (pdf_use_skia || pdf_use_skia_paths) {
    allow_circular_includes_from += [ "../../fxge" ]
  }
}

pdfium_unittest_source_set("unittests") {
  sources = [
    "cpdf_array_unittest.cpp",
    "cpdf_cross_ref_avail_unittest.cpp",
    "cpdf_document_unittest.cpp",
    "cpdf_hint_tables_unittest.cpp",
    "cpdf_indirect_object_holder_unittest.cpp",
    "cpdf_object_avail_unittest.cpp",
    "cpdf_object_unittest.cpp",
    "cpdf_object_walker_unittest.cpp",
    "cpdf_page_object_avail_unittest.cpp",
    "cpdf_parser_unittest.cpp",
    "cpdf_read_validator_unittest.cpp",
    "cpdf_simple_parser_unittest.cpp",
    "cpdf_stream_acc_unittest.cpp",
    "cpdf_syntax_parser_unittest.cpp",
    "fpdf_parser_decode_unittest.cpp",
    "fpdf_parser_utility_unittest.cpp",
  ]
  deps = [
    ":parser",
    "../../../constants",
    "../page",
    "../render",
  ]
  pdfium_root_dir = "../../../"

  if (pdf_enable_xfa) {
    sources += [ "cpdf_seekablemultistream_unittest.cpp" ]
  }
  if (is_clang) {
    # Suppress no override warning for overridden functions.
    cflags = [ "-Wno-inconsistent-missing-override" ]
  }
}

pdfium_embeddertest_source_set("embeddertests") {
  sources = [
    "cpdf_parser_embeddertest.cpp",
    "cpdf_security_handler_embeddertest.cpp",
    "fpdf_parser_decode_embeddertest.cpp",
  ]
  deps = [
    ":parser",
  ]
  pdfium_root_dir = "../../../"
}
