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

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

  configs += [ ":sdch_warnings" ]
  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" ]
    defines = [ "OPEN_VCDIFF_USE_AUTO_PTR" ]
  } else if (is_win) {
    include_dirs = [ "win" ]
  }

  # open-vcdiff's logging.h introduces static initializers. This was
  # reported upstream years ago (
  # https://github.com/google/open-vcdiff/issues/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,
    ]
  }
}
