# 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.jars=${hy.depends}/jars
depends.oss=${hy.depends}/oss

depends.url=http://svn.apache.org/repos/asf/harmony/standard/depends
eclipse.base=http://download.eclipse.org/eclipse/downloads/drops
harmony.standard.base=http://svn.apache.org/repos/asf/harmony/standard/depends

junit.jar=${depends.jars}/junit_4.6/junit-4.6.jar
junit.jar.url=http://downloads.sourceforge.net/sourceforge/junit/junit-4.6.jar?use_mirror=autoselect
junit.jar.md5=37dc57962c1275ebc572726a6f5cdd13

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

ecj.jar=${depends.jars}/ecj_3.6.1/ecj-3.6.1.jar
ecj.jar.url=${eclipse.base}/R-3.6.1-201009090800/ecj-3.6.1.jar
ecj.jar.md5=448c6e65234fc61624e14b0964d75bd9

# Cpptasks, version 1.0 beta 3 or above
# http://sourceforge.net/project/showfiles.php?group_id=36177
cpptasks=${depends.jars}/cpptasks-1.0b4/cpptasks.zip
cpptasks.jar=${depends.jars}/cpptasks-1.0b4/cpptasks.jar
cpptasks.unzip.path=cpptasks-1.0b4/cpptasks.jar
cpptasks.url=http://downloads.sourceforge.net/sourceforge/ant-contrib/cpptasks-1.0b4.zip?use_mirror=autoselect
cpptasks.md5=118e601b58a48519208efa9893c7c5c0

icuhdr=${depends.oss}/icu4c/icu4c-3.4-harmony-includes.zip
icuhdr.url=${depends.url}/oss/icu4c-3.4-harmony-includes.zip
icuhdr.md5=46dbe39e5f6c4ea206a9daad9e29f8b0

icudll=${hy.depends}/libs/${hy.platform.variant}/icu-3.4/icu-3.4.zip
icudll.url=${depends.url}/libs/${hy.platform.variant}/icu-3.4.zip
icuuc.linkname@windows@=icuuc.lib
icuuc.linkname@unix@=libicuuc.so.34
icudll.md5@windows.x86@=4ab256e309d1ceb9779b10cf32c79dab
icudll.md5@windows.x86_64@=39b2bb43ec0ec6f31567fd020e2c5338
icudll.md5@linux.x86.libstdc++5@=545626f5c5336168005dad74d7f6f30c
icudll.md5@linux.x86@=efca3002eaa3e4727633eb096ad4561c
icudll.md5@linux.x86_64.libstdc++5@=dd65a5c4d519799607ce9463f7e5cd26
icudll.md5@linux.x86_64@=6467cbcb3c6ff979c7bf9495b62081af
icudll.md5@linux.ia64@=1136e736ce8976da898f2a3d34cb8469
icudll.md5@linux.ppc32@=1a7e73cf283dc362b69350f163a3f256
icudll.md5@linux.ppc64@=d6d67c23093425b7a1adda1550944745
icudll.md5@macosx.ppc32@=96607064b85027427f29d39fc9ec5f90
icudll.md5@macosx.x86@=b1bc0be59ff3a3cb4c2b81e215459682
icudll.md5@macosx.x86_64@=795957cff1665bd43cacdc73ba3cd8b4
icudll.md5@freebsd.x86@=7e78475ec05805083e58879eda6e5df9
icudll.md5@freebsd.x86.7x@=911a80c1f1ac778afd63aac13eb27de2
icudll.md5@freebsd.x86_64.7x@=37dc6060e507a1b421fadf86b7b2cb8a
icudll.md5@freebsd.x86.8x@=c8e481419914df47dc07ad9f120543f5
icudll.md5@freebsd.x86_64.8x@=3d76c796e782218d7bbbc99995ba95a7

############################## TO SORT OUT ##############################

xalan.dir=${depends.jars}/xalan-j_2.7.0
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.11.0
xerces.zip=${xerces.dir}/xerces.zip
xerces.url=http://www.apache.org/dist/xml/xerces-j/Xerces-J-bin.2.11.0.zip
xerces.md5=408500aaaf1ff9f1e03e79defe90facc

msvcr.dir.x86=${hy.depends}/libs/windows.x86
msvcr.dll.x86=${msvcr.dir.x86}/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_VS2003.md5.x86=86f1895ae8c5e8b17d99ece768a70732
# This is the md5 hash for the VS2003 SP1 version, 7.10.6030.0
msvcr_VS2003SP1.md5.x86=ca2f560921b7b8be1cf555a5a18d54c3

msvcp.dir.x86=${hy.depends}/libs/windows.x86
msvcp.dll.x86=${msvcr.dir.x86}/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_VS2003.md5.x86=561fa2abb31dfa8fab762145f81667c2
# This is the md5 hash for the VS2003 SP1 version, 7.10.6030.0
msvcp_VS2003SP1.md5.x86=a94dc60a90efd7a35c36d971e3ee7470

msvcr.dir.x86_64=${hy.depends}/libs/windows.x86_64
msvcr.dll.x86_64=${msvcr.dir.x86_64}/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.x86_64=465cebd7da2ceaba5e552fc9118a1415

msvcp.dir.x86_64=${hy.depends}/libs/windows.x86_64
msvcp.dll.x86_64=${msvcp.dir.x86_64}/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.x86_64=5ae0f01f02a03558da0cbd249e4df263

mx4j.dir=${depends.jars}/mx4j_3.0.2
mx4j.zip=${mx4j.dir}/mx4j.zip
mx4j.url=http://downloads.sourceforge.net/sourceforge/mx4j/mx4j-3.0.2.zip?use_mirror=autoselect
mx4j.md5=443bd83ee36414de4b8fc5722b038b02
mx4j.jar=${mx4j.dir}/mx4j.jar
mx4j.remote.jar=${mx4j.dir}/mx4j-remote.jar

# bcel is needed by yoko-rmi
bcel.version=5.2
bcel.base=bcel-${bcel.version}
bcel.dir=${depends.jars}/${bcel.base}
bcel.jar=${bcel.dir}/${bcel.base}.jar
bcel.url=${maven2.base}/org/apache/bcel/bcel/${bcel.version}/${bcel.base}.jar
bcel.md5=43d54687362fc2991d61201c453a8286

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

awtdeps.base.x86=http://people.apache.org/~geirm/harmony/
awtdeps.dir.x86=${hy.depends}/libs/windows.x86
awtdeps.tar.x86=${awtdeps.dir.x86}/swing_awt_deps_winxp_2006-09-28.tgz
awtdeps.url.x86=${awtdeps.base.x86}swing_awt_deps_winxp_2006-09-28.tgz
awtdeps.md5.x86=d61a27e4b305d9fcabaaacf34f8f534a
awtdeps.extract.dir.x86=${hy.depends}/libs/build
awtdeps.testfile.x86=${awtdeps.extract.dir.x86}/winxp_2006-09-28.txt

awtdeps.base.x86_64=http://people.apache.org/~ayza/harmony/64bit/
awtdeps.dir.x86_64=${hy.depends}/libs/windows.x86_64
awtdeps.tar.x86_64=${awtdeps.dir.x86_64}/swing_awt_deps_win64_2007-02-08.tgz
awtdeps.url.x86_64=${awtdeps.base.x86_64}swing_awt_deps_win64_2007-02-08.tgz
awtdeps.md5.x86_64=f2bbb1f4f23100393783fd02a77fcc68
awtdeps.extract.dir.x86_64=${hy.depends}/libs/build
awtdeps.testfile.x86_64=${awtdeps.extract.dir.x86_64}/win64_2007-02-08.txt

dejavu-fonts.dir=${hy.depends}/dejavu-fonts
dejavu-fonts.fonts.dir=${hy.depends}/dejavu-fonts/dejavu-ttf-2.18
dejavu-fonts.zip=${dejavu-fonts.dir}/dejavu-ttf-2.18-1.zip
dejavu-fonts.url=http://downloads.sourceforge.net/sourceforge/dejavu/dejavu-ttf-2.18-1.zip?use_mirror=autoselect
dejavu-fonts.md5=72e0a87ec1f9c5c26c66eabcf1e2018e

derby.dir=${depends.jars}/derby-10.3.1.4
derby.jar=${derby.dir}/derby.jar
derby.url=${maven2.base}/org/apache/derby/derby/10.3.1.4/derby-10.3.1.4.jar
derby.md5=f28d6047ab26445de53c4c96126494df
