# Copyright (c) 2011-2013 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

# NLS_MESSAGEFORMAT_VAR

bin.includes = feature.xml,\
               feature.properties,\
               CDOExplorer.product,\
               rootfiles/,\
               icons/,\
               epl-v10.html,\
               about.html,\
               license.html
src.includes = about.html,\
               epl-v10.html,\
               buckminster.cspex,\
               rootfiles/,\
               license.html

root = rootfiles
