# 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("//build/config/jumbo.gni")
import("../pdfium.gni")
import("../testing/test.gni")

jumbo_source_set("fpdfsdk") {
  sources = [
    "cfx_systemhandler.cpp",
    "cfx_systemhandler.h",
    "cpdf_annotcontext.cpp",
    "cpdf_annotcontext.h",
    "cpdfsdk_actionhandler.cpp",
    "cpdfsdk_actionhandler.h",
    "cpdfsdk_annot.cpp",
    "cpdfsdk_annot.h",
    "cpdfsdk_annothandlermgr.cpp",
    "cpdfsdk_annothandlermgr.h",
    "cpdfsdk_annotiteration.cpp",
    "cpdfsdk_annotiteration.h",
    "cpdfsdk_annotiterator.cpp",
    "cpdfsdk_annotiterator.h",
    "cpdfsdk_baannot.cpp",
    "cpdfsdk_baannot.h",
    "cpdfsdk_baannothandler.cpp",
    "cpdfsdk_baannothandler.h",
    "cpdfsdk_common.h",
    "cpdfsdk_customaccess.cpp",
    "cpdfsdk_customaccess.h",
    "cpdfsdk_fieldaction.cpp",
    "cpdfsdk_fieldaction.h",
    "cpdfsdk_filewriteadapter.cpp",
    "cpdfsdk_filewriteadapter.h",
    "cpdfsdk_formfillenvironment.cpp",
    "cpdfsdk_formfillenvironment.h",
    "cpdfsdk_helpers.cpp",
    "cpdfsdk_helpers.h",
    "cpdfsdk_interactiveform.cpp",
    "cpdfsdk_interactiveform.h",
    "cpdfsdk_pageview.cpp",
    "cpdfsdk_pageview.h",
    "cpdfsdk_widget.cpp",
    "cpdfsdk_widget.h",
    "cpdfsdk_widgethandler.cpp",
    "cpdfsdk_widgethandler.h",
    "ipdfsdk_annothandler.h",
    "ipdfsdk_pauseadapter.cpp",
    "ipdfsdk_pauseadapter.h",
  ]

  configs += [ "../:pdfium_core_config" ]
  deps = [
    "../:pdfium_public_headers",
    "../constants",
    "../core/fpdfapi",
    "../core/fpdfapi/page",
    "../core/fpdfapi/parser",
    "../core/fpdfapi/render",
    "../core/fpdfdoc",
    "../core/fxcrt",
    "../core/fxge",
    "../fxjs",
    "formfiller",
    "formfiller:fontmap",
    "pwl",
  ]
  allow_circular_includes_from = [
    "../fxjs",
    "formfiller",
    "formfiller:fontmap",
    "pwl",
  ]
  visibility = [ "../*" ]

  if (pdf_enable_xfa) {
    sources += [
      "cpdfsdk_xfawidget.cpp",
      "cpdfsdk_xfawidget.h",
      "cpdfsdk_xfawidgethandler.cpp",
      "cpdfsdk_xfawidgethandler.h",
    ]

    deps += [
      "../xfa/fwl",
      "../xfa/fxfa",
      "../xfa/fxfa/parser",
      "../xfa/fxgraphics",
      "fpdfxfa",
    ]
    allow_circular_includes_from += [ "fpdfxfa" ]
  }
}

pdfium_unittest_source_set("unittests") {
  sources = [
    "fpdf_catalog_unittest.cpp",
    "fpdf_doc_unittest.cpp",
    "fpdf_edit_unittest.cpp",
    "fpdf_editimg_unittest.cpp",
  ]
  deps = [
    ":fpdfsdk",
    "../:pdfium_public_headers",
    "../core/fpdfapi",
    "../core/fpdfapi/parser",
    "../core/fpdfdoc",
  ]
  pdfium_root_dir = "../"
}

pdfium_embeddertest_source_set("embeddertests") {
  sources = [
    "cpdfsdk_annotiterator_embeddertest.cpp",
    "fpdf_annot_embeddertest.cpp",
    "fpdf_attachment_embeddertest.cpp",
    "fpdf_dataavail_embeddertest.cpp",
    "fpdf_doc_embeddertest.cpp",
    "fpdf_edit_embeddertest.cpp",
    "fpdf_editpage_embeddertest.cpp",
    "fpdf_editpath_embeddertest.cpp",
    "fpdf_ext_embeddertest.cpp",
    "fpdf_flatten_embeddertest.cpp",
    "fpdf_formfill_embeddertest.cpp",
    "fpdf_ppo_embeddertest.cpp",
    "fpdf_save_embeddertest.cpp",
    "fpdf_structtree_embeddertest.cpp",
    "fpdf_text_embeddertest.cpp",
    "fpdf_transformpage_embeddertest.cpp",
    "fpdf_view_c_api_test.c",
    "fpdf_view_c_api_test.h",
    "fpdf_view_embeddertest.cpp",
  ]
  deps = [
    ":fpdfsdk",
    "../core/fpdfapi/font",
    "../core/fpdfapi/page",
    "../core/fpdfapi/parser",
    "../core/fxge",
  ]
  pdfium_root_dir = "../"
}
