###############################################################################
# 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
# 1.7.2.20130123133700
# 1.7.2.20130128134800
# 1.7.2.20130128140100
# 1.7.2.20130131080500
# 1.7.2.20130213135500
# 1.7.2.20130214224500 - 1.7.2 
# 1.7.3.20130311102200
# 1.7.3.20130402120000
# 1.7.3.20130403143700
# 1.7.3.20130613144500 - 1.7.3
# 1.7.3.20130613144500-a - 1.7.3 fix packaging problem with aspectj bundles
# 1.8.0.20130729224100 - 1.8.0.M1
# 1.8.0.20130801095600 
# when updating AspectJ to the next version, also make sure to uodate
# the MANIFEST.MF bundle-version and all package versions
# 1.7.4.20131009211200
# 1.7.5.20140117135700 - extra diagnostics on structural change
ajde.version=1.7.5.20140117135700

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

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