# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
build.dir=${basedir}/build
build.classes.dir=${build.dir}/classes
build.test.classes.dir=${build.dir}/test-classes
threaddemo.jar=${build.dir}/threaddemo.jar
threaddemo-complete.jar=${build.dir}/threaddemo-complete.jar
build.javadoc.dir=${build.dir}/javadoc
build.test.results.dir=${build.dir}/test-results

nbroot=${basedir}/../..
netbeans.dest.dir=${nbroot}/nbbuild/netbeans

platform=${netbeans.dest.dir}/${nb.cluster.platform.dir}
util.jar=${platform}/lib/org-openide-util.jar
nodes.jar=${platform}/modules/org-openide-nodes.jar
actions.jar=${platform}/modules/org-openide-actions.jar
explorer.jar=${platform}/modules/org-openide-explorer.jar
text.jar=${platform}/modules/org-openide-text.jar
dialogs.jar=${platform}/modules/org-openide-dialogs.jar
windows.jar=${platform}/modules/org-openide-windows.jar
awt.jar=${platform}/modules/org-openide-awt.jar

looks.jar=${netbeans.dest.dir}/extra/modules/org-netbeans-modules-looks.jar
registry.jar=${netbeans.dest.dir}/extra/modules/org-netbeans-modules-registry.jar

# Must define:
#Spin.jar=???/spin-1.1/Spin.jar
# XXX could also try to retrieve http://internap.dl.sourceforge.net/sourceforge/spin/spin-1.4.zip

junit.jar=${nbroot}/libs.junit4/external/junit-4.13.2.jar

# Root directory of the file browsers:
testdir=${java.io.tmpdir}

# Logging config file:
logging.properties=${basedir}/logging.properties

build.cp=\
    ${util.jar}:\
    ${nodes.jar}:\
    ${actions.jar}:\
    ${explorer.jar}:\
    ${text.jar}:\
    ${dialogs.jar}:\
    ${windows.jar}:\
    ${looks.jar}:\
    ${Spin.jar}
# windows.jar just for CloneableEditorSupport

run.cp=\
    ${build.cp}:\
    ${registry.jar}:\
    ${awt.jar}:\
    ${threaddemo.jar}
# registry.jar used since Looks links against it (but will not use it)
# awt.jar used by explorer.jar

test.build.cp=\
    ${build.cp}:\
    ${threaddemo.jar}:\
    ${junit.jar}

test.run.cp=\
    ${test.build.cp}:\
    ${build.test.classes.dir}
