# 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_starboard) {
    defines += [ "CHROME_PNG_READ_PACK_SUPPORT" ]  # Required by freetype.
    defines += [ "PNG_SKIP_SETJMP_CHECK" ]
  }

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

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

# Must be in a config because of how GN orders flags (otherwise -Wall will
# appear after this, and turn it back on).
config("clang_warnings") {
  if (is_clang) {
    # Upstream uses self-assignment to avoid warnings.
    cflags = [ "-Wno-self-assign" ]
  }
}

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

if (!is_starboard) {
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]
}

  if (is_win && is_component_build) {
    defines = [ "PNG_BUILD_DLL" ]
  }

  if (is_starboard) {
    configs -= [ "//starboard/build/config:size" ]
    configs += [ "//starboard/build/config:speed" ]
  }

  public_configs = [ ":libpng_config" ]

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

  configs += [ ":clang_warnings" ]
}

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