# 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("unowned_ptr") {
  sources = [ "unowned_ptr.h" ]
  configs += [ "../../:pdfium_strict_config" ]
}

source_set("fxcrt") {
  sources = [
    "autonuller.h",
    "autorestorer.h",
    "binary_buffer.cpp",
    "binary_buffer.h",
    "byteorder.h",
    "bytestring.cpp",
    "bytestring.h",
    "cfx_bitstream.cpp",
    "cfx_bitstream.h",
    "cfx_datetime.cpp",
    "cfx_datetime.h",
    "cfx_read_only_memory_stream.cpp",
    "cfx_read_only_memory_stream.h",
    "cfx_read_only_span_stream.cpp",
    "cfx_read_only_span_stream.h",
    "cfx_read_only_string_stream.cpp",
    "cfx_read_only_string_stream.h",
    "cfx_read_only_vector_stream.cpp",
    "cfx_read_only_vector_stream.h",
    "cfx_seekablestreamproxy.cpp",
    "cfx_seekablestreamproxy.h",
    "cfx_timer.cpp",
    "cfx_timer.h",
    "cfx_utf8decoder.cpp",
    "cfx_utf8decoder.h",
    "cfx_utf8encoder.cpp",
    "cfx_utf8encoder.h",
    "data_vector.h",
    "fileaccess_iface.h",
    "fx_bidi.cpp",
    "fx_bidi.h",
    "fx_codepage.cpp",
    "fx_codepage.h",
    "fx_codepage_forward.h",
    "fx_coordinates.cpp",
    "fx_coordinates.h",
    "fx_extension.cpp",
    "fx_extension.h",
    "fx_folder.h",
    "fx_memory.cpp",
    "fx_memory.h",
    "fx_memory_wrappers.h",
    "fx_number.cpp",
    "fx_number.h",
    "fx_random.cpp",
    "fx_random.h",
    "fx_safe_types.h",
    "fx_stream.cpp",
    "fx_stream.h",
    "fx_string.cpp",
    "fx_string.h",
    "fx_string_wrappers.h",
    "fx_system.cpp",
    "fx_system.h",
    "fx_types.h",
    "fx_unicode.cpp",
    "fx_unicode.h",
    "mask.h",
    "maybe_owned.h",
    "observed_ptr.cpp",
    "observed_ptr.h",
    "pauseindicator_iface.h",
    "retain_ptr.h",
    "retained_tree_node.h",
    "scoped_set_insertion.h",
    "shared_copy_on_write.h",
    "small_buffer.h",
    "span_util.h",
    "stl_util.h",
    "string_data_template.cpp",
    "string_data_template.h",
    "string_pool_template.h",
    "string_view_template.h",
    "tree_node.h",
    "weak_ptr.h",
    "widestring.cpp",
    "widestring.h",
    "widetext_buffer.cpp",
    "widetext_buffer.h",
    "xml/cfx_xmlchardata.cpp",
    "xml/cfx_xmlchardata.h",
    "xml/cfx_xmldocument.cpp",
    "xml/cfx_xmldocument.h",
    "xml/cfx_xmlelement.cpp",
    "xml/cfx_xmlelement.h",
    "xml/cfx_xmlinstruction.cpp",
    "xml/cfx_xmlinstruction.h",
    "xml/cfx_xmlnode.cpp",
    "xml/cfx_xmlnode.h",
    "xml/cfx_xmlparser.cpp",
    "xml/cfx_xmlparser.h",
    "xml/cfx_xmltext.cpp",
    "xml/cfx_xmltext.h",
  ]
  configs += [
    "../../:pdfium_strict_config",
    "../../:pdfium_noshorten_config",
  ]
  visibility = [
    "../*",
    "../../:*",
    "../../fpdfsdk/*",
    "../../fxbarcode:*",
    "../../fxjs:*",
    "../../testing:*",
    "../../testing/fuzzers/*",
    "../../third_party:fx_agg",
    "../../third_party:fx_lcms2",
    "../../third_party:fx_libopenjpeg",
    "../../third_party:fx_lpng",
    "../../third_party:fx_tiff",
    "../../xfa/*",
  ]
  deps = [ "../../third_party:pdfium_base" ]
  public_deps = [
    ":unowned_ptr",
    "../../:freetype_common",
    "../../third_party:pdfium_base",
    "//third_party/icu:icuuc",
  ]
  if (!is_win || is_clang) {
    sources += [ "fx_memory_pa.cpp" ]
    deps += [ "../../third_party:pdfium_partition_alloc" ]
  } else {
    sources += [ "fx_memory_malloc.cpp" ]
  }
  if (is_posix || is_fuchsia) {
    sources += [
      "cfx_fileaccess_posix.cpp",
      "cfx_fileaccess_posix.h",
      "fx_folder_posix.cpp",
    ]
  }
  if (is_win) {
    sources += [
      "cfx_fileaccess_windows.cpp",
      "cfx_fileaccess_windows.h",
      "fx_folder_windows.cpp",
    ]
  }
  if (pdf_enable_xfa) {
    sources += [
      "cfx_memorystream.cpp",
      "cfx_memorystream.h",
    ]
  }
}

pdfium_unittest_source_set("unittests") {
  sources = [
    "autonuller_unittest.cpp",
    "autorestorer_unittest.cpp",
    "binary_buffer_unittest.cpp",
    "byteorder_unittest.cpp",
    "bytestring_unittest.cpp",
    "cfx_bitstream_unittest.cpp",
    "cfx_datetime_unittest.cpp",
    "cfx_seekablestreamproxy_unittest.cpp",
    "cfx_timer_unittest.cpp",
    "fx_bidi_unittest.cpp",
    "fx_coordinates_unittest.cpp",
    "fx_extension_unittest.cpp",
    "fx_memory_unittest.cpp",
    "fx_memory_wrappers_unittest.cpp",
    "fx_number_unittest.cpp",
    "fx_random_unittest.cpp",
    "fx_safe_types_unittest.cpp",
    "fx_string_unittest.cpp",
    "fx_string_wrappers_unittest.cpp",
    "fx_system_unittest.cpp",
    "mask_unittest.cpp",
    "maybe_owned_unittest.cpp",
    "observed_ptr_unittest.cpp",
    "pdfium_span_unittest.cpp",
    "retain_ptr_unittest.cpp",
    "retained_tree_node_unittest.cpp",
    "scoped_set_insertion_unittest.cpp",
    "shared_copy_on_write_unittest.cpp",
    "small_buffer_unittest.cpp",
    "span_util_unittest.cpp",
    "string_pool_template_unittest.cpp",
    "tree_node_unittest.cpp",
    "unowned_ptr_unittest.cpp",
    "weak_ptr_unittest.cpp",
    "widestring_unittest.cpp",
    "widetext_buffer_unittest.cpp",
    "xml/cfx_xmlchardata_unittest.cpp",
    "xml/cfx_xmldocument_unittest.cpp",
    "xml/cfx_xmlelement_unittest.cpp",
    "xml/cfx_xmlinstruction_unittest.cpp",
    "xml/cfx_xmlnode_unittest.cpp",
    "xml/cfx_xmlparser_unittest.cpp",
    "xml/cfx_xmltext_unittest.cpp",
  ]
  deps = []
  pdfium_root_dir = "../../"

  if (pdf_enable_xfa) {
    sources += [ "cfx_memorystream_unittest.cpp" ]
    deps += [ "../fpdfapi/parser" ]
  }
}
