# 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" ]
}

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/headerparser.cc",
    "open-vcdiff/src/headerparser.h",
    "open-vcdiff/src/instruction_map.cc",
    "open-vcdiff/src/instruction_map.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/vsprojects/config.h",
    "open-vcdiff/vsprojects/stdint.h",
  ]

  public_configs = [ ":sdch_config" ]

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

  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 ]
    if (is_linux) {
      # TODO(mostynb): remove this if open-vcdiff is ever updated for c++11:
      cflags += [ "-Wno-deprecated-declarations" ]
    }
  }
}
