# Copyright 2015 PDFium 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_overrides/pdfium.gni")

# This file contains PDFium-related build flags.

declare_args() {
  # Build PDFium either:
  # 1) When set to true, with a bundled FreeType, built from FreeType source
  #    code in //third_party/freetype and PDFium's FreeType configs in
  #    third_party/freetype/include.
  # 2) When set to false, use whatever FreeType target is defined in
  #    //build/config/freetype.
  pdf_bundle_freetype = pdf_bundle_freetype_override

  # Generate logging messages for click events that reach PDFium
  pdf_enable_click_logging = false

  # Build PDFium either with or without v8 support.
  pdf_enable_v8 = pdf_enable_v8_override

  # Build PDFium either with or without XFA Forms support.
  pdf_enable_xfa = pdf_enable_xfa_override

  # If XFA, also support bmp codec. Ignored if not XFA.
  pdf_enable_xfa_bmp = true

  # If XFA, also support gif codec. Ignored if not XFA.
  pdf_enable_xfa_gif = true

  # If XFA, also support png codec. Ignored if not XFA.
  pdf_enable_xfa_png = true

  # If XFA, also support png codec. Ignored if not XFA.
  pdf_enable_xfa_tiff = true

  # Build PDFium against Skia (experimental) rather than AGG. Use Skia to draw
  # everything.
  pdf_use_skia = pdf_use_skia_override

  # Build PDFium against Skia (experimental) rather than AGG. Use Skia to draw
  # paths.
  pdf_use_skia_paths = pdf_use_skia_paths_override

  # Build PDFium with or without experimental win32 GDI APIs.
  pdf_use_win32_gdi = pdf_use_win32_gdi_override

  # Build PDFium standalone
  pdf_is_standalone = false

  # Build a complete static library
  pdf_is_complete_lib = false

  # Enable callgrind for performance profiling
  enable_callgrind = false

  # Don't build against bundled zlib.
  use_system_zlib = false

  # Don't build against bundled lcms2.
  use_system_lcms2 = false

  # Don't build against bundled libpng.
  use_system_libpng = false
}

if (pdf_use_skia && pdf_use_skia_paths) {
  assert(false, "Enable at most ONE of pdf_use_skia and pdf_use_skia_paths")
}

assert(!pdf_is_complete_lib || !is_component_build,
       "pdf_is_complete_lib=true requires is_component_build=false")
