# Copyright 2014 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/sanitizers/sanitizers.gni")
import("../pdfium.gni")

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

config("pdfium_samples_config") {
  cflags = []
  ldflags = []
  defines = [
    "PNG_PREFIX",
    "PNG_USE_READ_MACROS",
  ]
  include_dirs = [ ".." ]
  if (pdf_enable_v8) {
    defines += [ "PDF_ENABLE_V8" ]
  }
  if (pdf_enable_xfa) {
    defines += [ "PDF_ENABLE_XFA" ]
  }
  if (pdf_use_skia) {
    defines += [ "PDF_ENABLE_SKIA" ]
  }
  if (is_asan) {
    defines += [ "PDF_ENABLE_ASAN" ]
  }
  if (use_coverage && is_clang) {
    cflags += [
      "--coverage",
      "-g",
      "-O0",
    ]
    ldflags += [ "--coverage" ]
  }
}

executable("pdfium_test") {
  testonly = true
  sources = [
    "image_diff_png.cc",
    "image_diff_png.h",
    "pdfium_test.cc",
  ]
  deps = [
    "../:pdfium",
    "../:test_support",
    "//build/config/sanitizers:deps",
    "//build/win:default_exe_manifest",
  ]
  if (!pdf_enable_xfa) {
    deps += [ "../third_party:fx_lpng" ]
  }
  if (pdf_enable_v8) {
    deps += [ "//v8:v8_libplatform" ]
    include_dirs = [
      "//v8",
      "//v8/include",
    ]
    configs += [ "//v8:external_startup_data" ]
  }
  if (pdf_use_skia || pdf_use_skia_paths) {
    deps += [ "//skia" ]
  }
  configs += [ ":pdfium_samples_config" ]
}

executable("pdfium_diff") {
  testonly = true
  sources = [
    "image_diff.cc",
    "image_diff_png.cc",
    "image_diff_png.h",
  ]
  deps = [
    "../:pdfium",
    "//build/config/sanitizers:deps",
    "//build/win:default_exe_manifest",
  ]
  if (!pdf_enable_xfa) {
    deps += [ "../third_party:fx_lpng" ]
  }
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    ":pdfium_samples_config",
    "//build/config/compiler:no_chromium_code",
  ]
}
