# Copyright 2018 The PDFium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("../../../pdfium.gni")
import("../../../testing/test.gni")

source_set("page") {
  sources = [
    "cpdf_allstates.cpp",
    "cpdf_allstates.h",
    "cpdf_annotcontext.cpp",
    "cpdf_annotcontext.h",
    "cpdf_basedcs.cpp",
    "cpdf_basedcs.h",
    "cpdf_clippath.cpp",
    "cpdf_clippath.h",
    "cpdf_color.cpp",
    "cpdf_color.h",
    "cpdf_colorspace.cpp",
    "cpdf_colorspace.h",
    "cpdf_colorstate.cpp",
    "cpdf_colorstate.h",
    "cpdf_contentmarkitem.cpp",
    "cpdf_contentmarkitem.h",
    "cpdf_contentmarks.cpp",
    "cpdf_contentmarks.h",
    "cpdf_contentparser.cpp",
    "cpdf_contentparser.h",
    "cpdf_devicecs.cpp",
    "cpdf_devicecs.h",
    "cpdf_dib.cpp",
    "cpdf_dib.h",
    "cpdf_docpagedata.cpp",
    "cpdf_docpagedata.h",
    "cpdf_expintfunc.cpp",
    "cpdf_expintfunc.h",
    "cpdf_form.cpp",
    "cpdf_form.h",
    "cpdf_formobject.cpp",
    "cpdf_formobject.h",
    "cpdf_function.cpp",
    "cpdf_function.h",
    "cpdf_generalstate.cpp",
    "cpdf_generalstate.h",
    "cpdf_graphicstates.cpp",
    "cpdf_graphicstates.h",
    "cpdf_iccprofile.cpp",
    "cpdf_iccprofile.h",
    "cpdf_image.cpp",
    "cpdf_image.h",
    "cpdf_imageloader.cpp",
    "cpdf_imageloader.h",
    "cpdf_imageobject.cpp",
    "cpdf_imageobject.h",
    "cpdf_indexedcs.cpp",
    "cpdf_indexedcs.h",
    "cpdf_meshstream.cpp",
    "cpdf_meshstream.h",
    "cpdf_occontext.cpp",
    "cpdf_occontext.h",
    "cpdf_page.cpp",
    "cpdf_page.h",
    "cpdf_pageimagecache.cpp",
    "cpdf_pageimagecache.h",
    "cpdf_pagemodule.cpp",
    "cpdf_pagemodule.h",
    "cpdf_pageobject.cpp",
    "cpdf_pageobject.h",
    "cpdf_pageobjectholder.cpp",
    "cpdf_pageobjectholder.h",
    "cpdf_path.cpp",
    "cpdf_path.h",
    "cpdf_pathobject.cpp",
    "cpdf_pathobject.h",
    "cpdf_pattern.cpp",
    "cpdf_pattern.h",
    "cpdf_patterncs.cpp",
    "cpdf_patterncs.h",
    "cpdf_psengine.cpp",
    "cpdf_psengine.h",
    "cpdf_psfunc.cpp",
    "cpdf_psfunc.h",
    "cpdf_sampledfunc.cpp",
    "cpdf_sampledfunc.h",
    "cpdf_shadingobject.cpp",
    "cpdf_shadingobject.h",
    "cpdf_shadingpattern.cpp",
    "cpdf_shadingpattern.h",
    "cpdf_stitchfunc.cpp",
    "cpdf_stitchfunc.h",
    "cpdf_streamcontentparser.cpp",
    "cpdf_streamcontentparser.h",
    "cpdf_streamparser.cpp",
    "cpdf_streamparser.h",
    "cpdf_textobject.cpp",
    "cpdf_textobject.h",
    "cpdf_textstate.cpp",
    "cpdf_textstate.h",
    "cpdf_tilingpattern.cpp",
    "cpdf_tilingpattern.h",
    "cpdf_transferfunc.cpp",
    "cpdf_transferfunc.h",
    "cpdf_transferfuncdib.cpp",
    "cpdf_transferfuncdib.h",
    "cpdf_transparency.cpp",
    "cpdf_transparency.h",
    "ipdf_page.h",
  ]
  configs += [ "../../../:pdfium_strict_config" ]
  public_deps = [
    "../../fxge",
    "../parser",
  ]
  deps = [
    "../../../constants",
    "../../fxcodec",
    "../../fxcrt",
    "../font",
  ]
  allow_circular_includes_from = []
  if (pdf_use_skia) {
    allow_circular_includes_from += [ "../../fxge" ]
  }
  visibility = [ "../../../*" ]
}

source_set("unit_test_support") {
  testonly = true
  sources = [
    "test_with_page_module.cpp",
    "test_with_page_module.h",
  ]
  configs += [ "../../../:pdfium_strict_config" ]
  deps = [
    "../page",
    "//testing/gtest",
  ]
}

pdfium_unittest_source_set("unittests") {
  sources = [
    "cpdf_colorspace_unittest.cpp",
    "cpdf_devicecs_unittest.cpp",
    "cpdf_function_unittest.cpp",
    "cpdf_pageimagecache_unittest.cpp",
    "cpdf_pageobjectholder_unittest.cpp",
    "cpdf_psengine_unittest.cpp",
    "cpdf_streamcontentparser_unittest.cpp",
    "cpdf_streamparser_unittest.cpp",
  ]
  deps = [
    ":page",
    "../parser",
    "../render",
  ]
  pdfium_root_dir = "../../../"
}
