# Copyright 2016 The Chromium 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("//testing/test.gni")
import("pdfium.gni")

group("freetype_common") {
  public_deps = []
  if (pdf_bundle_freetype) {
    public_deps += [ "third_party:fx_freetype" ]
  } else {
    public_deps += [ "//build/config/freetype" ]
  }
}

config("pdfium_common_config") {
  cflags = []
  ldflags = []
  include_dirs = [ "." ]
  defines = [
    "OPJ_STATIC",
    "PNG_PREFIX",
    "PNG_USE_READ_MACROS",
  ]

  if (pdf_enable_v8) {
    defines += [ "PDF_ENABLE_V8" ]
  }

  if (pdf_enable_click_logging) {
    defines += [ "PDF_ENABLE_CLICK_LOGGING" ]
  }

  if (pdf_enable_xfa) {
    defines += [ "PDF_ENABLE_XFA" ]
    if (pdf_enable_xfa_bmp) {
      defines += [ "PDF_ENABLE_XFA_BMP" ]
    }
    if (pdf_enable_xfa_gif) {
      defines += [ "PDF_ENABLE_XFA_GIF" ]
    }
    if (pdf_enable_xfa_png) {
      defines += [ "PDF_ENABLE_XFA_PNG" ]
    }
    if (pdf_enable_xfa_tiff) {
      defines += [ "PDF_ENABLE_XFA_TIFF" ]
    }
  }

  if (pdf_use_skia) {
    defines += [ "_SKIA_SUPPORT_" ]
  }

  if (pdf_use_skia_paths) {
    defines += [ "_SKIA_SUPPORT_PATHS_" ]
  }

  if (pdf_use_win32_gdi) {
    defines += [ "PDFIUM_PRINT_TEXT_WITH_GDI" ]
  }

  if (is_win) {
    # Assume UTF-8 by default to avoid code page dependencies.
    cflags += [ "/utf-8" ]
  }
}

config("pdfium_core_config") {
  cflags = []
  configs = [ ":pdfium_common_config" ]
  defines = [ "V8_DEPRECATION_WARNINGS" ]
  if (is_clang) {
    cflags += [ "-Wshadow" ]
  }
  if (is_linux) {
    if (current_cpu == "x64") {
      defines += [ "_FX_CPU_=_FX_X64_" ]
      cflags += [ "-fPIC" ]
    } else if (current_cpu == "x86") {
      defines += [ "_FX_CPU_=_FX_X86_" ]
    }
  }
  if (is_win) {
    cflags += [
      "/wd4324",
      "/wd4577",
    ]
  }
  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
}

jumbo_static_library("pdfium") {
  sources = [
    "fpdfsdk/fpdf_annot.cpp",
    "fpdfsdk/fpdf_attachment.cpp",
    "fpdfsdk/fpdf_catalog.cpp",
    "fpdfsdk/fpdf_dataavail.cpp",
    "fpdfsdk/fpdf_doc.cpp",
    "fpdfsdk/fpdf_editimg.cpp",
    "fpdfsdk/fpdf_editpage.cpp",
    "fpdfsdk/fpdf_editpath.cpp",
    "fpdfsdk/fpdf_edittext.cpp",
    "fpdfsdk/fpdf_ext.cpp",
    "fpdfsdk/fpdf_flatten.cpp",
    "fpdfsdk/fpdf_formfill.cpp",
    "fpdfsdk/fpdf_ppo.cpp",
    "fpdfsdk/fpdf_progressive.cpp",
    "fpdfsdk/fpdf_save.cpp",
    "fpdfsdk/fpdf_searchex.cpp",
    "fpdfsdk/fpdf_structtree.cpp",
    "fpdfsdk/fpdf_sysfontinfo.cpp",
    "fpdfsdk/fpdf_text.cpp",
    "fpdfsdk/fpdf_transformpage.cpp",
    "fpdfsdk/fpdf_view.cpp",
    "public/cpp/fpdf_deleters.h",
    "public/cpp/fpdf_scopers.h",
    "public/fpdf_annot.h",
    "public/fpdf_attachment.h",
    "public/fpdf_catalog.h",
    "public/fpdf_dataavail.h",
    "public/fpdf_doc.h",
    "public/fpdf_edit.h",
    "public/fpdf_ext.h",
    "public/fpdf_flatten.h",
    "public/fpdf_formfill.h",
    "public/fpdf_fwlevent.h",
    "public/fpdf_ppo.h",
    "public/fpdf_progressive.h",
    "public/fpdf_save.h",
    "public/fpdf_searchex.h",
    "public/fpdf_structtree.h",
    "public/fpdf_sysfontinfo.h",
    "public/fpdf_text.h",
    "public/fpdf_transformpage.h",
    "public/fpdfview.h",
  ]

  libs = []
  configs += [ ":pdfium_core_config" ]

  deps = [
    "constants",
    "core/fdrm",
    "core/fpdfapi",
    "core/fpdfdoc",
    "core/fpdftext",
    "core/fxcodec",
    "core/fxcrt",
    "core/fxge",
    "fpdfsdk",
    "fpdfsdk/formfiller",
    "fpdfsdk/pwl",
    "fxjs",
    "third_party:pdfium_base",
    "third_party:skia_shared",
  ]

  public_deps = [
    "core/fxcrt",
  ]

  if (is_win) {
    libs += [
      "advapi32.lib",
      "gdi32.lib",
      "user32.lib",
    ]
  }

  if (is_mac) {
    libs += [
      "AppKit.framework",
      "CoreFoundation.framework",
    ]
  }

  if (pdf_is_complete_lib) {
    complete_static_lib = true
    configs -= [ "//build/config/compiler:thin_archive" ]
  }
}

# Targets below this are only visible within this file (and to the
# top-level gn_visibility target used to help gn_all build everything).
visibility = [
  ":*",
  "//:gn_visibility",
]

test("pdfium_unittests") {
  testonly = true
  sources = [
    "core/fdrm/fx_crypt_unittest.cpp",
    "core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp",
    "core/fpdfapi/font/cpdf_cmapparser_unittest.cpp",
    "core/fpdfapi/font/cpdf_tounicodemap_unittest.cpp",
    "core/fpdfapi/page/cpdf_devicecs_unittest.cpp",
    "core/fpdfapi/page/cpdf_pageobjectholder_unittest.cpp",
    "core/fpdfapi/page/cpdf_psengine_unittest.cpp",
    "core/fpdfapi/page/cpdf_streamcontentparser_unittest.cpp",
    "core/fpdfapi/page/cpdf_streamparser_unittest.cpp",
    "core/fpdfapi/parser/cpdf_array_unittest.cpp",
    "core/fpdfapi/parser/cpdf_cross_ref_avail_unittest.cpp",
    "core/fpdfapi/parser/cpdf_document_unittest.cpp",
    "core/fpdfapi/parser/cpdf_hint_tables_unittest.cpp",
    "core/fpdfapi/parser/cpdf_indirect_object_holder_unittest.cpp",
    "core/fpdfapi/parser/cpdf_object_avail_unittest.cpp",
    "core/fpdfapi/parser/cpdf_object_unittest.cpp",
    "core/fpdfapi/parser/cpdf_object_walker_unittest.cpp",
    "core/fpdfapi/parser/cpdf_page_object_avail_unittest.cpp",
    "core/fpdfapi/parser/cpdf_parser_unittest.cpp",
    "core/fpdfapi/parser/cpdf_read_validator_unittest.cpp",
    "core/fpdfapi/parser/cpdf_simple_parser_unittest.cpp",
    "core/fpdfapi/parser/cpdf_stream_acc_unittest.cpp",
    "core/fpdfapi/parser/cpdf_syntax_parser_unittest.cpp",
    "core/fpdfapi/parser/fpdf_parser_decode_unittest.cpp",
    "core/fpdfapi/parser/fpdf_parser_utility_unittest.cpp",
    "core/fpdfdoc/cpdf_defaultappearance_unittest.cpp",
    "core/fpdfdoc/cpdf_dest_unittest.cpp",
    "core/fpdfdoc/cpdf_filespec_unittest.cpp",
    "core/fpdfdoc/cpdf_formfield_unittest.cpp",
    "core/fpdfdoc/cpdf_metadata_unittest.cpp",
    "core/fpdfdoc/cpdf_nametree_unittest.cpp",
    "core/fpdftext/cpdf_linkextract_unittest.cpp",
    "core/fxcodec/codec/fx_codec_a85_unittest.cpp",
    "core/fxcodec/codec/fx_codec_jpx_unittest.cpp",
    "core/fxcodec/codec/fx_codec_rle_unittest.cpp",
    "core/fxcodec/jbig2/JBig2_BitStream_unittest.cpp",
    "core/fxcodec/jbig2/JBig2_Image_unittest.cpp",
    "core/fxcrt/autorestorer_unittest.cpp",
    "core/fxcrt/bytestring_unittest.cpp",
    "core/fxcrt/cfx_bitstream_unittest.cpp",
    "core/fxcrt/fx_bidi_unittest.cpp",
    "core/fxcrt/fx_coordinates_unittest.cpp",
    "core/fxcrt/fx_extension_unittest.cpp",
    "core/fxcrt/fx_memory_unittest.cpp",
    "core/fxcrt/fx_number_unittest.cpp",
    "core/fxcrt/fx_random_unittest.cpp",
    "core/fxcrt/fx_string_unittest.cpp",
    "core/fxcrt/fx_system_unittest.cpp",
    "core/fxcrt/maybe_owned_unittest.cpp",
    "core/fxcrt/observable_unittest.cpp",
    "core/fxcrt/pdfium_span_unittest.cpp",
    "core/fxcrt/retain_ptr_unittest.cpp",
    "core/fxcrt/shared_copy_on_write_unittest.cpp",
    "core/fxcrt/string_pool_template_unittest.cpp",
    "core/fxcrt/unowned_ptr_unittest.cpp",
    "core/fxcrt/weak_ptr_unittest.cpp",
    "core/fxcrt/widestring_unittest.cpp",
    "core/fxcrt/xml/cfx_xmlchardata_unittest.cpp",
    "core/fxcrt/xml/cfx_xmldocument_unittest.cpp",
    "core/fxcrt/xml/cfx_xmlelement_unittest.cpp",
    "core/fxcrt/xml/cfx_xmlinstruction_unittest.cpp",
    "core/fxcrt/xml/cfx_xmlnode_unittest.cpp",
    "core/fxcrt/xml/cfx_xmlparser_unittest.cpp",
    "core/fxcrt/xml/cfx_xmltext_unittest.cpp",
    "core/fxge/dib/cfx_dibitmap_unittest.cpp",
    "core/fxge/dib/cstretchengine_unittest.cpp",
    "fpdfsdk/fpdf_catalog_unittest.cpp",
    "fpdfsdk/fpdf_doc_unittest.cpp",
    "fpdfsdk/fpdf_editimg_unittest.cpp",
    "testing/pseudo_retainable.h",
    "testing/unit_test_main.cpp",
  ]
  deps = [
    ":pdfium",
    "testing/:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
  include_dirs = []
  if (pdf_enable_xfa) {
    sources += [
      "core/fxcrt/cfx_seekablemultistream_unittest.cpp",
      "core/fxcrt/css/cfx_cssdeclaration_unittest.cpp",
      "core/fxcrt/css/cfx_cssstylesheet_unittest.cpp",
      "core/fxcrt/css/cfx_cssvaluelistparser_unittest.cpp",
      "fxbarcode/oned/BC_OnedCodaBarWriter_unittest.cpp",
      "fxbarcode/oned/BC_OnedCode128Writer_unittest.cpp",
      "fxbarcode/oned/BC_OnedCode39Writer_unittest.cpp",
      "fxbarcode/oned/BC_OnedEAN13Writer_unittest.cpp",
      "fxbarcode/oned/BC_OnedEAN8Writer_unittest.cpp",
      "fxbarcode/oned/BC_OnedUPCAWriter_unittest.cpp",
      "fxbarcode/pdf417/BC_PDF417HighLevelEncoder_unittest.cpp",
      "xfa/fde/cfde_texteditengine_unittest.cpp",
      "xfa/fgas/crt/cfgas_formatstring_unittest.cpp",
      "xfa/fgas/layout/cfx_rtfbreak_unittest.cpp",
      "xfa/fgas/layout/cfx_txtbreak_unittest.cpp",
      "xfa/fwl/cfx_barcode_unittest.cpp",
      "xfa/fxfa/cxfa_ffbarcode_unittest.cpp",
      "xfa/fxfa/cxfa_textparser_unittest.cpp",
      "xfa/fxfa/fm2js/cxfa_fmexpression_unittest.cpp",
      "xfa/fxfa/fm2js/cxfa_fmlexer_unittest.cpp",
      "xfa/fxfa/fm2js/cxfa_fmparser_unittest.cpp",
      "xfa/fxfa/fm2js/cxfa_fmsimpleexpression_unittest.cpp",
      "xfa/fxfa/parser/cxfa_document_parser_unittest.cpp",
      "xfa/fxfa/parser/cxfa_localevalue_unittest.cpp",
      "xfa/fxfa/parser/cxfa_node_unittest.cpp",
      "xfa/fxfa/parser/cxfa_nodeiteratortemplate_unittest.cpp",
      "xfa/fxfa/parser/cxfa_xmllocale_unittest.cpp",
      "xfa/fxfa/parser/xfa_utils_unittest.cpp",
    ]
    if (pdf_enable_xfa_gif) {
      sources += [
        "core/fxcodec/gif/cfx_gifcontext_unittest.cpp",
        "core/fxcodec/gif/cfx_lzwdecompressor_unittest.cpp",
      ]
    }
  }
  if (pdf_use_skia || pdf_use_skia_paths) {
    sources += [ "core/fxge/skia/fx_skia_device_unittest.cpp" ]
    deps += [ "//skia" ]
  }
  if (pdf_enable_v8) {
    sources += [
      "fxjs/cfx_v8_unittest.cpp",
      "fxjs/cfx_v8_unittest.h",
      "fxjs/cfxjs_engine_unittest.cpp",
      "fxjs/cjs_publicmethods_unittest.cpp",
      "fxjs/cjs_util_unittest.cpp",
    ]
    deps += [ "fxjs" ]
    configs += [ "//v8:external_startup_data" ]
  }
  configs += [ ":pdfium_core_config" ]
  if (is_android) {
    use_raw_android_executable = true
  }
  if (is_clang) {
    # Suppress no override warning for overridden functions.
    cflags = [ "-Wno-inconsistent-missing-override" ]
  }
}

test("pdfium_embeddertests") {
  testonly = true
  sources = [
    "core/fpdfapi/edit/cpdf_creator_embeddertest.cpp",
    "core/fpdfapi/page/cpdf_docpagedata_embeddertest.cpp",
    "core/fpdfapi/page/cpdf_function_embeddertest.cpp",
    "core/fpdfapi/page/cpdf_stitchfunc_embeddertest.cpp",
    "core/fpdfapi/parser/cpdf_parser_embeddertest.cpp",
    "core/fpdfapi/parser/cpdf_security_handler_embeddertest.cpp",
    "core/fpdfapi/parser/fpdf_parser_decode_embeddertest.cpp",
    "core/fpdfapi/render/fpdf_render_loadimage_embeddertest.cpp",
    "core/fpdfapi/render/fpdf_render_pattern_embeddertest.cpp",
    "core/fxcodec/codec/fx_codec_embeddertest.cpp",
    "core/fxge/fx_ge_text_embeddertest.cpp",
    "fpdfsdk/cpdfsdk_annotiterator_embeddertest.cpp",
    "fpdfsdk/fpdf_annot_embeddertest.cpp",
    "fpdfsdk/fpdf_attachment_embeddertest.cpp",
    "fpdfsdk/fpdf_dataavail_embeddertest.cpp",
    "fpdfsdk/fpdf_doc_embeddertest.cpp",
    "fpdfsdk/fpdf_edit_embeddertest.cpp",
    "fpdfsdk/fpdf_editpath_embeddertest.cpp",
    "fpdfsdk/fpdf_ext_embeddertest.cpp",
    "fpdfsdk/fpdf_flatten_embeddertest.cpp",
    "fpdfsdk/fpdf_formfill_embeddertest.cpp",
    "fpdfsdk/fpdf_ppo_embeddertest.cpp",
    "fpdfsdk/fpdf_save_embeddertest.cpp",
    "fpdfsdk/fpdf_structtree_embeddertest.cpp",
    "fpdfsdk/fpdf_text_embeddertest.cpp",
    "fpdfsdk/fpdf_transformpage_embeddertest.cpp",
    "fpdfsdk/fpdf_view_c_api_test.c",
    "fpdfsdk/fpdf_view_c_api_test.h",
    "fpdfsdk/fpdf_view_embeddertest.cpp",
    "fpdfsdk/pwl/cpwl_combo_box_embeddertest.cpp",
    "fpdfsdk/pwl/cpwl_edit_embeddertest.cpp",
    "testing/embedder_test.cpp",
    "testing/embedder_test.h",
    "testing/embedder_test_main.cpp",
    "testing/embedder_test_mock_delegate.h",
    "testing/embedder_test_timer_handling_delegate.h",
    "testing/fake_file_access.cpp",
    "testing/fake_file_access.h",
    "testing/range_set.cpp",
    "testing/range_set.h",
  ]
  deps = [
    ":pdfium",
    "testing/:test_support",
    "testing/image_diff",
    "//testing/gmock",
    "//testing/gtest",
  ]
  include_dirs = [ "testing/gmock/include" ]
  configs += [ ":pdfium_core_config" ]

  if (pdf_enable_v8) {
    sources += [
      "fxjs/cfxjs_engine_embeddertest.cpp",
      "fxjs/cjs_publicmethods_embeddertest.cpp",
      "testing/js_embedder_test.cpp",
      "testing/js_embedder_test.h",
    ]
    deps += [ "fxjs" ]
    configs += [ "//v8:external_startup_data" ]
  }
  if (pdf_enable_xfa) {
    sources += [
      "fxjs/cfxjse_formcalc_context_embeddertest.cpp",
      "testing/xfa_js_embedder_test.cpp",
      "testing/xfa_js_embedder_test.h",
      "xfa/fwl/cfwl_edit_embeddertest.cpp",
      "xfa/fxfa/parser/cxfa_document_parser_embeddertest.cpp",
    ]
  }
  if (is_android) {
    ignore_all_data_deps = true
    use_raw_android_executable = true
  }
}

if (pdf_is_standalone) {
  jumbo_source_set("samples") {
    testonly = true
    deps = [
      "//samples",
    ]
  }

  executable("pdfium_diff") {
    testonly = true
    sources = [
      "testing/image_diff/image_diff.cpp",
    ]
    deps = [
      ":pdfium",
      "testing/image_diff",
      "//build/win:default_exe_manifest",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    configs += [ ":pdfium_core_config" ]
  }

  group("fuzzers") {
    testonly = true
    deps = [
      "//testing/fuzzers",
    ]
  }
}

group("pdfium_all") {
  testonly = true
  deps = [
    ":pdfium_embeddertests",
    ":pdfium_unittests",
  ]
  if (pdf_is_standalone) {
    deps += [
      ":fuzzers",
      ":pdfium_diff",
      ":samples",
    ]
  }
}
