# 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_source_set("pdfium_public_headers") {
  sources = [
    "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",
  ]
}

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",
  ]

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

  deps = [
    ":pdfium_public_headers",
    "constants",
    "core/fdrm",
    "core/fpdfapi",
    "core/fpdfapi/edit",
    "core/fpdfapi/font",
    "core/fpdfapi/page",
    "core/fpdfapi/parser",
    "core/fpdfapi/render",
    "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 = [
    ":pdfium_public_headers",
    "core/fxcrt",
  ]

  if (pdf_enable_xfa) {
    deps += [
      "fpdfsdk/fpdfxfa",
      "fxbarcode",
      "xfa/fxfa",
      "xfa/fxfa/parser",
    ]
  }

  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",
]

group("pdfium_unittest_deps") {
  testonly = true
  public_deps = [
    "core/fxcrt",
    "testing/:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
  visibility += [
    "core/*",
    "fpdfsdk/*",
    "fxbarcode/*",
    "fxjs/*",
    "xfa/*",
  ]
}

test("pdfium_unittests") {
  testonly = true
  sources = [
    "testing/unit_test_main.cpp",
  ]
  deps = [
    "core/fdrm:unittests",
    "core/fpdfapi/edit:unittests",
    "core/fpdfapi/font:unittests",
    "core/fpdfapi/page:unittests",
    "core/fpdfapi/parser:unittests",
    "core/fpdfdoc:unittests",
    "core/fpdftext:unittests",
    "core/fxcodec:unittests",
    "core/fxcrt",
    "core/fxcrt:unittests",
    "core/fxge",
    "core/fxge:unittests",
    "fpdfsdk:unittests",
    "testing/:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
  configs += [ ":pdfium_core_config" ]

  if (is_android) {
    use_raw_android_executable = true
  }

  if (pdf_enable_v8) {
    configs += [ "//v8:external_startup_data" ]
    deps += [
      "fxjs:unittests",
      "//v8",
    ]
  }

  if (pdf_enable_xfa) {
    deps += [
      "fxbarcode:unittests",
      "xfa/fde:unittests",
      "xfa/fgas",
      "xfa/fgas:unittests",
      "xfa/fwl:unittests",
      "xfa/fxfa:unittests",
      "xfa/fxfa/fm2js:unittests",
      "xfa/fxfa/parser:unittests",
    ]
  }
}

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 (is_android) {
    ignore_all_data_deps = true
    use_raw_android_executable = true
  }

  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 (pdf_use_skia || pdf_use_skia_paths) {
    sources += [ "core/fxge/skia/fx_skia_device_embeddertest.cpp" ]
    deps += [ "//skia" ]
  }
}

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",
    ]
  }
}
