# Copyright 2014 The Chromium 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/chrome_build.gni")
import("//build/config/features.gni")
import("//build/config/freetype/freetype.gni")
import("//build/config/ui.gni")
import("//testing/libfuzzer/fuzzer_test.gni")
import("//third_party/harfbuzz-ng/harfbuzz.gni")

if (use_system_harfbuzz) {
  import("//build/config/linux/pkg_config.gni")
  pkg_config("harfbuzz_from_pkgconfig") {
    visibility = [
      "//third_party:freetype_harfbuzz",
      "//third_party/freetype:freetype_source",
    ]
    packages = [ "harfbuzz" ]
  }
} else {
  config("harfbuzz_config") {
    include_dirs = [ "src/src" ]
  }

  config("harfbuzz_warnings") {
    cflags = []
    if (is_clang) {
      cflags += [
        "-Wno-unused-value",

        # Harfbuzz uses unused typedefs for its static asserts (and its
        # static asserts are strange enough that they can't be replaced
        # by static_assert).
        "-Wno-unused-local-typedef",
      ]
    }
    if (is_win) {
      # Result of 32-bit shift implicitly converted to 64 bits.
      cflags += [ "/wd4334" ]
    }
  }

  source_set("harfbuzz_source") {
    visibility = [ "//third_party:freetype_harfbuzz" ]

    sources = [
      "src/src/hb-atomic-private.hh",
      "src/src/hb-blob.cc",
      "src/src/hb-blob.h",
      "src/src/hb-buffer-deserialize-json.hh",
      "src/src/hb-buffer-deserialize-text.hh",
      "src/src/hb-buffer-private.hh",
      "src/src/hb-buffer-serialize.cc",
      "src/src/hb-buffer.cc",
      "src/src/hb-buffer.h",
      "src/src/hb-cache-private.hh",
      "src/src/hb-common.cc",
      "src/src/hb-common.h",
      "src/src/hb-debug.hh",
      "src/src/hb-deprecated.h",
      "src/src/hb-dsalgs.hh",
      "src/src/hb-face-private.hh",
      "src/src/hb-face.cc",
      "src/src/hb-face.h",
      "src/src/hb-font-private.hh",
      "src/src/hb-font.cc",
      "src/src/hb-font.h",
      "src/src/hb-ft.cc",
      "src/src/hb-ft.h",
      "src/src/hb-icu.cc",
      "src/src/hb-icu.h",
      "src/src/hb-mutex-private.hh",
      "src/src/hb-object-private.hh",
      "src/src/hb-open-file-private.hh",
      "src/src/hb-open-type-private.hh",
      "src/src/hb-ot-color-cbdt-table.hh",
      "src/src/hb-ot-color-colr-table.hh",
      "src/src/hb-ot-color-cpal-table.hh",
      "src/src/hb-ot-font.cc",
      "src/src/hb-ot-font.h",
      "src/src/hb-ot-hdmx-table.hh",
      "src/src/hb-ot-head-table.hh",
      "src/src/hb-ot-hhea-table.hh",
      "src/src/hb-ot-hmtx-table.hh",
      "src/src/hb-ot-kern-table.hh",
      "src/src/hb-ot-layout-base-table.hh",
      "src/src/hb-ot-layout-base-table.hh",
      "src/src/hb-ot-layout-common-private.hh",
      "src/src/hb-ot-layout-gdef-table.hh",
      "src/src/hb-ot-layout-gpos-table.hh",
      "src/src/hb-ot-layout-gsub-table.hh",
      "src/src/hb-ot-layout-gsubgpos-private.hh",
      "src/src/hb-ot-layout-private.hh",
      "src/src/hb-ot-layout.cc",
      "src/src/hb-ot-layout.h",
      "src/src/hb-ot-map-private.hh",
      "src/src/hb-ot-map.cc",
      "src/src/hb-ot-math-table.hh",
      "src/src/hb-ot-math.cc",
      "src/src/hb-ot-math.h",
      "src/src/hb-ot-maxp-table.hh",
      "src/src/hb-ot-name-table.hh",
      "src/src/hb-ot-os2-unicode-ranges.hh",
      "src/src/hb-ot-post-macroman.hh",
      "src/src/hb-ot-shape-complex-arabic-fallback.hh",
      "src/src/hb-ot-shape-complex-arabic-private.hh",
      "src/src/hb-ot-shape-complex-arabic-table.hh",
      "src/src/hb-ot-shape-complex-arabic.cc",
      "src/src/hb-ot-shape-complex-default.cc",
      "src/src/hb-ot-shape-complex-hangul.cc",
      "src/src/hb-ot-shape-complex-hebrew.cc",
      "src/src/hb-ot-shape-complex-indic-machine.hh",
      "src/src/hb-ot-shape-complex-indic-private.hh",
      "src/src/hb-ot-shape-complex-indic-table.cc",
      "src/src/hb-ot-shape-complex-indic.cc",
      "src/src/hb-ot-shape-complex-khmer-machine.hh",
      "src/src/hb-ot-shape-complex-khmer-private.hh",
      "src/src/hb-ot-shape-complex-khmer.cc",
      "src/src/hb-ot-shape-complex-myanmar-machine.hh",
      "src/src/hb-ot-shape-complex-myanmar-private.hh",
      "src/src/hb-ot-shape-complex-myanmar.cc",
      "src/src/hb-ot-shape-complex-private.hh",
      "src/src/hb-ot-shape-complex-thai.cc",
      "src/src/hb-ot-shape-complex-tibetan.cc",
      "src/src/hb-ot-shape-complex-use-machine.hh",
      "src/src/hb-ot-shape-complex-use-private.hh",
      "src/src/hb-ot-shape-complex-use-table.cc",
      "src/src/hb-ot-shape-complex-use.cc",
      "src/src/hb-ot-shape-fallback-private.hh",
      "src/src/hb-ot-shape-fallback.cc",
      "src/src/hb-ot-shape-normalize-private.hh",
      "src/src/hb-ot-shape-normalize.cc",
      "src/src/hb-ot-shape-private.hh",
      "src/src/hb-ot-shape.cc",
      "src/src/hb-ot-shape.h",
      "src/src/hb-ot-tag.cc",
      "src/src/hb-ot-tag.h",
      "src/src/hb-ot-var-avar-table.hh",
      "src/src/hb-ot-var-fvar-table.hh",
      "src/src/hb-ot-var-hvar-table.hh",
      "src/src/hb-ot-var-mvar-table.hh",
      "src/src/hb-ot-var.cc",
      "src/src/hb-ot-var.h",
      "src/src/hb-ot.h",
      "src/src/hb-private.hh",
      "src/src/hb-set-digest-private.hh",
      "src/src/hb-set-private.hh",
      "src/src/hb-set.cc",
      "src/src/hb-set.h",
      "src/src/hb-shape-plan-private.hh",
      "src/src/hb-shape-plan.cc",
      "src/src/hb-shape-plan.h",
      "src/src/hb-shape.cc",
      "src/src/hb-shape.h",
      "src/src/hb-shaper-impl-private.hh",
      "src/src/hb-shaper-list.hh",
      "src/src/hb-shaper-private.hh",
      "src/src/hb-shaper.cc",
      "src/src/hb-string-array.hh",
      "src/src/hb-subset-glyf.hh",
      "src/src/hb-subset-plan.h",
      "src/src/hb-subset-private.hh",
      "src/src/hb-subset.h",
      "src/src/hb-unicode-private.hh",
      "src/src/hb-unicode.cc",
      "src/src/hb-unicode.h",
      "src/src/hb-utf-private.hh",
      "src/src/hb-version.h",
      "src/src/hb-warning.cc",
      "src/src/hb.h",
    ]

    defines = [
      "HAVE_OT",
      "HAVE_ICU",
      "HAVE_ICU_BUILTIN",
      "HAVE_INTEL_ATOMIC_PRIMITIVES",
    ]

    if (is_component_build) {
      if (is_win) {
        defines += [ "HB_EXTERN=__declspec (dllexport) extern" ]
      } else {
        configs -= [ "//build/config/gcc:symbol_visibility_hidden" ]
        configs += [ "//build/config/gcc:symbol_visibility_default" ]
      }
    }

    if (use_system_freetype) {
      configs += [ "//build/linux:freetype_from_pkgconfig" ]
    } else {
      configs += [ "//third_party/freetype:freetype_config" ]
    }
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [
      "//build/config/compiler:no_chromium_code",

      # Must be after no_chromium_code for warning flags to be ordered
      # correctly.
      ":harfbuzz_warnings",
    ]
    public_configs = [ ":harfbuzz_config" ]

    deps = [
      "//third_party/icu:icuuc",
    ]

    if (is_mac) {
      sources += [
        "src/src/hb-coretext.cc",
        "src/src/hb-coretext.h",
      ]
      defines += [ "HAVE_CORETEXT" ]
      libs = [
        "CoreFoundation.framework",
        "CoreGraphics.framework",
        "CoreText.framework",
      ]
    }

    if (use_glib) {
      configs += [ "//build/config/linux:glib" ]
      sources += [
        "src/src/hb-glib.cc",
        "src/src/hb-glib.h",
      ]
    }
  }
}

fuzzer_test("harfbuzz_fuzzer") {
  sources = [
    "fuzz/harfbuzz_fuzzer.cc",
  ]
  deps = [
    "//third_party:freetype_harfbuzz",
  ]
  libfuzzer_options = [ "max_len=16800" ]
  seed_corpus = "fuzz/seed_corpus"
}
