# 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

  # 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

  # Enable coverage information
  use_coverage = 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")
