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

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