# 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

# NLS_MESSAGEFORMAT_VAR

source.. = src/
output.. = bin/
bin.includes = META-INF/,\
               .,\
               .options,\
               about.html,\
               copyright.txt,\
               plugin.xml,\
               schema/,\
               plugin.properties,\
               about.ini,\
               about.mappings,\
               about.properties,\
               modeling32.png
src.includes = about.html,\
               copyright.txt

org.eclipse.emf.cdo.releng.javadoc.project = org.eclipse.emf.cdo.doc
