
# 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



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}
