# 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.

if (is_android) {
  import("//build/config/android/config.gni")
}

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") {
  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) {
    libs = [ "jpeg" ]
    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",
    ]
  }
}
