#================================================================================
#  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.
#================================================================================

# NetBeans will automatically set the project basedir "." correctly to
# the parent directory of the nbproject subdirectory
#
# the Tomcat build.properties file defines the confusingly-named "base.path"
# property, which is where the Tomcat dependencies are downloaded


# the following properties will be generated by build.xml, but are also needed
# by the NetBeans targets which do not have access to those properties
# as-yet not created by the main Ant build.

tomcat.output=./output
tomcat.classes=${tomcat.output}/classes
tomcat.build=${tomcat.output}/build
test.classes=${tomcat.output}/testclasses
test.temp=${tomcat.output}/test-tmp

nb-test.io-method=org.apache.coyote.http11.Http11NioProtocol

# it is not possible to retrieve the classpaths from the build to
# use in the NetBeans targets, so they must be explicitly declared

nb-test.classpath=${test.classes}:${tomcat.build}/webapps/examples/WEB-INF/classes:${base.path}/junit-4.11/junit-4.11.jar:${base.path}/easymock-3.2/easymock-3.2.jar:${base.path}/hamcrest-1.3/hamcrest-core-1.3.jar:${base.path}/ecj-4.6.3/ecj-4.6.3.jar:${tomcat.classes}

# Extra properties used by the Tomcat project additional NetBeans targets.

# configure JUnit test results so that NetBeans can intercept and display them
#
nb-junit.formatter=-Dorg.apache.juli.formatter=java.util.logging.SimpleFormatter
nb-junit.formatter.type=plain
nb-junit.formatter.usefile=true
nb-junit.formatter.extension=.txt

