# Copyright 2010-2015, Google Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
#     * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#     * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
#     * Neither the name of Google Inc. nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

vars = {
  "breakpad_revision": "1391",
  "fonttools_revision": "5ba7d98a4153fad57258fca23b0bcb238717aec3",
  "gtest_revision": "700",
  "gmock_revision": "501",
  "gyp_revision": "cdf037c1edc0ba3b5d25f8e3973661efe00980cc",
  "jsoncpp_revision": "11086dd6a7eba04289944367ca82cea71299ed70",
  "protobuf_revision": "172019c40bf548908ab09bfd276074c929d48415",
  "wtl_revision": "587",
  "zinnia_revision": "16",
  "jsr305_version": "2.0.2",
  "zlib_revision": "198222",
  "japanese_usage_dictionary_revision": "10",
}

deps = {
  "src/third_party/jsoncpp":
    "https://github.com/open-source-parsers/jsoncpp.git@" +
    Var("jsoncpp_revision"),
  "src/third_party/gmock":
    "http://googlemock.googlecode.com/svn/trunk@" + Var("gmock_revision"),
  "src/third_party/gtest":
    "http://googletest.googlecode.com/svn/trunk@" + Var("gtest_revision"),
  "src/third_party/gyp":
    "https://chromium.googlesource.com/external/gyp@" + Var("gyp_revision"),
  "src/third_party/protobuf":
    "https://github.com/google/protobuf.git@" + Var("protobuf_revision"),
  "src/third_party/japanese_usage_dictionary":
    "http://japanese-usage-dictionary.googlecode.com/svn/trunk@" +
    Var("japanese_usage_dictionary_revision"),
}

deps_os = {
  "win": {
    "src/third_party/breakpad":
      "http://google-breakpad.googlecode.com/svn/trunk@" +
      Var("breakpad_revision"),
    "src/third_party/wtl/files/include":
      "http://svn.code.sf.net/p/wtl/code/trunk/wtl/Include@" +
      Var("wtl_revision"),
    "src/third_party/zinnia/v0_04":
      "http://svn.code.sf.net/p/zinnia/code@" +
      Var("zinnia_revision"),
  },
  "mac": {
    "src/third_party/zinnia/v0_04":
      "http://svn.code.sf.net/p/zinnia/code@" +
       Var("zinnia_revision"),
  },
  "unix": {
    "src/third_party/findbug":
      # We need only a jar file so avoiding to sync entire tree.
      # Findbug project keeps release-jar files in their repository.
      File("http://findbugs.googlecode.com/"
           + "svn/repos/release-repository/com/google/code/findbugs/jsr305/"
           + Var("jsr305_version") + "/jsr305-" + Var("jsr305_version") + ".jar"),
    "src/third_party/fontTools":
      "https://github.com/googlei18n/fonttools.git@" +
      Var("fonttools_revision"),
    "src/third_party/zlib/v1_2_8":
      "https://src.chromium.org/chrome/trunk/src/third_party/zlib@" +
      Var("zlib_revision"),
  },
}
