# HG changeset patch # User Michael Goffioul # Date 1356232568 0 # Node ID 48a75e6884ecc7ad04329e1b9c2dfa262f981d16 # Parent 6098633219726eb467dec7302f93ae7ff6fbee64 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). diff -r 609863321972 -r 48a75e6884ec configure.ac --- 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. diff -r 609863321972 -r 48a75e6884ec scripts/java/module.mk --- 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)/$(