# 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_dibtransferfunc.cpp",
    "cpdf_dibtransferfunc.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_transferfunc.cpp",
    "cpdf_transferfunc.h",
    "cpdf_transparency.cpp",
    "cpdf_transparency.h",
    "ipdf_page.h",
  ]
  configs += [ "../../../:pdfium_core_config" ]
  deps = [
    "../../../constants",
    "../../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 = "../../../"
}
