summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVadim Zeitlin <vz-swig@zeitlins.org>2015-07-27 16:12:17 +0200
committerVadim Zeitlin <vz-swig@zeitlins.org>2015-08-01 18:50:27 +0200
commit2e7331964a39fc50fb04a8398f415a6d3b3b3732 (patch)
tree1e34b562a4ba333dcad9d240f5b9f29a0186af4b
parent2837550c4b1d1d5d6b3f366e164f97dee1ff78f2 (diff)
downloadswig-2e7331964a39fc50fb04a8398f415a6d3b3b3732.tar.gz
Use JAVA_HOME value in configure to detect Java.
This is simpler than having to use --with-java, --with-javac and --with-javaincl options and, even more importantly, will usually just work by default.
-rw-r--r--appveyor.yml2
-rw-r--r--configure.ac110
2 files changed, 95 insertions, 17 deletions
diff --git a/appveyor.yml b/appveyor.yml
index 25abcb342..dc96d0bca 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -65,7 +65,7 @@ build_script:
- set CCCL_OPTIONS=--cccl-muffle /W3
- set CHECK_OPTIONS=CSHARPOPTIONS=-platform:%Platform%
# Open dummy file descriptor to fix error on cygwin: ./configure: line 560: 0: Bad file descriptor
-- bash -c "exec 0</dev/null && ./autogen.sh && time ./configure --disable-dependency-tracking --disable-ccache CC=cccl CXX=cccl CFLAGS='-O2' CXXFLAGS='-O2' LDFLAGS='--cccl-link /LTCG' PCRE_CFLAGS='-I%PCRE_ROOT%/include -DPCRE_STATIC' PCRE_LIBS='-L%PCRE_ROOT%/lib/v110/%PCRE_PLATFORM%/Release/static/utf8 -lpcre8' --with-java='%JAVA_HOME%/bin/java.exe' --with-javac='%JAVA_HOME%/bin/javac.exe' --with-javaincl='%JAVA_HOME%/include' --without-perl5 --without-go --with-boost=C:/Libraries/boost || cat config.log"
+- bash -c "exec 0</dev/null && ./autogen.sh && time ./configure --disable-dependency-tracking --disable-ccache CC=cccl CXX=cccl CFLAGS='-O2' CXXFLAGS='-O2' LDFLAGS='--cccl-link /LTCG' PCRE_CFLAGS='-I%PCRE_ROOT%/include -DPCRE_STATIC' PCRE_LIBS='-L%PCRE_ROOT%/lib/v110/%PCRE_PLATFORM%/Release/static/utf8 -lpcre8' --without-perl5 --without-go --with-boost=C:/Libraries/boost || cat config.log"
- bash -c "time make -s"
test_script:
diff --git a/configure.ac b/configure.ac
index d66888390..12105fb80 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1193,14 +1193,87 @@ AC_MSG_NOTICE([Disabling Java])
JAVA=
else
+dnl Detect everything we need for Java: java for running Java tests, javac for
+dnl compiling them and C headers for compiling C code.
+dnl
+dnl If JAVA_HOME is defined and contains everything needed, as it's supposed to,
+dnl just use it. Otherwise try to locate the necessary files in the path.
+case $host in
+ *-*-cygwin*)
+ dnl Ensure that JAVA_HOME is in the form we can use, it's typically set to Windows path by the installer.
+ if test -n "$JAVA_HOME"; then
+ JAVA_HOME=`cygpath --mixed "$JAVA_HOME"`
+ fi
+ ;;
+ *-*-mingw*)
+ if test -n "$JAVA_HOME"; then
+ JAVA_HOME=`${srcdir}/Tools/convertpath -u "$JAVA_HOME"`
+ fi
+ ;;
+ *-*-darwin*)
+ dnl Under OS X JAVA_HOME is not set by default, try to use the system default JRE.
+ if test -z "$JAVA_HOME" -a -x /usr/libexec/java_home; then
+ JAVA_HOME=`/usr/libexec/java_home`
+ fi
+ dnl The JAVA_HOME doesn't contain the JDK headers though, but they seem to
+ dnl always be in the same location, according to Apple JNI documentation.
+ JAVA_HOME_INCDIR="/System/Library/Frameworks/JavaVM.framework/Headers"
+ if ! test -r "$JAVA_HOME_INCDIR/jni.h"; then
+ JAVA_HOME_INCDIR=
+ fi
+ ;;
+esac
+
+if test -n "$JAVA_HOME"; then
+ AC_MSG_CHECKING(for JDK)
+
+ dnl Don't complain about missing executables/headers if they had been
+ dnl explicitly overridden from the command line, but otherwise verify that we
+ dnl have everything we need.
+ java_home_ok=1
+ if test -z "$JAVABIN" -a ! -x "$JAVA_HOME/bin/java"; then
+ AC_MSG_WARN([No java executable under JAVA_HOME.])
+ java_home_ok=0
+ fi
+ if test -z "$JAVACBIN" -a ! -x "$JAVA_HOME/bin/javac"; then
+ AC_MSG_WARN([No javac executable under JAVA_HOME.])
+ java_home_ok=0
+ fi
+
+ dnl By default the headers are under JAVA_HOME/include, but OS X is special
+ dnl and defines JAVA_HOME_INCDIR differently above.
+ if test -z "$JAVA_HOME_INCDIR"; then
+ JAVA_HOME_INCDIR="$JAVA_HOME/include"
+ fi
+ if test -z "$JAVAINCDIR" -a ! -r "$JAVA_HOME_INCDIR/jni.h"; then
+ AC_MSG_WARN([No java headers under JAVA_HOME (does it point to a JDK and not just JRE?).])
+ java_home_ok=0
+ fi
+ if test "$java_home_ok" = 1; then
+ AC_MSG_RESULT([found (in $JAVA_HOME)])
+ else
+ AC_MSG_RESULT(no)
+ AC_MSG_WARN([JAVA_HOME ($JAVA_HOME) is defined but doesn't point to a complete JDK installation, ignoring it.])
+ JAVA_HOME=
+ fi
+fi
+
if test "x$JAVABIN" = xyes; then
- AC_CHECK_PROGS(JAVA, java kaffe guavac)
+ if test -n "$JAVA_HOME"; then
+ JAVA="$JAVA_HOME/bin/java"
+ else
+ AC_CHECK_PROGS(JAVA, java kaffe guavac)
+ fi
else
JAVA="$JAVABIN"
fi
if test -z "$JAVACBIN"; then
- AC_CHECK_PROGS(JAVAC, javac)
+ if test -n "$JAVA_HOME"; then
+ JAVAC="$JAVA_HOME/bin/javac"
+ else
+ AC_CHECK_PROGS(JAVAC, javac)
+ fi
else
JAVAC="$JAVACBIN"
fi
@@ -1210,22 +1283,27 @@ AC_ARG_WITH(javaincl, [ --with-javaincl=path Set location of Java include di
JAVAINC=""
if test -z "$JAVAINCDIR" ; then
- JAVAINCDIR="/usr/j2sdk*/include /usr/local/j2sdk*/include /usr/jdk*/include /usr/local/jdk*/include /opt/j2sdk*/include /opt/jdk*/include /usr/java/include /usr/java/j2sdk*/include /usr/java/jdk*/include /usr/local/java/include /opt/java/include /usr/include/java /usr/local/include/java /usr/lib/java/include /usr/lib/jvm/java*/include /usr/lib64/jvm/java*/include /usr/include/kaffe /usr/local/include/kaffe /usr/include"
+ if test -n "$JAVA_HOME"; then
+ JAVAINCDIR="$JAVA_HOME_INCDIR"
+ JAVAINC=-I\"$JAVAINCDIR\"
+ else
+ JAVAINCDIR="/usr/j2sdk*/include /usr/local/j2sdk*/include /usr/jdk*/include /usr/local/jdk*/include /opt/j2sdk*/include /opt/jdk*/include /usr/java/include /usr/java/j2sdk*/include /usr/java/jdk*/include /usr/local/java/include /opt/java/include /usr/include/java /usr/local/include/java /usr/lib/java/include /usr/lib/jvm/java*/include /usr/lib64/jvm/java*/include /usr/include/kaffe /usr/local/include/kaffe /usr/include"
- # Add in default installation directory on Windows for Cygwin
- case $host in
- *-*-cygwin* | *-*-mingw*) JAVAINCDIR="c:/Program*Files*/Java/jdk*/include d:/Program*Files*/Java/jdk*/include c:/j2sdk*/include d:/j2sdk*/include c:/jdk*/include d:/jdk*/include $JAVAINCDIR";;
- *-*-darwin*) JAVAINCDIR="/System/Library/Frameworks/JavaVM.framework/Headers $JAVAINCDIR";;
- *);;
- esac
+ # Add in default installation directory on Windows for Cygwin
+ case $host in
+ *-*-cygwin* | *-*-mingw*) JAVAINCDIR="c:/Program*Files*/Java/jdk*/include d:/Program*Files*/Java/jdk*/include c:/j2sdk*/include d:/j2sdk*/include c:/jdk*/include d:/jdk*/include $JAVAINCDIR";;
+ *-*-darwin*) JAVAINCDIR="/System/Library/Frameworks/JavaVM.framework/Headers $JAVAINCDIR";;
+ *);;
+ esac
- for d in $JAVAINCDIR ; do
- if test -r "$d/jni.h" ; then
- JAVAINCDIR=$d
- JAVAINC=-I\"$d\"
- break
- fi
- done
+ for d in $JAVAINCDIR ; do
+ if test -r "$d/jni.h" ; then
+ JAVAINCDIR=$d
+ JAVAINC=-I\"$d\"
+ break
+ fi
+ done
+ fi
else
if test -r "$JAVAINCDIR/jni.h" ; then
JAVAINC=-I\"$JAVAINCDIR\"