Mercurial > hg > octave-nkf
diff configure.ac @ 15766:fafd51a1b0f0
build: Add more searching for Java libjvm.so.
On Macs, look for jni.h in a list of possible directories.
* configure.ac: Search for libjvm in JAVA_LDPATH, JAVA_BOOTPATH, and heuristic
list of directories. Search for jni.h in possible list of directories on Mac
platforms.
* build-aux/OctJavaQry.java: Add JAVA_BOOTPATH query option.
* build-aux/OctJavaQry.class: Add JAVA_BOOTPATH query option.
author | Rik <rik@octave.org> |
---|---|
date | Tue, 11 Dec 2012 14:06:09 -0800 |
parents | 56239ff815a3 |
children | eade542fedaa |
line wrap: on
line diff
--- a/configure.ac +++ b/configure.ac @@ -2254,7 +2254,7 @@ ## Find JAVA_HOME for JRE by running java and querying properties JAVA_TMP_HOME=`$JAVA -classpath ${srcdir}/build-aux OctJavaQry JAVA_HOME` ## Strip directory back to top-level installation dir (JAVA_HOME for JDK) - JAVA_HOME=`echo $JAVA_TMP_HOME | sed -e "s|/bin/\?$||" -e "s|/jre/\?$||"` + JAVA_HOME=`echo $JAVA_TMP_HOME | sed -e 's|/bin/\?$||' | sed -e 's|/jre/\?$||'` fi ## Amend search path for JAVAC and JAR. @@ -2296,28 +2296,60 @@ ;; esac + ## Determine Shared Library Extension + ## FIXME: May need dll extension for cygwin, mingw. + case $canonical_host_type in + *-*-darwin*) + shlext=dylib + ;; + *) + shlext=so + ;; + esac + + AC_MSG_CHECKING([for libjvm.${shlext}]) + ## Run Java to try and determine library path to libjvm.so. JAVA_TMP_LDPATH=`$JAVA -classpath ${srcdir}/build-aux OctJavaQry JAVA_LDPATH` - JAVA_TMP_LDPATH=`echo $JAVA_TMP_LDPATH | sed -e 's/^://' -e 's/:$//' -e 's/:/ /g'` + JAVA_TMP_LDPATH=`echo $JAVA_TMP_LDPATH | sed -e 's/:/ /g'` for dir in $JAVA_TMP_LDPATH; do - case $canonical_host_type in - *-*-darwin*) - if test -f "$dir/libjvm.dylib"; then - JAVA_LDPATH=$dir - break - fi - ;; - *) - if test -f "$dir/libjvm.so"; then - JAVA_LDPATH=$dir - break - fi - ;; - esac + if test -f "$dir/libjvm.${shlext}"; then + JAVA_LDPATH=$dir + break + fi done + if test -z "$JAVA_LDPATH"; then + ## Nothing found. Try Java again using bootpath argument. + JAVA_TMP_LDPATH=`$JAVA -classpath ${srcdir}/build-aux OctJavaQry JAVA_BOOTPATH` + JAVA_TMP_LDPATH="${JAVA_TMP_LDPATH} ${JAVA_TMP_LDPATH}/server" + for dir in $JAVA_TMP_LDPATH; do + if test -f "$dir/libjvm.${shlext}"; then + JAVA_LDPATH=$dir + break + fi + done + fi + + if test -z "$JAVA_LDPATH"; then + ## Java failed to find it's own library path. Guess wildly. + JAVA_TMP_LDPATH=`ls -d $JAVA_HOME/jre/lib/*/server` + ## Add some paths that might work on Macs. + JAVA_TMP_LDPATH="${JAVA_TMP_LDPATH} ${JAVA_HOME}/../Libraries ${JAVA_HOME}/Libraries" + for dir in $JAVA_TMP_LDPATH; do + if test -f "$dir/libjvm.${shlext}"; then + JAVA_LDPATH=$dir + break + fi + done + fi + + if test -z "$JAVA_LDPATH"; then + AC_MSG_RESULT([not found]) AC_MSG_WARN([Library libjvm not found. Octave will not be able to call Java methods.]) break + else + AC_MSG_RESULT([$JAVA_LDPATH]) fi ## Java and JVM found. Set up flags. @@ -2326,8 +2358,9 @@ ## Sneak the -framework flag into mkoctfile via LFLAGS LFLAGS="$LFLAGS -framework JavaVM" ## According to: http://developer.apple.com/unix/crossplatform.html - ## one must explicitly set the include path - JAVA_CPPFLAGS="-I${JAVA_HOME}/include" + ## one must explicitly set the include path. + ## Unfortunately, the include path keeps moving around. + JAVA_CPPFLAGS="-I${JAVA_HOME}/include -I/System/Library/Frameworks/JavaVM.framework/Home/include -I/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Headers -I/System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers" JAVA_LIBS="-framework JavaVM" ;; *-mingw* | *-cygwin*) @@ -2339,8 +2372,8 @@ ;; esac - ## Search for jni.h include file. - JNI_PATH=`echo $JAVA_CPPFLAGS | sed -e "s/-I//g"` + ## Verify jni.h include file exists. + JNI_PATH=`echo $JAVA_CPPFLAGS | sed -e 's/-I//g'` have_jni=false for dir in $JNI_PATH; do if test -f "${dir}/jni.h"; then have_jni=true; break; fi