1 2# Copyright (C) NGINX, Inc. 3 4 5shift 6 7NXT_JAVA_HOME=${JAVA_HOME-} 8NXT_JAR_REPO=http://central.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 --jars=*) NXT_JARS="$value" ;; 26 27 --help) 28 cat << END 29 30 --module=NAME set unit Java module name 31 --home=DIR set Java home directory 32 --lib-path=DIRECTORY set directory path to libjvm.so library 33 --repo=URL set Maven remote repository URL 34 default: "$NXT_JAR_REPO" 35 --local-repo=DIR set local repository directory 36 default: "$NXT_JAR_LOCAL_REPO" 37 --jars=DIR set jars install/search directory 38 39END 40 exit 0 41 ;; 42 43 *) 44 echo 45 echo $0: error: invalid Java option \"$nxt_option\" 46 echo 47 exit 1 48 ;; 49 esac 50 51done 52 53 54if [ ! -f $NXT_AUTOCONF_DATA ]; then 55 echo 56 echo Please run common $0 before configuring module \"$nxt_module\". 57 echo 58 exit 1 59fi 60 61. $NXT_AUTOCONF_DATA 62 63 64NXT_JARS=${NXT_JARS=$NXT_MODULES} 65NXT_JAVA_MODULE=${NXT_JAVA_MODULE=java} 66NXT_JAVA_LIB_PATH=${NXT_JAVA_LIB_PATH=} 67 68$echo "configuring Java module" 69$echo "configuring Java module ..." >> $NXT_AUTOCONF_ERR 70 71if [ -n "${NXT_JAVA_HOME}" ]; then 72 $echo "using java.home ${NXT_JAVA_HOME}" 73 $echo "using java.home ${NXT_JAVA_HOME}" >> $NXT_AUTOCONF_ERR 74 75 if [ ! -d "${NXT_JAVA_HOME}" ]; then 76 $echo 77 $echo $0: error: Java home directory not found. 78 $echo 79 exit 1 80 fi 81 82 NXT_JAVA="${NXT_JAVA_HOME}/bin/java" 83 84else 85 $echo -n "checking for java executable" 86 $echo "checking for java executable ..." >> $NXT_AUTOCONF_ERR 87 88 NXT_JAVA=`which java || :` 89 if [ -z "$NXT_JAVA" -o ! -x "$NXT_JAVA" ]; then 90 $echo 91 $echo $0: error: java executable not found. 92 $echo 93 exit 1 94 fi 95 96 $echo " found $NXT_JAVA" 97 $echo "found $NXT_JAVA" >> $NXT_AUTOCONF_ERR 98 99 "$NXT_JAVA" -version 100 101 $echo -n "checking java.home" 102 $echo "checking java.home ..." >> $NXT_AUTOCONF_ERR 103 104 NXT_JAVA_HOME=`$NXT_JAVA -XshowSettings 2>&1 | grep -F -e java.home | sed -e 's/^.*= //'` 105 if [ -z "$NXT_JAVA_HOME" ]; then 106 $echo 107 $echo $0: error: java.home not found. 108 $echo 109 exit 1 110 fi 111 112 $echo " $NXT_JAVA_HOME" 113 $echo "got java.home $NXT_JAVA_HOME" >> $NXT_AUTOCONF_ERR 114 115 if [ ! -x "${NXT_JAVA_HOME}/bin/javac" ]; then 116 NXT_JAVA_HOME_=${NXT_JAVA_HOME%/jre} 117 if [ -x "${NXT_JAVA_HOME_}/bin/javac" ]; then 118 $echo "adjust java.home $NXT_JAVA_HOME_" 119 $echo "adjust java.home $NXT_JAVA_HOME_" >> $NXT_AUTOCONF_ERR 120 121 NXT_JAVA_HOME="$NXT_JAVA_HOME_" 122 fi 123 fi 124fi 125 126NXT_JAVAC="${NXT_JAVA_HOME}/bin/javac" 127 128if [ ! -x "$NXT_JAVAC" ]; then 129 $echo 130 $echo $0: error: javac not found. 131 $echo 132 exit 1 133fi 134 135NXT_JAVA_INCLUDE="-I${NXT_JAVA_HOME}/include" 136 137case "$NXT_SYSTEM" in 138 Linux) 139 NXT_JAVA_INCLUDE="${NXT_JAVA_INCLUDE} -I${NXT_JAVA_HOME}/include/linux" 140 ;; 141 Darwin) 142 NXT_JAVA_INCLUDE="${NXT_JAVA_INCLUDE} -I${NXT_JAVA_HOME}/include/darwin" 143 ;; 144 FreeBSD) 145 NXT_JAVA_INCLUDE="${NXT_JAVA_INCLUDE} -I${NXT_JAVA_HOME}/include/freebsd" 146 ;; 147esac 148 149if [ -z "$NXT_JAVA_LIB_PATH" ]; then 150 $echo -n "checking library path" 151 $echo "checking library path ..." >> $NXT_AUTOCONF_ERR 152 153 if [ ! -x "$NXT_JAVA" ]; then 154 $echo 155 $echo $0: error: java executable not found. 156 $echo 157 exit 1 158 fi 159 160 NXT_JAVA_LIB_PATH=`$NXT_JAVA -XshowSettings 2>&1 | grep -F -e sun.boot.library.path | sed -e 's/^.*= //'` 161 162 if [ -z "$NXT_JAVA_LIB_PATH" ]; then 163 $echo 164 $echo $0: error: library path not found. 165 $echo 166 exit 1 167 fi 168 169 NXT_JAVA_LIB_PATH="${NXT_JAVA_LIB_PATH}/server" 170 171 $echo " $NXT_JAVA_LIB_PATH" 172 $echo "got library path $NXT_JAVA_LIB_PATH" >> $NXT_AUTOCONF_ERR 173fi 174 175NXT_JAVA_LDFLAGS="-L${NXT_JAVA_LIB_PATH} -Wl,-rpath ${NXT_JAVA_LIB_PATH} -ljvm" 176 177 178nxt_found=no 179 180nxt_feature="JNI" 181nxt_feature_name="" 182nxt_feature_run=no 183nxt_feature_incs="${NXT_JAVA_INCLUDE}" 184nxt_feature_libs="${NXT_JAVA_LDFLAGS}" 185nxt_feature_test=" 186 #include <jni.h> 187 188 int main() { 189 JNI_CreateJavaVM(NULL, NULL, NULL); 190 return 0; 191 }" 192 193. auto/feature 194 195 196if [ $nxt_found = no ]; then 197 $echo 198 $echo $0: error: no JNI found. 199 $echo 200 exit 1; 201fi 202 203NXT_JAVA_VERSION=`$NXT_JAVAC -version 2>&1` 204NXT_JAVA_VERSION=${NXT_JAVA_VERSION#javac } 205NXT_JAVA_INCLUDE="$NXT_JAVA_INCLUDE -I$NXT_BUILD_DIR/$NXT_JAVA_MODULE -DNXT_JAVA_VERSION=$NXT_JAVA_VERSION" 206 207if grep ^$NXT_JAVA_MODULE: $NXT_MAKEFILE 2>&1 > /dev/null; then 208 $echo 209 $echo $0: error: duplicate \"$NXT_JAVA_MODULE\" module configured. 210 $echo 211 exit 1; 212fi 213 214. ./version 215 216NXT_UNIT_JAR=nginx-unit-jsc-${NXT_JAVA_MODULE}-$NXT_VERSION.jar 217 218NXT_JAVA_BUILD_CP=$NXT_BUILD_DIR/$NXT_JAVA_MODULE 219NXT_JAVA_INSTALL_JARS= 220NXT_JAVA_UNINSTALL_JARS= 221 222NXT_JAVA_JARS=$NXT_BUILD_DIR/$NXT_JAVA_MODULE/nxt_jars.h 223mkdir -p $NXT_BUILD_DIR/$NXT_JAVA_MODULE 224 225cat << END > $NXT_JAVA_JARS 226#ifndef _NXT_JAVA_JARS_INCLUDED_ 227#define _NXT_JAVA_JARS_INCLUDED_ 228 229#define NXT_JARS "$NXT_JARS" 230 231static const char *nxt_java_system_jars[] = { 232END 233 234NXT_TOMCAT_VERSION=9.0.13 235 236NXT_JAR_VERSION=$NXT_TOMCAT_VERSION 237 238NXT_JAR_NAME=tomcat-servlet-api 239NXT_JAR_NAMESPACE=org/apache/tomcat/ 240. auto/modules/java_get_jar 241 242NXT_JAR_NAME=tomcat-el-api 243. auto/modules/java_get_jar 244 245NXT_JAR_NAME=tomcat-jsp-api 246. auto/modules/java_get_jar 247 248NXT_JAR_NAME=tomcat-jasper 249. auto/modules/java_get_jar 250 251NXT_JAR_NAME=tomcat-jasper-el 252. auto/modules/java_get_jar 253 254NXT_JAR_NAME=tomcat-juli 255. auto/modules/java_get_jar 256 257NXT_JAR_NAME=tomcat-api 258. auto/modules/java_get_jar 259 260NXT_JAR_NAME=tomcat-util-scan 261. auto/modules/java_get_jar 262 263NXT_JAR_NAME=tomcat-util 264. auto/modules/java_get_jar 265 266NXT_JAR_NAME=ecj 267NXT_JAR_VERSION=3.13.102 268NXT_JAR_NAMESPACE=org/eclipse/jdt/ 269. auto/modules/java_get_jar 270 271cat << END >> $NXT_JAVA_JARS 272 NULL 273}; 274 275static const char *nxt_java_unit_jars[] = { 276 "$NXT_UNIT_JAR", 277END 278 279NXT_JAR_VERSION=9.4.12.v20180830 280NXT_JAR_NAMESPACE=org/eclipse/jetty/ 281 282NXT_JAR_NAME=jetty-util 283. auto/modules/java_get_jar 284 285NXT_JAR_NAME=jetty-server 286. auto/modules/java_get_jar 287 288NXT_JAR_NAME=jetty-http 289. auto/modules/java_get_jar 290 291NXT_JAR_NAME=classgraph 292NXT_JAR_VERSION=4.4.11 293NXT_JAR_NAMESPACE=io/github/classgraph/ 294. auto/modules/java_get_jar 295 296cat << END >> $NXT_JAVA_JARS 297 NULL 298}; 299 300#endif /* _NXT_JAVA_JARS_INCLUDED_ */ 301END 302 303$echo " + Java module: ${NXT_JAVA_MODULE}.unit.so" 304 305. auto/cc/deps 306 307$echo >> $NXT_MAKEFILE 308 309NXT_JAVA_MODULE_SRCS=" \ 310 src/nxt_java.c \ 311 src/java/nxt_jni.c \ 312 src/java/nxt_jni_Context.c \ 313 src/java/nxt_jni_HeaderNamesEnumeration.c \ 314 src/java/nxt_jni_HeadersEnumeration.c \ 315 src/java/nxt_jni_InputStream.c \ 316 src/java/nxt_jni_OutputStream.c \ 317 src/java/nxt_jni_Request.c \ 318 src/java/nxt_jni_Response.c \ 319 src/java/nxt_jni_Thread.c \ 320 src/java/nxt_jni_URLClassLoader.c \ 321" 322 323# The Java module object files. 324 325nxt_objs=$NXT_BUILD_DIR/src/nxt_unit.o 326 327for nxt_src in $NXT_JAVA_MODULE_SRCS; do 328 329 nxt_obj=${nxt_src%.c}-$NXT_JAVA_MODULE.o 330 nxt_dep=${nxt_src%.c}-$NXT_JAVA_MODULE.dep 331 nxt_dep_flags=`nxt_gen_dep_flags` 332 nxt_dep_post=`nxt_gen_dep_post` 333 nxt_objs="$nxt_objs $NXT_BUILD_DIR/$nxt_obj" 334 335 cat << END >> $NXT_MAKEFILE 336 337$NXT_BUILD_DIR/$nxt_obj: $nxt_src 338 mkdir -p $NXT_BUILD_DIR/src/java 339 \$(CC) -c \$(CFLAGS) \$(NXT_INCS) $NXT_JAVA_INCLUDE \\ 340 $nxt_dep_flags \\ 341 -o $NXT_BUILD_DIR/$nxt_obj $nxt_src 342 $nxt_dep_post 343 344-include $NXT_BUILD_DIR/$nxt_dep 345 346END 347 348done 349 350NXT_JAVA_SRCS=" \ 351 src/java/nginx/unit/Context.java \ 352 src/java/nginx/unit/DynamicDispatcherRequest.java \ 353 src/java/nginx/unit/DynamicPathRequest.java \ 354 src/java/nginx/unit/ForwardRequestWrapper.java \ 355 src/java/nginx/unit/HeaderNamesEnumeration.java \ 356 src/java/nginx/unit/HeadersEnumeration.java \ 357 src/java/nginx/unit/IncludeRequestWrapper.java \ 358 src/java/nginx/unit/IncludeResponseWrapper.java \ 359 src/java/nginx/unit/InitParams.java \ 360 src/java/nginx/unit/InputStream.java \ 361 src/java/nginx/unit/JspPropertyGroup.java \ 362 src/java/nginx/unit/OutputStream.java \ 363 src/java/nginx/unit/Request.java \ 364 src/java/nginx/unit/RequestAttrProxy.java \ 365 src/java/nginx/unit/Response.java \ 366 src/java/nginx/unit/Session.java \ 367 src/java/nginx/unit/SessionAttrProxy.java \ 368 src/java/nginx/unit/Taglib.java \ 369 src/java/nginx/unit/UnitSessionCookieConfig.java \ 370" 371 372cat << END >> $NXT_MAKEFILE 373 374.PHONY: ${NXT_JAVA_MODULE} 375.PHONY: ${NXT_JAVA_MODULE}-install 376.PHONY: ${NXT_JAVA_MODULE}-uninstall 377 378all: ${NXT_JAVA_MODULE} 379 380${NXT_JAVA_MODULE}: $NXT_BUILD_DIR/${NXT_JAVA_MODULE}.unit.so \ 381 $NXT_BUILD_DIR/$NXT_UNIT_JAR 382 383$NXT_BUILD_DIR/${NXT_JAVA_MODULE}.unit.so: $nxt_objs 384 \$(NXT_MODULE_LINK) -o $NXT_BUILD_DIR/${NXT_JAVA_MODULE}.unit.so \\ 385 $nxt_objs $NXT_JAVA_LDFLAGS $NXT_LD_OPT 386 387 388install: ${NXT_JAVA_MODULE}-install 389 390${NXT_JAVA_MODULE}-install: $NXT_BUILD_DIR/${NXT_JAVA_MODULE}.unit.so \\ 391 $NXT_BUILD_DIR/$NXT_UNIT_JAR java-shared-install 392 install -d \$(DESTDIR)$NXT_MODULES 393 install -p $NXT_BUILD_DIR/${NXT_JAVA_MODULE}.unit.so \\ 394 \$(DESTDIR)$NXT_MODULES/ 395 install -d \$(DESTDIR)$NXT_JARS 396 install -p -m 0644 $NXT_BUILD_DIR/$NXT_UNIT_JAR \$(DESTDIR)$NXT_JARS/ 397 398 399uninstall: ${NXT_JAVA_MODULE}-uninstall 400 401${NXT_JAVA_MODULE}-uninstall: java-shared-uninstall 402 rm -f \$(DESTDIR)$NXT_MODULES/${NXT_JAVA_MODULE}.unit.so 403 @rmdir -p \$(DESTDIR)$NXT_MODULES 2>/dev/null || true 404 rm -f \$(DESTDIR)$NXT_JARS/$NXT_UNIT_JAR 405 @rmdir -p \$(DESTDIR)$NXT_JARS 2>/dev/null || true 406 407END 408 409if ! grep ^$NXT_BUILD_DIR/$NXT_UNIT_JAR: $NXT_MAKEFILE 2>&1 > /dev/null; then 410 411 cat << END >> $NXT_MAKEFILE 412 413.INTERMEDIATE: $NXT_BUILD_DIR/$NXT_JAVA_MODULE/.classes 414 415NXT_JAVA_SRCS = $NXT_JAVA_SRCS 416 417$NXT_BUILD_DIR/$NXT_JAVA_MODULE/.classes: \$(NXT_JAVA_SRCS) 418 rm -rf $NXT_BUILD_DIR/$NXT_JAVA_MODULE/nginx 419 $NXT_JAVAC -d $NXT_BUILD_DIR/$NXT_JAVA_MODULE -cp $NXT_JAVA_BUILD_CP \\ 420 \$(NXT_JAVA_SRCS) 421 422$NXT_BUILD_DIR/$NXT_JAVA_MODULE/META-INF/LICENSE: LICENSE 423 mkdir -p $NXT_BUILD_DIR/$NXT_JAVA_MODULE/META-INF 424 cp -p LICENSE \$@ 425 426$NXT_BUILD_DIR/$NXT_JAVA_MODULE/META-INF/NOTICE: NOTICE 427 mkdir -p $NXT_BUILD_DIR/$NXT_JAVA_MODULE/META-INF 428 cp -p NOTICE \$@ 429 430 431$NXT_BUILD_DIR/$NXT_UNIT_JAR: $NXT_BUILD_DIR/$NXT_JAVA_MODULE/.classes \\ 432 $NXT_BUILD_DIR/$NXT_JAVA_MODULE/META-INF/LICENSE \\ 433 $NXT_BUILD_DIR/$NXT_JAVA_MODULE/META-INF/NOTICE 434 $NXT_JAVA_HOME/bin/jar c -C $NXT_BUILD_DIR/$NXT_JAVA_MODULE META-INF \\ 435 -C $NXT_BUILD_DIR/$NXT_JAVA_MODULE nginx/unit > \$@ 436 437END 438 439fi 440 441if ! grep ^java-shared-install: $NXT_MAKEFILE 2>&1 > /dev/null; then 442 443 cat << END >> $NXT_MAKEFILE 444 445.PHONY: java-shared-install 446.PHONY: java-shared-uninstall 447 448java-shared-install: $NXT_JAVA_INSTALL_JARS 449 install -d \$(DESTDIR)$NXT_JARS 450 install -p -m 0644 $NXT_JAVA_INSTALL_JARS \$(DESTDIR)$NXT_JARS/ 451 452java-shared-uninstall: 453 rm -f $NXT_JAVA_UNINSTALL_JARS 454 @rmdir -p \$(DESTDIR)$NXT_JARS 2>/dev/null || true 455 456END 457 458fi 459