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

config("libpng_config") {
  include_dirs = [
    ".",
  ]

  defines = [
    "CHROME_PNG_WRITE_SUPPORT",
    "PNG_USER_CONFIG",
  ]

  if (is_android) {
    #'toolsets': ['target', 'host'],
    defines += [
      "CHROME_PNG_READ_PACK_SUPPORT",  # Required by freetype.
    ]
  }

  if (is_win) {
    if (component_mode == "shared_library") {
      defines += [
        "PNG_USE_DLL",
        "PNG_NO_MODULEDEF",
      ]
    }
  }
}

source_set("libpng_sources") {
  sources =  [
    "png.c",
    "png.h",
    "pngconf.h",
    "pngerror.c",
    "pnggccrd.c",
    "pngget.c",
    "pngmem.c",
    "pngpread.c",
    "pngread.c",
    "pngrio.c",
    "pngrtran.c",
    "pngrutil.c",
    "pngset.c",
    "pngtrans.c",
    "pngusr.h",
    "pngvcrd.c",
    "pngwio.c",
    "pngwrite.c",
    "pngwtran.c",
    "pngwutil.c",
  ]

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]

  if (is_win) {
    cflags = [ "/wd4267" ]  # TODO(jschuh): http://crbug.com/167187

    if (component_mode == "shared_library") {
      defines = [ "PNG_BUILD_DLL" ]
    }
  }

  public_configs = [ ":libpng_config" ]

  public_deps = [ "//third_party/zlib" ]
}

if (is_win) {
  component("libpng") {
    public_deps = [ ":libpng_sources" ]
  }
} else {
  group("libpng") {
    public_deps = [ ":libpng_sources" ]
  }
}
