changeset 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 609863321972
children fe2cefaa772b
files configure.ac scripts/java/module.mk
diffstat 2 files changed, 39 insertions(+), 11 deletions(-) [+]
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.
--- a/scripts/java/module.mk	Fri Dec 21 16:17:13 2012 -0500
+++ b/scripts/java/module.mk	Sun Dec 23 03:16:08 2012 +0000
@@ -60,7 +60,7 @@
 
 %.class : %.java
 	$(MKDIR_P) java/$(org_octave_dir)
-	( cd $(srcdir)/java; $(JAVAC) -source 1.3 -target 1.3 -d $(abs_builddir)/java $(org_octave_dir)/$(<F) )
+	( cd $(srcdir)/java; "$(JAVAC)" -source 1.3 -target 1.3 -d $(abs_builddir)/java $(org_octave_dir)/$(<F) )
 
 java/images.stamp: $(srcdir_java_JAVA_IMAGES)
 	if [ "x$(srcdir)" != "x." ]; then \
@@ -71,7 +71,7 @@
 
 if AMCOND_HAVE_JAVA
 java/octave.jar: java/images.stamp $(java_JAVA_CLASSES)
-	( cd java; $(JAR) cf octave.jar.t $(JAVA_CLASSES) $(JAVA_IMAGES) )
+	( cd java; "$(JAR)" cf octave.jar.t $(JAVA_CLASSES) $(JAVA_IMAGES) )
 	mv $@.t $@
 endif