# 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/jumbo.gni")
import("../../pdfium.gni")
import("../../testing/test.gni")

jumbo_source_set("fxcodec") {
  sources = [
    "JBig2_DocumentContext.h",
    "codec/ccodec_basicmodule.cpp",
    "codec/ccodec_basicmodule.h",
    "codec/ccodec_faxmodule.cpp",
    "codec/ccodec_faxmodule.h",
    "codec/ccodec_flatemodule.cpp",
    "codec/ccodec_flatemodule.h",
    "codec/ccodec_iccmodule.cpp",
    "codec/ccodec_iccmodule.h",
    "codec/ccodec_jbig2module.cpp",
    "codec/ccodec_jbig2module.h",
    "codec/ccodec_jpegmodule.cpp",
    "codec/ccodec_jpegmodule.h",
    "codec/ccodec_jpxmodule.cpp",
    "codec/ccodec_jpxmodule.h",
    "codec/ccodec_scanlinedecoder.cpp",
    "codec/ccodec_scanlinedecoder.h",
    "codec/cfx_codec_memory.cpp",
    "codec/cfx_codec_memory.h",
    "codec/cjpx_decoder.h",
    "codec/codec_int.h",
    "codec/codec_module_iface.h",
    "codec/fx_codec.cpp",
    "fx_codec.h",
    "fx_codec_def.h",
    "jbig2/JBig2_ArithDecoder.cpp",
    "jbig2/JBig2_ArithDecoder.h",
    "jbig2/JBig2_ArithIntDecoder.cpp",
    "jbig2/JBig2_ArithIntDecoder.h",
    "jbig2/JBig2_BitStream.cpp",
    "jbig2/JBig2_BitStream.h",
    "jbig2/JBig2_Context.cpp",
    "jbig2/JBig2_Context.h",
    "jbig2/JBig2_Define.h",
    "jbig2/JBig2_GrdProc.cpp",
    "jbig2/JBig2_GrdProc.h",
    "jbig2/JBig2_GrrdProc.cpp",
    "jbig2/JBig2_GrrdProc.h",
    "jbig2/JBig2_HtrdProc.cpp",
    "jbig2/JBig2_HtrdProc.h",
    "jbig2/JBig2_HuffmanDecoder.cpp",
    "jbig2/JBig2_HuffmanDecoder.h",
    "jbig2/JBig2_HuffmanTable.cpp",
    "jbig2/JBig2_HuffmanTable.h",
    "jbig2/JBig2_Image.cpp",
    "jbig2/JBig2_Image.h",
    "jbig2/JBig2_Page.h",
    "jbig2/JBig2_PatternDict.cpp",
    "jbig2/JBig2_PatternDict.h",
    "jbig2/JBig2_PddProc.cpp",
    "jbig2/JBig2_PddProc.h",
    "jbig2/JBig2_SddProc.cpp",
    "jbig2/JBig2_SddProc.h",
    "jbig2/JBig2_Segment.cpp",
    "jbig2/JBig2_Segment.h",
    "jbig2/JBig2_SymbolDict.cpp",
    "jbig2/JBig2_SymbolDict.h",
    "jbig2/JBig2_TrdProc.cpp",
    "jbig2/JBig2_TrdProc.h",
  ]
  configs += [ "../../:pdfium_core_config" ]
  include_dirs = []
  deps = [
    "../../third_party:lcms2",
    "../../third_party:libopenjpeg2",
    "../../third_party:zlib",
    "../fxcrt",
    "../fxge",
    "//third_party:jpeg",
  ]
  allow_circular_includes_from = []

  if (pdf_enable_xfa) {
    sources += [
      "codec/ccodec_progressivedecoder.cpp",
      "codec/ccodec_progressivedecoder.h",
    ]
    if (pdf_enable_xfa_bmp) {
      sources += [
        "bmp/cfx_bmpcontext.cpp",
        "bmp/cfx_bmpcontext.h",
        "bmp/cfx_bmpdecompressor.cpp",
        "bmp/cfx_bmpdecompressor.h",
        "bmp/fx_bmp.cpp",
        "bmp/fx_bmp.h",
        "codec/ccodec_bmpmodule.cpp",
        "codec/ccodec_bmpmodule.h",
      ]
    }
    if (pdf_enable_xfa_gif) {
      sources += [
        "codec/ccodec_gifmodule.cpp",
        "codec/ccodec_gifmodule.h",
        "gif/cfx_gif.cpp",
        "gif/cfx_gif.h",
        "gif/cfx_gifcontext.cpp",
        "gif/cfx_gifcontext.h",
        "gif/cfx_lzwdecompressor.cpp",
        "gif/cfx_lzwdecompressor.h",
      ]
    }
    if (pdf_enable_xfa_png) {
      sources += [
        "codec/ccodec_pngmodule.cpp",
        "codec/ccodec_pngmodule.h",
      ]
      deps += [ "../../third_party:png" ]
    }
    if (pdf_enable_xfa_tiff) {
      sources += [
        "codec/ccodec_tiffmodule.cpp",
        "codec/ccodec_tiffmodule.h",
      ]
      deps += [ "../../third_party:fx_tiff" ]
    }
  }

  if (is_win) {
    allow_circular_includes_from += [ "../fxge" ]
  }

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

pdfium_unittest_source_set("unittests") {
  sources = [
    "codec/fx_codec_a85_unittest.cpp",
    "codec/fx_codec_jpx_unittest.cpp",
    "codec/fx_codec_rle_unittest.cpp",
    "jbig2/JBig2_BitStream_unittest.cpp",
    "jbig2/JBig2_Image_unittest.cpp",
  ]
  deps = [
    ":fxcodec",
    "../fpdfapi/parser",
  ]
  pdfium_root_dir = "../../"

  if (pdf_enable_xfa) {
    sources += [ "codec/ccodec_progressivedecoder_unittest.cpp" ]
    deps += [ "../fxge" ]
    if (pdf_enable_xfa_gif) {
      sources += [
        "gif/cfx_gifcontext_unittest.cpp",
        "gif/cfx_lzwdecompressor_unittest.cpp",
      ]
    }
  }
}

pdfium_embeddertest_source_set("embeddertests") {
  sources = [
    "codec/fx_codec_embeddertest.cpp",
  ]
  pdfium_root_dir = "../../"
}
