###############################################################################
# Copyright (c) 2003, 2006 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

############# PRODUCT/PACKAGING CONTROL #############
product=${builder}/product/adt.product
runPackager=true

# p2!
p2.gathering=true

# locations.  Don't need a baseLocation, the transformedRepoLocation will have what we need
buildDirectory = ${basedir}/buildDirectory
baseLocation=
transformedRepoLocation=${basedir}/transformed
repoBaseLocation=${downloadFolder}/toTransform

# tranfomedRepoLocation is also automatically a context repo
p2.context.repos= \
  jar:file:${downloadFolder}/cdt.zip!/,\
  jar:file:${downloadFolder}/cvs.zip!/

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

#don't need a base location, everything is in repos

# The list of {os, ws, arch} configurations to build. 
configs = win32,win32,x86

# Type of build.  Used in naming the build output.  Typically this value is
# one of I, N, M, S, ...
buildType=I
buildId=${timestamp}
buildLabel=${buildType}.${buildId}

skipBase=true
skipMaps=true
skipFetch=true


