comparison configure.ac @ 15763:56239ff815a3

build: Overhaul auto-detection of Java when JAVA_HOME is not set. * build-aux/OctJavaQry.class: Compiled code to help configure determine installation directories. Exported in tarball. * build-aux/OctJavaQry.java: Java code to help configure determine installation directories. * Makefile.am: Export OctJavaQry.class code in tarball. * configure.ac: If JAVA_HOME is unset, attempt to find a Java executable. Use java executable and Java code to try and determine necessary directories. * libinterp/octave-value/ov-java.cc: Use JAVA_LDPATH variable to find libjvm.
author Rik <rik@octave.org>
date Mon, 10 Dec 2012 13:15:08 -0800
parents 9f3656ada658
children fafd51a1b0f0
comparison
equal deleted inserted replaced
15762:a5475ba0d199 15763:56239ff815a3
2219 []) 2219 [])
2220 2220
2221 HAVE_JAVA=no 2221 HAVE_JAVA=no
2222 ## Grab JAVA_HOME from environment variable if it exists 2222 ## Grab JAVA_HOME from environment variable if it exists
2223 AC_ARG_VAR([JAVA_HOME], [path to Java JDK installation]) 2223 AC_ARG_VAR([JAVA_HOME], [path to Java JDK installation])
2224 JAVA_ARCH= 2224 JAVA_LDPATH=
2225 JAVA=
2225 JAVAC= 2226 JAVAC=
2226 JAR= 2227 JAR=
2227 JAVA_CPPFLAGS= 2228 JAVA_CPPFLAGS=
2228 JAVA_LIBS= 2229 JAVA_LIBS=
2229 2230
2230 if test $build_java = true; then 2231 ## Fake loop so that "break" can be used to skip code blocks
2231 2232 while test $build_java = true
2232 warn_java= 2233 do
2233 2234 ## Warn if JAVA_HOME is unset. It is *strongly* advised to specify JAVA_HOME.
2234 if test -z "$JAVA_HOME"; then 2235 if test -z "$JAVA_HOME"; then
2235 AC_MSG_WARN([JAVA_HOME environment variable not initialized.]) 2236 AC_MSG_WARN([JAVA_HOME environment variable not initialized.])
2236 AC_MSG_WARN([Auto-detection will proceed but is unreliable.]) 2237 AC_MSG_WARN([Auto-detection will proceed but is unreliable.])
2237 fi 2238 fi
2238 2239
2240 ## Search for a viable Java executable
2239 if test -z "$JAVA_HOME"; then 2241 if test -z "$JAVA_HOME"; then
2240 AC_CHECK_PROG(JAVA, java, java) 2242 JAVA_PATH=$PATH
2241 AC_CHECK_PROG(JAVAC, javac, javac)
2242 AC_CHECK_PROG(JAR, jar, jar)
2243 else 2243 else
2244 AC_PATH_PROG(JAVA, java, [], [$JAVA_HOME/bin$PATH_SEPARATOR$PATH]) 2244 JAVA_PATH=${JAVA_HOME}$PATH_SEPARATOR${JAVA_HOME}/jre/bin$PATH_SEPARATOR${JAVA_HOME}/bin$PATH_SEPARATOR${JAVA_HOME}/../bin$PATH_SEPARATOR${PATH}
2245 AC_PATH_PROG(JAVAC, javac, [], [$JAVA_HOME/bin$PATH_SEPARATOR$PATH]) 2245 fi
2246 AC_PATH_PROG(JAR, jar, [], [$JAVA_HOME/bin$PATH_SEPARATOR$PATH]) 2246 AC_PATH_PROG(JAVA, java, [], [$JAVA_PATH])
2247 fi 2247
2248 if test -n "$JAVAC" && test -n "$JAR"; then 2248 if test -z "$JAVA"; then
2249 AC_MSG_CHECKING([for Java version]) 2249 AC_MSG_WARN([No Java executable found. Octave will not be able to call Java methods.])
2250 java_version=[`$JAVA -version 2>&1 | sed -n -e 's/^java version[^0-9"]*"\([^"]*\)"/\1/p'`] 2250 break
2251 AC_MSG_RESULT($java_version) 2251 fi
2252 java_major=[`echo $java_version | sed -e 's/^\([0-9][0-9]*\)\.\([0-9][0-9]*\)\..*$/\1/'`] 2252
2253 java_minor=[`echo $java_version | sed -e 's/^\([0-9][0-9]*\)\.\([0-9][0-9]*\)\..*$/\2/'`] 2253 if test -z "$JAVA_HOME"; then
2254 if test $java_major -ge 1 && test $java_minor -ge 5; then 2254 ## Find JAVA_HOME for JRE by running java and querying properties
2255 case $canonical_host_type in 2255 JAVA_TMP_HOME=`$JAVA -classpath ${srcdir}/build-aux OctJavaQry JAVA_HOME`
2256 *-msdosmsvc*) 2256 ## Strip directory back to top-level installation dir (JAVA_HOME for JDK)
2257 HAVE_JAVA=yes 2257 JAVA_HOME=`echo $JAVA_TMP_HOME | sed -e "s|/bin/\?$||" -e "s|/jre/\?$||"`
2258 JAVA_LIBS=-ladvapi32 2258 fi
2259 ;; 2259
2260 *-*-darwin*) 2260 ## Amend search path for JAVAC and JAR.
2261 if test -z "$JAVA_HOME"; then 2261 if test -z JAVA_HOME; then
2262 ## This is the location of Java on an OS X box. In this 2262 JAVA_PATH=$PATH
2263 ## directory we can find the various versions of a JavaVMs. 2263 else
2264 ## Check for the newest version set the JAVA_HOME variable. 2264 JAVA_PATH=${JAVA_HOME}$PATH_SEPARATOR${JAVA_HOME}/bin$PATH_SEPARATOR${JAVA_HOME}/../bin$PATH_SEPARATOR${PATH}
2265 if test -d "/System/Library/Frameworks/JavaVM.framework"; then 2265 fi
2266 JAVA_TEMP="/System/Library/Frameworks/JavaVM.framework" 2266
2267 JAVA_HOME="${JAVA_TEMP}/Home" 2267 AC_PATH_PROG(JAVAC, javac, [], [$JAVA_PATH])
2268 JAVA_ARCH="${JAVA_TEMP}/Libraries/libjvm_compat.dylib" 2268 AC_PATH_PROG(JAR, jar, [], [$JAVA_PATH])
2269 fi 2269
2270 fi 2270 if test -z "$JAVAC" || test -z "$JAR"; then
2271 JAVA_HOME=[`echo $JAVA_HOME | sed -e 's|/$||'`] 2271 AC_MSG_WARN([No javac compiler or jar executable found. Octave will not be able to call Java methods.])
2272 if test -z "$JAVA_ARCH"; then 2272 break
2273 if test -d "${JAVA_HOME}/jre/lib/mac"; then 2273 fi
2274 JAVA_ARCH="mac" 2274
2275 elif test -d "${JAVA_HOME}/jre/lib/maci"; then 2275 ## Check Java version is recent enough.
2276 JAVA_ARCH="maci" 2276 AC_MSG_CHECKING([for Java version])
2277 fi 2277 java_version=[`$JAVA -version 2>&1 | sed -n -e 's/^java version[^0-9"]*"\([^"]*\)"/\1/p'`]
2278 fi 2278 AC_MSG_RESULT($java_version)
2279 if test -n "$JAVA_ARCH"; then 2279 java_major=[`echo $java_version | sed -e 's/^\([0-9][0-9]*\)\.\([0-9][0-9]*\)\..*$/\1/'`]
2280 HAVE_JAVA=yes 2280 java_minor=[`echo $java_version | sed -e 's/^\([0-9][0-9]*\)\.\([0-9][0-9]*\)\..*$/\2/'`]
2281 ## Sneak the -framework flag into mkoctfile via LFLAGS 2281 if test $java_major -ge 1 && test $java_minor -ge 5; then
2282 LFLAGS="$LFLAGS -framework JavaVM" 2282 : # Version is ok. Do nothing.
2283 ## According to: http://developer.apple.com/unix/crossplatform.html 2283 else
2284 ## one must explicitly set the include path 2284 AC_MSG_WARN([Java version is too old (< 1.5). Octave will not be able to call Java methods.])
2285 JAVA_CPPFLAGS="-I${JAVA_HOME}/include" 2285 break
2286 JAVA_LIBS="-framework JavaVM" 2286 fi
2287 fi 2287
2288 ;; 2288 ## At this point Win32 systems have enough configuration data.
2289 *) 2289 case $canonical_host_type in
2290 if test -z "$JAVA_HOME"; then 2290 *-msdosmsvc*)
2291 ## This is the Debian default path 2291 HAVE_JAVA=yes
2292 if test -d "/usr/lib/jvm/default-java"; then 2292 JAVA_LIBS=-ladvapi32
2293 JAVA_HOME=/usr/lib/jvm/default-java 2293 AC_DEFINE(HAVE_JAVA, 1,
2294 ## This is the path of java 6 on debian 2294 [Define to 1 if Java is available and is at least version 1.5])
2295 elif test -d "/usr/lib/jvm/java-6-sun"; then 2295 break
2296 JAVA_HOME=//usr/lib/jvm/java-6-sun 2296 ;;
2297 else 2297 esac
2298 JAVA_HOME=/usr/lib/jvm 2298
2299 fi 2299 ## Run Java to try and determine library path to libjvm.so.
2300 fi 2300 JAVA_TMP_LDPATH=`$JAVA -classpath ${srcdir}/build-aux OctJavaQry JAVA_LDPATH`
2301 JAVA_HOME=[`echo $JAVA_HOME | sed -e 's|/$||'`] 2301 JAVA_TMP_LDPATH=`echo $JAVA_TMP_LDPATH | sed -e 's/^://' -e 's/:$//' -e 's/:/ /g'`
2302 if test -z "$JAVA_ARCH"; then 2302 for dir in $JAVA_TMP_LDPATH; do
2303 if test -d "${JAVA_HOME}/jre/lib/i386"; then 2303 case $canonical_host_type in
2304 JAVA_ARCH="i386"; 2304 *-*-darwin*)
2305 elif test -d "${JAVA_HOME}/jre/lib/amd64"; then 2305 if test -f "$dir/libjvm.dylib"; then
2306 JAVA_ARCH="amd64" 2306 JAVA_LDPATH=$dir
2307 elif test -d "${JAVA_HOME}/jre/lib/solaris"; then 2307 break
2308 JAVA_ARCH="solaris" 2308 fi
2309 elif test -d "${JAVA_HOME}/jre/lib/solarisv9"; then 2309 ;;
2310 JAVA_ARCH="solarisv9" 2310 *)
2311 fi 2311 if test -f "$dir/libjvm.so"; then
2312 fi 2312 JAVA_LDPATH=$dir
2313 if test -n "$JAVA_ARCH"; then 2313 break
2314 HAVE_JAVA=yes 2314 fi
2315 case $canonical_host_type in 2315 ;;
2316 *-mingw* | *-cygwin*) 2316 esac
2317 JAVA_CPPFLAGS="-I${JAVA_HOME}/include -I${JAVA_HOME}/include/win32" 2317 done
2318 JAVA_LIBS=-ladvapi32 2318 if test -z "$JAVA_LDPATH"; then
2319 ;; 2319 AC_MSG_WARN([Library libjvm not found. Octave will not be able to call Java methods.])
2320 *) 2320 break
2321 JAVA_CPPFLAGS="-I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux" 2321 fi
2322 ;; 2322
2323 esac 2323 ## Java and JVM found. Set up flags.
2324 fi 2324 case $canonical_host_type in
2325 ;; 2325 *-*-darwin*)
2326 esac 2326 ## Sneak the -framework flag into mkoctfile via LFLAGS
2327 if test $HAVE_JAVA = yes; then 2327 LFLAGS="$LFLAGS -framework JavaVM"
2328 AC_DEFINE(HAVE_JAVA, 1, 2328 ## According to: http://developer.apple.com/unix/crossplatform.html
2329 [Define to 1 if Java is available and is at least version 1.5]) 2329 ## one must explicitly set the include path
2330 fi 2330 JAVA_CPPFLAGS="-I${JAVA_HOME}/include"
2331 else 2331 JAVA_LIBS="-framework JavaVM"
2332 warn_java="Java 1.5 or later not found. Octave will not be able to call Java methods." 2332 ;;
2333 fi 2333 *-mingw* | *-cygwin*)
2334 fi 2334 JAVA_CPPFLAGS="-I${JAVA_HOME}/include -I${JAVA_HOME}/include/win32"
2335 fi 2335 JAVA_LIBS=-ladvapi32
2336 ;;
2337 *)
2338 JAVA_CPPFLAGS="-I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux"
2339 ;;
2340 esac
2341
2342 ## Search for jni.h include file.
2343 JNI_PATH=`echo $JAVA_CPPFLAGS | sed -e "s/-I//g"`
2344 have_jni=false
2345 for dir in $JNI_PATH; do
2346 if test -f "${dir}/jni.h"; then have_jni=true; break; fi
2347 done
2348 if test $have_jni = false; then
2349 AC_MSG_WARN([Include file <jni.h> not found. Octave will not be able to call Java methods.])
2350 break
2351 fi
2352
2353 ## Passed all configuration tests. A workable Java installation was found.
2354 HAVE_JAVA=yes
2355 AC_DEFINE(HAVE_JAVA, 1,
2356 [Define to 1 if Java is available and is at least version 1.5])
2357 break
2358 done
2336 2359
2337 ## For later reporting in configure summary 2360 ## For later reporting in configure summary
2338 if test $HAVE_JAVA = no; then 2361 if test $HAVE_JAVA = no; then
2339 build_java=false 2362 build_java=false
2340 fi 2363 fi
2341 AM_CONDITIONAL([AMCOND_HAVE_JAVA], [test $HAVE_JAVA = yes]) 2364 AM_CONDITIONAL([AMCOND_HAVE_JAVA], [test $HAVE_JAVA = yes])
2365 AC_SUBST(JAVA)
2342 AC_SUBST(JAVAC) 2366 AC_SUBST(JAVAC)
2343 AC_SUBST(JAR) 2367 AC_SUBST(JAR)
2344 AC_SUBST(JAVA_CPPFLAGS) 2368 AC_SUBST(JAVA_CPPFLAGS)
2345 AC_SUBST(JAVA_LIBS) 2369 AC_SUBST(JAVA_LIBS)
2346 AC_DEFINE_UNQUOTED([JAVA_HOME], ["$JAVA_HOME"], [Java home.]) 2370 AC_DEFINE_UNQUOTED([JAVA_HOME], ["$JAVA_HOME"], [Java home (top-level installation dir)])
2347 AC_DEFINE_UNQUOTED([JAVA_ARCH], ["$JAVA_ARCH"], [Java arch.]) 2371 AC_DEFINE_UNQUOTED([JAVA_LDPATH], ["$JAVA_LDPATH"], [Java library path (libjvm)])
2348 2372
2349 ### GUI/Qt related tests. 2373 ### GUI/Qt related tests.
2350 2374
2351 HAVE_QT=false 2375 HAVE_QT=false
2352 QT_CPPFLAGS= 2376 QT_CPPFLAGS=
2704 graphics libraries: $GRAPHICS_LIBS 2728 graphics libraries: $GRAPHICS_LIBS
2705 HDF5 CPPFLAGS: $HDF5_CPPFLAGS 2729 HDF5 CPPFLAGS: $HDF5_CPPFLAGS
2706 HDF5 LDFLAGS: $HDF5_LDFLAGS 2730 HDF5 LDFLAGS: $HDF5_LDFLAGS
2707 HDF5 libraries: $HDF5_LIBS 2731 HDF5 libraries: $HDF5_LIBS
2708 Java home: $JAVA_HOME 2732 Java home: $JAVA_HOME
2709 Java arch: $JAVA_ARCH 2733 Java JVM path: $JAVA_LDPATH
2710 Java CPPFLAGS: $JAVA_CPPFLAGS 2734 Java CPPFLAGS: $JAVA_CPPFLAGS
2711 Java libraries: $JAVA_LIBS 2735 Java libraries: $JAVA_LIBS
2712 LAPACK libraries: $LAPACK_LIBS 2736 LAPACK libraries: $LAPACK_LIBS
2713 LLVM CPPFLAGS: $LLVM_CPPFLAGS 2737 LLVM CPPFLAGS: $LLVM_CPPFLAGS
2714 LLVM LDFLAGS: $LLVM_LDFLAGS 2738 LLVM LDFLAGS: $LLVM_LDFLAGS