# Copyright 2014 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/buildflag_header.gni")
import("//build/config/features.gni")
import("//build/config/freetype/freetype.gni")
import("//third_party/harfbuzz-ng/harfbuzz.gni")
import("//third_party/libjpeg.gni")

assert(
    use_blink,
    "This is not used on if blink is not enabled, don't drag it in unintentionally")

config("system_libjpeg_config") {
  libs = [ "jpeg" ]
  defines = [ "USE_SYSTEM_LIBJPEG" ]
}

config("libjpeg_turbo_config") {
  defines = [ "USE_LIBJPEG_TURBO=1" ]
}

# This is a meta target that forwards to the system's libjpeg,
# third_party/libjpeg, or third_party/libjpeg_turbo depending on the build args
# declared in this file.
group("jpeg") {
  if (use_system_libjpeg) {
    public_configs = [ ":system_libjpeg_config" ]
  } else if (use_libjpeg_turbo) {
    public_deps = [ "//third_party/libjpeg_turbo:libjpeg" ]
    public_configs = [ ":libjpeg_turbo_config" ]
  } else {
    public_deps = [ "//third_party/libjpeg:libjpeg" ]
  }
}

# This is a meta target that forwards include paths only to the system's
# libjpeg, third_party/libjpeg, or third_party/libjpeg_turbo depending on the
# build args declared in this file. This is needed, rarely, for targets that
# need to reference libjpeg without explicitly building it.
group("jpeg_includes") {
  if (use_system_libjpeg) {
    public_configs = [ ":system_libjpeg_config" ]
  } else if (use_libjpeg_turbo) {
    public_configs = [ "//third_party/libjpeg_turbo:libjpeg_config" ]
  } else {
    public_configs = [ "//third_party/libjpeg:libjpeg_config" ]
  }
}

# FreeType and HarfBuzz libraries are dependent on each other. This component
# will depend on the appropriate source sets or export the system packages
# for both FreeType and HarfBuzz.
component("freetype_harfbuzz") {
  public_configs = []
  public_deps = []
  if (use_system_freetype) {
    public_configs += [ "//build/linux:freetype_from_pkgconfig" ]
  } else {
    public_deps += [ "//third_party/freetype:freetype_source" ]
  }
  if (use_system_harfbuzz) {
    public_configs += [ "//third_party/harfbuzz-ng:harfbuzz_from_pkgconfig" ]
  } else {
    public_deps += [ "//third_party/harfbuzz-ng:harfbuzz_source" ]
  }
}

buildflag_header("freetype_buildflags") {
  header = "freetype_buildflags.h"
  flags = [ "USE_SYSTEM_FREETYPE=$use_system_freetype" ]
}
