###############################################################################
# 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
ajde.version=1.7.0.20120703164200
  
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=e42x-RELEASE

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

# 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

# 42 for building against Eclipse 4.2
target.eclipse.version=42

p2.sign=true


p2.repository.name=AJDT Update Site