# Copyright 2018 Google Inc.
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("../third_party.gni")

third_party("wuffs") {
  public_include_dirs = [ "../externals/wuffs/release/c" ]

  defines = [
    # Copy/pasting from "../externals/wuffs/release/c/wuffs-*.c":
    #
    # ----
    #
    # Wuffs ships as a "single file C library" or "header file library" as per
    # https://github.com/nothings/stb/blob/master/docs/stb_howto.txt
    #
    # To use that single file as a "foo.c"-like implementation, instead of a
    # "foo.h"-like header, #define WUFFS_IMPLEMENTATION before #include'ing or
    # compiling it.
    #
    # ----
    "WUFFS_IMPLEMENTATION",

    # Continuing to copy/paste:
    #
    # ----
    #
    # Defining the WUFFS_CONFIG__MODULE* macros are optional, but it lets users
    # of Wuffs' .c file whitelist which parts of Wuffs to build. That file
    # contains the entire Wuffs standard library, implementing a variety of
    # codecs and file formats. Without this macro definition, an optimizing
    # compiler or linker may very well discard Wuffs code for unused codecs,
    # but listing the Wuffs modules we use makes that process explicit.
    # Preprocessing means that such code simply isn't compiled.
    #
    # ----
    #
    # For Skia, we're only interested in particular image codes (e.g. GIF) and
    # their dependencies (e.g. BASE, LZW).
    "WUFFS_CONFIG__MODULES",
    "WUFFS_CONFIG__MODULE__BASE",
    "WUFFS_CONFIG__MODULE__GIF",
    "WUFFS_CONFIG__MODULE__LZW",
  ]

  sources = [
    "../externals/wuffs/release/c/wuffs-v0.2.c",
  ]
}
