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

# CHANGE ivy.jar TO REFLECT YOUR INSTALLATION
ivy.jar = /opt/apache-ivy-2.0.0-rc2/ivy-2.0.0-rc2.jar

sigil-ivy-plugin.jar = ${common.dir}/../../../lib/sigil-ivy-plugin.jar

lib.dir = ${basedir}/lib
build.dir = ${basedir}/build
classes.dir = ${build.dir}/classes
src.dir = ${basedir}/src
repository.dir=${common.dir}/../repository

ivy.file = ${basedir}/ivy.xml

jar.file = ${build.dir}/${ant.project.name}.jar
main.class.name = ${ant.project.name}.Main

module.version.target = 1.0
