# 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 (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",

    # Regardless of whether the library ships against system freetype,
    # always link this binary against the bundled one for consistency
    # of results across platforms.
    "../third_party:fx_freetype",
  ]
  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",
  ]
}
