# 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("fxjs") {
  sources = [
    "cjs_event_context_stub.cpp",
    "cjs_event_context_stub.h",
    "cjs_runtimestub.cpp",
    "cjs_runtimestub.h",
    "ijs_event_context.h",
    "ijs_runtime.cpp",
    "ijs_runtime.h",
  ]
  configs += [ "../:pdfium_strict_config" ]
  deps = [ "../core/fxcrt" ]
  visibility = [ "../*" ]

  if (pdf_enable_v8) {
    sources += [
      "cfx_globaldata.cpp",
      "cfx_globaldata.h",
      "cfx_keyvalue.cpp",
      "cfx_keyvalue.h",
      "cfx_v8.cpp",
      "cfx_v8.h",
      "cfxjs_engine.cpp",
      "cfxjs_engine.h",
      "cjs_annot.cpp",
      "cjs_annot.h",
      "cjs_app.cpp",
      "cjs_app.h",
      "cjs_border.cpp",
      "cjs_border.h",
      "cjs_color.cpp",
      "cjs_color.h",
      "cjs_console.cpp",
      "cjs_console.h",
      "cjs_delaydata.cpp",
      "cjs_delaydata.h",
      "cjs_display.cpp",
      "cjs_display.h",
      "cjs_document.cpp",
      "cjs_document.h",
      "cjs_event.cpp",
      "cjs_event.h",
      "cjs_event_context.cpp",
      "cjs_event_context.h",
      "cjs_eventrecorder.cpp",
      "cjs_eventrecorder.h",
      "cjs_field.cpp",
      "cjs_field.h",
      "cjs_font.cpp",
      "cjs_font.h",
      "cjs_global.cpp",
      "cjs_global.h",
      "cjs_globalarrays.cpp",
      "cjs_globalarrays.h",
      "cjs_globalconsts.cpp",
      "cjs_globalconsts.h",
      "cjs_highlight.cpp",
      "cjs_highlight.h",
      "cjs_icon.cpp",
      "cjs_icon.h",
      "cjs_object.cpp",
      "cjs_object.h",
      "cjs_position.cpp",
      "cjs_position.h",
      "cjs_publicmethods.cpp",
      "cjs_publicmethods.h",
      "cjs_result.cpp",
      "cjs_result.h",
      "cjs_runtime.cpp",
      "cjs_runtime.h",
      "cjs_scalehow.cpp",
      "cjs_scalehow.h",
      "cjs_scalewhen.cpp",
      "cjs_scalewhen.h",
      "cjs_style.cpp",
      "cjs_style.h",
      "cjs_timerobj.cpp",
      "cjs_timerobj.h",
      "cjs_util.cpp",
      "cjs_util.h",
      "cjs_zoomtype.cpp",
      "cjs_zoomtype.h",
      "fx_date_helpers.cpp",
      "fx_date_helpers.h",
      "fxv8.cpp",
      "fxv8.h",
      "global_timer.cpp",
      "global_timer.h",
      "js_define.cpp",
      "js_define.h",
      "js_resources.cpp",
      "js_resources.h",
    ]
    deps += [
      "../constants",
      "../core/fdrm",
      "../core/fpdfapi/page",
      "../core/fpdfapi/parser",
      "../core/fpdfapi/render",
      "../core/fpdfdoc",
      "../core/fxge",
      "//v8",
      "//v8:v8_libplatform",
    ]
    configs += [ "//v8:external_startup_data" ]
    public_deps = [ "//v8" ]

    if (pdf_enable_xfa) {
      sources += [
        "xfa/cfxjse_class.cpp",
        "xfa/cfxjse_class.h",
        "xfa/cfxjse_context.cpp",
        "xfa/cfxjse_context.h",
        "xfa/cfxjse_engine.cpp",
        "xfa/cfxjse_engine.h",
        "xfa/cfxjse_formcalc_context.cpp",
        "xfa/cfxjse_formcalc_context.h",
        "xfa/cfxjse_isolatetracker.cpp",
        "xfa/cfxjse_isolatetracker.h",
        "xfa/cfxjse_mapmodule.cpp",
        "xfa/cfxjse_mapmodule.h",
        "xfa/cfxjse_nodehelper.cpp",
        "xfa/cfxjse_nodehelper.h",
        "xfa/cfxjse_resolveprocessor.cpp",
        "xfa/cfxjse_resolveprocessor.h",
        "xfa/cfxjse_runtimedata.cpp",
        "xfa/cfxjse_runtimedata.h",
        "xfa/cfxjse_value.cpp",
        "xfa/cfxjse_value.h",
        "xfa/cjx_boolean.cpp",
        "xfa/cjx_boolean.h",
        "xfa/cjx_container.cpp",
        "xfa/cjx_container.h",
        "xfa/cjx_datawindow.cpp",
        "xfa/cjx_datawindow.h",
        "xfa/cjx_delta.cpp",
        "xfa/cjx_delta.h",
        "xfa/cjx_desc.cpp",
        "xfa/cjx_desc.h",
        "xfa/cjx_draw.cpp",
        "xfa/cjx_draw.h",
        "xfa/cjx_encrypt.cpp",
        "xfa/cjx_encrypt.h",
        "xfa/cjx_eventpseudomodel.cpp",
        "xfa/cjx_eventpseudomodel.h",
        "xfa/cjx_exclgroup.cpp",
        "xfa/cjx_exclgroup.h",
        "xfa/cjx_extras.cpp",
        "xfa/cjx_extras.h",
        "xfa/cjx_field.cpp",
        "xfa/cjx_field.h",
        "xfa/cjx_form.cpp",
        "xfa/cjx_form.h",
        "xfa/cjx_handler.cpp",
        "xfa/cjx_handler.h",
        "xfa/cjx_hostpseudomodel.cpp",
        "xfa/cjx_hostpseudomodel.h",
        "xfa/cjx_instancemanager.cpp",
        "xfa/cjx_instancemanager.h",
        "xfa/cjx_layoutpseudomodel.cpp",
        "xfa/cjx_layoutpseudomodel.h",
        "xfa/cjx_list.cpp",
        "xfa/cjx_list.h",
        "xfa/cjx_logpseudomodel.cpp",
        "xfa/cjx_logpseudomodel.h",
        "xfa/cjx_manifest.cpp",
        "xfa/cjx_manifest.h",
        "xfa/cjx_model.cpp",
        "xfa/cjx_model.h",
        "xfa/cjx_node.cpp",
        "xfa/cjx_node.h",
        "xfa/cjx_object.cpp",
        "xfa/cjx_object.h",
        "xfa/cjx_occur.cpp",
        "xfa/cjx_occur.h",
        "xfa/cjx_packet.cpp",
        "xfa/cjx_packet.h",
        "xfa/cjx_script.cpp",
        "xfa/cjx_script.h",
        "xfa/cjx_signaturepseudomodel.cpp",
        "xfa/cjx_signaturepseudomodel.h",
        "xfa/cjx_source.cpp",
        "xfa/cjx_source.h",
        "xfa/cjx_subform.cpp",
        "xfa/cjx_subform.h",
        "xfa/cjx_template.cpp",
        "xfa/cjx_template.h",
        "xfa/cjx_textnode.cpp",
        "xfa/cjx_textnode.h",
        "xfa/cjx_tree.cpp",
        "xfa/cjx_tree.h",
        "xfa/cjx_treelist.cpp",
        "xfa/cjx_treelist.h",
        "xfa/cjx_wsdlconnection.cpp",
        "xfa/cjx_wsdlconnection.h",
        "xfa/cjx_xfa.cpp",
        "xfa/cjx_xfa.h",
        "xfa/fxjse.cpp",
        "xfa/fxjse.h",
        "xfa/jse_define.h",
      ]
      deps += [
        ":gc",
        "../xfa/fgas/crt",
        "../xfa/fxfa/fm2js",
      ]
    }
  }
}

if (pdf_enable_v8) {
  if (pdf_enable_xfa) {
    source_set("gc") {
      sources = [
        "gc/container_trace.h",
        "gc/gced_tree_node.h",
        "gc/gced_tree_node_mixin.h",
        "gc/heap.cpp",
        "gc/heap.h",
      ]
      configs += [ "../:pdfium_strict_config" ]
      deps = [
        "../core/fxcrt",
        "//v8:v8_libplatform",
      ]
      public_deps = [ "//v8:cppgc" ]
    }
  }
}

if (pdf_enable_v8) {
  pdfium_unittest_source_set("unittests") {
    sources = [
      "cfx_globaldata_unittest.cpp",
      "cfx_v8_unittest.cpp",
      "cfxjs_engine_unittest.cpp",
      "cjs_publicmethods_unittest.cpp",
      "cjs_util_unittest.cpp",
      "fx_date_helpers_unittest.cpp",
    ]
    configs = [ "//v8:external_startup_data" ]
    deps = [ ":fxjs" ]
    pdfium_root_dir = "../"
    if (pdf_enable_xfa) {
      sources += [
        "gc/container_trace_unittest.cpp",
        "gc/gced_tree_node_mixin_unittest.cpp",
        "gc/gced_tree_node_unittest.cpp",
        "gc/heap_unittest.cpp",
        "gc/move_unittest.cpp",
        "xfa/cfxjse_mapmodule_unittest.cpp",
      ]
      deps += [
        ":gc",
        "../xfa/fxfa/parser",
      ]
    }
  }

  pdfium_embeddertest_source_set("embeddertests") {
    sources = [
      "cfxjs_engine_embeddertest.cpp",
      "cjs_publicmethods_embeddertest.cpp",
    ]
    configs = [ "//v8:external_startup_data" ]
    deps = [
      ":fxjs",
      "../fpdfsdk",
    ]
    pdfium_root_dir = "../"
    if (pdf_enable_xfa) {
      sources += [
        "xfa/cfxjse_app_embeddertest.cpp",
        "xfa/cfxjse_formcalc_context_embeddertest.cpp",
        "xfa/cfxjse_value_embeddertest.cpp",
        "xfa/cjx_hostpseudomodel_embeddertest.cpp",
        "xfa/cjx_list_embeddertest.cpp",
      ]
      deps += [
        ":gc",
        "../xfa/fxfa",
      ]
    }
  }
}
