
# This is the eclipse releng driver
# It is only used to drive the build process
# it must be relative to the build home
#

# uncomment if its desired to skip unit tests
# (if not already defined from elsewhere)
# skipUnitTests=yes

#
# in 3.2 based builds, this version is no longer appended to
# pde builder directory name.
#eclipse.base.version=3.1.0

eclipse.builder=org.eclipse.releng.basebuilder
eclipse.builder.version=M3_34
#eclipse.builder.version=RC4_33
#eclipse.builder.version=r322_v20070104
# uncomment if its desired to 'force' fetch of eclipse builder
# (if not already defined from elsewhere)
eclipse.builder.fetch=true


# WTP specific builder
#wtpBuildTools.url=http://download.eclipse.org/webtools/wtpBuildTools/drops/R3.0/T-T200706302239-200706302239/updateSite/plugins
#wtpBuildTools.file=org.eclipse.wtp.releng.tools_1.0.0.v200706302235.jar
#wtpBuildTools.url=http://download.eclipse.org/webtools/wtpBuildTools/drops/R3.0/T-T20080102233556-20080102233556/updateSite/plugins
#wtpBuildTools.file=org.eclipse.wtp.releng.tools_1.0.0.v200801022134.jar
wtpBuildTools.url=http://download.eclipse.org/webtools/wtpBuildTools/drops/R3.0/T-T20080103173003-20080103173003/updateSite/plugins
wtpBuildTools.file=org.eclipse.wtp.releng.tools_1.0.0.v200801031730.jar



archivesFormat=*,*,*-antZip

# 	This parameter is specific to the compiler
# 	being used (JDT Compiler, in our case).
# 	'showversion' causes the version of JDT Compiler to be
# 	printed to the compiler log file.
#compilerArg=-showversion -encoding ISO-8859-1 -warn:-discouraged,serial,raw
compilerArg=-showversion -encoding ISO-8859-1 -warn:-serial,raw,typeHiding,unchecked

logExtension=.xml
# 	Asks the compiler for verbose output.  This should be set to true in order for *.bin.log files to be generated when
# 	using the JDT Compiler Adapter to compile.
javacVerbose=true
# 	javacFailOnError must be false otherwise the
# 	build will terminated at the first compile error
javacFailOnError=false
javacDebugInfo=true

# 	Asks the compiler for verbose output.  This should be set
#   to true in order for *.bin.log files to be generated when
# 	using the JDT Compiler Adapter to compile.
javacVerbose=true
#############################################################


# 	Set this to the relative path for the
# 	directory to be used for the peformance test.
# 	It is relative to the build home.
build.perf.tests=perf-current

# This is the directory in which eclipse driver
# that will be used to compile the build will
# be installed into it is relative to the build.current
base.location=eclipse


# 	This is the working directory in which
# 	build process will do its job
# 	It is relative to the build.current
build.directory=workdir


#############################################################
# Other inline resolved properties
pde.builder.path=${env.BASE_BUILDERS}/${eclipse.builder.version}/${eclipse.builder}
# Beginning with 33M5, the startup.jar was removed. Currently, in basebuilder,
# this launcher is provided without version number. If we ever move to use plain
# eclipse, we'll need a bit of script find and rename (or set the variable).
# to ever "go backwards" this one variable could be ${pde.builder.path}/startup.jar
eclipse.launcher=${pde.builder.path}/plugins/org.eclipse.equinox.launcher.jar
#eclipse.launcher=${pde.builder.path}/startup.jar

# in 3.2 based builds, pde's directory no longer has version number
#pde.build.scripts=${pde.builder.path}/plugins/org.eclipse.pde.build_${eclipse.base.version}/scripts
pde.build.scripts=${pde.builder.path}/plugins/org.eclipse.pde.build/scripts
buildDirectory=${env.PROJECT_PROJECTS}/${projectname}/${build.directory}
