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

##############
# Properties used by forrest.build.xml for building the website
##############

project.name=forrest

#project.skin=Don't specify a skin for Forrest, we will always use the 
#             default one defined in main/webapp/default-forrest.properties
project.content-dir=.
project.xdocs-dir=${project.content-dir}/content/xdocs
project.raw-content-dir=${project.content-dir}/content
project.configfile=${project.home}/conf/cli.xconf
project.skinconf=${project.content-dir}/skinconf.xml

project.bugtracking-url=http://issues.apache.org/jira/browse/
project.issues-rss-url=http://issues.apache.org/jira/secure/IssueNavigator.jspa?view=rss&pid=12310000&fixfor=12310041&resolutionIds=-1&sorter/field=priority&sorter/order=DESC&tempMax=25&reset=true&decorator=none

# The URL to start crawling from
#project.start-uri=linkmap.html

# The names of plugins that are required to build the project
# comma separated list (no spaces)
# Run "forrest available-plugins" for a list of plug-ins currently available
project.required.plugins=org.apache.forrest.plugin.input.dtdx,org.apache.forrest.plugin.input.projectInfo,org.apache.forrest.plugin.output.POD,org.apache.forrest.plugin.output.pdf,org.apache.forrest.plugin.output.Text,org.apache.forrest.plugin.input.glossary

# Max memory to allocate to Java
# FIXME: See issue FOR-572
forrest.maxmemory=256m

forrest.validate=true
