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

config("fuzzer_config") {
  configs = [ "../..:pdfium_core_config" ]

  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" ]
  }
}

group("fuzzers") {
  testonly = true
  deps = [
    ":pdf_cmap_fuzzer_src",
    ":pdf_codec_a85_fuzzer_src",
    ":pdf_codec_fax_fuzzer_src",
    ":pdf_codec_icc_fuzzer_src",
    ":pdf_codec_jbig2_fuzzer_src",
    ":pdf_codec_rle_fuzzer_src",
    ":pdf_font_fuzzer_src",
    ":pdf_hint_table_fuzzer_src",
    ":pdf_jpx_fuzzer_src",
    ":pdf_psengine_fuzzer_src",
    ":pdf_streamparser_fuzzer_src",
    ":pdf_xml_fuzzer_src",
    ":pdfium_fuzzer_src",
  ]
  if (pdf_enable_xfa) {
    deps += [
      ":pdf_bidi_fuzzer_src",
      ":pdf_cfx_barcode_fuzzer_src",
      ":pdf_codec_jpeg_fuzzer_src",
      ":pdf_css_fuzzer_src",
      ":pdf_fm2js_fuzzer_src",
      ":pdf_formcalc_fuzzer_src",
      ":pdfium_xfa_fuzzer_src",
    ]
    if (pdf_enable_xfa_bmp) {
      deps += [ ":pdf_codec_bmp_fuzzer_src" ]
    }
    if (pdf_enable_xfa_gif) {
      deps += [
        ":pdf_codec_gif_fuzzer_src",
        ":pdf_lzw_fuzzer_src",
      ]
    }
    if (pdf_enable_xfa_png) {
      deps += [ ":pdf_codec_png_fuzzer_src" ]
    }
    if (pdf_enable_xfa_tiff) {
      deps += [ ":pdf_codec_tiff_fuzzer_src" ]
    }
  }
}

template("pdfium_public_fuzzer") {
  source_set(target_name) {
    sources = invoker.sources + [
                "pdfium_fuzzer_helper.cc",
                "pdfium_fuzzer_helper.h",
              ]
    deps = [
      "../../:pdfium",
      "../../:test_support",
    ]
    if (defined(invoker.deps)) {
      deps += invoker.deps
    }
    testonly = true
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [
      "//build/config/compiler:no_chromium_code",
      ":fuzzer_config",
    ]
    if (pdf_enable_v8) {
      configs += [ "//v8:external_startup_data" ]
      deps += [
        "//v8",
        "//v8:v8_libplatform",
      ]
    }
  }
}

template("pdfium_fuzzer") {
  source_set(target_name) {
    sources = invoker.sources + [ "pdf_fuzzer_init.cc" ]
    deps = [
      "../../:pdfium",
    ]
    if (defined(invoker.deps)) {
      deps += invoker.deps
    }
    testonly = true
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [
      "//build/config/compiler:no_chromium_code",
      ":fuzzer_config",
    ]
    if (pdf_enable_v8) {
      configs += [ "//v8:external_startup_data" ]
    }
  }
}

if (pdf_enable_xfa) {
  pdfium_fuzzer("pdf_bidi_fuzzer_src") {
    sources = [
      "pdf_bidi_fuzzer.cc",
    ]
  }

  pdfium_fuzzer("pdf_cfx_barcode_fuzzer_src") {
    sources = [
      "pdf_cfx_barcode_fuzzer.cc",
    ]
  }

  if (pdf_enable_xfa_bmp) {
    pdfium_fuzzer("pdf_codec_bmp_fuzzer_src") {
      sources = [
        "pdf_codec_bmp_fuzzer.cc",
        "xfa_codec_fuzzer.h",
      ]
      deps = [
        "../../:test_support",
      ]
    }
  }

  if (pdf_enable_xfa_gif) {
    pdfium_fuzzer("pdf_codec_gif_fuzzer_src") {
      sources = [
        "pdf_codec_gif_fuzzer.cc",
        "xfa_codec_fuzzer.h",
      ]
      deps = [
        "../../:test_support",
      ]
    }

    pdfium_fuzzer("pdf_lzw_fuzzer_src") {
      sources = [
        "pdf_lzw_fuzzer.cc",
      ]
    }
  }

  pdfium_fuzzer("pdf_codec_jpeg_fuzzer_src") {
    sources = [
      "pdf_codec_jpeg_fuzzer.cc",
      "xfa_codec_fuzzer.h",
    ]
    deps = [
      "../../:test_support",
    ]
  }

  if (pdf_enable_xfa_png) {
    pdfium_fuzzer("pdf_codec_png_fuzzer_src") {
      sources = [
        "pdf_codec_png_fuzzer.cc",
        "xfa_codec_fuzzer.h",
      ]
      deps = [
        "../../:test_support",
      ]
    }
  }

  if (pdf_enable_xfa_tiff) {
    pdfium_fuzzer("pdf_codec_tiff_fuzzer_src") {
      sources = [
        "pdf_codec_tiff_fuzzer.cc",
        "xfa_codec_fuzzer.h",
      ]
      deps = [
        "../../:test_support",
      ]
    }
  }

  pdfium_fuzzer("pdf_css_fuzzer_src") {
    sources = [
      "pdf_css_fuzzer.cc",
    ]
  }

  pdfium_fuzzer("pdf_fm2js_fuzzer_src") {
    sources = [
      "pdf_fm2js_fuzzer.cc",
    ]
  }

  pdfium_fuzzer("pdf_formcalc_fuzzer_src") {
    sources = [
      "pdf_formcalc_fuzzer.cc",
    ]
  }

  pdfium_public_fuzzer("pdfium_xfa_fuzzer_src") {
    sources = [
      "pdfium_xfa_fuzzer.cc",
    ]
  }
}

pdfium_fuzzer("pdf_cmap_fuzzer_src") {
  sources = [
    "pdf_cmap_fuzzer.cc",
  ]
}

pdfium_fuzzer("pdf_codec_a85_fuzzer_src") {
  sources = [
    "pdf_codec_a85_fuzzer.cc",
  ]
}

pdfium_fuzzer("pdf_codec_fax_fuzzer_src") {
  sources = [
    "pdf_codec_fax_fuzzer.cc",
  ]
}

pdfium_fuzzer("pdf_codec_icc_fuzzer_src") {
  deps = [
    "../../third_party/:lcms2",
  ]
  sources = [
    "pdf_codec_icc_fuzzer.cc",
  ]
}

pdfium_fuzzer("pdf_codec_jbig2_fuzzer_src") {
  sources = [
    "pdf_codec_jbig2_fuzzer.cc",
  ]
}

pdfium_fuzzer("pdf_codec_rle_fuzzer_src") {
  sources = [
    "pdf_codec_rle_fuzzer.cc",
  ]
}

pdfium_fuzzer("pdf_font_fuzzer_src") {
  sources = [
    "pdf_font_fuzzer.cc",
  ]
}

pdfium_fuzzer("pdf_hint_table_fuzzer_src") {
  sources = [
    "pdf_hint_table_fuzzer.cc",
  ]
}

pdfium_fuzzer("pdf_jpx_fuzzer_src") {
  sources = [
    "pdf_jpx_fuzzer.cc",
  ]
}

pdfium_fuzzer("pdf_psengine_fuzzer_src") {
  sources = [
    "pdf_psengine_fuzzer.cc",
  ]
}

pdfium_fuzzer("pdf_streamparser_fuzzer_src") {
  sources = [
    "pdf_streamparser_fuzzer.cc",
  ]
}

pdfium_fuzzer("pdf_xml_fuzzer_src") {
  sources = [
    "pdf_xml_fuzzer.cc",
  ]
}

pdfium_public_fuzzer("pdfium_fuzzer_src") {
  sources = [
    "pdfium_fuzzer.cc",
  ]
}
