Mercurial > hg > octave-lyh
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 |