# 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("unowned_ptr") {
  sources = [ "unowned_ptr.h" ]
  deps = [ "../../third_party:pdfium_compiler_specific" ]
  configs += [ "../../:pdfium_strict_config" ]
  if (pdf_use_partition_alloc) {
    if (pdf_use_partition_alloc_new_location) {
      public_deps = [
        "//base/allocator/partition_allocator/src/partition_alloc:partition_alloc_buildflags",
        "//base/allocator/partition_allocator/src/partition_alloc:raw_ptr",
      ]
    } else {
      public_deps = [
        "//base/allocator/partition_allocator:partition_alloc_buildflags",
        "//base/allocator/partition_allocator:raw_ptr",
      ]
    }
  }
}

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_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",
    "data_vector.h",
    "fileaccess_iface.h",
    "fixed_size_data_vector.h",
    "fixed_try_alloc_zeroed_data_vector.h",
    "fixed_uninit_data_vector.h",
    "fixed_zeroed_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",
    "observed_ptr.cpp",
    "observed_ptr.h",
    "pauseindicator_iface.h",
    "retain_ptr.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",
    "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",
  ]
  visibility = [
    "../*",
    "../../:*",
    "../../fpdfsdk/*",
    "../../fxbarcode:*",
    "../../fxjs:*",
    "../../testing:*",
    "../../testing/fuzzers/*",
    "../../third_party:fx_agg",
    "../../third_party:fx_lcms2",
    "../../third_party:fx_libopenjpeg",
    "../../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 (pdf_use_partition_alloc) {
    sources += [ "fx_memory_pa.cpp" ]
    if (pdf_use_partition_alloc_new_location) {
      deps += [
        "//base/allocator/partition_allocator/src/partition_alloc",
        "//base/allocator/partition_allocator/src/partition_alloc:partition_alloc_buildflags",
        "//base/allocator/partition_allocator/src/partition_alloc:raw_ptr",
      ]
    } else {
      deps += [
        "//base/allocator/partition_allocator:partition_alloc",
        "//base/allocator/partition_allocator:partition_alloc_buildflags",
        "//base/allocator/partition_allocator:raw_ptr",
      ]
    }
  } 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",
    ]
  }
}

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_try_alloc_zeroed_data_vector_unittest.cpp",
    "fixed_uninit_data_vector_unittest.cpp",
    "fixed_zeroed_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",
    "small_buffer_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) {
    if (pdf_use_partition_alloc_new_location) {
      deps += [ "//base/allocator/partition_allocator/src/partition_alloc" ]
    } else {
      deps += [ "//base/allocator/partition_allocator:partition_alloc" ]
    }
  }
  if (pdf_enable_xfa) {
    sources += [ "cfx_memorystream_unittest.cpp" ]
    deps += [ "../fpdfapi/parser" ]
  }
}
