summaryrefslogtreecommitdiff
path: root/build/ac-macros/java.m4
diff options
context:
space:
mode:
Diffstat (limited to 'build/ac-macros/java.m4')
-rw-r--r--build/ac-macros/java.m4215
1 files changed, 215 insertions, 0 deletions
diff --git a/build/ac-macros/java.m4 b/build/ac-macros/java.m4
new file mode 100644
index 0000000..9ef4015
--- /dev/null
+++ b/build/ac-macros/java.m4
@@ -0,0 +1,215 @@
+dnl ===================================================================
+dnl Licensed to the Apache Software Foundation (ASF) under one
+dnl or more contributor license agreements. See the NOTICE file
+dnl distributed with this work for additional information
+dnl regarding copyright ownership. The ASF licenses this file
+dnl to you under the Apache License, Version 2.0 (the
+dnl "License"); you may not use this file except in compliance
+dnl with the License. You may obtain a copy of the License at
+dnl
+dnl http://www.apache.org/licenses/LICENSE-2.0
+dnl
+dnl Unless required by applicable law or agreed to in writing,
+dnl software distributed under the License is distributed on an
+dnl "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+dnl KIND, either express or implied. See the License for the
+dnl specific language governing permissions and limitations
+dnl under the License.
+dnl ===================================================================
+dnl
+dnl java.m4: Locates the JDK and its include files and libraries.
+dnl
+
+AC_DEFUN(SVN_CHECK_JDK,
+[
+ JAVA_OLDEST_WORKING_VER="$1"
+ AC_ARG_WITH(jdk,
+ AS_HELP_STRING([--with-jdk=PATH],
+ [Try to use 'PATH/include' to find the JNI
+ headers. If PATH is not specified, look
+ for a Java Development Kit at JAVA_HOME.]),
+ [
+ case "$withval" in
+ "no")
+ JDK_SUITABLE=no
+ ;;
+ "yes")
+ SVN_FIND_JDK(check, $JAVA_OLDEST_WORKING_VER)
+ ;;
+ *)
+ SVN_FIND_JDK($withval, $JAVA_OLDEST_WORKING_VER)
+ ;;
+ esac
+ ],
+ [
+ SVN_FIND_JDK(check, $JAVA_OLDEST_WORKING_VER)
+ ])
+])
+
+AC_DEFUN(SVN_FIND_JDK,
+[
+ where=$1
+ JAVA_OLDEST_WORKING_VER="$2"
+
+ JDK=none
+ JAVA_BIN=none
+ JAVADOC=none
+ JAVAC=none
+ JAVAH=none
+ JAR=none
+ JNI_INCLUDES=none
+
+ JDK_SUITABLE=no
+ AC_MSG_CHECKING([for JDK])
+ if test $where = check; then
+ dnl Prefer /Library/Java/Home first to try to be nice on Darwin.
+ dnl We'll correct later if we get caught in the tangled web of JAVA_HOME.
+ if test -x "$JAVA_HOME/bin/java"; then
+ JDK="$JAVA_HOME"
+ elif test -x "/Library/Java/Home/bin/java"; then
+ JDK="/Library/Java/Home"
+ elif test -x "/usr/bin/java"; then
+ JDK="/usr"
+ elif test -x "/usr/local/bin/java"; then
+ JDK="/usr/local"
+ fi
+ else
+ JDK=$where
+ fi
+
+ dnl Correct for Darwin's odd JVM layout. Ideally, we should use realpath,
+ dnl but Darwin doesn't have that utility. /usr/bin/java is a symlink into
+ dnl /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Commands
+ dnl See http://developer.apple.com/qa/qa2001/qa1170.html
+ os_arch="`uname`"
+ if test "$os_arch" = "Darwin"; then
+ OSX_VER=`/usr/bin/sw_vers | grep ProductVersion | cut -f2 | cut -d"." -f1,2`
+
+ if test "$OSX_VER" = "10.4"; then
+ dnl For OS X 10.4, the SDK version is 10.4u instead of 10.4.
+ OSX_VER="10.4u"
+ fi
+
+ OSX_SYS_JAVA_FRAMEWORK="/System/Library/Frameworks/JavaVM.framework"
+ OSX_SDK_JAVA_FRAMEWORK="/Developer/SDKs/MacOSX$OSX_VER.sdk/System/Library"
+ OSX_SDK_JAVA_FRAMEWORK="$OSX_SDK_JAVA_FRAMEWORK/Frameworks/JavaVM.framework"
+ fi
+
+ if test "$os_arch" = "Darwin" && test "$JDK" = "/usr" &&
+ test -d "/Library/Java/Home"; then
+ JDK="/Library/Java/Home"
+ fi
+
+ if test "$os_arch" = "Darwin" && test "$JDK" = "/Library/Java/Home"; then
+ JRE_LIB_DIR="$OSX_SYS_JAVA_FRAMEWORK/Classes"
+ else
+ JRE_LIB_DIR="$JDK/jre/lib"
+ fi
+
+ if test -f "$JDK/include/jni.h"; then
+ dnl This *must* be fully expanded, or we'll have problems later in find.
+ JNI_INCLUDEDIR="$JDK/include"
+ JDK_SUITABLE=yes
+ elif test "$os_arch" = "Darwin" && test -e "$JDK/Headers/jni.h"; then
+ dnl Search the Headers directory in the JDK
+ JNI_INCLUDEDIR="$JDK/Headers"
+ JDK_SUITABLE=yes
+ elif test "$os_arch" = "Darwin" &&
+ test -e "$OSX_SYS_JAVA_FRAMEWORK/Headers/jni.h"; then
+ dnl Search the System framework's Headers directory
+ JNI_INCLUDEDIR="$OSX_SYS_JAVA_FRAMEWORK/Headers"
+ JDK_SUITABLE=yes
+ elif test "$os_arch" = "Darwin" &&
+ test -e "$OSX_SDK_JAVA_FRAMEWORK/Headers/jni.h"; then
+ dnl Search the SDK's System framework's Headers directory
+ JNI_INCLUDEDIR="$OSX_SDK_JAVA_FRAMEWORK/Headers"
+ JDK_SUITABLE=yes
+ else
+ JDK_SUITABLE=no
+ fi
+ if test "$JDK_SUITABLE" = "yes"; then
+ AC_MSG_RESULT([$JNI_INCLUDEDIR/jni.h])
+ else
+ AC_MSG_RESULT([no])
+ if test "$where" != "check"; then
+ AC_MSG_WARN([no JNI header files found.])
+ if test "$os_arch" = "Darwin"; then
+ AC_MSG_WARN([You may need to install the latest Java Development package from http://connect.apple.com/. Apple no longer includes the JNI header files by default on Java updates.])
+ fi
+ fi
+ fi
+
+ if test "$JDK_SUITABLE" = "yes"; then
+ JAVA_BIN='$(JDK)/bin'
+
+ JAVA="$JAVA_BIN/java"
+ JAVAC="$JAVA_BIN/javac"
+ JAVAH="$JAVA_BIN/javah"
+ JAVADOC="$JAVA_BIN/javadoc"
+ JAR="$JAVA_BIN/jar"
+
+ dnl Prefer Jikes (for speed) if available.
+ jikes_options="/usr/local/bin/jikes /usr/bin/jikes"
+ AC_ARG_WITH(jikes,
+ AS_HELP_STRING([--with-jikes=PATH],
+ [Specify the path to a jikes binary to use
+ it as your Java compiler. The default is to
+ look for jikes (PATH optional). This behavior
+ can be switched off by supplying 'no'.]),
+ [
+ if test "$withval" != "no" && test "$withval" != "yes"; then
+ dnl Assume a path was provided.
+ jikes_options="$withval $jikes_options"
+ fi
+ requested_jikes="$withval" # will be 'yes' if path unspecified
+ ])
+ if test "$requested_jikes" != "no"; then
+ dnl Look for a usable jikes binary.
+ for jikes in $jikes_options; do
+ if test -z "$jikes_found" && test -x "$jikes"; then
+ jikes_found="yes"
+ JAVAC="$jikes"
+ JAVA_CLASSPATH="$JRE_LIB_DIR"
+ for jar in $JRE_LIB_DIR/*.jar; do
+ JAVA_CLASSPATH="$JAVA_CLASSPATH:$jar"
+ done
+ fi
+ done
+ fi
+ if test -n "$requested_jikes" && test "$requested_jikes" != "no"; then
+ dnl Jikes was explicitly requested. Verify that it was provided.
+ if test -z "$jikes_found"; then
+ AC_MSG_ERROR([Could not find a usable version of Jikes])
+ elif test -n "$jikes_found" && test "$requested_jikes" != "yes" &&
+ test "$JAVAC" != "$requested_jikes"; then
+ AC_MSG_WARN([--with-jikes PATH was invalid, substitute found])
+ fi
+ fi
+
+ dnl Add javac flags.
+ # The release for "-source" could actually be greater than that
+ # of "-target", if we want to cross-compile for lesser JVMs.
+ if test -z "$JAVAC_FLAGS"; then
+ JAVAC_FLAGS="-target $JAVA_OLDEST_WORKING_VER -source 1.5"
+ if test "$enable_debugging" = "yes"; then
+ JAVAC_FLAGS="-g -Xlint:unchecked $JAVAC_FLAGS"
+ fi
+ fi
+
+ JNI_INCLUDES="-I$JNI_INCLUDEDIR"
+ list="`find "$JNI_INCLUDEDIR" -type d -print`"
+ for dir in $list; do
+ JNI_INCLUDES="$JNI_INCLUDES -I$dir"
+ done
+ fi
+
+ dnl We use JDK in the Makefile
+ AC_SUBST(JDK)
+ AC_SUBST(JAVA)
+ AC_SUBST(JAVAC)
+ AC_SUBST(JAVAC_FLAGS)
+ AC_SUBST(JAVADOC)
+ AC_SUBST(JAVAH)
+ AC_SUBST(JAR)
+ AC_SUBST(JNI_INCLUDES)
+])