###############################################################################
# Copyright (c) 2003, 2006 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
# 
# Contributors:
#     IBM Corporation - initial API and implementation
###############################################################################


# 1.7.0.20120412142900
# 1.7.0.20120418081600
# 1.7.0.20120525172200 rc1
# 1.7.0.20120703164200 1.7.0 final
# 1.7.1.20120822170500
# 1.7.1.20120910111500 - 1.7.1 final
# 1.7.2.20120919171200
# 1.7.2.20120920133900
# 1.7.2.20130121224400 - code gen hints
# 1.7.2.20130214224500 - 1.7.2
ajde.version=1.7.2.20130214224500

  
builder=.

# arguments file passed to ajc---this shouldn't change
ajcArgFile=${builder}/iajc-args.txt


# The prefix that will be used in the generated archive.
archivePrefix=ajdt

# The location underwhich all of the build output will be collected.
collectingFolder=${archivePrefix}


# Type of build.  Used in naming the build output.  Typically this value is
# one of I, N, M, S, ...
buildType=I

# ID of the build.  Used in naming the build output.
buildId=TestBuild

# Label for the build.  Used in naming the build output
buildLabel=${buildType}.${buildId}


# where extra plugins for the build can be found
# currently, not needed
# pluginPath=${workdir}/plugins

# uncomment both to skip fetching from cvs and use local file system instead
# should not need to uncomment
# We are only fetching Equinox Aspects sources, not AJDT sources
# AJDT sources are coming from a checked out cache
skipFetch=true
#skipMaps=true

# only used if skipMaps property is unset or set to false
mapsRepo=:pserver:anonymous@dev.eclipse.org/cvsroot/tools
mapsRoot=${builder}/maps
mapsCheckoutTag=HEAD

# Specify the output format of the compiler log when eclipse jdt is used
logExtension=.log

# Whether or not to include debug info in the output jars
javacDebugInfo=false 

# Whether or not to fail the build if there are compiler errors
javacFailOnError=true

# Enable or disable verbose mode of the compiler
javacVerbose=true

individualSourceBundles=true


# working directory for building
build.home=${build.dest}/build

# eclipse to build against and to run tests against
target.eclipse=${build.dest}/target/eclipse

# location of the workspace used for running tests
test.workspace=${build.dest}/target/test-workspace

# the eclipse that is driving the build
# must be properly provisioned with AspectJ weaver and runtime
# as well as ajdt-pde build
build.eclipse=${build.dest}/eclipse

# distribution directory for update sites
# directory for build artifact
build.dist=${build.dest}/dist
updateSite.loc=${build.dist}/updateSite
test.results=${build.dist}/test-reports

# configure extra plugins required for building and testing
eclipse.test.framework.version=eclipse-test-framework-3.7.zip
org.eclipse.test=3.3.100
test.library.xml=${build.eclipse}/plugins/org.eclipse.test_${org.eclipse.test}/library.xml


# The value that will be prefixed to all version qualifiers
# Use e34x for Eclispe 3.4 builds and e35x for 3.5 builds, etc
# This value will be ignored if forceContextQualifier is set above or from the command line
qualPrefix=e43x

# upload properties
upload.host=build.eclipse.org
upload.dir=43devupdate

# Default value for the version of the source code. This value is used when compiling plug-ins that do not set the Bundle-RequiredExecutionEnvironm
ent or set javacSource in build.properties
javacSource=1.5

# Default value for the version of the byte code targeted. This value is used when compiling plug-ins that do not set the Bundle-RequiredExecutionE
nvironment or set javacTarget in build.properties.
javacTarget=1.5


# Extra arguments for the compiler. These are specific to the java compiler being used.
# @category compiling
compilerArg=-nowarn

# 43 for building against Eclipse 4.3
target.eclipse.version=43

p2.sign=true
p2.repository.name=AJDT Update Site
