comparison configure.ac @ 15836:48a75e6884ec

Fix JAVA detection for MSVC and support white space in Java path. * configure.ac (JAVA_HOME, JAVA_PATH, java_version): Quote java-related paths and commands and consider backslash in path manipulations. Also detect the case of MSYS shell (mingw canonical host) with MSVC. In MSYS shell, convert JAVA_HOME into MSYS path (no backslash or colon). * scripts/java/modules.mk: Double-quote usage of $(JAVAC) and $(JAR).
author Michael Goffioul <michael.goffioul@gmail.com>
date Sun, 23 Dec 2012 03:16:08 +0000
parents f366e9948259
children 9a210f7fe62e
comparison
equal deleted inserted replaced
15835:609863321972 15836:48a75e6884ec
2242 AC_MSG_WARN([Auto-detection will proceed but is unreliable.]) 2242 AC_MSG_WARN([Auto-detection will proceed but is unreliable.])
2243 fi 2243 fi
2244 2244
2245 ## Search for a viable Java executable. 2245 ## Search for a viable Java executable.
2246 if test -z "$JAVA_HOME"; then 2246 if test -z "$JAVA_HOME"; then
2247 JAVA_PATH=$PATH 2247 JAVA_PATH="$PATH"
2248 else 2248 else
2249 JAVA_PATH=${JAVA_HOME}$PATH_SEPARATOR${JAVA_HOME}/jre/bin$PATH_SEPARATOR${JAVA_HOME}/bin$PATH_SEPARATOR${JAVA_HOME}/../bin$PATH_SEPARATOR${PATH} 2249 JAVA_PATH="${JAVA_HOME}$PATH_SEPARATOR${JAVA_HOME}/jre/bin$PATH_SEPARATOR${JAVA_HOME}/bin$PATH_SEPARATOR${JAVA_HOME}/../bin$PATH_SEPARATOR${PATH}"
2250 fi 2250 fi
2251 AC_PATH_PROG(JAVA, java, [], [$JAVA_PATH]) 2251 AC_PATH_PROG(JAVA, java, [], [$JAVA_PATH])
2252 2252
2253 if test -z "$JAVA"; then 2253 if test -z "$JAVA"; then
2254 AC_MSG_WARN([No Java executable found. Octave will not be able to call Java methods.]) 2254 AC_MSG_WARN([No Java executable found. Octave will not be able to call Java methods.])
2255 break 2255 break
2256 fi 2256 fi
2257 2257
2258 if test -z "$JAVA_HOME"; then 2258 if test -z "$JAVA_HOME"; then
2259 ## Find JAVA_HOME for JRE by running java and querying properties. 2259 ## Find JAVA_HOME for JRE by running java and querying properties.
2260 JAVA_TMP_HOME=`$JAVA -classpath ${srcdir}/build-aux OctJavaQry JAVA_HOME` 2260 JAVA_TMP_HOME="`\"$JAVA\" -classpath ${srcdir}/build-aux OctJavaQry JAVA_HOME`"
2261 ## Strip directory back to top-level installation dir (JAVA_HOME for JDK). 2261 ## Strip directory back to top-level installation dir (JAVA_HOME for JDK).
2262 JAVA_HOME=`echo $JAVA_TMP_HOME | sed -e 's|/bin/\?$||' | sed -e 's|/jre/\?$||'` 2262 JAVA_HOME="`echo $JAVA_TMP_HOME | sed -e 's|[[/\\]]bin[[/\\]]\?$||' | sed -e 's|[[/\\]]jre[[/\\]]\?$||'`"
2263 fi 2263 fi
2264
2265 case $canonical_host_type in
2266 *-mingw* | *-msdosmsvc*)
2267 ## Under Win32 platform, we want JAVA_HOME to be in MSYS format, that is without
2268 ## colon and backslashes, as it is also used as path separator. Use quoted paths
2269 ## as Java may be installed in a path with whitespaces (e.g. C:\Program Files\Java\...).
2270 if test -n "$JAVA_HOME"; then
2271 JAVA_HOME="`cd \"$JAVA_HOME\" && pwd`"
2272 ## Maybe this will be useful in the future, as native Java won't probably
2273 ## understand MSYS paths.
2274 JAVA_HOME_NATIVE="`cd \"$JAVA_HOME\" && pwd -W`"
2275 fi
2276 ;;
2277 *)
2278 JAVA_HOME_NATIVE="$JAVA_HOME"
2279 ;;
2280 esac
2264 2281
2265 ## Amend search path for JAVAC and JAR. 2282 ## Amend search path for JAVAC and JAR.
2266 if test -z JAVA_HOME; then 2283 if test -z "$JAVA_HOME"; then
2267 JAVA_PATH=$PATH 2284 JAVA_PATH="$PATH"
2268 else 2285 else
2269 JAVA_PATH=${JAVA_HOME}$PATH_SEPARATOR${JAVA_HOME}/bin$PATH_SEPARATOR${JAVA_HOME}/../bin$PATH_SEPARATOR${PATH} 2286 JAVA_PATH="${JAVA_HOME}$PATH_SEPARATOR${JAVA_HOME}/bin$PATH_SEPARATOR${JAVA_HOME}/../bin$PATH_SEPARATOR${PATH}"
2270 fi 2287 fi
2271 2288
2272 AC_PATH_PROG(JAVAC, javac, [], [$JAVA_PATH]) 2289 AC_PATH_PROG(JAVAC, javac, [], [$JAVA_PATH])
2273 AC_PATH_PROG(JAR, jar, [], [$JAVA_PATH]) 2290 AC_PATH_PROG(JAR, jar, [], [$JAVA_PATH])
2274 2291
2277 break 2294 break
2278 fi 2295 fi
2279 2296
2280 ## Check Java version is recent enough. 2297 ## Check Java version is recent enough.
2281 AC_MSG_CHECKING([for Java version]) 2298 AC_MSG_CHECKING([for Java version])
2282 java_version=[`$JAVA -version 2>&1 | sed -n -e 's/^java version[^0-9"]*"\([^"]*\)"/\1/p'`] 2299 java_version=[`$"JAVA" -version 2>&1 | sed -n -e 's/^java version[^0-9"]*"\([^"]*\)"/\1/p'`]
2283 AC_MSG_RESULT([$java_version]) 2300 AC_MSG_RESULT([$java_version])
2284 java_major=[`echo $java_version | sed -e 's/^\([0-9][0-9]*\)\.\([0-9][0-9]*\)\..*$/\1/'`] 2301 java_major=[`echo $java_version | sed -e 's/^\([0-9][0-9]*\)\.\([0-9][0-9]*\)\..*$/\1/'`]
2285 java_minor=[`echo $java_version | sed -e 's/^\([0-9][0-9]*\)\.\([0-9][0-9]*\)\..*$/\2/'`] 2302 java_minor=[`echo $java_version | sed -e 's/^\([0-9][0-9]*\)\.\([0-9][0-9]*\)\..*$/\2/'`]
2286 if test $java_major -ge 1 && test $java_minor -ge 5; then 2303 if test $java_major -ge 1 && test $java_minor -ge 5; then
2287 : # Version is ok. Do nothing. 2304 : # Version is ok. Do nothing.
2288 else 2305 else
2289 AC_MSG_WARN([Java version is too old (< 1.5). Octave will not be able to call Java methods.]) 2306 AC_MSG_WARN([Java version is too old (< 1.5). Octave will not be able to call Java methods.])
2290 break 2307 break
2291 fi 2308 fi
2292 2309
2293 ## At this point Win32 systems have enough configuration data. 2310 ## At this point Win32/MSVC systems have enough configuration data. We assume
2311 ## that all appropriate variables (e.g. INCLUDE and LIB) have already the required
2312 ## paths to compile and link against JDK.
2294 case $canonical_host_type in 2313 case $canonical_host_type in
2295 *-msdosmsvc*) 2314 *-msdosmsvc*)
2296 build_java=true 2315 build_java=true
2297 JAVA_LIBS=-ladvapi32 2316 JAVA_LIBS=-ladvapi32
2298 AC_DEFINE(HAVE_JAVA, 1, 2317 AC_DEFINE(HAVE_JAVA, 1,
2299 [Define to 1 if Java is available and is at least version 1.5]) 2318 [Define to 1 if Java is available and is at least version 1.5])
2300 break 2319 break
2320 ;;
2321 *-mingw*)
2322 if test "$have_msvc" = "yes"; then
2323 build_java=true
2324 JAVA_LIBS=-ladvapi32
2325 AC_DEFINE(HAVE_JAVA, 1,
2326 [Define to 1 if Java is available and is at least version 1.5])
2327 break
2328 fi
2301 ;; 2329 ;;
2302 esac 2330 esac
2303 2331
2304 ## Determine which library file name to search for. 2332 ## Determine which library file name to search for.
2305 case $canonical_host_type in 2333 case $canonical_host_type in