# Common Properties
lib.dir=${virgo.build.dir}/lib
artifacts.dir=${target.dir}/artifacts
target.dir=${basedir}/target
ci.build=false
natural.name=${ant.project.name}
build.stamp=BUILD-${timestamp}
bundle.version=${version}.${build.stamp}
local.repo.dir=${java.io.tmpdir}/local-repository

# Artifact Properties
main.java.dir=${basedir}/src/main/java
main.resources.dir=${basedir}/src/main/resources
main.output.dir=${target.dir}/classes
main.webapp.dir=${basedir}/src/main/webapp

# Javadoc Properties
javadoc-all.output.dir=${target.dir}/javadoc-all
javadoc-api.output.dir=${target.dir}/javadoc-api
javadoc.prep.dir=${target.dir}/javadoc-prep
javadoc.exclude.package.names=
javadoc.stylesheet.file=${virgo.build.dir}/common/virgo-javadoc.css
javadoc.resources.dir=${virgo.build.dir}/common/javadoc-resources
javadoc.max.memory=128M

# JAR Properties
implementation.title=${ant.project.name}
implementation.version=${bundle.version}
jar.output.dir=${artifacts.dir}
jar.output.file=${jar.output.dir}/${ant.project.name}.jar
source-jar.output.dir=${artifacts.dir}
source-jar.output.file=${source-jar.output.dir}/${ant.project.name}-sources.jar

# PAR Properties
par.output.dir=${artifacts.dir}
par.output.file=${par.output.dir}/${ant.project.name}.par
par.provided.dir=${target.dir}/par-provided
par.provided.bundles.dir=${par.provided.dir}/bundles
par.provided.libraries.dir=${par.provided.dir}/libraries
par.staging.dir=${target.dir}/par-expanded
application.name=
application.description=

# Library Properties
libd.input.file=${basedir}/${ant.project.name}.libd
libd.output.dir=${artifacts.dir}
libd.output.file=${libd.output.dir}/${ant.project.name}.libd

# Resource Properties
resource.src.dir=${basedir}/src

# WAR (Web Application Archive) Properties
war.output.dir=${artifacts.dir}
war.output.file=${war.output.dir}/${ant.project.name}.war
war.staging.dir=${target.dir}/war-expanded
war.classes.dir=${war.staging.dir}/WEB-INF/classes
war.lib.dir=${war.staging.dir}/WEB-INF/lib

# WAB (Web Application Bundle) Properties
wab.output.dir=${artifacts.dir}
wab.output.file=${wab.output.dir}/${ant.project.name}.jar
wab.staging.dir=${target.dir}/wab-expanded
wab.classes.dir=${wab.staging.dir}/WEB-INF/classes
wab.lib.dir=${wab.staging.dir}/WEB-INF/lib

# Compiler Properties
org.springframework.build.ant.version=1.1.0.RELEASE
org.eclipse.jdt.core.compiler.batch.version=3.6.1
build.compiler=org.eclipse.jdt.core.JDTCompilerAdapter
compile.debug=true
compile.debug.level=lines,vars,source
compiler.args=-enableJavadoc
source.version=1.6
target.version=${source.version}

# Package Properties
copy.to.dir=${package.dist.dir}
package.dir=${target.dir}/package-expanded
package.basename=${natural.name}-${bundle.version}
package.file.name=${package.basename}.zip
package.output.dir=${package.dir}/${package.basename}
package.output.file=${artifacts.dir}/${package.file.name}
package.dist.dir=${package.output.dir}/dist
package.lib.dir=${package.output.dir}/lib
package.src.dir=${package.output.dir}/src
package.docs.dir=${package.output.dir}/docs
package.jar.output.file=${ant.project.name}-${bundle.version}.jar
package.par.output.file=${ant.project.name}-${bundle.version}.par
package.libd.output.file=${ant.project.name}-${bundle.version}.libd
package.war.output.file=${ant.project.name}-${bundle.version}.war
package.wab.output.file=${ant.project.name}-${bundle.version}.jar
package.source-jar.output.file=${ant.project.name}-sources-${bundle.version}.jar
org.springframework.build.aws.ant.version=3.0.3.RELEASE
p2.publishing.dir=${basedir}/target/publishing
p2.launcher.jar=${p2.publishing.dir}/plugins/org.eclipse.equinox.launcher.jar

#Updatesite Properties
tools.dir=${target.dir}/virgo-build-tools-${org.eclipse.virgo.build.tools}
p2.repository.dir=${target.dir}/repository
updatesite.basename=${natural.name}-updatesite-${bundle.version}
updatesite.file.name=${updatesite.basename}.zip
updatesite.output.file=${artifacts.dir}/${updatesite.file.name}

# AspectJ Properties
org.aspectj.tools.version=1.6.6.RELEASE
aspectj.x=

# Test Properties
test.forkmode=perBatch
test.java.dir=${basedir}/src/test/java
test.resources.dir=${basedir}/src/test/resources
test.output.dir=${target.dir}/test-classes
test-results.output.dir=${target.dir}/test-results
test.vm.args=

# Clover Properties
clover.db.dir=${clover.output.dir}/db
clover.db.file=${clover.db.dir}/clover.db
clover.output.dir=${target.dir}/clover
clover.staging.dir=${clover.output.dir}/staging
main.clover.dir=${clover.staging.dir}/main
test.clover.dir=${clover.staging.dir}/test
com.springsource.com.cenqua.clover.version=2.6.0
clover.enforce=false
clover.coverage=0%

# Docbook Properties
docbook.dir=${lib.dir}/docbook
docbook.target.dir=${target.dir}/docbook
org.apache.velocity.docbookframework.dist.version=1.0.0.BUILD-20080625
com.springsource.net.sf.xslthl.version=1.2.0
com.springsource.org.apache.xerces.version=2.8.1
docbook.build.dir=${virgo.build.dir}/docbook
docbook.output.dir=${target.dir}/${ant.project.name}
docbook.staging.dir=${docbook.target.dir}/staging
docbook.src.dir=${basedir}/src
docbook.images.dir=${basedir}/images
docbook.css.dir=${docbook.build.dir}/css
docbook.styles.dir=${docbook.build.dir}/styles

# Findbugs Properties
findbugs.dir=${lib.dir}/findbugs
findbugs.exclude.file=${virgo.build.dir}/common/findbugs-exclude.xml
findbugs.output.dir=${target.dir}/findbugs
findbugs.output.file=${findbugs.output.dir}/${ant.project.name}.xml
edu.umd.cs.findbugs.version=1.3.7

# Ivy Properties
release.type=integration
ivy.checksums=sha1
ivy.deliver.revision=${bundle.version}
ivy.file=${basedir}/ivy.xml
ivy.lib.dir=${lib.dir}/ivy
ivy.output.dir=${artifacts.dir}
ivy.output.file=${ivy.output.dir}/ivy.xml
ivy.settings.file=${virgo.build.dir}/common/ivysettings.xml
ivy.report.todir=${artifacts.dir}/reports

# Maven Properties
pom.output.dir=${artifacts.dir}
pom.output.file=${pom.output.dir}/pom.xml
local.pom.output.file=${basedir}/pom.xml
org.apache.maven.ant.version=2.0.10
org.springframework.build.aws.maven.version=2.0.0.RELEASE

# Bundlor Properties
bundlor.ant.version=1.0.0.RELEASE
manifest.template.file=${basedir}/template.mf
merge.existing.headers=true
fail.on.warnings=true

# Eclipse key file location
key.file=${user.home}/.ssh/id_rsa
passphrase=
eclipse.committerId=
eclipse.buildId=virgoBuild

