# 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_test",
    ":pdfium_diff",
  ]
}

config("pdfium_samples_config") {
  defines = [
    "PNG_PREFIX",
    "PNGPREFIX_H",
    "PNG_USE_READ_MACROS",
  ]
  include_dirs = [ ".." ]
  if (pdf_enable_v8) {
    defines += [ "PDF_ENABLE_V8" ]
  }
}

executable("pdfium_test") {
  testonly = true
  sources = [
    "image_diff_png.cc",
    "pdfium_test.cc",
  ]
  deps = [
    "//build/config/sanitizers:deps",
    "//third_party/pdfium:pdfium",
    "//third_party/pdfium:test_support",

    # 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/pdfium/third_party:fx_freetype",
    ":fx_lpng",
  ]
  if (pdf_enable_v8) {
    deps += [ "//v8:v8_libplatform" ]
    include_dirs = [
      "//v8",
      "//v8/include",
    ]
  }
  configs += [ ":pdfium_samples_config" ]
}

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

static_library("fx_lpng") {
  testonly = true
  sources = [
    "fx_lpng/include/fx_png.h",
    "fx_lpng/src/fx_png.c",
    "fx_lpng/src/fx_pngerror.c",
    "fx_lpng/src/fx_pngget.c",
    "fx_lpng/src/fx_pngmem.c",
    "fx_lpng/src/fx_pngpread.c",
    "fx_lpng/src/fx_pngread.c",
    "fx_lpng/src/fx_pngrio.c",
    "fx_lpng/src/fx_pngrtran.c",
    "fx_lpng/src/fx_pngrutil.c",
    "fx_lpng/src/fx_pngset.c",
    "fx_lpng/src/fx_pngtrans.c",
    "fx_lpng/src/fx_pngwio.c",
    "fx_lpng/src/fx_pngwrite.c",
    "fx_lpng/src/fx_pngwtran.c",
    "fx_lpng/src/fx_pngwutil.c",
  ]
  include_dirs = [ "../core/src/fxcodec/fx_zlib/include/" ]
  configs += [ ":pdfium_samples_config" ]
}
