# 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.

# ANother Tool for Language Recognition v2.7.5. generics parser dependency
antlr=${depends.jars}/antlr-2.7.5/antlr-2.7.5.jar
antlr.url=http://issues.apache.org/jira/secure/attachment/12358381/antlr-2.7.5.jar
antlr.md5=6d57df718efd2a03981c309ce3330a1f

# org.vmmagic unboxed package. Used to enable address arithmetic in Java
vmmagic=${depends.jars}/vmmagic/vmmagic-20070207.jar
vmmagic.url=http://cs.anu.edu.au/people/Robin.Garner/vmmagic-20070207.jar
vmmagic.md5=c20a2e1b4b54a4fa4cc03a1fbb21c83a

# Apache Portable Runtime, version 1.1 or above
# http://apr.apache.org/download.cgi
apr.src.tgz=${depends.oss}/apr/apr-1.3.9.tar.gz
apr.src.rootdir=apr-1.3.9
apr.src.tgz.url=http://www.apache.org/dist/apr/apr-1.3.9.tar.gz
apr.src.tgz.md5=85bcd8005153b8fa63b1e3f95ea31f07

# ZLIB, version 1.2.1 or above
# http://www.zlib.net/
zlib.dir=${base.dep.dir}/libs/${hy.platform.variant}/zlib-123
zlib=${zlib.dir}/zlib.zip
zlib.url@x86@=http://www.zlib.net/zlib123-dll.zip
zlib.md5@x86@=cc7fa97f9c19386bb701acc79d0abbca
zlib.url@x86_64@=http://issues.apache.org/jira/secure/attachment/12351498/zlib-x86_64-dll.zip
zlib.md5@x86_64@=7397278304667d4e68e9af073da45d98


# Ant-contrib, version 0.6 or above
# http://sourceforge.net/project/showfiles.php?group_id=36177
ant-contrib=${depends.jars}/ant-contrib-1.0b3/ant-contrib.zip
ant-contrib.jar=${depends.jars}/ant-contrib-1.0b3/ant-contrib.jar
ant-contrib.unzip.path=ant-contrib/ant-contrib-1.0b3.jar
ant-contrib.url=http://downloads.sourceforge.net/project/ant-contrib/ant-contrib/1.0b3/ant-contrib-1.0b3-bin.zip
ant-contrib.md5=c5a75fc28cbc52f09bd43b5506978601

# JASMIN for regression test framework
jasmin=${depends.jars}/jasmin-1.1/jasmin-1.1.zip
jasmin.jar=${depends.jars}/jasmin-1.1/jasmin.jar
jasmin.unzip.path=jasmin-1.1/jasmin.jar
jasmin.url=http://internap.dl.sourceforge.net/sourceforge/jasmin/jasmin-1.1.zip
jasmin.md5=bb96616023ab4efdffa173601004fa17
