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

import("//build/config/sanitizers/sanitizers.gni")
import("../pdfium.gni")

group("samples") {
  testonly = true
  deps = [ ":pdfium_test" ]
}

config("pdfium_samples_config") {
  cflags = []
  ldflags = []
  defines = []
  include_dirs = [ ".." ]
  if (pdf_use_skia) {
    defines += [ "PDF_ENABLE_SKIA" ]
  }
  if (is_asan) {
    defines += [ "PDF_ENABLE_ASAN" ]
  }

  if (enable_callgrind) {
    defines += [ "ENABLE_CALLGRIND" ]
  }
  if (build_with_chromium) {
    defines += [ "BUILD_WITH_CHROMIUM" ]
  }
}

executable("pdfium_test") {
  testonly = true
  sources = [
    "pdfium_test.cc",
    "pdfium_test_dump_helper.cc",
    "pdfium_test_dump_helper.h",
    "pdfium_test_event_helper.cc",
    "pdfium_test_event_helper.h",
    "pdfium_test_write_helper.cc",
    "pdfium_test_write_helper.h",
  ]

  # Note: One should write programs that depend on ../:pdfium. Whereas this
  # sample program does not set a good example, and depends on PDFium internals,
  # as well as test support code, for convenience.
  deps = [
    "../:pdfium_public_headers",
    "../fpdfsdk",
    "../testing:test_support",
    "../testing/image_diff",
    "../third_party:pdfium_base",
    "//build/win:default_exe_manifest",
  ]
  configs += [ ":pdfium_samples_config" ]

  if (pdf_enable_v8) {
    deps += [
      "//v8:v8_headers",
      "//v8:v8_libplatform",
    ]
    include_dirs = [ "//v8" ]
    configs += [ "//v8:external_startup_data" ]
  }
  if (pdf_use_skia) {
    deps += [ "//skia" ]
    if (build_with_chromium) {
      sources += [
        "chromium_support/discardable_memory_allocator.cc",
        "chromium_support/discardable_memory_allocator.h",
      ]
      deps += [ "//base/test:test_support" ]
    }
  }
}
