# Copyright 2018 The 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/config/freetype/freetype.gni")
import("../../pdfium.gni")
import("../../testing/test.gni")

config("fxge_warnings") {
  visibility = [ ":*" ]
  if (is_clang) {
    cflags = [
      # http://code.google.com/p/pdfium/issues/detail?id=188
      "-Wno-switch",
    ]
  }
}

source_set("fxge") {
  sources = [
    "cfx_cliprgn.cpp",
    "cfx_cliprgn.h",
    "cfx_color.cpp",
    "cfx_color.h",
    "cfx_defaultrenderdevice.h",
    "cfx_drawutils.cpp",
    "cfx_drawutils.h",
    "cfx_face.cpp",
    "cfx_face.h",
    "cfx_fillrenderoptions.h",
    "cfx_folderfontinfo.cpp",
    "cfx_folderfontinfo.h",
    "cfx_font.cpp",
    "cfx_font.h",
    "cfx_fontcache.cpp",
    "cfx_fontcache.h",
    "cfx_fontmapper.cpp",
    "cfx_fontmapper.h",
    "cfx_fontmgr.cpp",
    "cfx_fontmgr.h",
    "cfx_gemodule.cpp",
    "cfx_gemodule.h",
    "cfx_glyphbitmap.cpp",
    "cfx_glyphbitmap.h",
    "cfx_glyphcache.cpp",
    "cfx_glyphcache.h",
    "cfx_graphstate.cpp",
    "cfx_graphstate.h",
    "cfx_graphstatedata.cpp",
    "cfx_graphstatedata.h",
    "cfx_path.cpp",
    "cfx_path.h",
    "cfx_renderdevice.cpp",
    "cfx_renderdevice.h",
    "cfx_substfont.cpp",
    "cfx_substfont.h",
    "cfx_textrenderoptions.h",
    "cfx_unicodeencoding.cpp",
    "cfx_unicodeencoding.h",
    "dib/cfx_bitmapcomposer.cpp",
    "dib/cfx_bitmapcomposer.h",
    "dib/cfx_bitmapstorer.cpp",
    "dib/cfx_bitmapstorer.h",
    "dib/cfx_cmyk_to_srgb.cpp",
    "dib/cfx_cmyk_to_srgb.h",
    "dib/cfx_dibbase.cpp",
    "dib/cfx_dibbase.h",
    "dib/cfx_dibitmap.cpp",
    "dib/cfx_dibitmap.h",
    "dib/cfx_imagerenderer.cpp",
    "dib/cfx_imagerenderer.h",
    "dib/cfx_imagestretcher.cpp",
    "dib/cfx_imagestretcher.h",
    "dib/cfx_imagetransformer.cpp",
    "dib/cfx_imagetransformer.h",
    "dib/cfx_scanlinecompositor.cpp",
    "dib/cfx_scanlinecompositor.h",
    "dib/cstretchengine.cpp",
    "dib/cstretchengine.h",
    "dib/fx_dib.cpp",
    "dib/fx_dib.h",
    "dib/scanlinecomposer_iface.h",
    "fontdata/chromefontdata/FoxitDingbats.cpp",
    "fontdata/chromefontdata/FoxitFixed.cpp",
    "fontdata/chromefontdata/FoxitFixedBold.cpp",
    "fontdata/chromefontdata/FoxitFixedBoldItalic.cpp",
    "fontdata/chromefontdata/FoxitFixedItalic.cpp",
    "fontdata/chromefontdata/FoxitSans.cpp",
    "fontdata/chromefontdata/FoxitSansBold.cpp",
    "fontdata/chromefontdata/FoxitSansBoldItalic.cpp",
    "fontdata/chromefontdata/FoxitSansItalic.cpp",
    "fontdata/chromefontdata/FoxitSansMM.cpp",
    "fontdata/chromefontdata/FoxitSerif.cpp",
    "fontdata/chromefontdata/FoxitSerifBold.cpp",
    "fontdata/chromefontdata/FoxitSerifBoldItalic.cpp",
    "fontdata/chromefontdata/FoxitSerifItalic.cpp",
    "fontdata/chromefontdata/FoxitSerifMM.cpp",
    "fontdata/chromefontdata/FoxitSymbol.cpp",
    "fontdata/chromefontdata/chromefontdata.h",
    "freetype/fx_freetype.cpp",
    "fx_font.cpp",
    "fx_font.h",
    "fx_freetype.h",
    "render_defines.h",
    "renderdevicedriver_iface.cpp",
    "renderdevicedriver_iface.h",
    "scoped_font_transform.cpp",
    "scoped_font_transform.h",
    "systemfontinfo_iface.h",
    "text_char_pos.cpp",
    "text_char_pos.h",
    "text_glyph_pos.cpp",
    "text_glyph_pos.h",
  ]

  configs += [
    ":fxge_warnings",
    "../../:pdfium_strict_config",
    "../../:pdfium_noshorten_config",
  ]

  deps = [ "../fxcrt" ]

  if (is_component_build || use_system_freetype) {
    # ft_adobe_glyph_list is not exported from the Freetype shared library so we
    # need it defined in component builds and builds using system freetype.
    defines = [ "DEFINE_PS_TABLES_DATA" ]
  }

  if (pdf_enable_xfa) {
    sources += [
      "cfx_unicodeencodingex.cpp",
      "cfx_unicodeencodingex.h",
    ]
  }

  if (pdf_use_skia || pdf_use_skia_paths) {
    sources += [ "skia/fx_skia_device.cpp" ]
    deps += [ "//skia" ]
  } else {
    sources += [
      "agg/fx_agg_driver.cpp",
      "agg/fx_agg_driver.h",
    ]
    deps += [ "../../third_party:fx_agg" ]
  }

  if (is_android) {
    sources += [
      "android/cfpf_skiadevicemodule.cpp",
      "android/cfpf_skiadevicemodule.h",
      "android/cfpf_skiafont.cpp",
      "android/cfpf_skiafont.h",
      "android/cfpf_skiafontmgr.cpp",
      "android/cfpf_skiafontmgr.h",
      "android/cfpf_skiapathfont.cpp",
      "android/cfpf_skiapathfont.h",
      "android/cfx_androidfontinfo.cpp",
      "android/cfx_androidfontinfo.h",
      "android/fx_android_impl.cpp",
    ]
  }

  if (is_linux || is_chromeos) {
    sources += [ "linux/fx_linux_impl.cpp" ]
  }

  if (is_mac) {
    sources += [
      "apple/fx_apple_impl.cpp",
      "apple/fx_apple_platform.cpp",
      "apple/fx_apple_platform.h",
      "apple/fx_quartz_device.cpp",
      "apple/fx_quartz_device.h",
    ]
    frameworks = [ "CoreGraphics.framework" ]
  }

  if (is_win) {
    sources += [
      "cfx_windowsrenderdevice.cpp",
      "cfx_windowsrenderdevice.h",
      "dib/cfx_dibextractor.cpp",
      "dib/cfx_dibextractor.h",
      "win32/cfx_psfonttracker.cpp",
      "win32/cfx_psfonttracker.h",
      "win32/cfx_psrenderer.cpp",
      "win32/cfx_psrenderer.h",
      "win32/cgdi_device_driver.cpp",
      "win32/cgdi_device_driver.h",
      "win32/cgdi_display_driver.cpp",
      "win32/cgdi_display_driver.h",
      "win32/cgdi_plus_ext.cpp",
      "win32/cgdi_plus_ext.h",
      "win32/cgdi_printer_driver.cpp",
      "win32/cgdi_printer_driver.h",
      "win32/cps_printer_driver.cpp",
      "win32/cps_printer_driver.h",
      "win32/cpsoutput.cpp",
      "win32/cpsoutput.h",
      "win32/ctext_only_printer_driver.cpp",
      "win32/ctext_only_printer_driver.h",
      "win32/cwin32_platform.cpp",
      "win32/cwin32_platform.h",
    ]
    configs -= [ "//build/config/win:lean_and_mean" ]
  }

  visibility = [ "../../*" ]
}

pdfium_unittest_source_set("unittests") {
  sources = [
    "cfx_folderfontinfo_unittest.cpp",
    "cfx_fontmapper_unittest.cpp",
    "cfx_path_unittest.cpp",
    "dib/cfx_cmyk_to_srgb_unittest.cpp",
    "dib/cfx_dibbase_unittest.cpp",
    "dib/cfx_dibitmap_unittest.cpp",
    "dib/cstretchengine_unittest.cpp",
    "fx_font_unittest.cpp",
  ]
  deps = [
    ":fxge",
    "../fpdfapi/page",
    "../fpdfapi/parser",
  ]
  pdfium_root_dir = "../../"

  if (is_win) {
    sources += [ "win32/cfx_psrenderer_unittest.cpp" ]
  }
}

pdfium_embeddertest_source_set("embeddertests") {
  sources = [ "fx_ge_text_embeddertest.cpp" ]
  deps = []
  pdfium_root_dir = "../../"

  if (pdf_use_skia || pdf_use_skia_paths) {
    sources += [ "skia/fx_skia_device_embeddertest.cpp" ]
    deps += [
      ":fxge",
      "../../fpdfsdk",
      "//skia",
    ]
  }

  if (is_win) {
    sources += [ "cfx_windowsrenderdevice_embeddertest.cpp" ]
    deps += [
      ":fxge",
      "../fxcodec",
    ]
  }
}
