# Copyright 2016 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/config/clang/clang.gni")
import("//build/config/gclient_args.gni")
import("//build/config/rust.gni")
import("//testing/test.gni")
import("pdfium.gni")

group("default") {
  testonly = true
  deps = [ ":pdfium" ]
  if (pdf_is_standalone) {
    deps += [ ":pdfium_all" ]
  }
}

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 = []
  cflags_cc = []
  ldflags = []
  include_dirs = [ "." ]
  defines = []

  if (!use_system_libopenjpeg2) {
    defines += [ "OPJ_STATIC" ]
  }

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

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

  if (pdf_use_partition_alloc) {
    defines += [ "PDF_USE_PARTITION_ALLOC" ]
  }

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

    if (!is_clang) {
      cflags += [
        # Warnings permanently disabled:

        # C4091: 'typedef ': ignored on left of 'X' when no variable is
        #                    declared.
        # This happens in a number of Windows headers. Dumb.
        "/wd4091",

        # C4127: conditional expression is constant
        # This warning can in theory catch dead code and other problems, but
        # triggers in far too many desirable cases where the conditional
        # expression is either set by macros or corresponds some legitimate
        # compile-time constant expression (due to constant template args,
        # conditionals comparing the sizes of different types, etc.).  Some of
        # these can be worked around, but it's not worth it.
        "/wd4127",

        # C4251: 'identifier' : class 'type' needs to have dll-interface to be
        #        used by clients of class 'type2'
        # This is necessary for the shared library build.
        "/wd4251",

        # C4275:  non dll-interface class used as base for dll-interface class
        # This points out a potential (but rare) problem with referencing static
        # fields of a non-exported base, through the base's non-exported inline
        # functions, or directly. The warning is subtle enough that people just
        # suppressed it when they saw it, so it's not worth it.
        "/wd4275",

        # C4312 is a VS 2015 64-bit warning for integer to larger pointer.
        # TODO(brucedawson): fix warnings, crbug.com/554200
        "/wd4312",

        # C4324 warns when padding is added to fulfill alignas requirements,
        # but can trigger in benign cases that are difficult to individually
        # suppress.
        "/wd4324",

        # C4351: new behavior: elements of array 'array' will be default
        #        initialized
        # This is a silly "warning" that basically just alerts you that the
        # compiler is going to actually follow the language spec like it's
        # supposed to, instead of not following it like old buggy versions did.
        # There's absolutely no reason to turn this on.
        "/wd4351",

        # C4355: 'this': used in base member initializer list
        # It's commonly useful to pass |this| to objects in a class' initializer
        # list.  While this warning can catch real bugs, most of the time the
        # constructors in question don't attempt to call methods on the passed-in
        # pointer (until later), and annotating every legit usage of this is
        # simply more hassle than the warning is worth.
        "/wd4355",

        # C4503: 'identifier': decorated name length exceeded, name was
        #        truncated
        # This only means that some long error messages might have truncated
        # identifiers in the presence of lots of templates.  It has no effect on
        # program correctness and there's no real reason to waste time trying to
        # prevent it.
        "/wd4503",

        # Warning C4589 says: "Constructor of abstract class ignores
        # initializer for virtual base class." Disable this warning because it
        # is flaky in VS 2015 RTM. It triggers on compiler generated
        # copy-constructors in some cases.
        "/wd4589",

        # C4611: interaction between 'function' and C++ object destruction is
        #        non-portable
        # This warning is unavoidable when using e.g. setjmp/longjmp.  MSDN
        # suggests using exceptions instead of setjmp/longjmp for C++, but
        # Chromium code compiles without exception support.  We therefore have to
        # use setjmp/longjmp for e.g. JPEG decode error handling, which means we
        # have to turn off this warning (and be careful about how object
        # destruction happens in such cases).
        "/wd4611",

        # Warnings to evaluate and possibly fix/reenable later:

        "/wd4100",  # Unreferenced formal function parameter.
        "/wd4121",  # Alignment of a member was sensitive to packing.
        "/wd4244",  # Conversion: possible loss of data.
        "/wd4505",  # Unreferenced local function has been removed.
        "/wd4510",  # Default constructor could not be generated.
        "/wd4512",  # Assignment operator could not be generated.
        "/wd4610",  # Class can never be instantiated, constructor required.
        "/wd4838",  # Narrowing conversion. Doesn't seem to be very useful.
        "/wd4995",  # 'X': name was marked as #pragma deprecated
        "/wd4996",  # Deprecated function warning.

        # These are variable shadowing warnings that are new in VS2015. We
        # should work through these at some point -- they may be removed from
        # the RTM release in the /W4 set.
        "/wd4456",
        "/wd4457",
        "/wd4458",
        "/wd4459",

        # All of our compilers support the extensions below.
        "/wd4200",  # nonstandard extension used: zero-sized array in
                    # struct/union
        "/wd4201",  # nonstandard extension used: nameless struct/union
        "/wd4204",  # nonstandard extension used : non-constant aggregate
                    # initializer

        "/wd4221",  # nonstandard extension used : 'identifier' : cannot be
                    # initialized using address of automatic variable

        # http://crbug.com/588506 - Conversion suppressions waiting on Clang
        # -Wconversion.
        "/wd4245",  # 'conversion' : conversion from 'type1' to 'type2',
                    # signed/unsigned mismatch

        "/wd4267",  # 'var' : conversion from 'size_t' to 'type', possible loss
                    # of data

        "/wd4305",  # 'identifier' : truncation from 'type1' to 'type2'
        "/wd4389",  # 'operator' : signed/unsigned mismatch

        "/wd4702",  # unreachable code

        # http://crbug.com/848979 - MSVC is more conservative than Clang with
        # regards to variables initialized and consumed in different branches.
        "/wd4701",  # Potentially uninitialized local variable 'name' used
        "/wd4703",  # Potentially uninitialized local pointer variable 'name'
                    # used

        # http://crbug.com/848979 - Remaining Clang permitted warnings.
        "/wd4661",  # 'identifier' : no suitable definition provided for
                    # explicit
                    # template instantiation request

        "/wd4706",  # assignment within conditional expression
                    # MSVC is stricter and requires a boolean expression.

        "/wd4715",  # 'function' : not all control paths return a value'
                    # MSVC does not analyze switch (enum) for completeness.
      ]

      cflags_cc += [
        # Allow "noexcept" annotations even though we compile with exceptions
        # disabled.
        "/wd4577",
      ]

      if (current_cpu == "x86") {
        if (msvc_use_sse2) {
          cflags += [ "/arch:SSE2" ]
        }
      }
    }
  }

  if (is_clang) {
    # Override -Wno-c++11-narrowing.
    cflags += [ "-Wc++11-narrowing" ]

    # TODO(crbug.com/1213098): Remove once this is in //build.
    cflags += [ "-Wdeprecated-copy" ]

    # May flag some issues when converting int to size_t.
    cflags += [ "-Wtautological-unsigned-zero-compare" ]
  }

  if (!is_win && !is_clang) {
    cflags += [
      # Override -Wno-narrowing for GCC.
      "-Wnarrowing",

      # GCC assumes that control can get past an exhaustive switch and then
      # warns if there's no return there.
      "-Wno-return-type",
    ]
  }
}

config("pdfium_implementation_config") {
  defines = [ "FPDF_IMPLEMENTATION" ]
  visibility = [ ":pdfium_public_headers" ]
}

config("pdfium_public_config") {
  defines = []

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

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

config("pdfium_core_config") {
  cflags = []
  configs = [
    ":pdfium_common_config",
    ":pdfium_public_config",
    "//build/config/compiler:noshadowing",
  ]
  defines = []
  if (is_win) {
    cflags += [
      "/wd4324",
      "/wd4577",
    ]
  }
  if (is_clang) {
    cflags += [ "-Wcovered-switch-default" ]
  }
}

config("pdfium_plugin_config") {
  cflags = []
  defines = []
  if (clang_use_chrome_plugins) {
    # Catch misuse of C-style pointers.
    # TODO(tsepez): enable for windows, too.
    if (!is_win) {
      cflags += [
        "-Xclang",
        "-plugin-arg-find-bad-constructs",
        "-Xclang",
        "check-raw-ptr-fields",

        "-Xclang",
        "-plugin-arg-find-bad-constructs",
        "-Xclang",
        "raw-ptr-exclude-path=public",

        "-Xclang",
        "-plugin-arg-find-bad-constructs",
        "-Xclang",
        "raw-ptr-exclude-path=test",

        # TODO(tsepez): enforce raw_ref<> as well.
        # "-Xclang",
        # "-plugin-arg-find-bad-constructs",
        # "-Xclang",
        # "check-raw-ref-fields",
      ]
      defines += [ "PDF_ENABLE_UNOWNED_PTR_EXCLUSION" ]
    }

    # Catch misuse of cppgc in XFA.
    if (pdf_enable_xfa) {
      cflags += [
        "-Xclang",
        "-add-plugin",
        "-Xclang",
        "blink-gc-plugin",
      ]
    }
  }
}

config("pdfium_strict_config") {
  configs = [
    ":pdfium_core_config",
    ":pdfium_plugin_config",
    "//build/config/compiler:wexit_time_destructors",
    "//build/config/compiler:wglobal_constructors",
  ]
}

config("pdfium_noshorten_config") {
  cflags = []
  if (is_clang) {
    cflags += [ "-Wshorten-64-to-32" ]
  }
}

source_set("pdfium_public_headers_impl") {
  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_javascript.h",
    "public/fpdf_ppo.h",
    "public/fpdf_progressive.h",
    "public/fpdf_save.h",
    "public/fpdf_searchex.h",
    "public/fpdf_signature.h",
    "public/fpdf_structtree.h",
    "public/fpdf_sysfontinfo.h",
    "public/fpdf_text.h",
    "public/fpdf_transformpage.h",
    "public/fpdfview.h",
  ]
}

group("pdfium_public_headers") {
  public_deps = [ ":pdfium_public_headers_impl" ]
  public_configs = [
    ":pdfium_public_config",
    ":pdfium_implementation_config",
  ]
}

component("pdfium") {
  output_name = "pdfium"
  libs = []
  configs += [ ":pdfium_strict_config" ]
  public_configs = [ ":pdfium_public_config" ]

  deps = [
    "constants",
    "core/fpdfapi/page",
    "core/fpdfapi/parser",
    "core/fpdfdoc",
    "core/fxcodec",
    "core/fxcrt",
    "core/fxge",
    "fpdfsdk",
    "fpdfsdk/formfiller",
    "fxjs",
    "third_party:pdfium_base",
  ]

  public_deps = [
    ":pdfium_public_headers_impl",
    "core/fxcrt",
  ]

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

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

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

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

# Targets below this are only visible within this file.
visibility = [ ":*" ]

group("pdfium_unittest_deps") {
  testonly = true
  public_deps = [
    "core/fxcrt",
    "testing:unit_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/fpdfapi/render:unittests",
    "core/fpdfdoc:unittests",
    "core/fpdftext:unittests",
    "core/fxcodec:unittests",
    "core/fxcrt",
    "core/fxcrt:unittests",
    "core/fxge:unittests",
    "fpdfsdk:unittests",
    "testing:unit_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 += [
        "core/fxcrt/css:unittests",
        "fxbarcode:unittests",
        "xfa/fde:unittests",
        "xfa/fgas/crt:unittests",
        "xfa/fgas/font:unittests",
        "xfa/fgas/layout:unittests",
        "xfa/fxfa:unittests",
        "xfa/fxfa/formcalc:unittests",
        "xfa/fxfa/parser:unittests",
      ]
    }
  }
}

group("pdfium_embeddertest_deps") {
  testonly = true
  public_deps = [
    ":pdfium_public_headers",
    "core/fxcrt",
    "testing:embedder_test_support",
    "third_party:pdfium_base_test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
  visibility += [
    "core/*",
    "fpdfsdk/*",
    "fxjs/*",
    "xfa/*",
  ]
}

test("pdfium_embeddertests") {
  testonly = true
  sources = [ "testing/embedder_test_main.cpp" ]
  deps = [
    ":pdfium_embeddertest_deps",
    "core/fpdfapi/edit:embeddertests",
    "core/fpdfapi/parser:embeddertests",
    "core/fpdfapi/render:embeddertests",
    "core/fxcodec:embeddertests",
    "core/fxcrt",
    "core/fxge:embeddertests",
    "fpdfsdk:embeddertests",
    "fpdfsdk/formfiller:embeddertests",
    "fpdfsdk/pwl:embeddertests",
    "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) {
    deps += [
      "fxjs:embeddertests",
      "//v8",
    ]
    configs += [ "//v8:external_startup_data" ]
  }

  if (pdf_enable_xfa) {
    deps += [
      "fpdfsdk/fpdfxfa:embeddertests",
      "xfa/fwl:embeddertests",
      "xfa/fxfa/layout:embeddertests",
      "xfa/fxfa/parser:embeddertests",
    ]
  }
}

executable("pdfium_diff") {
  visibility += [ "testing/tools:test_runner_py" ]
  testonly = true
  sources = [ "testing/image_diff/image_diff.cpp" ]
  deps = [
    "core/fxcrt",
    "testing:path_service",
    "testing/image_diff",
    "//build/win:default_exe_manifest",
  ]
  configs += [ ":pdfium_strict_config" ]
}

group("pdfium_all") {
  testonly = true
  deps = [
    ":pdfium_diff",
    ":pdfium_embeddertests",
    ":pdfium_unittests",
    "samples",
    "testing/fuzzers",
  ]

  if (pdf_is_standalone) {
    deps += [ "testing/tools:test_runner_py" ]
  }
}

# Makes additional targets reachable only for "gn check". These are not always
# built by the "all" Ninja target, which uses the "default" group, which in turn
# depends on the "pdfium_all" group.
group("gn_check") {
  deps = []

  # TODO(crbug.com/pdfium/1832): Remove !is_android when //third_party/expat is
  # available.
  if (defined(checkout_skia) && checkout_skia && !is_android) {
    deps += [ "//skia" ]
  }
}

if (enable_rust) {
  group("rust_build_tests") {
    testonly = true
    deps = [ "//build/rust/tests" ]
  }
}
