# -*- coding: utf-8; mode: tcl; tab-width: 4; truncate-lines: t; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:et:sw=4:ts=4:sts=4
# $Id: Portfile 57375 2009-09-10 08:16:41Z ryandesign@macports.org $

PortSystem 1.0

name				tomcat6
version				6.0.20

categories			java www
maintainers			ricci openmaintainer
platforms			darwin

description			Tomcat 6 HTTP Server and Java Servlet Container.
long_description	Tomcat is the servlet container that is used in the official \
					Reference Implementation for the Java Servlet and JavaServer \
					Pages technologies.
homepage			http://tomcat.apache.org/

distname			apache-tomcat-${version}-src
master_sites		apache:tomcat/tomcat-6/v${version}/src/

checksums           md5     44f49e7e14028b6a53c3c346bd18c72f \
                    sha1    ab538484d8d05c83a69c70ab6bf07606282633d8 \
                    rmd160  65b1b56132c03855e352e44a24b761bccd65b90c
					
patchfiles			patch-bin-catalina.sh	\
					patch-build.xml.diff

depends_build		bin:ant:apache-ant
depends_lib			bin:java:kaffe \
					bin:jsvc:commons-daemon \
					port:jakarta-taglibs-standard-11 \
					port:commons-beanutils \
					port:commons-collections \
					port:commons-launcher \
					port:commons-daemon \
					port:commons-digester \
					port:commons-el \
					port:commons-logging \
					port:commons-modeler \
					port:commons-httpclient \
					port:commons-pool \
					port:commons-dbcp \
					port:commons-fileupload \
					port:commons-io \
					port:jakarta-regexp \
					port:xercesj \
					port:jakarta-log4j \
					port:mx4j \
					port:junit \
					port:jaxen \
					port:saxpath
				
set javaLibs		${prefix}/share/java
set home			share/java/tomcat6
set tomcatuser		www
set tomcatgroup		www

use_configure		no

build.cmd			ant
build.target		download 
set antArgs		 [join "
                    -Dversion=${version}
                    -Dversion.build=[lindex [split ${version} .] 2]
					-Dbase.path=${worksrcpath}/Repository
					-Dnsis.exe=${worksrcpath}/.bogus
					-Dcommons-beanutils.jar=${javaLibs}/commons-beanutils.jar
					-Dcommons-collections.jar=${javaLibs}/commons-collections.jar
					-Dcommons-launcher.jar=${javaLibs}/commons-launcher.jar
					-Dcommons-daemon.jar=${javaLibs}/commons-daemon.jar
					-Dcommons-digester.jar=${javaLibs}/commons-digester.jar
					-Dcommons-el.jar=${javaLibs}/commons-el.jar
					-Dcommons-logging.jar=${javaLibs}/commons-logging.jar
					-Dcommons-logging-api.jar=${javaLibs}/commons-logging-api.jar
					-Dcommons-modeler.jar=${javaLibs}/commons-modeler.jar
					-Dcommons-httpclient.jar=${javaLibs}/commons-httpclient.jar
					-Dcommons-pool.jar=${javaLibs}/commons-pool.jar
					-Dcommons-dbcp.jar=${javaLibs}/commons-dbcp.jar
					-Dcommons-fileupload.jar=${javaLibs}/commons-fileupload.jar
					-Dregexp.jar=${javaLibs}/jakarta-regexp.jar
					-DxercesImpl.jar=${javaLibs}/xercesImpl.jar
					-Dxml-apis.jar=${javaLibs}/xml-apis.jar
					-Dlog4j.jar=${javaLibs}/jakarta-log4j.jar
					-Djmx.lib=${javaLibs}
					-Djunit.jar=${javaLibs}/junit.jar
					-Djaxen.jar=${javaLibs}/jaxen.jar
					-Dsaxpath.jar=${javaLibs}/saxpath.jar
					-Djasper.home=${worksrcpath}/../jasper
					"]
#					-Dstruts.lib=${javaLibs}/struts/lib

build.args			$antArgs

pre-build {
	#
	# Tomcat in this version requires ant 1.6.5.
	# If the current version of ant is not at least 1.6.5 then
	# tell the user and fail.
	#
	if { [string length [auto_execok ant]] } {
		set verOutput [exec ant -version]
		regexp {version (\d+(\.\d+)*)} $verOutput -> antVersion
		if { [rpm-vercomp $antVersion "1.6.5"] < 0 } {
			return -code error "This version of tomcat requires ant version 1.6.5 or better. Please install a newer ant before proceeding."
		}
	}

	# Make a bogus file to prevent nsis.exe from downloading
	system "touch ${worksrcpath}/.bogus"
}

destroot {
	set target ${destroot}${prefix}/${home}
	xinstall -m 755 -d ${target}

	# Ensure we've got needed directories
	ui_msg "# setting up needed dirs"
	xinstall -m 755 -d \
		${destroot}${prefix}/share/java \
		${destroot}${prefix}/share/doc \
		${destroot}${prefix}/etc/rc.d
		
	# Create the tomcat user
	addgroup ${tomcatgroup}
	set gid [existsgroup ${tomcatgroup}]
	adduser ${tomcatuser} gid=${gid} realname=Web Server
	
	# Install Tomcat
	ui_msg "# installing tomcat..."
 	system "cd ${worksrcpath} && ant $antArgs deploy"
	## build space:
 	file copy ${worksrcpath}/output/build/bin ${target}
 	file copy ${worksrcpath}/output/build/conf ${target}
 	file copy ${worksrcpath}/output/build/lib ${target}
 	file copy ${worksrcpath}/output/build/temp ${target}
 	file copy ${worksrcpath}/output/build/webapps ${target}
	## and classes:
 	file copy ${worksrcpath}/output/classes ${target}/shared/
	
	# Add the jstl libs to tomcat6/shared/lib so that they're available to all
	ui_msg "# adding the jstl libs "
	xinstall -m 755 -d ${target}/shared/lib
	xinstall -m 644 \
		${prefix}/share/java/jstl.jar \
		${prefix}/share/java/standard.jar \
		${target}/shared/lib
		
	# Remove unwanted files
	foreach f [glob -directory ${target}/bin *.bat] { file delete $f }
	
	# Maintain empty directories
	ui_msg "# maint. empty dirs... "
	xinstall -m 755 -d ${target}/work
	xinstall -m 755 -d ${target}/logs
	destroot.keepdirs-append \
		${target}/logs \
		${target}/temp \
		${target}/work \
		${target}/shared/classes \
		${target}/common/classes
		
	# Install our scripts
	ui_msg "# adding our scripts "
	xinstall -m 755 \
		${filespath}/tomcatctl \
		${filespath}/conf_setup.sh \
		${filespath}/setenv.sh \
		${target}/bin
	ui_msg "# adding our scripts 2"
	xinstall -m 755 \
		${filespath}/setenv.local \
		${target}/conf
	
	# Add a symlink from bin directory to tomcatctl
	system "cd ${destroot}${prefix}/bin && ln -s ../${home}/bin/tomcatctl"
	
	# Configure the scripts
	reinplace s|PREFIX=$|PREFIX=${prefix}| ${target}/bin/tomcatctl
	reinplace s|TOMCAT_USER=$|TOMCAT_USER=${tomcatuser}| ${target}/bin/tomcatctl
	
	# Rename certain files as .sample to avoid replacing them on update
	# These will be "repaired" by conf_setup.sh on first run
	foreach f 	"
				catalina.policy
				catalina.properties
				server.xml
				tomcat-users.xml
				web.xml
				setenv.local
				" {
		file rename ${target}/conf/${f} ${target}/conf/${f}.sample
	}

	# Fix ownership of some directories tomcat really needs to write to
	system "chown -R ${tomcatuser}:${tomcatgroup} \
		${target}/conf \
		${target}/logs \
		${target}/temp \
		${target}/webapps \
		${target}/work"
	
	# Install the docs
	file copy ${worksrcpath}/webapps/docs \
		${destroot}${prefix}/share/doc/${name}
}


post-install {
	ui_msg "#"
	ui_msg "# Configuration files in ${prefix}/${home}/conf have been"
	ui_msg "# installed with a .sample extension so that they won't be replaced by a"
	ui_msg "# port update. Each will be copied to its proper location during the"
	ui_msg "# first startup of tomcat by catalina.sh or tomcatctl if you don't"
	ui_msg "# do this yourself first. If this _is_ an update, you might do a diff to"
	ui_msg "# verify that you're not missing anything in the newer .sample versions"
	ui_msg "# of these files."
	ui_msg "#"
	ui_msg "# The script ${prefix}/${home}/bin/tomcatctl has been installed to"
	ui_msg "# facilitate start and stop of tomcat using the jsvc utility, which allows you to"
	ui_msg "# start tomcat as a true daemon process. Once tomcat has acquired its TCP socket,"
	ui_msg "# jsvc will drop its root privileges and run as user ${tomcatuser}."
	ui_msg "#"
	ui_msg "# Under Apple Java, control over the Java version used to launch ${name} is"
	ui_msg "# through the shell variable JAVA_JVM_VERSION. This variable should be set"
	ui_msg "# to a java version such as 1.5, 1.6, or CurrentJDK (for the default version)."
	ui_msg "# You may set JAVA_JVM_VERSION in ${prefix}/${home}/bin/setenv.sh."
	ui_msg "#"
}


startupitem.create		yes
startupitem.executable	"${prefix}/bin/tomcatctl" start
startupitem.pidfile		clean "${prefix}/share/java/tomcat6/logs/${name}.pid"


livecheck.type  regex
livecheck.url   ${homepage}/download-60.cgi
livecheck.regex "apache-tomcat-(\\d+\\.\\d+(\\.\\d+)?)-src.tar.gz"

