
# This is the eclipse releng driver
# It is only used to drive the build process
# it must be relative to the build home
#
#
# 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


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


#############################################################


# 	Set this to the relative path for the
# 	directory to be use for the current build.
# 	It must be relative to the build home
# 	Final name will include the ditribution name and build type
# 	e.g:  projects/wtp-R3.0-I
build.current=projects


# 	Set this to the relative path for the
# 	directory to be use for the current test pass.
# 	It must be relative to the build home
# 	Final name will include the component and build type
# 	e.g:  tests/wtp-R3.0-I
build.tests=tests

# 	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

# Set this to the relative path for the
# directory that keeps the downloaded drivers (local repository)
# It must be relative to the buildHome
build.local.repository=downloads


#############################################################
# Other inline resolved properties
pde.builder.path=${env.BUILD_HOME}/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.BUILD_HOME}/${build.current}/${build.distribution}-${buildBranch}-${buildType}/${build.directory}
pde.builder.path=${env.BUILD_HOME}/builders/${eclipse.builder.version}/${eclipse.builder}
