# 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_jbig2module.cpp",
    "codec/ccodec_jbig2module.h",
    "codec/ccodec_jpegmodule.cpp",
    "codec/ccodec_jpegmodule.h",
    "codec/ccodec_scanlinedecoder.cpp",
    "codec/ccodec_scanlinedecoder.h",
    "codec/cfx_codec_memory.cpp",
    "codec/cfx_codec_memory.h",
    "codec/cjpx_decoder.cpp",
    "codec/cjpx_decoder.h",
    "codec/codec_int.h",
    "codec/codec_module_iface.h",
    "codec/fx_codec.cpp",
    "codec/iccmodule.cpp",
    "codec/iccmodule.h",
    "codec/jpxmodule.cpp",
    "codec/jpxmodule.h",
    "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",
  ]

  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/bmpmodule.cpp",
        "codec/bmpmodule.h",
      ]
    }
    if (pdf_enable_xfa_gif) {
      sources += [
        "codec/gifmodule.cpp",
        "codec/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/pngmodule.cpp",
        "codec/pngmodule.h",
      ]
      deps += [ "../../third_party:png" ]
    }
    if (pdf_enable_xfa_tiff) {
      sources += [
        "codec/tiffmodule.cpp",
        "codec/tiffmodule.h",
      ]
      deps += [ "../../third_party:fx_tiff" ]
    }
  }

  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 = "../../"
}
