diff 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
line wrap: on
line diff
--- a/configure.ac	Fri Dec 21 16:17:13 2012 -0500
+++ b/configure.ac	Sun Dec 23 03:16:08 2012 +0000
@@ -2244,9 +2244,9 @@
 
   ## Search for a viable Java executable.
   if test -z "$JAVA_HOME"; then
-    JAVA_PATH=$PATH
+    JAVA_PATH="$PATH"
   else
-    JAVA_PATH=${JAVA_HOME}$PATH_SEPARATOR${JAVA_HOME}/jre/bin$PATH_SEPARATOR${JAVA_HOME}/bin$PATH_SEPARATOR${JAVA_HOME}/../bin$PATH_SEPARATOR${PATH}
+    JAVA_PATH="${JAVA_HOME}$PATH_SEPARATOR${JAVA_HOME}/jre/bin$PATH_SEPARATOR${JAVA_HOME}/bin$PATH_SEPARATOR${JAVA_HOME}/../bin$PATH_SEPARATOR${PATH}"
   fi
   AC_PATH_PROG(JAVA, java, [], [$JAVA_PATH])
 
@@ -2257,16 +2257,33 @@
 
   if test -z "$JAVA_HOME"; then
     ## Find JAVA_HOME for JRE by running java and querying properties.
-    JAVA_TMP_HOME=`$JAVA -classpath ${srcdir}/build-aux OctJavaQry JAVA_HOME`  
+    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/\?$||' | sed -e 's|/jre/\?$||'`
+    JAVA_HOME="`echo $JAVA_TMP_HOME | sed -e 's|[[/\\]]bin[[/\\]]\?$||' | sed -e 's|[[/\\]]jre[[/\\]]\?$||'`"
   fi
 
+  case $canonical_host_type in
+    *-mingw* | *-msdosmsvc*)
+      ## Under Win32 platform, we want JAVA_HOME to be in MSYS format, that is without
+      ## colon and backslashes, as it is also used as path separator. Use quoted paths
+      ## as Java may be installed in a path with whitespaces (e.g. C:\Program Files\Java\...).
+      if test -n "$JAVA_HOME"; then
+        JAVA_HOME="`cd \"$JAVA_HOME\" && pwd`"
+	## Maybe this will be useful in the future, as native Java won't probably
+	## understand MSYS paths.
+	JAVA_HOME_NATIVE="`cd \"$JAVA_HOME\" && pwd -W`"
+      fi
+    ;;
+    *)
+      JAVA_HOME_NATIVE="$JAVA_HOME"
+    ;;
+  esac
+
   ## Amend search path for JAVAC and JAR.
-  if test -z JAVA_HOME; then
-    JAVA_PATH=$PATH
+  if test -z "$JAVA_HOME"; then
+    JAVA_PATH="$PATH"
   else
-    JAVA_PATH=${JAVA_HOME}$PATH_SEPARATOR${JAVA_HOME}/bin$PATH_SEPARATOR${JAVA_HOME}/../bin$PATH_SEPARATOR${PATH}
+    JAVA_PATH="${JAVA_HOME}$PATH_SEPARATOR${JAVA_HOME}/bin$PATH_SEPARATOR${JAVA_HOME}/../bin$PATH_SEPARATOR${PATH}"
   fi
 
   AC_PATH_PROG(JAVAC, javac, [], [$JAVA_PATH])
@@ -2279,7 +2296,7 @@
 
   ## Check Java version is recent enough.
   AC_MSG_CHECKING([for Java version])
-  java_version=[`$JAVA -version 2>&1 | sed -n -e 's/^java version[^0-9"]*"\([^"]*\)"/\1/p'`]
+  java_version=[`$"JAVA" -version 2>&1 | sed -n -e 's/^java version[^0-9"]*"\([^"]*\)"/\1/p'`]
   AC_MSG_RESULT([$java_version])
   java_major=[`echo $java_version | sed -e 's/^\([0-9][0-9]*\)\.\([0-9][0-9]*\)\..*$/\1/'`]
   java_minor=[`echo $java_version | sed -e 's/^\([0-9][0-9]*\)\.\([0-9][0-9]*\)\..*$/\2/'`]
@@ -2290,7 +2307,9 @@
     break
   fi
 
-  ## At this point Win32 systems have enough configuration data.
+  ## At this point Win32/MSVC systems have enough configuration data. We assume
+  ## that all appropriate variables (e.g. INCLUDE and LIB) have already the required
+  ## paths to compile and link against JDK.
   case $canonical_host_type in
     *-msdosmsvc*)
       build_java=true
@@ -2299,6 +2318,15 @@
         [Define to 1 if Java is available and is at least version 1.5])
       break
     ;;
+    *-mingw*)
+      if test "$have_msvc" = "yes"; then
+        build_java=true
+        JAVA_LIBS=-ladvapi32
+        AC_DEFINE(HAVE_JAVA, 1,
+          [Define to 1 if Java is available and is at least version 1.5])
+        break
+      fi
+    ;;
   esac
 
   ## Determine which library file name to search for.