# 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("page") {
  sources = [
    "cpdf_allstates.cpp",
    "cpdf_allstates.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_dibbase.cpp",
    "cpdf_dibbase.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_imageobject.cpp",
    "cpdf_imageobject.h",
    "cpdf_meshstream.cpp",
    "cpdf_meshstream.h",
    "cpdf_occontext.cpp",
    "cpdf_occontext.h",
    "cpdf_page.cpp",
    "cpdf_page.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_transparency.cpp",
    "cpdf_transparency.h",
    "ipdf_page.h",
  ]
  configs += [ "../../../:pdfium_core_config" ]
  deps = [
    "../../../constants",
    "../../fdrm",
    "../../fxcodec",
    "../../fxcrt",
    "../../fxge",
    "../font",
    "../parser",
  ]
  allow_circular_includes_from = []
  if (pdf_use_skia || pdf_use_skia_paths) {
    allow_circular_includes_from += [ "../../fxge" ]
  }
  visibility = [ "../../../*" ]
}

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