# 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
maven2.base=http://repo1.maven.org/maven2

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.9.1
xerces.zip=${xerces.dir}/xerces.zip
xerces.url=http://www.apache.org/dist/xml/xerces-j/Xerces-J-bin.2.9.1.zip
xerces.md5=a0e07ede1c3bd5231fe15eae24032b2e

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
