Andi Vajda <va...@apache.org> wrote:

> On Wed, 14 Oct 2009, Bill Janssen wrote:
> 
> > Andi Vajda <va...@apache.org> wrote:
> >
> >> The same approach could be used for figuring out the Java stuff. Have
> >> a small class running in Java tell us.
> >
> > You would think, wouldn't you?  But then you'll often end up with gcj.
> 
> And it would tell you by looking at System.getProperties(), no ?

Sure.  But what do you do then?

> > The JDK/JRE distinction is another killer.
> 
> Indeed but then trying to compile that small class would fail telling
> us that there is no JDK.

Maybe I'm just dense, but my requirements may be more extreme than
PyLucene's.  I need "jar", "keytool" and "jarsigner", too.

Here's the fragment of UpLib's configure.in I use for Java configuation:

# it would be nice to know where JAVA_HOME is

AC_ARG_WITH(javahome, [  --with-javahome=JAVA_HOME_PATH], 
java_home=$with_javahome, java_home="")
if test "x$java_home" != "x"; then
  AC_MSG_CHECKING(JAVA_HOME value)
  if test -d "$java_home"; then
    JAVAHOME=$java_home
    AC_SUBST(JAVAHOME)
    AC_MSG_RESULT([$JAVAHOME])
  else
    AC_MSG_ERROR([Invalid non-directory value specified for --with-javahome])
  fi
fi
if test "x$JAVAHOME" = "x"; then
  if test "$OS_TARGET" = "Linux"; then
     AC_MSG_CHECKING(for JAVA_HOME)
     JAVAHOME=`$PYTHON unix/linux/figure-linux-java.py`
     if test "$JAVAHOME" != ""; then
        AC_MSG_RESULT($JAVAHOME)
     else
        AC_MSG_ERROR(No java installation found on this machine.)
     fi
  elif test "$OS_TARGET" = "Darwin"; then
     if test -x /usr/libexec/java_home; then
        JAVAHOME=`/usr/libexec/java_home -v 1.5`
     else
        JAVAHOME=/Library/Java/Home
     fi
  elif test "$OS_TARGET" = "win32"; then
     AC_MSG_CHECKING(for JAVA_HOME)
     JAVAHOME=`"$PYTHON" win32/find-javahome.py`
     if test "$JAVAHOME" != ""; then
        AC_MSG_RESULT($JAVAHOME)
     else
        AC_MSG_ERROR(No java installation found on this machine.)
     fi
  else
     AC_PATH_PROG(JAVAC, "javac")
     AC_PATH_PROG(JAVA, "java")
     if test "x$JAVAC" = "x" -o "x$JAVA" = "x"; then
       AC_ERROR([No value for Java home, and either "java" or "javac" can't be 
found on the path.])
     fi
     AC_MSG_CHECKING(for JAVA_HOME)
     result=`["$JAVAC" -classpath ./java ./java/testProperty.java; "$JAVA" 
-classpath ./java testProperty home.java]`
     if test -d "$result"; then
       JAVAHOME=$result
       AC_MSG_RESULT([$JAVAHOME])
     else
       AC_MSG_ERROR([Can't find JAVA_HOME; use --with-javahome=PATH to specify 
the path for JAVA_HOME])
     fi
  fi
fi
AC_PATH_PROG(JAVA, "java", , [ "$JAVAHOME/jre/bin" "$JAVAHOME/bin" $PATH ])
AC_PATH_PROG(JAVAC, "javac", , [ "$JAVAHOME/bin" $PATH ])
AC_PATH_PROG(JAR, "jar", , [ "$JAVAHOME/bin" $PATH ])
AC_PATH_PROG(KEYTOOL, "keytool", , [ "$JAVAHOME/jre/bin" "$JAVAHOME/bin" $PATH 
])
AC_PATH_PROG(JARSIGNER, "jarsigner", , [ "$JAVAHOME/jre/bin" "$JAVAHOME/bin" 
$PATH ])

# what version of java?
java_version=`"$JAVA" -version 2>&1 | head -1 | sed -e 's/java version //g' -e 
's/"//g'`
AC_SUBST(JAVA_MAJOR_VERSION)
AC_SUBST(JAVA_MINOR_VERSION)
AC_SUBST(JAVA_MICRO_VERSION)
AC_MSG_RESULT([looking at Java version $java_version...])
JAVA_MAJOR_VERSION=[`"$PYTHON" -c "\
import sys, re
print re.split('[\.\_]', '$java_version')[0]"`]
JAVA_MINOR_VERSION=[`"$PYTHON" -c "\
import sys, re
print re.split('[\.\_]', '$java_version')[1]"`]
JAVA_MICRO_VERSION=[`"$PYTHON" -c "\
import sys, re
print re.split('[\.\_]', '$java_version')[2]"`]
JAVA_BUILD_VERSION=[`"$PYTHON" -c "\
import sys, re
splits=re.split('[\.\_]', '$java_version')
print ((len(splits) > 3) and splits[3]) or 5"`]
AC_SUBST(JAVA_HOTSPOT_FLAGS)
JAVA_HOTSPOT_FLAGS=""
if test $JAVA_MAJOR_VERSION -eq 1 -a $JAVA_MINOR_VERSION -eq 6 -a 
$JAVA_MICRO_VERSION -eq 0 -a $JAVA_BUILD_VERSION -gt 3 -a $JAVA_BUILD_VERSION 
-lt 11 ; then
  JAVA_HOTSPOT_FLAGS="-Xint"
  AC_MSG_RESULT([This version of Java ($java_version) contains a Hotspot bug 
which causes corrupt Lucene indices.  JIT compilation will be disabled.])
fi
AC_SUBST(JAVA_COMPAT_FLAG)
AC_SUBST(JAVA_HAS_COOKIE_HANDLING)
JAVA_COMPAT_FLAG=""
JAVA_HAS_COOKIE_HANDLING=yes
if test $JAVA_MAJOR_VERSION -ge 1 -a $JAVA_MINOR_VERSION -gt 4 ; then
  if test "$need1dot4" = "yes" ; then
    JAVA_COMPAT_FLAG="-source 1.4 -target 1.4"
    JAVA_HAS_COOKIE_HANDLING=no
    AC_MSG_RESULT(Java version is $java_version; using JAVA_COMPAT_FLAG of 
"$JAVA_COMPAT_FLAG")
  else
    AC_MSG_RESULT(Java version is $java_version; no JAVA_COMPAT_FLAG needed)
  fi
elif test $JAVA_MAJOR_VERSION -eq 1 -a $JAVA_MINOR_VERSION -lt 4; then
  AC_MSG_ERROR(Java version is $java_version; we need at least 1.4.2.)
elif test $JAVA_MAJOR_VERSION -eq 1 -a $JAVA_MINOR_VERSION -eq 4 -a 
$JAVA_MICRO_VERSION -lt 2; then
  AC_MSG_ERROR(Java version is $java_version; we need at least 1.4.2.)
else
  if test $JAVA_MINOR_VERSION -lt 5; then
    JAVA_HAS_COOKIE_HANDLING=no
  fi
  AC_MSG_RESULT(Java version is $java_version; no JAVA_COMPAT_FLAG needed)
fi
if test "$JAVA_HAS_COOKIE_HANDLING" = "no"; then
  AC_MSG_RESULT([No cookie handling in Java clients; password must be passed on 
each call])
fi

# check for Java debug flags
AC_MSG_CHECKING(for Java debug)
AC_ARG_ENABLE(java-debug, [  --enable-java-debug], JAVADEBUGFLAGS="$enableval", 
JAVADEBUGFLAGS="-g")
AC_SUBST(JAVADEBUGFLAGS)
if test "$JAVADEBUGFLAGS" = "no"; then
  AC_MSG_RESULT(no)
  JAVADEBUGFLAGS=""
elif test "$JAVADEBUGFLAGS" = "yes"; then
  JAVADEBUGFLAGS="-g"
  AC_MSG_RESULT(yes:  $JAVADEBUGFLAGS)
else
  if test $JAVA_MAJOR_VERSION -eq 1 -a $JAVA_MINOR_VERSION -eq 4; then
    JAVADEBUGFLAGS="$JAVADEBUGFLAGS -deprecation"
  fi
  AC_MSG_RESULT(yes:  $JAVADEBUGFLAGS)
fi

AC_MSG_CHECKING(for Java classpath separator character)
AC_SUBST(JAVACLASSPATHSEP)
if test "$OS_TARGET" = "win32"; then
  JAVACLASSPATHSEP=";"
else
  JAVACLASSPATHSEP=":"
fi
AC_MSG_RESULT($JAVACLASSPATHSEP)

Reply via email to