# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
# 
#     http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

depends.dir=depends
depends.jars=${depends.dir}/jars
depends.oss=${depends.dir}/oss
depends.libs=${depends.dir}/libs/${hy.platform}
depends.files=${depends.dir}/files
depends.manifests=${depends.dir}/manifests

xalan.dir=${depends.jars}/xalan-j_2.7.0
xalan.orig.jar=${xalan.dir}/xalan.orig.jar
xalan.jar=${xalan.dir}/xalan.jar
xalan.url=${maven2.base}/xalan/xalan/2.7.0/xalan-2.7.0.jar
xalan.md5=a018d032c21a873225e702b36b171a10

xerces.dir=${depends.jars}/xerces_2.10.0
xerces.zip=${xerces.dir}/xerces.zip
xerces.url=http://www.apache.org/dist/xerces/j/Xerces-J-bin.2.10.0.zip
xerces.md5=8da14a7b2848eff131b7cc10668887e8

junit.dir=${depends.jars}/junit_4.6
junit.jar=${junit.dir}/junit-4.6.jar
junit.url=${maven2.base}/junit/junit/4.6/junit-4.6.jar
junit.md5=37dc57962c1275ebc572726a6f5cdd13

hamcrest-library.dir=${depends.jars}/hamcrest-library_1.1
hamcrest-library.jar=${hamcrest-library.dir}/hamcrest-library-1.1.jar
hamcrest-library.url=${maven2.base}/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar
hamcrest-library.md5=271f78edc4333f0f44df617676e0a874

findbugs.dir=${depends.dir}/oss/findbugs-1.3.9
findbugs.zip=${findbugs.dir}/findbugs-1.3.9.zip
findbugs.url=http://downloads.sourceforge.net/project/findbugs/findbugs/1.3.9/findbugs-1.3.9.zip
findbugs.md5=73702d533a505bd98d0c2c585a29a08b

msvcr.dir=${depends.dir}/libs/${hy.platform}
msvcp.dir=${depends.dir}/libs/${hy.platform}

msvcr.dll@x86@=${msvcr.dir}/msvcr71.dll
msvcr.url@x86@=file:///${hyenv.SystemRoot}/system32/msvcr71.dll
# This is the md5 hash for the VS2003 version, 7.10.3052.4
msvcr.md5.deprecated@x86@=86f1895ae8c5e8b17d99ece768a70732
# This is the md5 hash for the VS2003 SP1 version, 7.10.6030.0
msvcr.md5@x86@=ca2f560921b7b8be1cf555a5a18d54c3

msvcp.dll@x86@=${msvcr.dir}/msvcp71.dll
msvcp.url@x86@=file:///${hyenv.SystemRoot}/system32/msvcp71.dll
# This is the md5 hash for the VS2003 version, 7.10.3077.0
msvcp.md5.deprecated@x86@=561fa2abb31dfa8fab762145f81667c2
# This is the md5 hash for the VS2003 SP1 version, 7.10.6030.0
msvcp.md5@x86@=a94dc60a90efd7a35c36d971e3ee7470

msvcr.dll@x86_64@=${msvcr.dir}/msvcr80.dll
msvcr.url@x86_64@=file:///C:/Program%20Files%20(x86)/Microsoft%20Visual%20Studio%208/VC/redist/amd64/Microsoft.VC80.CRT/msvcr80.dll
# VS2005 version 8.00.50727.42
msvcr.md5.deprecated@x86_64@=465cebd7da2ceaba5e552fc9118a1415
# VS2005 version 8.0.50727.762
msvcr.md5@x86_64@=4d89f6191db56cfa659388378f3dd688

msvcp.dll@x86_64@=${msvcp.dir}/msvcp80.dll
msvcp.url@x86_64@=file:///C:/Program%20Files%20(x86)/Microsoft%20Visual%20Studio%208/VC/redist/amd64/Microsoft.VC80.CRT/msvcp80.dll
# VS2005 version 8.00.50727.42
msvcp.md5.deprecated@x86_64@=5ae0f01f02a03558da0cbd249e4df263
# VS2005 version 8.0.50727.762
msvcp.md5@x86_64@=c332db81197e6e5d4a67d3789dbeb02a


jetty.dir=${depends.jars}/jetty
jetty.jar=${jetty.dir}/jetty-6.0.0.jar
jetty.md5=930507973c9ad19a874af06f10be7223
jetty.url=${maven2.base}/jetty/jetty/6.0.0/jetty-6.0.0.jar

jetty-util.jar=${jetty.dir}/jetty-util-6.0.0.jar
jetty-util.md5=7cf65d83814718afdd1d3bd74f8799fc
jetty-util.url=${maven2.base}/jetty/jetty-util/6.0.0/jetty-util-6.0.0.jar

servlet-api.jar=${jetty.dir}/servlet-api-2.5-6.0.0.jar
servlet-api.md5=c27c02fb0a00cc3a7d05ea993a9bf56e
servlet-api.url=${maven2.base}/jetty/servlet-api/2.5-6.0.0/servlet-api-2.5-6.0.0.jar

depends.url=http://svn.apache.org/repos/asf/harmony/standard/depends

bcprov.ver=bcprov-jdk15-145
bcprov.dir=${depends.jars}/${bcprov.ver}
bcprov.jar=${bcprov.dir}/bcprov.jar
bcprov.url=${depends.url}/jars/bcprov/${bcprov.ver}.jar
bcprov.md5=2062f8e3d15748443ea60a94b266371c

icu4j.ver=icu4j_4.2.1
icu4j.dir=${depends.jars}/${icu4j.ver}
icu4j.jar=${icu4j.dir}/icu4j-4_2_1.jar
icu4j.url=http://download.icu-project.org/files/icu4j/4.2.1/icu4j-4_2_1.jar
icu4j.md5=2bef290de1db6970a6699bf78f0dca77

icu4j-charsets.ver=icu4j_4.2.1
icu4j-charsets.dir=${depends.jars}/${icu4j.ver}
icu4j-charsets.jar=${icu4j.dir}/icu4j-charsets-4_2_1.jar
icu4j-charsets.url=http://download.icu-project.org/files/icu4j/4.2.1/icu4j-charsets-4_2_1.jar
icu4j-charsets.md5=bccab3c39d735171fb54ce5e4f49207b
