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

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