583 lines
16 KiB
Plaintext
583 lines
16 KiB
Plaintext
# 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("//testing/test.gni")
|
|
import("pdfium.gni")
|
|
|
|
group("default") {
|
|
testonly = true
|
|
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") {
|
|
cflags += [
|
|
# VC++ 2015 changes 32-bit size_t truncation warnings from 4244 to
|
|
# 4267. Example: short TruncTest(size_t x) { return x; }
|
|
# Since we disable 4244 we need to disable 4267 during migration.
|
|
# TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
|
|
"/wd4267",
|
|
]
|
|
|
|
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" ]
|
|
|
|
# Catch misuse of cppgc in XFA.
|
|
if (pdf_enable_xfa && clang_use_chrome_plugins) {
|
|
cflags += [
|
|
"-Xclang",
|
|
"-add-plugin",
|
|
"-Xclang",
|
|
"blink-gc-plugin",
|
|
]
|
|
}
|
|
}
|
|
|
|
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",
|
|
]
|
|
}
|
|
}
|
|
|
|
config("pdfium_strict_config") {
|
|
configs = [
|
|
":pdfium_core_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",
|
|
"third_party:skia_shared",
|
|
]
|
|
|
|
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") {
|
|
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" ]
|
|
}
|
|
|
|
if (pdf_is_standalone) {
|
|
source_set("samples") {
|
|
testonly = true
|
|
deps = [ "//samples" ]
|
|
}
|
|
|
|
group("fuzzers") {
|
|
testonly = true
|
|
deps = [ "//testing/fuzzers" ]
|
|
}
|
|
}
|
|
|
|
group("pdfium_all") {
|
|
testonly = true
|
|
deps = [
|
|
":pdfium_diff",
|
|
":pdfium_embeddertests",
|
|
":pdfium_unittests",
|
|
]
|
|
if (pdf_is_standalone) {
|
|
deps += [
|
|
":fuzzers",
|
|
":samples",
|
|
]
|
|
}
|
|
}
|
|
|
|
# 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" ]
|
|
}
|
|
}
|