# Copyright 2018 The PDFium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build_overrides/build.gni")
import("../../pdfium.gni")
import("../../testing/test.gni")

source_set("fxcrt") {
  visibility = [
    "../*",
    "../../:*",
    "../../fpdfsdk/*",
    "../../fxbarcode:*",
    "../../fxjs:*",
    "../../testing:*",
    "../../testing/fuzzers/*",
    "../../testing/image_diff/*",
    "../../third_party:fx_agg",
    "../../third_party:fx_lcms2",
    "../../third_party:fx_libopenjpeg",
    "../../third_party:fx_tiff",
    "../../xfa/*",
  ]
  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_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",
    "code_point_view.h",
    "containers/adapters.h",
    "containers/contains.h",
    "data_vector.h",
    "debug/alias.cc",
    "debug/alias.h",
    "fileaccess_iface.h",
    "fixed_size_data_vector.h",
    "fx_2d_size.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_memcpy_wrappers.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",
    "numerics/checked_math.h",
    "numerics/checked_math_impl.h",
    "numerics/clamped_math.h",
    "numerics/clamped_math_impl.h",
    "numerics/safe_conversions.h",
    "numerics/safe_conversions_arm_impl.h",
    "numerics/safe_conversions_impl.h",
    "numerics/safe_math.h",
    "numerics/safe_math_arm_impl.h",
    "numerics/safe_math_clang_gcc_impl.h",
    "numerics/safe_math_shared_impl.h",
    "observed_ptr.cpp",
    "observed_ptr.h",
    "pauseindicator_iface.h",
    "retain_ptr.h",
    "scoped_set_insertion.h",
    "shared_copy_on_write.h",
    "span.h",
    "span_util.h",
    "stl_util.h",
    "string_data_template.cpp",
    "string_data_template.h",
    "string_pool_template.h",
    "string_template.cpp",
    "string_template.h",
    "string_view_template.h",
    "tree_node.h",
    "unowned_ptr.h",
    "utf16.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",
  ]
  public_deps = [
    "../../:freetype_common",
    "../../third_party:pdfium_base",
    "//third_party/icu:icuuc",
  ]
  deps = [ "../../third_party:pdfium_compiler_specific" ]
  if (pdf_use_partition_alloc) {
    sources += [ "fx_memory_pa.cpp" ]
    public_deps += [ "../../third_party:pdfium_pa" ]
  } else {
    sources += [ "fx_memory_malloc.cpp" ]
  }
  if (is_posix) {
    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",
      "win/scoped_select_object.h",
      "win/win_util.cc",
      "win/win_util.h",
    ]
  }
  if (pdf_enable_xfa) {
    sources += [
      "cfx_memorystream.cpp",
      "cfx_memorystream.h",
    ]
  }
}

source_set("test_support") {
  testonly = true
  sources = [ "string_test_support.cpp" ]
  configs += [ "../../:pdfium_strict_config" ]
  deps = [ ":fxcrt" ]
}

source_set("unit_test_support") {
  testonly = true
  sources = [
    "fake_time_test.cpp",
    "fake_time_test.h",
  ]
  configs += [ "../../:pdfium_strict_config" ]
  deps = [
    ":fxcrt",
    ":test_support",
    "//testing/gtest",
  ]
}

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",
    "code_point_view_unittest.cpp",
    "fixed_size_data_vector_unittest.cpp",
    "fx_bidi_unittest.cpp",
    "fx_coordinates_unittest.cpp",
    "fx_extension_unittest.cpp",
    "fx_memcpy_wrappers_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",
    "scoped_set_insertion_unittest.cpp",
    "shared_copy_on_write_unittest.cpp",
    "span_util_unittest.cpp",
    "string_pool_template_unittest.cpp",
    "tree_node_unittest.cpp",
    "unowned_ptr_unittest.cpp",
    "utf16_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 = [ ":unit_test_support" ]
  pdfium_root_dir = "../../"
  if (pdf_use_partition_alloc) {
    deps += [ "//base/allocator/partition_allocator/src/partition_alloc" ]
  }
  if (pdf_enable_xfa) {
    sources += [ "cfx_memorystream_unittest.cpp" ]
    deps += [ "../fpdfapi/parser" ]
  }
}
