# 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 controlling the build process 


#------------------------------------------------------------------------------------
# Build properties version to make sure that local.build.properties is kept in sync
# NOTE: Do NOT modify this number unless you are a Dev and want to modify this file
# NOTE for Devs: Update this number if this file is being updated.
#                Also update the version number within src/targets/properties-build.xml

build.properties.version=157864


#------------------------------------------------------------------------------------
# The root of the Cocoon source tree

cocoon.src.dir=../cocoon-2.1.9
#cocoon.src.dir=../cocoon/branches/BRANCH_2_1_X

#------------------------------------------------------------------------------------
# The original, unmodified and expanded cocoon webapp directory

cocoon.webapp.dir=${cocoon.src.dir}/build/webapp

#------------------------------------------------------------------------------------
# Root directories where publications are located

pubs.root.dirs=src/webapp/lenya/pubs
#pubs.root.dirs=src/webapp/lenya/pubs:../anotherproject/pubs:/home/user/my-pub


#------------------------------------------------------------------------------------
# Web Application Server
# NOTE: There are slight differences re deployment on the various servlet containers, e.g. endorsed libraries ...

web.app.server=Jetty
#web.app.server=Tomcat
#web.app.server=WLS


#------------------------------------------------------------------------------------
# Where the 'install' build target should put the webapp context
# WARNING: This has to be an absolute path! (FIXME: cocoon.xconf needs absolute path (scr/targets/init-build.xml))
# NOTE: Do not use white spaces within the path

tomcat.home.dir=/usr/local/tomcat
#tomcat.home.dir=C:/build/tomcat


#------------------------------------------------------------------------------------
# Where the 'install' build target should put the webapp context
# NOTE: This path is not necessarily relative to tomcat.home.dir

tomcat.webapps.dir=${tomcat.home.dir}/webapps/lenya


#------------------------------------------------------------------------------------
# The server cache directory to be cleaned by the 'reset' target
# NOTE: This path is not necessarily relative to tomcat.home.dir

# Tomcat 5.x
tomcat.cache.dir=${tomcat.home.dir}/work/Catalina/localhost/lenya
# Tomcat 4.x
#tomcat.cache.dir=${tomcat.home.dir}/work/Standalone/localhost/lenya

#------------------------------------------------------------------------------------
# Where the 'install' build target should copy the endorsed libraries
# NOTE: This path is not necessarily relative to tomcat.home.dir

tomcat.endorsed.dir=${tomcat.home.dir}/common/endorsed


#------------------------------------------------------------------------------------
# Where the 'install' build target should local WLS
# NOTE: Make sure to set the endorsed libraries correctly and set 
#       <prefer-web-inf-classes>true</prefer-web-inf-classes> within weblogic.xml
#       such that WLS is using ANT of Cocoon/Lenya and not of WLS

wls.domain.dir=/usr/local/bea81/user_projects/domains/my-domain
wls.webapps.dir=${wls.domain.dir}/applications/lenya


#------------------------------------------------------------------------------------
# Files and directories which should be excluded during 'install', 'clean' and 'reset'
# Comma- or space-separated list of patterns
# All files are included when commented
# This is useful for preserving content while you are developing a publication

#target.install.excludes=**/pubs/default/content/**,**/pubs/default/resources/authoring/**,**/pubs/default/resources/live/**,**/pubs/default/config/ac/passwd/*.iml
#target.reset.excludes=${target.install.excludes}


#------------------------------------------------------------------------------------
# Enable file uploads in Lenya
# If you leave this set to false, asset and image upload will not work.
# It is disabled by default for security reasons

enable.uploads=false

#------------------------------------------------------------------------------------
# Anteater and Webtest home directories

#anteater.home=/usr/local/anteater
#webtest.home = /usr/local/canoo-webtest

#------------------------------------------------------------------------------------
# Eclipse Properties for use with the eclipse-project target

ide.eclipse.outputdir=build/eclipse/classes
ide.eclipse.export.libs=false

#------------------------------------------------------------------------------------
# Xopus context name

xopus.context=Xopus2.1.64
xopus.path=../../ROOT
