# Copyright (c) 2006, 2007, 2010-2012 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

jars.compile.order = .
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
               about.html,\
               about.ini,\
               about.mappings,\
               about.properties,\
               copyright.txt,\
               modeling32.png,\
               plugin.properties,\
               plugin.xml,\
               javadoc/,\
               toc.xml,\
               intro/,\
               .,\
               html/,\
               images/,\
               schemadoc/,\
               toc.xmi
src.includes = about.html,\
               copyright.txt

doc.depends = org.eclipse.net4j.doc,\
							org.eclipse.net4j.db.doc

generateSourceReferences = true
