source: trunk/dports/java/tomcat5/Portfile @ 8863

Last change on this file since 8863 was 8863, checked in by jberry, 16 years ago

Some idiot bungled his boolean logic

  • Property svn:eol-style set to native
File size: 8.0 KB
Line 
1# $Id: Portfile,v 1.2 2004/10/22 02:18:21 jberry Exp $
2
3PortSystem 1.0
4
5name                            tomcat5
6version                         5.0.29
7revision                        1
8
9categories                      java www
10maintainers                     jberry@opendarwin.org
11platforms                       darwin
12
13description                     Tomcat 5 HTTP Server and Java Servlet Container.
14long_description        Tomcat is the servlet container that is used in the official \
15                                        Reference Implementation for the Java Servlet and JavaServer \
16                                        Pages technologies.
17homepage                        http://jakarta.apache.org/tomcat/
18
19distname                        jakarta-tomcat-${version}-src
20master_sites            apache:jakarta/tomcat-5/v${version}/src/
21checksums                       md5 7499866b9d37fd4a3bfd17ac0163ddc7
22
23patchfiles                      patch-setclasspath.sh.diff \
24                                        patch-jk2.properties.diff \
25                                        patch-workers2.properties.minimal.diff
26
27depends_build           bin:ant:apache-ant
28depends_lib                     bin:java:kaffe \
29                                        bin:jsvc:commons-daemon \
30                                        lib:pcre:pcre \
31                                        lib:XXX:commons-beanutils \
32                                        lib:XXX:commons-collections \
33                                        lib:XXX:commons-launcher \
34                                        lib:XXX:commons-daemon \
35                                        lib:XXX:commons-digester \
36                                        lib:XXX:commons-el \
37                                        lib:XXX:commons-logging \
38                                        lib:XXX:commons-modeler \
39                                        lib:XXX:jakarta-regexp \
40                                        lib:XXX:xercesj \
41                                        lib:XXX:jakarta-log4j \
42                                        lib:XXX:commons-httpclient \
43                                        lib:XXX:commons-pool \
44                                        lib:XXX:commons-dbcp \
45                                        lib:XXX:commons-fileupload \
46                                        lib:XXX:MX4J \
47                                        lib:XXX:junit \
48                                        lib:XXX:jaxen \
49                                        lib:XXX:saxpath
50                                       
51                                        #lib:XXX:struts
52                               
53set javaLibs            ${prefix}/share/java
54set tomcatpath          ${worksrcpath}/jakarta-tomcat-5
55set jk2path                     ${worksrcpath}/jakarta-tomcat-connectors/jk/native2
56set home                        share/java/tomcat5
57set tomcatuser          www
58set tomcatgroup         www
59
60# Determine a reasonable JAVA_HOME value
61if { [llength [array get env "JAVA_HOME"]] > 0 } {
62        set javahome $env(JAVA_HOME)
63} else {
64        set javahome ""
65}
66if { ![file isdirectory ${javahome}] } {
67        if { [variant_isset darwin] } {
68                set javahome "/Library/Java/Home"
69        } else {
70                error "This port needs a reasonable value for JAVA_HOME, but couldn't automatically determine one: please set the environment variable."
71        }
72}
73
74# Variant jk2 builds the jk2 connector
75variant jk2 {
76        if { ![variant_isset apache2] } {
77                error "Variant jk2 may be built only together with variant apache2 for now"
78        }
79       
80        configure.cmd                   ./configure
81        build.cmd                               make
82}
83
84# Variant apache2 specifies use with apache2
85variant apache2 {
86        depends_lib-append              path:${prefix}/apache2/bin/httpd:apache2
87        configure.args-append   --with-apxs2=${prefix}/apache2/bin/apxs \
88                                                        --with-jni \
89                                                        --with-java-home=${javahome}
90}
91                                       
92post-patch {
93        # Clean up the the buildconf script
94        reinplace s|libtoolize|glibtoolize| ${jk2path}/buildconf.sh
95
96        # Fix link
97        reinplace s|-lcrypt|| ${jk2path}/server/apache2/Makefile.in
98}
99
100pre-configure {
101
102        # Check to be sure the apache2 port has been updated, and
103        # warn the user if it hasn't been.
104        # In port versions prior to 2.0.52_1, apxs didn't know where libdir was.
105        # That information is needed by the jk2 configure script.
106
107        if { [variant_isset apache2] } {
108                set apxs ${prefix}/apache2/bin/apxs
109                if { [file executable ${apxs}] } {
110                        set libdir [exec ${apxs} -q LIBDIR]
111                        if { 0 == [string length ${libdir}] || ![file isdirectory ${libdir}] } {
112                                error "Your apache2 installation doesn't know where its library directory is. Please update your apache2 port."
113                        }
114                }
115        }
116       
117        # Configure jk2
118        file attributes ${jk2path}/buildconf.sh -permissions ug+x
119        system "cd ${jk2path} && ./buildconf.sh"       
120}
121
122# configure/make build is used to build the jk2 connector, while the primary
123# java build is done in post-build.
124
125configure.dir           ${jk2path}
126configure.cmd           true
127configure.args          --with-pcre
128
129build.dir                       ${jk2path}
130build.cmd                       true
131
132# Run an ant build
133proc ant_build { dir {target ""} {args ""} {env ""} } {
134        set cmdLine "cd ${dir} && ${env} ant ${target} ${args}"
135        system ${cmdLine}
136}
137
138post-build {
139        # Build the java code as a post-build process
140        ui_msg "--->  Building ${name} Java code"
141        ant_build ${tomcatpath} "download dist" [join "
142                -Dbase.path=${worksrcpath}/Repository
143                -Dcommons-beanutils.jar=${javaLibs}/commons-beanutils.jar
144                -Dcommons-collections.jar=${javaLibs}/commons-collections.jar
145                -Dcommons-launcher.jar=${javaLibs}/commons-launcher.jar
146                -Dcommons-daemon.jar=${javaLibs}/commons-daemon.jar
147                -Dcommons-digester.jar=${javaLibs}/commons-digester.jar
148                -Dcommons-el.jar=${javaLibs}/commons-el.jar
149                -Dcommons-logging.jar=${javaLibs}/commons-logging.jar
150                -Dcommons-logging-api.jar=${javaLibs}/commons-logging-api.jar
151                -Dcommons-modeler.jar=${javaLibs}/commons-modeler.jar
152                -Dregexp.jar=${javaLibs}/jakarta-regexp.jar
153                -DxercesImpl.jar=${javaLibs}/xercesImpl.jar
154                -Dxml-apis.jar=${javaLibs}/xml-apis.jar
155                -Dlog4j.jar=${javaLibs}/jakarta-log4j.jar
156                -Dcommons-httpclient.jar=${javaLibs}/commons-httpclient.jar
157                -Dcommons-pool.jar=${javaLibs}/commons-pool.jar
158                -Dcommons-dbcp.jar=${javaLibs}/commons-dbcp.jar
159                -Dcommons-fileupload.jar=${javaLibs}/commons-fileupload.jar
160                -Djmx.jar=${javaLibs}/mx4j.jar
161                -Djunit.jar=${javaLibs}/junit.jar
162                -Djaxen.jar=${javaLibs}/jaxen-core.jar
163                -Dsaxpath.jar=${javaLibs}/saxpath.jar
164                "]
165
166                #-Dstruts.lib=${javaLibs}/struts/lib
167}
168
169destroot        {
170        set target ${destroot}${prefix}/${home}
171
172        # Ensure we've got needed directories
173        xinstall -m 755 -d ${destroot}${prefix}/share/java \
174                ${destroot}${prefix}/share/doc \
175                ${destroot}${prefix}/var/run \
176                ${destroot}${prefix}/etc/rc.d
177               
178        # Create the tomcat user
179        addgroup ${tomcatgroup}
180        set gid [existsgroup ${tomcatgroup}]
181        adduser ${tomcatgroup} gid=${gid} realname=Web Server
182       
183        # Install Tomcat
184        file copy ${tomcatpath}/dist ${target}
185       
186        # Remove unwanted files
187        foreach f [glob -directory ${target}/bin *.bat] { file delete $f }
188       
189        # Add turds to maintain empty directories
190        system "touch ${destroot}${prefix}/var/run/.turd \
191                ${target}/logs/.turd \
192                ${target}/temp/.turd \
193                ${target}/work/.turd"
194               
195        # Install our scripts
196        xinstall -m 755 ${filespath}/tomcatctl \
197                ${filespath}/setenv.sh \
198                ${target}/bin
199        xinstall -m 755 ${filespath}/tomcat5.sh \
200                ${destroot}${prefix}/etc/rc.d
201               
202        # Add a symlink from bin directory to tomcatctl
203        system "cd ${destroot}${prefix}/bin && ln -s ../${home}/bin/tomcatctl"
204       
205        # Configure the scripts
206        reinplace s|PREFIX=$|PREFIX=${prefix}| ${target}/bin/tomcatctl
207        reinplace s|TOMCAT_USER=$|TOMCAT_USER=${tomcatuser}| ${target}/bin/tomcatctl
208        reinplace s|TOMCATPREFIX=$|TOMCATPREFIX=${prefix}/${home}| ${destroot}${prefix}/etc/rc.d/tomcat5.sh
209       
210        # Fix permissions
211        system "chown -R ${tomcatuser}:${tomcatgroup} \
212                ${target}/conf \
213                ${target}/logs \
214                ${target}/temp \
215                ${target}/work"
216       
217        # Install the docs
218        file copy ${tomcatpath}/build/docs \
219                ${destroot}${prefix}/share/doc/${name}
220               
221        # Install the jk2 connector for apache2
222        if { [variant_isset apache2] && [variant_isset jk2] } {
223                xinstall -m 755 -d ${destroot}${prefix}/apache2/modules \
224                        ${destroot}${prefix}/apache2/conf
225                       
226                xinstall -m 644 ${jk2path}/../build/jk2/apache2/mod_jk2.so \
227                        ${destroot}${prefix}/apache2/modules
228                       
229                xinstall -m 644 ${jk2path}/../build/jk2/apache2/libjkjni.so \
230                        ${target}/server/lib
231                       
232                xinstall -m 644 ${jk2path}/../conf/jk2.properties \
233                        ${target}/conf
234                xinstall -m 644 ${jk2path}/../conf/workers2.properties.minimal \
235                        ${destroot}/${prefix}/apache2/conf/workers2.properties
236               
237                reinplace s|@@PREFIX@@|${prefix}|g \
238                        ${target}/conf/jk2.properties
239        }
240}
241
242
243post-install {
244        if { [variant_isset apache2] && [variant_isset jk2] } {
245                ui_msg "
246Example files ${prefix}/apache2/conf/workers2.properties and
247${prefix}/${home}/conf/jk2.properties have been installed to illustrate
248use of the jk2 connector between apache2 and tomcat over a unix domain socket.
249You will want to configure the uri mappings in workers2.properties
250or using JkUriSet in httpd.conf.
251
252Be sure to add the following line to your httpd.conf:
253
254        LoadModule jk2_module modules/mod_jk2.so
255"
256        }
257       
258        ui_msg "
259The script ${prefix}/${home}/tomcatctl has been installed to facilitate
260start and stop of tomcat using the jsvc utility, which allows you to
261start tomcat as a true daemon process. Once it has acquired its TCP socket,
262jsvc will drop its root privileges and run as user ${tomcatuser}.
263"
264}
Note: See TracBrowser for help on using the repository browser.