#	 ***************************************************************
#	 * Copyright 2008-2010 the EasyAnt project
#	 *
#	 * See the NOTICE file distributed with this work for additional information 
#	 * regarding copyright ownership.
#    * 
#    * Licensed 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.
#	 ***************************************************************
#TODO: find a way to have a common property file shared by all build-types (std/webapp/etc..)
module.name=${ivy.module}
project.ivy.file=${easyant.file}


src.main.scala=${basedir}/src/main/scala
src.main.resources=${basedir}/src/main/resources
src.test.scala=${basedir}/src/test/scala
src.test.resources=${basedir}/src/test/resources

test.compile.includes.pattern=**/*.scala

#TODO: used to be complient with test modules, find a way to be independent of src.main.java 
src.main.java=${src.main.scala}
src.test.java=${src.test.scala}

target = ${basedir}/target
target.main.classes=${target}/main/classes

target.test.classes=${target}/test/classes
target.test.xml=${target}/test/xml
target.test.html=${target}/test/html

target.artifacts=${target}/artifacts
target.artifacts.main.jar.name=${module.name}.jar
target.artifacts.test.jar.name=${module.name}-test.jar
target.report=${target}/report

manifest.file=${target}/MANIFEST.MF

test.framework=junit