# 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("fxcrt") {
  sources = [
    "autonuller.h",
    "autorestorer.h",
    "byteorder.h",
    "bytestring.cpp",
    "bytestring.h",
    "cfx_binarybuf.cpp",
    "cfx_binarybuf.h",
    "cfx_bitstream.cpp",
    "cfx_bitstream.h",
    "cfx_datetime.cpp",
    "cfx_datetime.h",
    "cfx_fixedbufgrow.h",
    "cfx_readonlymemorystream.cpp",
    "cfx_readonlymemorystream.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",
    "cfx_widetextbuf.cpp",
    "cfx_widetextbuf.h",
    "fileaccess_iface.h",
    "fx_bidi.cpp",
    "fx_bidi.h",
    "fx_codepage.cpp",
    "fx_codepage.h",
    "fx_coordinates.cpp",
    "fx_coordinates.h",
    "fx_extension.cpp",
    "fx_extension.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_system.cpp",
    "fx_system.h",
    "fx_unicode.cpp",
    "fx_unicode.h",
    "maybe_owned.h",
    "observed_ptr.cpp",
    "observed_ptr.h",
    "pauseindicator_iface.h",
    "retain_ptr.h",
    "retained_tree_node.h",
    "shared_copy_on_write.h",
    "string_data_template.cpp",
    "string_data_template.h",
    "string_pool_template.h",
    "string_view_template.h",
    "tree_node.h",
    "unowned_ptr.h",
    "weak_ptr.h",
    "widestring.cpp",
    "widestring.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" ]
  visibility = [
    "../*",
    "../../:*",
    "../../fpdfsdk/*",
    "../../fxbarcode:*",
    "../../fxjs:*",
    "../../testing:*",
    "../../testing/fuzzers/*",
    "../../third_party:fx_agg",
    "../../third_party:fx_lcms2",
    "../../third_party:fx_libopenjpeg",
    "../../third_party:fx_tiff",
    "../../third_party:pdfium_base",
    "../../xfa/*",
  ]
  deps = [ "../../third_party:pdfium_base" ]
  public_deps = [
    "../../:freetype_common",
    "../../third_party:pdfium_base",
    "//third_party/icu:icuuc",
  ]
  allow_circular_includes_from = [ "../../third_party:pdfium_base" ]

  if (is_posix || is_fuchsia) {
    sources += [
      "cfx_fileaccess_posix.cpp",
      "cfx_fileaccess_posix.h",
    ]
  }
  if (is_win) {
    sources += [
      "cfx_fileaccess_windows.cpp",
      "cfx_fileaccess_windows.h",
    ]
  }
  if (pdf_enable_xfa) {
    sources += [
      "cfx_memorystream.cpp",
      "cfx_memorystream.h",
    ]
  }
}

pdfium_unittest_source_set("unittests") {
  sources = [
    "autonuller_unittest.cpp",
    "autorestorer_unittest.cpp",
    "byteorder_unittest.cpp",
    "bytestring_unittest.cpp",
    "cfx_bitstream_unittest.cpp",
    "cfx_seekablestreamproxy_unittest.cpp",
    "cfx_timer_unittest.cpp",
    "cfx_widetextbuf_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_string_unittest.cpp",
    "fx_system_unittest.cpp",
    "maybe_owned_unittest.cpp",
    "observed_ptr_unittest.cpp",
    "pdfium_span_unittest.cpp",
    "retain_ptr_unittest.cpp",
    "retained_tree_node_unittest.cpp",
    "shared_copy_on_write_unittest.cpp",
    "string_pool_template_unittest.cpp",
    "tree_node_unittest.cpp",
    "unowned_ptr_unittest.cpp",
    "weak_ptr_unittest.cpp",
    "widestring_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" ]
  }
}
