# 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("sdch_config") {
  include_dirs = [ "open-vcdiff/src" ]
}

# gn orders flags on a target before flags from configs. The default config
# adds -Wall, and these flags have to be after -Wall -- so they need to come
# from a config and can't be on the target directly.
config("sdch_warnings") {
  cflags = []
  if (is_linux) {
    # TODO(mostynb): remove this if open-vcdiff is ever updated for c++11:
    cflags += [ "-Wno-deprecated-declarations" ]
  }

  if (is_clang) {
    # sdch uses the pre-c++11 typedef-as-static_assert hack.
    # https://code.google.com/p/open-vcdiff/issues/detail?id=44
    cflags += [ "-Wno-unused-local-typedef" ]
  }
}

static_library("sdch") {
  sources = [
    "logging_forward.h",
    "open-vcdiff/src/addrcache.cc",
    "open-vcdiff/src/blockhash.cc",
    "open-vcdiff/src/blockhash.h",
    "open-vcdiff/src/checksum.h",
    "open-vcdiff/src/codetable.cc",
    "open-vcdiff/src/codetable.h",
    "open-vcdiff/src/compile_assert.h",
    "open-vcdiff/src/decodetable.cc",
    "open-vcdiff/src/decodetable.h",
    "open-vcdiff/src/encodetable.cc",
    "open-vcdiff/src/encodetable.h",
    "open-vcdiff/src/google/output_string.h",
    "open-vcdiff/src/google/vcdecoder.h",
    "open-vcdiff/src/google/vcencoder.h",
    "open-vcdiff/src/headerparser.cc",
    "open-vcdiff/src/headerparser.h",
    "open-vcdiff/src/instruction_map.cc",
    "open-vcdiff/src/instruction_map.h",
    "open-vcdiff/src/jsonwriter.cc",
    "open-vcdiff/src/jsonwriter.h",
    "open-vcdiff/src/rolling_hash.h",
    "open-vcdiff/src/testing.h",
    "open-vcdiff/src/varint_bigendian.cc",
    "open-vcdiff/src/varint_bigendian.h",
    "open-vcdiff/src/vcdecoder.cc",
    "open-vcdiff/src/vcdiff_defs.h",
    "open-vcdiff/src/vcdiffengine.cc",
    "open-vcdiff/src/vcdiffengine.h",
    "open-vcdiff/src/vcencoder.cc",
    "open-vcdiff/vsprojects/config.h",
    "open-vcdiff/vsprojects/stdint.h",
  ]

  public_configs = [ ":sdch_config" ]

  deps = [
    "//base",
    "//third_party/zlib",
  ]

  configs += [ ":sdch_warnings" ]

  if (is_linux || is_android) {
    include_dirs = [ "linux" ]
  } else if (is_ios) {
    include_dirs = [ "ios" ]
  } else if (is_mac) {
    include_dirs = [ "mac" ]
  } else if (is_win) {
    include_dirs = [ "win" ]
  }

  # open-vcdiff's logging.h introduces static initializers. This was
  # reported upstream years ago (
  # https://code.google.com/p/open-vcdiff/issues/detail?id=33 ). Since
  # upstream won't fix this, work around it on the chromium side:
  # Inject a header that forwards to base/logging.h instead (which doesn't
  # introduce static initializers, and which prevents open-vcdiff's
  # logging.h from being used).
  if (is_win) {
    cflags = [
      "/FI",
      "sdch/logging_forward.h",
    ]
  } else {
    logging_file = rebase_path("logging_forward.h", root_build_dir)
    cflags = [
      "-include",
      logging_file,
    ]
  }
}
