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



# when updating AspectJ to the next version, also make sure to uodate
# the MANIFEST.MF bundle-version and all package versions
# 1.8.3.20140820082000 - 1.8.3 dev (apt in ajdt)
# 1.8.3.20141021140000 - 1.8.3 almost release
# 1.8.3.20141023123000 - 1.8.3 release
# 1.8.4.20141030180000 - 1.8.4 dev (thisAspectInstance fix)
# 1.8.4.20141106133000 - 1.8.4 release
# 1.8.5.20141117171500 - 1.8.5 dev
# 1.8.5.20141218084900 - 1.8.5 dev
# 1.8.5.20150128171000 - 1.8.5 release
# 1.8.6.20150608154200 - 1.8.6 release
# 1.8.7.20150629114800 - 1.8.7 snapshot (AspectJ rebased on Mars)
ajde.version=1.8.7.20150629114800


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


# 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-4.5.zip
org.eclipse.test=3.3.200.v20150327-1546
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 Eclipse 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=e45x

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

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

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


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

# 44 for building against Eclipse 4.4
target.eclipse.version=45

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