1AC_DEFUN([ONMS_CHECK_JDK], 2 [ 3 AC_ARG_WITH([java], 4 [AS_HELP_STRING([--with-java=JAVA_HOME], [set the path to JAVA_HOME for the JDK])], 5 [], 6 [with_java=check]) 7 8 AC_ARG_WITH([jvm-arch], 9 [AS_HELP_STRING([--with-jvm-arch=(32|64)], [set the architecture to build (default: check)])], 10 [], 11 [with_jvm_arch=none]) 12 13 AS_IF([test "x$with_java" = "xno"], [AC_MSG_ERROR([the path to a JDK is required to build jrrd])]) 14 AS_IF([test "x$with_java" = "xyes"], [AC_MSG_ERROR([the argument to --with-java must specify a JDK])]) 15 AS_IF([test "x$with_java" = "xcheck"], 16 [ONMS_FIND_JDK([$1], [$with_jvm_arch])], 17 [ONMS_VALIDATE_JDK([$with_java], [$1], [$with_jvm_arch])] 18 ) 19 20 AS_IF([test "x$HAS_JDK" = "x" || test "$HAS_JDK" = "false" || test "$HAS_JDK" = "no"], 21 [AC_MSG_ERROR([unable to find a valid JDK for java version $1])]) 22 23 AC_MSG_NOTICE([using JDK at $JAVA_HOME]) 24 25 JNI_LIB_EXTENSION=".so" 26 case $host_os in 27 darwin*) 28 JAVA_SHREXT_COMMAND="-shrext .jnilib" 29 JNI_LIB_EXTENSION=".jnilib" 30 ;; 31 mingw*) 32 JAVA_SHREXT_COMMAND="-Wl,--kill-at" 33 JNI_INCLUDES="$JNI_INCLUDES -D_JNI_IMPLEMENTATION_" 34 ;; 35 esac 36 37 AC_SUBST([JAVA_SHREXT_COMMAND]) 38 AC_SUBST([JAVA_HOME]) 39 AC_SUBST([JAVA]) 40 AC_SUBST([JAR]) 41 AC_SUBST([JAVAC]) 42 AC_SUBST([JAVAH]) 43 AC_SUBST([JNI_INCLUDES]) 44 AC_SUBST([JNI_LIB_EXTENSION]) 45 ] 46) 47 48AC_DEFUN([ONMS_FIND_JDK], 49 [ 50 AC_MSG_NOTICE([searching for a $1 JDK]) 51 52 HAS_JDK=no 53 AS_IF([test "x$JAVA_HOME" != "x"], 54 [_ONMS_TRY_JAVA_DIR([$JAVA_HOME], [$1], [AC_MSG_NOTICE([trying the value in JAVA_HOME])], [$2])] 55 ) 56 57 AC_PATH_PROG([java_from_path], [java]) 58 java_home_from_path= 59 AS_IF([test "x$java_from_path" != "x"], 60 [ 61 while test -h "$java_from_path" 62 do 63 java_from_path=`readlink $java_from_path` 64 done 65 java_home_from_path=`AS_DIRNAME("$java_from_path")` 66 java_home_from_path=`AS_DIRNAME("$java_home_from_path")` 67 _ONMS_TRY_JAVA_DIR([$java_home_from_path], [$1], [AC_MSG_NOTICE([attempting to find the JDK for $java_from_path.])], [$2]) 68 AS_UNSET([java_from_path]) 69 AS_UNSET([java_home_from_path]) 70 ] 71 ) 72 73 for java_dir in \ 74 /usr/java/default \ 75 /usr/jdk/default \ 76 /usr/jdk/* \ 77 /usr/java/* \ 78 /usr/lib/jvm/* \ 79 /System/Library/Java/JavaVirtualMachines/*/Contents/Home \ 80 /Library/Java/JavaVirtualMachines/*/Contents/Home \ 81 /Library/Java/Home \ 82 /usr/local/java 83 do 84 _ONMS_TRY_JAVA_DIR([$java_dir], [$1], [], [$2]) 85 done 86 ] 87) 88 89AC_DEFUN([_ONMS_TRY_JAVA_DIR], 90 [ 91 AS_IF([test "$HAS_JDK" = no && test -d "$1"], 92 [ 93 $3 94 ONMS_VALIDATE_JDK([$1], [$2], [$4]) 95 ] 96 ) 97 ] 98) 99 100AC_DEFUN([ONMS_VALIDATE_JDK], 101 [ 102 AC_MSG_NOTICE([checking if $1 is home for a valid $2 JDK]) 103 104 AC_ARG_ENABLE(jdk-validation, 105 [ --disable-jdk-validation don't validate the JDK 106 --enable-jdk-validation make sure the JDK is valid]) 107 108 HAS_JDK=yes 109 110 if test "x$enable_jdk_validation" != xno; then 111 112 dnl the following so HAS_JDK of they fail to pass the check 113 _ONMS_CHECK_FOR_JAVA($1) 114 _ONMS_CHECK_FOR_JAVAC($1) 115 _ONMS_CHECK_FOR_JAR($1) 116 _ONMS_CHECK_FOR_JAVAH($1) 117 _ONMS_CHECK_JAVA_VERSION($2) 118 _ONMS_CHECK_JAVA_ARCH($3) 119 _ONMS_CHECK_FOR_JNI_HEADERS($1) 120 121 AS_IF([test "$HAS_JDK" != yes], 122 [AC_MSG_NOTICE([no valid JDK found at $1])], 123 [AC_MSG_NOTICE([found a valid JDK. setting JAVA_HOME to $1]); JAVA_HOME="$1"] 124 ) 125 126 else 127 128 AC_MSG_NOTICE([JDK validation was skipped]) 129 _ONMS_CHECK_JAVA_ARCH($3) 130 _ONMS_CHECK_FOR_JNI_HEADERS($1) 131 132 fi 133 134 ] 135) 136 137AC_DEFUN([_ONMS_CHECK_FOR_JNI_HEADERS], 138 [ 139 AS_IF([test "$HAS_JDK" = yes], 140 [ 141 AC_MSG_CHECKING([for jni headers]) 142 HAS_JNI_HEADERS=yes 143 JNI_PATH="$1/include" 144 AS_IF([test -e "$JNI_PATH" && test -f "$JNI_PATH/jni.h"], 145 [ 146 JNI_INCLUDES=`printf -- "-I$JNI_PATH "; find "$JNI_PATH"/* -type d | while read DIR; do 147 printf -- "-I\$DIR " 148 done` 149 ], 150 [ dnl no include directory so invalid jdk 151 HAS_JNI_HEADERS=no 152 HAS_JDK=no 153 ] 154 ) 155 AC_MSG_RESULT([$HAS_JNI_HEADERS]) 156 ] 157 ) 158 ] 159) 160 161AC_DEFUN([_ONMS_CHECK_JAVA_VERSION], 162 [ 163 AS_IF([test "$HAS_JDK" = yes], 164 [ 165 HAS_VALID_JAVA_VERSION=yes 166 AC_MSG_CHECKING([if java version meets requirements for $1]) 167 _ONMS_CREATE_JAVA_SRC([getver], [System.out.println(System.getProperty("java.specification.version"));]) 168 _ONMS_COMPILE_SOURCE_FILE([getver.java], [tmp-classes], []) 169 _JAVA_VERSION=`"$JAVA" -cp tmp-classes getver | grep -v "Can't detect initial thread stack location"` 170 rm -rf tmp-classes 171 rm -f getver.java 172 173 AS_IF([test "x$_JAVA_VERSION" = "x" || expr "$_JAVA_VERSION" \< "$1" > /dev/null], 174 [ 175 HAS_VALID_JAVA_VERSION=no 176 HAS_JDK=no 177 ] 178 ) 179 180 AC_MSG_RESULT([$HAS_VALID_JAVA_VERSION, version is $_JAVA_VERSION]) 181 ] 182 ) 183 ] 184) 185 186AC_DEFUN([_ONMS_CHECK_JAVA_ARCH], 187 [ 188 AS_IF([test "$HAS_JDK" = yes], 189 [ 190 HAS_VALID_JAVA_ARCH=yes 191 AC_MSG_CHECKING([if java architecture meets requirements]) 192 193 if test "x$with_jvm_arch" != "xnone"; then 194 JAVA_ARCH="$with_jvm_arch" 195 else 196 _ONMS_CREATE_JAVA_SRC([getarch], [System.out.println(System.getProperty("sun.arch.data.model", "32"));]) 197 _ONMS_COMPILE_SOURCE_FILE([getarch.java], [tmp-classes], []) 198 JAVA_ARCH=`"$JAVA" -cp tmp-classes getarch | grep -v "Can't detect initial thread stack location"` 199 rm -rf tmp-classes 200 rm -f getarch.java 201 202 AS_IF([test "x$1" != "xnone" && test "$JAVA_ARCH" != "$1"], 203 [ 204 AC_MSG_CHECKING([if java architecture meets requirements with -d$1]) 205 _ONMS_CREATE_JAVA_SRC([getarch], [System.out.println(System.getProperty("sun.arch.data.model", "32"));]) 206 _ONMS_COMPILE_SOURCE_FILE([getarch.java], [tmp-classes], []) 207 JAVA_ARCH=`"$JAVA" -d$1 -cp tmp-classes getarch | grep -v "Can't detect initial thread stack location"` 208 rm -rf tmp-classes 209 rm -f getarch.java 210 211 AS_IF([test "x$1" != "xnone" && test "$JAVA_ARCH" != "$1"], 212 [ 213 HAS_VALID_JAVA_ARCH=no 214 HAS_JDK=no 215 ] 216 ) 217 ] 218 ) 219 fi 220 AC_MSG_RESULT([$HAS_VALID_JAVA_ARCH, $JAVA_ARCH-bit]) 221 AC_SUBST(JAVA_ARCH) 222 ] 223 ) 224 ] 225) 226 227AC_DEFUN([_ONMS_COMPILE_SOURCE_FILE], 228 [ 229 _JVC_FLAGS= 230 AS_IF([test "x$2" != "x"], 231 [ 232 AS_IF([test ! -d "$2"], [mkdir -p "$2"]) 233 _JVC_FLAGS="-d $2" 234 ] 235 ) 236 AS_IF([test "x$3" != "x"], 237 [ 238 _JVC_FLAGS="$_JVC_FLAGS -cp $3" 239 ] 240 ) 241 242 "$JAVAC" $_JVC_FLAGS "$1" 243 244 AS_UNSET([_JVC_FLAGS]) 245 ] 246) 247 248AC_DEFUN([_ONMS_CREATE_JAVA_SRC], 249 [ 250 cat > $1.java <<EOF 251class $1 { 252 public static void main(String args@<:@@:>@) { 253 $2 254 } 255} 256EOF 257 ] 258) 259 260AC_DEFUN([_ONMS_CHECK_FOR_JAVA], [_ONMS_CHECK_FOR_JAVA_PROG($1, [java])]) 261AC_DEFUN([_ONMS_CHECK_FOR_JAR], [_ONMS_CHECK_FOR_JAVA_PROG($1, [jar])]) 262AC_DEFUN([_ONMS_CHECK_FOR_JAVAC], [_ONMS_CHECK_FOR_JAVA_PROG($1, [javac])]) 263AC_DEFUN([_ONMS_CHECK_FOR_JAVAH], [_ONMS_CHECK_FOR_JAVA_PROG($1, [javah])]) 264 265AC_DEFUN([_ONMS_CHECK_FOR_JAVA_PROG], 266 [ 267 AS_IF([test "$HAS_JDK" = yes], 268 [ 269 HAS_VAR($2)=no 270 AC_MSG_CHECKING([if $1 has $2]) 271 AS_IF([test -x "$1/bin/$2"], [HAS_VAR($2)=yes]) 272 AC_MSG_RESULT([$HAS_VAR($2)]) 273 m4_toupper($2)="$1/bin/$2" 274 AS_IF([test "$HAS_VAR($2)" = no], [HAS_JDK=no]) 275 ] 276 ) 277 ] 278) 279 280AC_DEFUN([HAS_VAR], [HAS_@&t@m4_toupper($1)]) 281 282 283