# 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/freetype/freetype.gni")
import("//third_party/harfbuzz-ng/harfbuzz.gni")

assert(!is_ios, "This is not used on iOS, don't drag it in unintentionally")

declare_args() {
  # Uses system libjpeg. If true, overrides use_libjpeg_turbo.
  use_system_libjpeg = false

  # Uses libjpeg_turbo as the jpeg implementation. Has no effect if
  # use_system_libjpeg is set.
  use_libjpeg_turbo = true
}

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