###############################################################################
# Copyright (c) 2009 EclipseSource 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:
#     EclipseSource - initial API and implementation
###############################################################################

runPackager=true

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

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

# The location underwhich all of the build output will be collected.
collectingFolder=eclipse

# 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 = *, *, *
	
#Set to true if you want the output to be ready for an update jar (no site.xml generated)
outputUpdateJars = true

############## BUILD NAMING CONTROL ################
# The directory into which the build elements are fetched and where
# the build takes place.
buildDirectory=${build.base}/tooling.build

# Type of build.  Used in naming the build output.  Typically this value is
# one of I, N, M, S, ...
buildType=<buildType-set-by-system-property>

# Version of the build. Used in naming the build output
targetVersion=1.3.2

# ID of the build.  Used in naming the build output.
buildId=<buildId-set-by-system-property>

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

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

#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

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

#skipMaps=true
mapsRepo=:pserver:anonymous@dev.eclipse.org/cvsroot/rt
mapsRoot=org.eclipse.rap/releng/org.eclipse.rap.releng/maps
mapsCheckoutTag=<mapsCheckoutTag-set-by-system-property>

# Specify the tag to use instead of the checkout tag in the map files
fetchTag=<fetchTag-set-via-system-property>

# 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=true

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

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