# 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.lib.dir=${depends.dir}/libs/${hy.platform}
awt.base=http://people.apache.org/~hindessm/classlib-depends/${hy.platform}
jpeg.ver=6b
jpeg.dir=${depends.lib.dir}/jpeg-${jpeg.ver}
jpeg.testfile=${jpeg.dir}/jversion.h
jpeg.tar=${depends.lib.dir}/jpeg-${jpeg.ver}.tar.gz
jpeg.url=${awt.base}/jpeg-${jpeg.ver}.tar.gz
jpeg.md5@x86@=610ebc3e6a9f93c9ac9d9261b3fe6611
jpeg.md5@x86_64@=132fe7221ba3e5c3aa96b851a42ef2a4

png.ver@x86@=1.2.38
png.ver@x86_64@=1.2.12
png.dir=${depends.lib.dir}/png-${png.ver}
png.testfile=${png.dir}/png.h
png.tar=${depends.lib.dir}/png-${png.ver}.tar.gz
png.url=${awt.base}/png-${png.ver}.tar.gz
png.md5@x86@=d7cc20b44f12b4e46da29ed6cccbcba5
png.md5@x86_64@=b562d8042aeb71d877cfd10518d019bc
