# 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": "50893291621658f355bc5b4d450a8d06a563053d",
  "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://github.com/madler/zlib.git@" + Var("zlib_revision"),
  },
}
