# Copyright (c) 2014 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,\
               plugin.properties,\
               plugin.xml,\
               toc.xml,\
               html/,\
               images/,\
               toc.xmi,\
               javadoc/,\
               schemadoc/,\
               oomph32.png
src.includes = about.html

doc.depends = org.eclipse.oomph.util.doc,\
              org.eclipse.oomph.p2.doc,\
              org.eclipse.oomph.targlets.doc

generateSourceReferences = true
