#
# Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# 
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
# 
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
# 
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
# 
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
application.title=nasgen

# source and target levels
build.compiler=modern
javac.source=1.7
javac.target=1.7

build.classes.dir=${build.dir}/classes

# This directory is removed when the project is cleaned:
build.dir=build

# This directory is removed when the project is cleaned:
dist.dir=dist
dist.jar=${dist.dir}/nasgen.jar
dist.javadoc.dir=${dist.dir}/javadoc

nashorn.dir=../../

javac.debug=true

javac.classpath=\
    ${nashorn.dir}/build/classes

meta.inf.dir=${src.dir}/META-INF
run.classpath=\
    ${javac.classpath}:\
    ${build.classes.dir}
run.jvmargs=
src.dir=src
