#================================================================================
#  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.4/ecj-4.4.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

