1
2# Copyright (C) NGINX, Inc.
3
4
5shift
6
7NXT_JAVA_HOME=${JAVA_HOME-}
8NXT_JAR_REPO=https://repo1.maven.org/maven2/
9NXT_JAR_LOCAL_REPO=$HOME/.m2/repository/
10
11for nxt_option; do
12
13    case "$nxt_option" in
14        -*=*) value=`echo "$nxt_option" | sed -e 's/[-_a-zA-Z0-9]*=//'`     ;;
15           *) value="" ;;
16    esac
17
18    case "$nxt_option" in
19
20        --module=*)     NXT_JAVA_MODULE="$value"                              ;;
21        --home=*)       NXT_JAVA_HOME="$value"                                ;;
22        --lib-path=*)   NXT_JAVA_LIB_PATH="$value"                            ;;
23        --repo=*)       NXT_JAR_REPO="$value"                                 ;;
24        --local-repo=*) NXT_JAR_LOCAL_REPO="$value"                           ;;
25        --sha512=*)     NXT_SHA512_TOOL="$value"                              ;;
26        --jars=*)       NXT_JARS="$value"                                     ;;
27
28        --help)
29            cat << END
30
31    --module=NAME         set unit Java module name
32    --home=DIR            set Java home directory
33    --lib-path=DIRECTORY  set directory path to libjvm.so library
34    --repo=URL            set Maven remote repository URL
35                          default: "$NXT_JAR_REPO"
36    --local-repo=DIR      set local repository directory
37                          default: "$NXT_JAR_LOCAL_REPO"
38    --sha512=SHA512       set command for SHA512 check
39    --jars=DIR            set jars install/search directory
40
41END
42            exit 0
43        ;;
44
45        *)
46            echo
47            echo $0: error: invalid Java option \"$nxt_option\"
48            echo
49            exit 1
50        ;;
51    esac
52
53done
54
55
56if [ ! -f $NXT_AUTOCONF_DATA ]; then
57   echo
58   echo Please run common $0 before configuring module \"$nxt_module\".
59   echo
60   exit 1
61fi
62
63. $NXT_AUTOCONF_DATA
64
65
66NXT_JARS=${NXT_JARS=$NXT_MODULES}
67NXT_JAVA_MODULE=${NXT_JAVA_MODULE=java}
68NXT_JAVA_LIB_PATH=${NXT_JAVA_LIB_PATH=}
69
70$echo "configuring Java module"
71$echo "configuring Java module ..." >> $NXT_AUTOCONF_ERR
72
73if [ -n "${NXT_JAVA_HOME}" ]; then
74    $echo "using java.home ${NXT_JAVA_HOME}"
75    $echo "using java.home ${NXT_JAVA_HOME}" >> $NXT_AUTOCONF_ERR
76
77    if [ ! -d "${NXT_JAVA_HOME}" ]; then
78        $echo
79        $echo $0: error: Java home directory not found.
80        $echo
81        exit 1
82    fi
83
84    NXT_JAVA="${NXT_JAVA_HOME}/bin/java"
85
86else
87    $echo -n "checking for java executable ..."
88    $echo "checking for java executable ..." >> $NXT_AUTOCONF_ERR
89
90    NXT_JAVA=`which java || :`
91    if [ -z "$NXT_JAVA" -o ! -x "$NXT_JAVA" ]; then
92        $echo " not found"
93        $echo
94        $echo $0: error: java executable not found.
95        $echo
96        exit 1
97    fi
98
99    $echo " found $NXT_JAVA"
100    $echo "found $NXT_JAVA" >> $NXT_AUTOCONF_ERR
101
102    "$NXT_JAVA" -version
103
104    $echo -n "checking java.home ..."
105    $echo "checking java.home ..." >> $NXT_AUTOCONF_ERR
106
107    NXT_JAVA_HOME=`$NXT_JAVA -XshowSettings 2>&1 | grep -F -e java.home | sed -e 's/^.*= //'`
108    if [ -z "$NXT_JAVA_HOME" ]; then
109        $echo " not found"
110        $echo
111        $echo $0: error: java.home not found.
112        $echo
113        exit 1
114    fi
115
116    $echo " $NXT_JAVA_HOME"
117    $echo "got java.home $NXT_JAVA_HOME" >> $NXT_AUTOCONF_ERR
118
119    if [ ! -x "${NXT_JAVA_HOME}/bin/javac" ]; then
120        NXT_JAVA_HOME_=${NXT_JAVA_HOME%/jre}
121        if [ -x "${NXT_JAVA_HOME_}/bin/javac" ]; then
122            $echo "adjust java.home $NXT_JAVA_HOME_"
123            $echo "adjust java.home $NXT_JAVA_HOME_" >> $NXT_AUTOCONF_ERR
124
125            NXT_JAVA_HOME="$NXT_JAVA_HOME_"
126        fi
127    fi
128fi
129
130NXT_JAVAC="${NXT_JAVA_HOME}/bin/javac"
131
132if [ ! -x "$NXT_JAVAC" ]; then
133    $echo
134    $echo $0: error: javac not found.
135    $echo
136    exit 1
137fi
138
139NXT_JAVA_INCLUDE="-I${NXT_JAVA_HOME}/include"
140
141case "$NXT_SYSTEM" in
142    Linux)
143        NXT_JAVA_INCLUDE="${NXT_JAVA_INCLUDE} -I${NXT_JAVA_HOME}/include/linux"
144        ;;
145    Darwin)
146        NXT_JAVA_INCLUDE="${NXT_JAVA_INCLUDE} -I${NXT_JAVA_HOME}/include/darwin"
147        ;;
148    DragonFly)
149        NXT_JAVA_INCLUDE="${NXT_JAVA_INCLUDE} -I${NXT_JAVA_HOME}/include/dragonfly"
150        ;;
151    FreeBSD)
152        NXT_JAVA_INCLUDE="${NXT_JAVA_INCLUDE} -I${NXT_JAVA_HOME}/include/freebsd"
153        ;;
154esac
155
156if [ -z "$NXT_JAVA_LIB_PATH" ]; then
157    $echo -n "checking library path ..."
158    $echo "checking library path ..." >> $NXT_AUTOCONF_ERR
159
160    if [ ! -x "$NXT_JAVA" ]; then
161        $echo " not found"
162        $echo
163        $echo $0: error: java executable not found.
164        $echo
165        exit 1
166    fi
167
168    NXT_JAVA_LIB_PATH=`$NXT_JAVA -XshowSettings 2>&1 | grep -F -e sun.boot.library.path | sed -e 's/^.*= //'`
169
170    if [ -z "$NXT_JAVA_LIB_PATH" ]; then
171        $echo " not found"
172        $echo
173        $echo $0: error: library path not found.
174        $echo
175        exit 1
176    fi
177
178    $echo " $NXT_JAVA_LIB_PATH"
179    $echo "got library path $NXT_JAVA_LIB_PATH" >> $NXT_AUTOCONF_ERR
180fi
181
182NXT_JAVA_LIB_SERVER_PATH="${NXT_JAVA_LIB_PATH}/server"
183
184NXT_JAVA_LDFLAGS="-L${NXT_JAVA_LIB_SERVER_PATH} -Wl,-rpath,${NXT_JAVA_LIB_SERVER_PATH} -ljvm"
185
186
187nxt_found=no
188
189nxt_feature="JNI"
190nxt_feature_name=""
191nxt_feature_run=no
192nxt_feature_incs="${NXT_JAVA_INCLUDE}"
193nxt_feature_libs="${NXT_JAVA_LDFLAGS}"
194nxt_feature_test="
195    #include <jni.h>
196
197    int main() {
198        JNI_CreateJavaVM(NULL, NULL, NULL);
199        return 0;
200    }"
201
202. auto/feature
203
204
205if [ $nxt_found = no ]; then
206    $echo
207    $echo $0: error: no JNI found.
208    $echo
209    exit 1;
210fi
211
212NXT_JAVA_VERSION=`$NXT_JAVAC -version 2>&1`
213NXT_JAVA_VERSION=${NXT_JAVA_VERSION#javac }
214NXT_JAVA_INCLUDE="$NXT_JAVA_INCLUDE -I$NXT_BUILD_DIR/$NXT_JAVA_MODULE -DNXT_JAVA_VERSION=$NXT_JAVA_VERSION"
215
216if grep ^$NXT_JAVA_MODULE: $NXT_MAKEFILE 2>&1 > /dev/null; then
217    $echo
218    $echo $0: error: duplicate \"$NXT_JAVA_MODULE\" module configured.
219    $echo
220    exit 1;
221fi
222
223. ./version
224
225NXT_UNIT_JAR=nginx-unit-jsc-${NXT_JAVA_MODULE}-$NXT_VERSION.jar
226NXT_WS_API_JAR=websocket-api-${NXT_JAVA_MODULE}-$NXT_VERSION.jar
227
228NXT_JAVA_BUILD_CP=$NXT_BUILD_DIR/$NXT_JAVA_MODULE
229NXT_JAVA_INSTALL_JARS=
230NXT_JAVA_UNINSTALL_JARS=
231
232NXT_JAVA_JARS=$NXT_BUILD_DIR/$NXT_JAVA_MODULE/nxt_jars.h
233mkdir -p $NXT_BUILD_DIR/$NXT_JAVA_MODULE
234
235cat << END > $NXT_JAVA_JARS
236#ifndef _NXT_JAVA_JARS_INCLUDED_
237#define _NXT_JAVA_JARS_INCLUDED_
238
239#define NXT_JARS "$NXT_JARS"
240
241static const char *nxt_java_system_jars[] = {
242END
243
244NXT_TOMCAT_VERSION=9.0.52
245
246NXT_JAR_VERSION=$NXT_TOMCAT_VERSION
247
248NXT_JAR_NAME=tomcat-servlet-api
249NXT_JAR_NAMESPACE=org/apache/tomcat/
250. auto/modules/java_get_jar
251
252NXT_JAR_NAME=tomcat-el-api
253. auto/modules/java_get_jar
254
255NXT_JAR_NAME=tomcat-jsp-api
256. auto/modules/java_get_jar
257
258NXT_JAR_NAME=tomcat-jasper
259. auto/modules/java_get_jar
260
261NXT_JAR_NAME=tomcat-jasper-el
262. auto/modules/java_get_jar
263
264NXT_JAR_NAME=tomcat-juli
265. auto/modules/java_get_jar
266
267NXT_JAR_NAME=tomcat-api
268. auto/modules/java_get_jar
269
270NXT_JAR_NAME=tomcat-util-scan
271. auto/modules/java_get_jar
272
273NXT_JAR_NAME=tomcat-util
274. auto/modules/java_get_jar
275
276NXT_JAR_NAME=ecj
277NXT_JAR_VERSION=3.26.0
278NXT_JAR_NAMESPACE=org/eclipse/jdt/
279. auto/modules/java_get_jar
280
281cat << END >> $NXT_JAVA_JARS
282    "$NXT_WS_API_JAR",
283    NULL
284};
285
286static const char *nxt_java_unit_jars[] = {
287    "$NXT_UNIT_JAR",
288END
289
290NXT_JAR_VERSION=9.4.43.v20210629
291NXT_JAR_NAMESPACE=org/eclipse/jetty/
292
293NXT_JAR_NAME=jetty-util
294. auto/modules/java_get_jar
295
296NXT_JAR_NAME=jetty-server
297. auto/modules/java_get_jar
298
299NXT_JAR_NAME=jetty-http
300. auto/modules/java_get_jar
301
302NXT_JAR_NAME=classgraph
303NXT_JAR_VERSION=4.8.112
304NXT_JAR_NAMESPACE=io/github/classgraph/
305. auto/modules/java_get_jar
306
307cat << END >> $NXT_JAVA_JARS
308    NULL
309};
310
311#endif /* _NXT_JAVA_JARS_INCLUDED_ */
312END
313
314NXT_JAVA_LIBJVM="$NXT_JAVA_LIB_SERVER_PATH/libjvm.so"
315
316if [ "$NXT_SYSTEM" = "Darwin" ]; then
317NXT_JAVA_LIBC_DIR="/usr/lib"
318else
319NXT_JAVA_LIBC_DIR=`ldd "$NXT_JAVA_LIBJVM" | grep -F libc. | cut -d' ' -f3`
320NXT_JAVA_LIBC_DIR=`dirname $NXT_JAVA_LIBC_DIR`
321fi
322
323
324NXT_JAVA_MOUNTS_HEADER=nxt_${NXT_JAVA_MODULE}_mounts.h
325
326cat << END > $NXT_BUILD_DIR/$NXT_JAVA_MOUNTS_HEADER
327#ifndef _NXT_JAVA_MOUNTS_H_INCLUDED_
328#define _NXT_JAVA_MOUNTS_H_INCLUDED_
329
330
331static const nxt_fs_mount_t  nxt_java_mounts[] = {
332    {(u_char *) "$NXT_JAVA_LIBC_DIR", (u_char *) "$NXT_JAVA_LIBC_DIR",
333     NXT_FS_BIND, (u_char *) "bind", 0, NULL, 1, 1},
334    {(u_char *) "$NXT_JAVA_HOME", (u_char *) "$NXT_JAVA_HOME",
335     NXT_FS_BIND, (u_char *) "bind", 0, NULL, 1, 1},
336};
337
338
339#endif /* _NXT_JAVA_MOUNTS_H_INCLUDED_ */
340END
341
342$echo " + Java module: ${NXT_JAVA_MODULE}.unit.so"
343
344. auto/cc/deps
345
346$echo >> $NXT_MAKEFILE
347
348NXT_JAVA_MODULE_SRCS=" \
349    src/nxt_java.c \
350    src/java/nxt_jni.c \
351    src/java/nxt_jni_Context.c \
352    src/java/nxt_jni_HeaderNamesEnumeration.c \
353    src/java/nxt_jni_HeadersEnumeration.c \
354    src/java/nxt_jni_InputStream.c \
355    src/java/nxt_jni_OutputStream.c \
356    src/java/nxt_jni_Request.c \
357    src/java/nxt_jni_Response.c \
358    src/java/nxt_jni_Thread.c \
359    src/java/nxt_jni_URLClassLoader.c \
360"
361
362# The Java module object files.
363
364nxt_objs=$NXT_BUILD_DIR/src/nxt_unit.o
365
366for nxt_src in $NXT_JAVA_MODULE_SRCS; do
367
368    nxt_obj=${nxt_src%.c}-$NXT_JAVA_MODULE.o
369    nxt_dep=${nxt_src%.c}-$NXT_JAVA_MODULE.dep
370    nxt_dep_flags=`nxt_gen_dep_flags`
371    nxt_dep_post=`nxt_gen_dep_post`
372    nxt_objs="$nxt_objs $NXT_BUILD_DIR/$nxt_obj"
373
374    cat << END >> $NXT_MAKEFILE
375
376$NXT_BUILD_DIR/$nxt_obj: $nxt_src $NXT_VERSION_H
377	mkdir -p $NXT_BUILD_DIR/src/java
378	\$(CC) -c \$(CFLAGS) -DNXT_JAVA_MOUNTS_H=\"$NXT_JAVA_MOUNTS_HEADER\" \\
379           \$(NXT_INCS) $NXT_JAVA_INCLUDE \\
380	$nxt_dep_flags \\
381	-o $NXT_BUILD_DIR/$nxt_obj $nxt_src
382	$nxt_dep_post
383
384-include $NXT_BUILD_DIR/$nxt_dep
385
386END
387
388done
389
390NXT_JAVA_SRCS=" \
391    src/java/nginx/unit/Context.java \
392    src/java/nginx/unit/DynamicDispatcherRequest.java \
393    src/java/nginx/unit/DynamicPathRequest.java \
394    src/java/nginx/unit/ForwardRequestWrapper.java \
395    src/java/nginx/unit/HeaderNamesEnumeration.java \
396    src/java/nginx/unit/HeadersEnumeration.java \
397    src/java/nginx/unit/IncludeRequestWrapper.java \
398    src/java/nginx/unit/IncludeResponseWrapper.java \
399    src/java/nginx/unit/InitParams.java \
400    src/java/nginx/unit/InputStream.java \
401    src/java/nginx/unit/JspPropertyGroup.java \
402    src/java/nginx/unit/OutputStream.java \
403    src/java/nginx/unit/Request.java \
404    src/java/nginx/unit/RequestAttrProxy.java \
405    src/java/nginx/unit/Response.java \
406    src/java/nginx/unit/Session.java \
407    src/java/nginx/unit/SessionAttrProxy.java \
408    src/java/nginx/unit/Taglib.java \
409    src/java/nginx/unit/UnitSessionCookieConfig.java \
410    src/java/nginx/unit/websocket/AsyncChannelGroupUtil.java \
411    src/java/nginx/unit/websocket/AsyncChannelWrapper.java \
412    src/java/nginx/unit/websocket/AsyncChannelWrapperNonSecure.java \
413    src/java/nginx/unit/websocket/AsyncChannelWrapperSecure.java \
414    src/java/nginx/unit/websocket/AuthenticationException.java \
415    src/java/nginx/unit/websocket/Authenticator.java \
416    src/java/nginx/unit/websocket/AuthenticatorFactory.java \
417    src/java/nginx/unit/websocket/BackgroundProcess.java \
418    src/java/nginx/unit/websocket/BackgroundProcessManager.java \
419    src/java/nginx/unit/websocket/BasicAuthenticator.java \
420    src/java/nginx/unit/websocket/Constants.java \
421    src/java/nginx/unit/websocket/DecoderEntry.java \
422    src/java/nginx/unit/websocket/DigestAuthenticator.java \
423    src/java/nginx/unit/websocket/FutureToSendHandler.java \
424    src/java/nginx/unit/websocket/MessageHandlerResult.java \
425    src/java/nginx/unit/websocket/MessageHandlerResultType.java \
426    src/java/nginx/unit/websocket/MessagePart.java \
427    src/java/nginx/unit/websocket/PerMessageDeflate.java \
428    src/java/nginx/unit/websocket/ReadBufferOverflowException.java \
429    src/java/nginx/unit/websocket/Transformation.java \
430    src/java/nginx/unit/websocket/TransformationFactory.java \
431    src/java/nginx/unit/websocket/TransformationResult.java \
432    src/java/nginx/unit/websocket/Util.java \
433    src/java/nginx/unit/websocket/WrappedMessageHandler.java \
434    src/java/nginx/unit/websocket/WsContainerProvider.java \
435    src/java/nginx/unit/websocket/WsExtension.java \
436    src/java/nginx/unit/websocket/WsExtensionParameter.java \
437    src/java/nginx/unit/websocket/WsFrameBase.java \
438    src/java/nginx/unit/websocket/WsFrameClient.java \
439    src/java/nginx/unit/websocket/WsHandshakeResponse.java \
440    src/java/nginx/unit/websocket/WsIOException.java \
441    src/java/nginx/unit/websocket/WsPongMessage.java \
442    src/java/nginx/unit/websocket/WsRemoteEndpointAsync.java \
443    src/java/nginx/unit/websocket/WsRemoteEndpointBase.java \
444    src/java/nginx/unit/websocket/WsRemoteEndpointBasic.java \
445    src/java/nginx/unit/websocket/WsRemoteEndpointImplBase.java \
446    src/java/nginx/unit/websocket/WsRemoteEndpointImplClient.java \
447    src/java/nginx/unit/websocket/WsSession.java \
448    src/java/nginx/unit/websocket/WsWebSocketContainer.java \
449    src/java/nginx/unit/websocket/pojo/Constants.java \
450    src/java/nginx/unit/websocket/pojo/PojoEndpointBase.java \
451    src/java/nginx/unit/websocket/pojo/PojoEndpointClient.java \
452    src/java/nginx/unit/websocket/pojo/PojoEndpointServer.java \
453    src/java/nginx/unit/websocket/pojo/PojoMessageHandlerBase.java \
454    src/java/nginx/unit/websocket/pojo/PojoMessageHandlerPartialBase.java \
455    src/java/nginx/unit/websocket/pojo/PojoMessageHandlerPartialBinary.java \
456    src/java/nginx/unit/websocket/pojo/PojoMessageHandlerPartialText.java \
457    src/java/nginx/unit/websocket/pojo/PojoMessageHandlerWholeBase.java \
458    src/java/nginx/unit/websocket/pojo/PojoMessageHandlerWholeBinary.java \
459    src/java/nginx/unit/websocket/pojo/PojoMessageHandlerWholePong.java \
460    src/java/nginx/unit/websocket/pojo/PojoMessageHandlerWholeText.java \
461    src/java/nginx/unit/websocket/pojo/PojoMethodMapping.java \
462    src/java/nginx/unit/websocket/pojo/PojoPathParam.java \
463    src/java/nginx/unit/websocket/pojo/package-info.java \
464    src/java/nginx/unit/websocket/server/Constants.java \
465    src/java/nginx/unit/websocket/server/DefaultServerEndpointConfigurator.java \
466    src/java/nginx/unit/websocket/server/UpgradeUtil.java \
467    src/java/nginx/unit/websocket/server/UriTemplate.java \
468    src/java/nginx/unit/websocket/server/WsContextListener.java \
469    src/java/nginx/unit/websocket/server/WsFilter.java \
470    src/java/nginx/unit/websocket/server/WsHandshakeRequest.java \
471    src/java/nginx/unit/websocket/server/WsHttpUpgradeHandler.java \
472    src/java/nginx/unit/websocket/server/WsMappingResult.java \
473    src/java/nginx/unit/websocket/server/WsPerSessionServerEndpointConfig.java \
474    src/java/nginx/unit/websocket/server/WsRemoteEndpointImplServer.java \
475    src/java/nginx/unit/websocket/server/WsSci.java \
476    src/java/nginx/unit/websocket/server/WsServerContainer.java \
477    src/java/nginx/unit/websocket/server/WsSessionListener.java \
478    src/java/nginx/unit/websocket/server/WsWriteTimeout.java \
479    src/java/nginx/unit/websocket/server/package-info.java \
480"
481
482NXT_JAVA_WS_API_SRCS=" \
483    src/java/javax/websocket/ClientEndpoint.java \
484    src/java/javax/websocket/ClientEndpointConfig.java \
485    src/java/javax/websocket/CloseReason.java \
486    src/java/javax/websocket/ContainerProvider.java \
487    src/java/javax/websocket/DecodeException.java \
488    src/java/javax/websocket/Decoder.java \
489    src/java/javax/websocket/DefaultClientEndpointConfig.java \
490    src/java/javax/websocket/DeploymentException.java \
491    src/java/javax/websocket/EncodeException.java \
492    src/java/javax/websocket/Encoder.java \
493    src/java/javax/websocket/Endpoint.java \
494    src/java/javax/websocket/EndpointConfig.java \
495    src/java/javax/websocket/Extension.java \
496    src/java/javax/websocket/HandshakeResponse.java \
497    src/java/javax/websocket/MessageHandler.java \
498    src/java/javax/websocket/OnClose.java \
499    src/java/javax/websocket/OnError.java \
500    src/java/javax/websocket/OnMessage.java \
501    src/java/javax/websocket/OnOpen.java \
502    src/java/javax/websocket/PongMessage.java \
503    src/java/javax/websocket/RemoteEndpoint.java \
504    src/java/javax/websocket/SendHandler.java \
505    src/java/javax/websocket/SendResult.java \
506    src/java/javax/websocket/Session.java \
507    src/java/javax/websocket/SessionException.java \
508    src/java/javax/websocket/WebSocketContainer.java \
509    src/java/javax/websocket/server/DefaultServerEndpointConfig.java \
510    src/java/javax/websocket/server/HandshakeRequest.java \
511    src/java/javax/websocket/server/PathParam.java \
512    src/java/javax/websocket/server/ServerApplicationConfig.java \
513    src/java/javax/websocket/server/ServerContainer.java \
514    src/java/javax/websocket/server/ServerEndpoint.java \
515    src/java/javax/websocket/server/ServerEndpointConfig.java \
516"
517
518cat << END >> $NXT_MAKEFILE
519
520.PHONY: ${NXT_JAVA_MODULE}
521.PHONY: ${NXT_JAVA_MODULE}-install
522.PHONY: ${NXT_JAVA_MODULE}-uninstall
523
524all: ${NXT_JAVA_MODULE}
525
526${NXT_JAVA_MODULE}: $NXT_BUILD_DIR/${NXT_JAVA_MODULE}.unit.so \
527    $NXT_BUILD_DIR/$NXT_UNIT_JAR \
528    $NXT_BUILD_DIR/$NXT_WS_API_JAR
529
530$NXT_BUILD_DIR/${NXT_JAVA_MODULE}.unit.so: $nxt_objs
531	\$(NXT_MODULE_LINK) -o $NXT_BUILD_DIR/${NXT_JAVA_MODULE}.unit.so \\
532	$nxt_objs $NXT_JAVA_LDFLAGS $NXT_LD_OPT
533
534
535install: ${NXT_JAVA_MODULE}-install
536
537${NXT_JAVA_MODULE}-install: $NXT_BUILD_DIR/${NXT_JAVA_MODULE}.unit.so \\
538    $NXT_BUILD_DIR/$NXT_UNIT_JAR \\
539    $NXT_BUILD_DIR/$NXT_WS_API_JAR \\
540    java-shared-install
541	install -d \$(DESTDIR)$NXT_MODULES
542	install -p $NXT_BUILD_DIR/${NXT_JAVA_MODULE}.unit.so \\
543		\$(DESTDIR)$NXT_MODULES/
544	install -d \$(DESTDIR)$NXT_JARS
545	install -p -m 0644 $NXT_BUILD_DIR/$NXT_UNIT_JAR \$(DESTDIR)$NXT_JARS/
546	install -p -m 0644 $NXT_BUILD_DIR/$NXT_WS_API_JAR \$(DESTDIR)$NXT_JARS/
547
548
549uninstall: ${NXT_JAVA_MODULE}-uninstall
550
551${NXT_JAVA_MODULE}-uninstall: java-shared-uninstall
552	rm -f \$(DESTDIR)$NXT_MODULES/${NXT_JAVA_MODULE}.unit.so
553	@rmdir -p \$(DESTDIR)$NXT_MODULES 2>/dev/null || true
554	rm -f \$(DESTDIR)$NXT_JARS/$NXT_UNIT_JAR
555	rm -f \$(DESTDIR)$NXT_JARS/$NXT_WS_API_JAR
556	@rmdir -p \$(DESTDIR)$NXT_JARS 2>/dev/null || true
557
558END
559
560if ! grep ^$NXT_BUILD_DIR/$NXT_UNIT_JAR: $NXT_MAKEFILE 2>&1 > /dev/null; then
561
562    cat << END >> $NXT_MAKEFILE
563
564NXT_JAVA_SRCS = $NXT_JAVA_SRCS
565
566$NXT_BUILD_DIR/$NXT_JAVA_MODULE/.nginx.unit.classes: \$(NXT_JAVA_SRCS) \\
567    $NXT_BUILD_DIR/$NXT_WS_API_JAR
568	rm -rf $NXT_BUILD_DIR/$NXT_JAVA_MODULE/nginx/unit
569	$NXT_JAVAC -d $NXT_BUILD_DIR/$NXT_JAVA_MODULE \\
570		-cp $NXT_JAVA_BUILD_CP:$NXT_BUILD_DIR/$NXT_WS_API_JAR \\
571		\$(NXT_JAVA_SRCS)
572	touch \$@
573
574$NXT_BUILD_DIR/$NXT_JAVA_MODULE/META-INF/LICENSE: LICENSE
575	mkdir -p $NXT_BUILD_DIR/$NXT_JAVA_MODULE/META-INF
576	cp -p LICENSE \$@
577
578$NXT_BUILD_DIR/$NXT_JAVA_MODULE/META-INF/NOTICE: NOTICE
579	mkdir -p $NXT_BUILD_DIR/$NXT_JAVA_MODULE/META-INF
580	cp -p NOTICE \$@
581
582$NXT_BUILD_DIR/$NXT_UNIT_JAR: \\
583    $NXT_BUILD_DIR/$NXT_JAVA_MODULE/.nginx.unit.classes \\
584    $NXT_BUILD_DIR/$NXT_JAVA_MODULE/META-INF/LICENSE \\
585    $NXT_BUILD_DIR/$NXT_JAVA_MODULE/META-INF/NOTICE
586	$NXT_JAVA_HOME/bin/jar c -C $NXT_BUILD_DIR/$NXT_JAVA_MODULE META-INF \\
587		-C $NXT_BUILD_DIR/$NXT_JAVA_MODULE nginx/unit > \$@
588
589NXT_JAVA_WS_API_SRCS = $NXT_JAVA_WS_API_SRCS
590
591$NXT_BUILD_DIR/$NXT_JAVA_MODULE/.javax.websocket.classes: \$(NXT_JAVA_WS_API_SRCS)
592	rm -rf $NXT_BUILD_DIR/$NXT_JAVA_MODULE/javax/websocket
593	$NXT_JAVAC -d $NXT_BUILD_DIR/$NXT_JAVA_MODULE -cp $NXT_JAVA_BUILD_CP \\
594		\$(NXT_JAVA_WS_API_SRCS)
595	touch \$@
596
597$NXT_BUILD_DIR/$NXT_WS_API_JAR: \\
598    $NXT_BUILD_DIR/$NXT_JAVA_MODULE/.javax.websocket.classes \\
599    $NXT_BUILD_DIR/$NXT_JAVA_MODULE/META-INF/LICENSE \\
600    $NXT_BUILD_DIR/$NXT_JAVA_MODULE/META-INF/NOTICE
601	$NXT_JAVA_HOME/bin/jar c -C $NXT_BUILD_DIR/$NXT_JAVA_MODULE META-INF \\
602		-C $NXT_BUILD_DIR/$NXT_JAVA_MODULE javax/websocket > \$@
603
604END
605
606NXT_PROPS="\
607    nginx/unit/websocket/LocalStrings.properties \
608    nginx/unit/websocket/pojo/LocalStrings.properties \
609    nginx/unit/websocket/server/LocalStrings.properties \
610"
611
612for nxt_prop in $NXT_PROPS ; do
613
614    cat << END >> $NXT_MAKEFILE
615$NXT_BUILD_DIR/$NXT_JAVA_MODULE/$nxt_prop: src/java/$nxt_prop \\
616    $NXT_BUILD_DIR/$NXT_JAVA_MODULE/.nginx.unit.classes
617	cp src/java/$nxt_prop \$@
618
619$NXT_BUILD_DIR/$NXT_UNIT_JAR: $NXT_BUILD_DIR/$NXT_JAVA_MODULE/$nxt_prop
620
621END
622
623done
624
625fi
626
627if ! grep ^java-shared-install: $NXT_MAKEFILE 2>&1 > /dev/null; then
628
629    cat << END >> $NXT_MAKEFILE
630
631.PHONY: java-shared-install
632.PHONY: java-shared-uninstall
633
634java-shared-install: $NXT_JAVA_INSTALL_JARS
635	install -d \$(DESTDIR)$NXT_JARS
636	install -p -m 0644 $NXT_JAVA_INSTALL_JARS \$(DESTDIR)$NXT_JARS/
637
638java-shared-uninstall:
639	rm -f $NXT_JAVA_UNINSTALL_JARS
640	@rmdir -p \$(DESTDIR)$NXT_JARS 2>/dev/null || true
641
642END
643
644fi
645