diff --git a/m4/ax_jni_include_dir.m4 b/m4/ax_jni_include_dir.m4 index 2d0c27ecb99e9c681c81e4be334df141e5824570..becb33a34a98bb8d91985ccae440f47532c4a878 100644 --- a/m4/ax_jni_include_dir.m4 +++ b/m4/ax_jni_include_dir.m4 @@ -11,9 +11,10 @@ # AX_JNI_INCLUDE_DIR finds include directories needed for compiling # programs using the JNI interface. # -# JNI include directories are usually in the java distribution This is -# deduced from the value of JAVAC. When this macro completes, a list of -# directories is left in the variable JNI_INCLUDE_DIRS. +# JNI include directories are usually in the Java distribution. This is +# deduced from the value of $JAVA_HOME, $JAVAC, or the path to "javac", in +# that order. When this macro completes, a list of directories is left in +# the variable JNI_INCLUDE_DIRS. # # Example usage follows: # @@ -43,76 +44,71 @@ # and this notice are preserved. This file is offered as-is, without any # warranty. - -# TSK: This has been modifed to not error out if JNI things cannot be resolved -# and to support scenarios whereby JAVAC is set to a location, but it is not -# on the path. - -#serial 7 +#serial 11 AU_ALIAS([AC_JNI_INCLUDE_DIR], [AX_JNI_INCLUDE_DIR]) AC_DEFUN([AX_JNI_INCLUDE_DIR],[ JNI_INCLUDE_DIRS="" -test "x$JAVAC" = x && AC_MSG_ERROR(['\$JAVAC' undefined]) -AC_PATH_PROG([_ACJNI_JAVAC], [$JAVAC], [no]) - -if test "x$_ACJNI_JAVAC" = xno; then - AC_MSG_NOTICE(["$JAVAC could not be found in path -- cannot resolve to JNI headers"]) +if test "x$JAVA_HOME" != x; then + _JTOPDIR="$JAVA_HOME" else - _ACJNI_FOLLOW_SYMLINKS("$_ACJNI_JAVAC") - _JTOPDIR=`echo "$_ACJNI_FOLLOWED" | sed -e 's://*:/:g' -e 's:/[[^/]]*$::'` - case "$host_os" in - darwin*) _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[[^/]]*$::'` - if test -d "$_JTOPDIR/Headers" - then - _JINC="$_JTOPDIR/Headers" - elif test -d "$_JTOPDIR/include" - then - _JINC="$_JTOPDIR/include" - fi;; + if test "x$JAVAC" = x; then + JAVAC=javac + fi + AC_PATH_PROG([_ACJNI_JAVAC], [$JAVAC], [no]) + if test "x$_ACJNI_JAVAC" = xno; then + AC_MSG_ERROR([cannot find JDK; try setting \$JAVAC or \$JAVA_HOME]) + fi + _ACJNI_FOLLOW_SYMLINKS("$_ACJNI_JAVAC") + _JTOPDIR=`echo "$_ACJNI_FOLLOWED" | sed -e 's://*:/:g' -e 's:/[[^/]]*$::'` +fi + +case "$host_os" in + darwin*) # Apple JDK is at /System location and has headers symlinked elsewhere + case "$_JTOPDIR" in + /System/Library/Frameworks/JavaVM.framework/*) + _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[[^/]]*$::'` + _JINC="$_JTOPDIR/Headers";; + *) _JINC="$_JTOPDIR/include";; + esac;; *) _JINC="$_JTOPDIR/include";; - esac - _AS_ECHO_LOG([_JTOPDIR=$_JTOPDIR]) - _AS_ECHO_LOG([_JINC=$_JINC]) +esac +_AS_ECHO_LOG([_JTOPDIR=$_JTOPDIR]) +_AS_ECHO_LOG([_JINC=$_JINC]) - # On Mac OS X 10.6.4, jni.h is a symlink: - # /System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers/jni.h - # -> ../../CurrentJDK/Headers/jni.h. - if test -f "$_JINC/jni.h" || test -L "$_JINC/jni.h"; then - JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JINC" - else - _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[[^/]]*$::'` - if test -f "$_JTOPDIR/include/jni.h"; then - JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include" - else - AC_MSG_NOTICE(["cannot find java include files"]) - fi - fi +# On Mac OS X 10.6.4, jni.h is a symlink: +# /System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers/jni.h +# -> ../../CurrentJDK/Headers/jni.h. +AC_CHECK_FILE([$_JINC/jni.h], + [JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JINC"], + [_JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[[^/]]*$::'` + AC_CHECK_FILE([$_JTOPDIR/include/jni.h], + [JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include"], + AC_MSG_ERROR([cannot find JDK header files])) + ]) - if test "x$JNI_INCLUDE_DIRS" != x; then - # get the likely subdirectories for system specific java includes - case "$host_os" in - bsdi*) _JNI_INC_SUBDIRS="bsdos";; - linux*) _JNI_INC_SUBDIRS="linux genunix";; - darwin*) _JNI_INC_SUBDIRS="darwin";; - osf*) _JNI_INC_SUBDIRS="alpha";; - solaris*) _JNI_INC_SUBDIRS="solaris";; - mingw*) _JNI_INC_SUBDIRS="win32";; - cygwin*) _JNI_INC_SUBDIRS="win32";; - *) _JNI_INC_SUBDIRS="genunix";; - esac +# get the likely subdirectories for system specific java includes +case "$host_os" in +bsdi*) _JNI_INC_SUBDIRS="bsdos";; +freebsd*) _JNI_INC_SUBDIRS="freebsd";; +darwin*) _JNI_INC_SUBDIRS="darwin";; +linux*) _JNI_INC_SUBDIRS="linux genunix";; +osf*) _JNI_INC_SUBDIRS="alpha";; +solaris*) _JNI_INC_SUBDIRS="solaris";; +mingw*) _JNI_INC_SUBDIRS="win32";; +cygwin*) _JNI_INC_SUBDIRS="win32";; +*) _JNI_INC_SUBDIRS="genunix";; +esac - # add any subdirectories that are present - for JINCSUBDIR in $_JNI_INC_SUBDIRS - do - if test -d "$_JTOPDIR/include/$JINCSUBDIR"; then +# add any subdirectories that are present +for JINCSUBDIR in $_JNI_INC_SUBDIRS +do + if test -d "$_JTOPDIR/include/$JINCSUBDIR"; then JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include/$JINCSUBDIR" - fi - done - fi -fi + fi +done ]) # _ACJNI_FOLLOW_SYMLINKS <path>