# 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 && pdf_enable_fontations) {
    defines += [ "PDF_ENABLE_FONTATIONS" ]
  }

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

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

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

      # Disable GC plugin forbidding off-heap collections of GCed:
      cflags += [
        "-Xclang",
        "-plugin-arg-blink-gc-plugin",
        "-Xclang",
        "disable-off-heap-collections-of-gced-check",
      ]
    }
  }
}

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

config("pdfium_nounsafe_buffer_usage_config") {
  cflags = []
  if (is_clang) {
    cflags += [ "-Wunsafe-buffer-usage" ]
  }
}

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

  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",
    "//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" ]
  }
  if (enable_rust) {
    # Until there's actual Rust code to use, include the rust_build_tests in the
    # all group to verify the language keeps working here.
    deps += [ ":rust_build_tests" ]
  }
}

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