# Copyright (c) 2004 - 2011 Eike Stepper (Berlin, Germany) 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:
#    Eike Stepper - initial API and implementation

stream=2.0
branch=master
train=juno
buckminster=3.7
eclipse=3.8
emf=2.8
weekly=I

#	This build can be optimized by setting these properties externally:
#			platform = "Windows" | "Linux" | "Mac"

svn.repository=http://dev.eclipse.org/svnroot/modeling/org.eclipse.emf.cdo
eclipse.downloads=http://download.eclipse.org
cloudsmith.downloads=http://download.cloudsmith.com

director=${eclipse.downloads}/tools/buckminster/products/director_latest.zip
buckminster.headless=${eclipse.downloads}/tools/buckminster/headless-${buckminster}
buckminster.external=${cloudsmith.downloads}/buckminster/external-${buckminster}
train.releases=${eclipse.downloads}/releases/${train}
eclipse.updates=${eclipse.downloads}/eclipse/updates/${eclipse}
eclipse.milestones=${eclipse.downloads}/eclipse/updates/${eclipse}milestones

qualifier.replacement.*=generator:lastModified
generator.lastModified.format='v'yyyyMMdd-HHmm

target.os=*
target.ws=*
target.arch=*

signing.type=eclipse.local

###########################################################################

jars.compile.order = .
bin.includes = .
src.includes = build.cquery,\
               build.rmap,\
               buckminster.mspec
