###############################################################################
# Copyright (c) 2003, 2009 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
###############################################################################
#####################
# Parameters describing how and where to execute the build.
# Typical users need only update the following properties:
#    baseLocation - where things you are building against are installed
#    bootclasspath - The base jars to compile against (typicaly rt.jar)
#    configs - the list of {os, ws, arch} configurations to build.  
#
# Of course any of the settings here can be overridden by spec'ing 
# them on the command line (e.g., -DbaseLocation=d:/eclipse

#The type of the top level element we are building,  generally "feature"
topLevelElementType = feature
#The id of the top level element we are building
topLevelElementId = org.eclipse.sdk

############# PRODUCT/PACKAGING CONTROL #############
#product=/plugin or feature id/path/to/.product
runPackager=true

#Set the name of the archive that will result from the product build.
#archiveNamePrefix=

# The prefix that will be used in the generated archive.
archivePrefix=eclipse

# The location underwhich all of the build output will be collected.
collectingFolder=${archivePrefix}

# The list of {os, ws, arch} configurations to build.  This 
# value is a '&' separated list of ',' separate triples.  For example, 
#     configs=win32,win32,x86 & linux,motif,x86
# By default the value is *,*,*
configs=\
	win32, win32, x86 &\
	win32, win32, x86_64 &\
	wce_ppc, win32, arm &\
	linux, gtk, x86 & \
	linux, gtk, ppc64 & \
	linux, gtk, x86_64 &\
	linux, gtk, s390x &\
	linux, gtk, s390 &\
	solaris, gtk, sparc & \
	solaris, gtk, x86 & \
	aix, gtk, ppc & \
	aix, gtk, ppc64 & \
	hpux, gtk, ia64_32 & \
	macosx, carbon, x86 & \
	macosx, cocoa, x86 & \
	macosx, cocoa, x86_64
#   solaris, motif, sparc & \


# By default PDE creates one archive (result) per entry listed in the configs property.
# Setting this value to true will cause PDE to only create one output containing all 
# artifacts for all the platforms listed in the configs property.
# To control the output format for the group, add a "group, group, group - <format>" entry to the
# archivesFormat. 
groupConfigurations=true

#The format of the archive. By default a zip is created using antZip.
#The list can only contain the configuration for which the desired format is different than zip.
#archivesFormat=win32, win32, x86 - antZip& \
#	linux, gtk, ppc - antZip &\
#    linux, gtk, x86 - antZip& \
#	linux, gtk, x86_64 - antZip& \
# linux, motif, x86 - antZip& \
#	solaris, motif, sparc - antZip& \
#	solaris, gtk, sparc - antZip& \
#	aix, motif, ppc - antZip& \
#	hpux, motif, PA_RISC - antZip& \
#	macosx, carbon, ppc - antZip

#Allow cycles involving at most one bundle that needs to be compiled with the rest being binary bundles.
allowBinaryCycles = true

#Sort bundles depenedencies across all features instead of just within a given feature.
flattenDependencies = true

#Parallel compilation, requires flattenedDependencies=true
#parallelCompilation=true
#parallelThreadCount=
#parallelThreadsPerProcessor=
	
#Set to true if you want the output to be ready for an update jar (no site.xml generated)
#outputUpdateJars = false

#Set to true for Jnlp generation
#codebase should be a URL that will be used as the root of all relative URLs in the output.
#generateJnlp=false
#jnlp.codebase=<codebase url>
#jnlp.j2se=<j2se version>
#jnlp.locale=<a locale>
#jnlp.generateOfflineAllowed=true or false generate <offlineAllowed/> attribute in the generated features
#jnlp.configs=${configs}			#uncomment to filter the content of the generated jnlp files based on the configuration being built

#Set to true if you want to sign jars
#signJars=false
#sign.alias=<alias>
#sign.keystore=<keystore location>
#sign.storepass=<keystore password>
#sign.keypass=<key password>

#Arguments to send to the zip executable
zipargs=

#Arguments to send to the tar executable
tarargs=--owner=0 --group=0

#Control the creation of a file containing the version included in each configuration - on by default 
#generateVersionsLists=false

############## BUILD NAMING CONTROL ################

# 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=${builddate}-${buildtime}

# Label for the build.  Used in naming the build output
buildLabel=${buildType}${buildId}

# Timestamp for the build.  Used in naming the build output
timestamp=${builddate}${buildtime}

#The value to be used for the qualifier of a plugin or feature when you want to override the value computed by pde.
#The value will only be applied to plugin or features indicating build.properties, qualifier = context 
#forceContextQualifier=<the value for the qualifier>

#Enable / disable the generation of a suffix for the features that use .qualifier. 
#The generated suffix is computed according to the content of the feature   
#generateFeatureVersionSuffix=true

############# BASE CONTROL #############
# Settings for the base Eclipse components and Java class libraries 
# against which you are building.
# Base location for anything the build needs to compile against.  For example,
# in most RCP app or a plug-in,  the baseLocation should be the location of a previously
# installed Eclipse against which the application or plug-in code will be compiled and the RCP delta pack.

base=/eclipse/test/4.0.0
buildDirectory=${base}/${buildLabel}
baseLocation=
repoTargetId=${buildLabel}

targetDir=${base}/targets
pluginPath=${localRepoLocation}
p2.context.repos=file:${localRepoLocation}

eclipseRepoURL = http://download.eclipse.org/eclipse/updates/3.7-I-builds/I20110111-0800
e4RepoURL = http://download.eclipse.org/e4/updates/0.11-I-builds
indigoRepoURL = http://download.eclipse.org/releases/indigo
localRepoLocation=${targetDir}/helios-repo-${repoTargetId}
transformedRepoLocation=${buildDirectory}/transformedRepos

#Os/Ws/Arch/nl of the eclipse specified by baseLocation
baseos=win32
basews=win32
basearch=x86

#this property indicates whether you want the set of plug-ins and features to be considered during the build to be limited to the ones reachable from the features / plugins being built
filteredDependencyCheck=false

#this property indicates whether the resolution should be done in development mode (i.e. ignore multiple bundles with singletons)
resolution.devMode=false

#pluginPath is a list of locations in which to find plugins and features.  This list is separated by the platform file separator (; or :)
#a location is one of:  
#- the location of the jar or folder that is the plugin or feature : /path/to/foo.jar or /path/to/foo
#- a directory that contains a /plugins or /features subdirectory
#- the location of a feature.xml, or for 2.1 style plugins, the plugin.xml or fragment.xml
#pluginPath=

skipBase=true

############# MAP FILE CONTROL ################
# This section defines CVS tags to use when fetching the map files from the repository.
# If you want to fetch the map file from repository / location, change the getMapFiles target in the customTargets.xml

mapsRepo=:pserver:anonymous@dev.eclipse.org/cvsroot/eclipse
mapsRoot=e4/releng/org.eclipse.e4.sdk/maps
mapsCheckoutTag=HEAD

#tagMaps=true
mapsTagTag=v${buildId}


############ REPOSITORY CONTROL ###############
# This section defines properties parameterizing the repositories where plugins, fragments
# bundles and features are being obtained from. 

# The tags to use when fetching elements to build.
# By default thebuilder will use whatever is in the maps.  
# This value takes the form of a comma separated list of repository identifier (like used in the map files) and the 
# overriding value
# For example fetchTag=CVS=HEAD, SVN=v20050101
# fetchTag=HEAD
#skipFetch=true


############# JAVA COMPILER OPTIONS ##############
# The location of the Java jars to compile against.  Typically the rt.jar for your JDK/JRE
#bootclasspath=${java.home}/lib/rt.jar
JAVA60_HOME=/opt/public/common/jdk-1.6.0_10
JAVA50_64_HOME=/opt/public/common/jdk-1.5.0-22.x86_64
JAVA50_HOME=/opt/public/common/jdk-1.5.0_16
JAVA14_HOME=/opt/public/common/j2sdk1.4.2_19


# specific JRE locations to compile against. These values are used to compile bundles specifying a 
# Bundle-RequiredExecutionEnvironment. Uncomment and set values for environments that you support
CDC-1.0/Foundation-1.0=/shared/common/org.eclipse.sdk-feature/libs/ee.foundation-1.0.jar
CDC-1.1/Foundation-1.1=/shared/common/org.eclipse.sdk-feature/libs/ee.foundation.jar
#OSGi/Minimum-1.0=
#OSGi/Minimum-1.1=
#JRE-1.1=
#J2SE-1.2=
#J2SE-1.3=
#J2SE-1.4=
#J2SE-1.5=
#JavaSE-1.6=
#PersonalJava-1.1=
#PersonalJava-1.2=
#CDC-1.0/PersonalBasis-1.0=
#CDC-1.0/PersonalJava-1.0=
#CDC-1.1/PersonalBasis-1.1=
#CDC-1.1/PersonalJava-1.1=
JavaSE-1.6=${JAVA60_HOME}/jre/lib/resources.jar:${JAVA60_HOME}/jre/lib/rt.jar:${JAVA60_HOME}/jre/lib/jsse.jar:${JAVA60_HOME}/jre/lib/jce.jar:${JAVA60_HOME}/jre/lib/charsets.jar
J2SE-1.5=${JAVA50_HOME}/jre/lib/rt.jar:${JAVA50_HOME}/jre/lib/jsse.jar:${JAVA50_HOME}/jre/lib/jce.jar:${JAVA50_HOME}/jre/lib/charsets.jar
J2SE-1.4=${JAVA14_HOME}/jre/lib/rt.jar:${JAVA14_HOME}/jre/lib/jsse.jar:${JAVA14_HOME}/jre/lib/jce.jar:${JAVA14_HOME}/jre/lib/charsets.jar



# Specify the output format of the compiler log when eclipse jdt is used
logExtension=.xml

# Whether or not to include debug info in the output jars
javacDebugInfo=on

# Whether or not to fail the build if there are compiler errors
javacFailOnError=true

# Enable or disable verbose mode of the compiler
javacVerbose=false

# Extra arguments for the compiler. These are specific to the java compiler being used.
#compilerArg=

# 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.3

# 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.1

compilerArg=-inlineJSR -enableJavadoc -encoding ISO-8859-1

individualSourceBundles=true
generateFeatureVersionSuffix=true

p2.repo=${buildDirectory}/${buildLabel}/repository
p2.build.repo=file:${p2.repo}

signingArchive=${buildDirectory}/${buildLabel}/eclipse-master-${buildId}.zip

#p2.category.definition=file:${builder}/e4-category.xml
skipMirroring=true
p2.gathering=true

p2.flavor=tooling
p2.root.name=${topLevelElementId}
p2.root.version=4.0.0.v${buildId}
p2.repo.name=e4 build ${buildId}
eclipse.p2.mirrors=false

