# 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

xmlsec.dir=${depends.jars}/xmlsec_1.4.0
xmlsec.zip=${xmlsec.dir}/xmlsec.zip
xmlsec.url=http://xml.apache.org/security/dist/java-library/xml-security-bin-1_4_0.zip
xmlsec.md5=79ffece964a40d33fb25f3f7a8e83f6b

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-144
bcprov.dir=${depends.jars}/${bcprov.ver}
bcprov.jar=${bcprov.dir}/bcprov.jar
bcprov.url=${depends.url}/jars/bcprov/${bcprov.ver}/bcprov.jar
bcprov.md5=0d6f0b31730db6fd1f8360cf1f7666d4

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
