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