# 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 += [ "PNG_SKIP_SETJMP_CHECK" ]
  }

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

# 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) {
    cflags = [
      # libpng checks that the width is not greater than PNG_SIZE_MAX.
      # On platforms where size_t is 64-bits, this comparison will always
      # be false.
      "-Wno-tautological-compare",
    ]
  }
}

source_set("libpng_sources") {
  sources = [
    "png.c",
    "png.h",
    "pngconf.h",
    "pngerror.c",
    "pngget.c",
    "pnginfo.h",
    "pnglibconf.h",
    "pngmem.c",
    "pngpread.c",
    "pngprefix.h",
    "pngpriv.h",
    "pngread.c",
    "pngrio.c",
    "pngrtran.c",
    "pngrutil.c",
    "pngset.c",
    "pngstruct.h",
    "pngtrans.c",
    "pngwio.c",
    "pngwrite.c",
    "pngwtran.c",
    "pngwutil.c",
  ]

  if (is_starboard) {
    sources -= [
      "pnginfo.h",
      "pnglibconf.h",
      "pngprefix.h",
      "pngpriv.h",
      "pngstruct.h",
    ]
    sources += [
      "pnggccrd.c",
      "pngusr.h",
      "pngvcrd.c",
    ]
  }

  if (!is_win) {
    output_name = "png"
  }

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

  configs += [ ":clang_warnings" ]

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

  public_deps = [ "//third_party/zlib" ]

  public_configs = [ ":libpng_config" ]
}

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