| # javacomp.m4 serial 12 |
| dnl Copyright (C) 2001-2003, 2006-2007, 2009-2012 Free Software Foundation, |
| dnl Inc. |
| dnl This file is free software; the Free Software Foundation |
| dnl gives unlimited permission to copy and/or distribute it, |
| dnl with or without modifications, as long as this notice is preserved. |
| |
| # Prerequisites of javacomp.sh. |
| # gt_JAVACOMP([source-version], [target-version]) |
| # Sets HAVE_JAVACOMP to nonempty if javacomp.sh will allow Java source code |
| # according to source-version to be compiled to Java bytecode classes in the |
| # target-version format. |
| # |
| # source-version can be: support for |
| # 1.3 inner classes |
| # 1.4 assert keyword |
| # 1.5 generic classes and methods |
| # 1.6 (not yet supported) |
| # |
| # target-version can be: classfile version: |
| # 1.1 45.3 |
| # 1.2 46.0 |
| # 1.3 47.0 |
| # 1.4 48.0 |
| # 1.5 49.0 |
| # 1.6 50.0 |
| # The classfile version of a .class file can be determined through the "file" |
| # command. More portably, the classfile major version can be determined through |
| # "od -A n -t d1 -j 7 -N 1 classfile". |
| # target-version can also be omitted. In this case, the required target-version |
| # is determined from the found JVM (see macro gt_JAVAEXEC): |
| # target-version for JVM |
| # 1.1 JDK 1.1, jview |
| # 1.2 JDK/JRE 1.2 |
| # 1.3 JDK/JRE 1.3, gij 3.3, 3.4 |
| # 1.4 JDK/JRE 1.4, gij 4.0, 4.1 |
| # 1.5 JDK/JRE 1.5 |
| # 1.6 JDK/JRE 1.6 |
| # Note: gij >= 3.3 can in some cases handle classes compiled with -target 1.4, |
| # and gij >= 4.1 can in some cases partially handle classes compiled with |
| # -target 1.5, but I have no idea how complete this support is. |
| # |
| # Specifying target-version is useful when building a library (.jar) that is |
| # useful outside the given package. Omitting target-version is useful when |
| # building an application. |
| # |
| # It is unreasonable to ask for: |
| # - target-version < 1.4 with source-version >= 1.4, or |
| # - target-version < 1.5 with source-version >= 1.5, or |
| # - target-version < 1.6 with source-version >= 1.6, |
| # because even Sun's javac doesn't support these combinations. |
| # |
| # It is redundant to ask for a target-version > source-version, since the |
| # smaller target-version = source-version will also always work and newer JVMs |
| # support the older target-versions too. Except for the case |
| # target-version = 1.4, source-version = 1.3, which allows gcj versions 3.0 |
| # to 3.2 to be used. |
| |
| AC_DEFUN([gt_JAVACOMP], |
| [ |
| ifelse([$2], [], [AC_REQUIRE([gt_JAVAEXEC])], []) |
| AC_EGREP_CPP([yes], [ |
| #if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ |
| yes |
| #endif |
| ], CLASSPATH_SEPARATOR=';', CLASSPATH_SEPARATOR=':') |
| source_version=$1 |
| test -n "$source_version" || { |
| AC_MSG_ERROR([missing source-version argument to gt_@&t@JAVACOMP]) |
| } |
| ifelse([$2], [], |
| [if test -n "$HAVE_JAVAEXEC"; then |
| dnl Use $CONF_JAVA to determine the JVM's version. |
| changequote(,)dnl |
| cat > conftestver.java <<EOF |
| public class conftestver { |
| public static void main (String[] args) { |
| System.out.println(System.getProperty("java.specification.version")); |
| } |
| } |
| EOF |
| changequote([,])dnl |
| dnl A precompiled version of conftestver.java, compiled with |
| dnl "javac -target 1.1". This avoids having to compile conftestver.java |
| dnl during each test for a suitable Java compiler. |
| dnl For the conversion from binary to this ASCII encapsulation, avoiding |
| dnl to assume the presence of uudecode, use the command |
| dnl $ od -A n -t o1 < conftestver.class | tr ' ' '\012'| sort | uniq | sed -e '/^$/d' -e 's,^,\\,' | tr -d '\012' |
| dnl and the long tr command in opposite direction. |
| dnl Finally move the position corresponding to \055 to the last position, |
| dnl to work around a coreutils-5.x bug. |
| echo 'yzwx!$!I!D,!)!3+!4!5*!6,!4!7,!8!9)!:)!;"!(MeienN"!$FGW"!%Ojab"!2QeibRohZblVYZgb"!%hYei"!9FXQfYpYKgYidKUnleidLGW"!,Ujol_bPegb"!3_jicnbmnpblJfYpY/!*!+)!</!=!>"!=fYpYJmkb_ece_YnejiJpblmeji/!?!@)!A/!B!C"!._jicnbmnpbl"!3fYpYKgYidKSZfb_n"!3fYpYKgYidKUqmnbh"!$jon"!8QfYpYKejKTleinUnlbYhL"!.dbnTljkblnq"!EFQfYpYKgYidKUnleidLGQfYpYKgYidKUnleidL"!6fYpYKejKTleinUnlbYh"!)kleingi"!8FQfYpYKgYidKUnleidLGW!D!(!)!!!!!#!"!*!+!"!,!!!@!"!"!!!&Hu!"r!!!"!.!!!(!"!!!"!+!/!0!"!,!!!F!#!"!!!/s!#5$v!%t!&r!!!"!.!!!,!#!!!$!.!%!"!1!!!#!2' \ |
| | tr -d '\012\015' \ |
| | tr '!"#$%&()*+,./0123456789:;<=>?@ABCDEFGHJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyzI' '\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\046\050\051\052\056\057\073\074\076\103\106\114\116\117\120\123\124\126\133\141\142\143\144\145\146\147\151\152\154\155\156\157\160\162\163\164\165\166\171\261\262\266\267\270\272\276\312\376\055' \ |
| > conftestver.class |
| target_version=`{ |
| unset JAVA_HOME |
| echo "$as_me:__oline__: CLASSPATH=.${CLASSPATH:+$CLASSPATH_SEPARATOR$CLASSPATH} $CONF_JAVA conftestver" >&AS_MESSAGE_LOG_FD |
| CLASSPATH=.${CLASSPATH:+$CLASSPATH_SEPARATOR$CLASSPATH} $CONF_JAVA conftestver 2>&AS_MESSAGE_LOG_FD |
| }` |
| case "$target_version" in |
| 1.1 | 1.2 | 1.3 | 1.4 | 1.5 | 1.6) ;; |
| null) |
| dnl JDK 1.1.X returns null. |
| target_version=1.1 ;; |
| *) AC_MSG_WARN([unknown target-version $target_version, please update gt_@&t@JAVACOMP macro]) |
| target_version=1.1 ;; |
| esac |
| else |
| target_version="1.1" |
| fi |
| ], |
| [target_version=$2]) |
| case "$source_version" in |
| 1.3) goodcode='class conftest {}' |
| failcode='class conftestfail { static { assert(true); } }' ;; |
| 1.4) goodcode='class conftest { static { assert(true); } }' |
| failcode='class conftestfail<T> { T foo() { return null; } }' ;; |
| 1.5) goodcode='class conftest<T> { T foo() { return null; } }' |
| failcode='class conftestfail syntax error' ;; |
| *) AC_MSG_ERROR([invalid source-version argument to gt_@&t@JAVACOMP: $source_version]) ;; |
| esac |
| case "$target_version" in |
| 1.1) cfversion=45 ;; |
| 1.2) cfversion=46 ;; |
| 1.3) cfversion=47 ;; |
| 1.4) cfversion=48 ;; |
| 1.5) cfversion=49 ;; |
| 1.6) cfversion=50 ;; |
| *) AC_MSG_ERROR([invalid target-version argument to gt_@&t@JAVACOMP: $target_version]) ;; |
| esac |
| # Function to output the classfile version of a file (8th byte) in decimal. |
| if od -A x < /dev/null >/dev/null 2>/dev/null; then |
| # Use POSIX od. |
| func_classfile_version () |
| { |
| od -A n -t d1 -j 7 -N 1 "[$]1" |
| } |
| else |
| # Use BSD hexdump. |
| func_classfile_version () |
| { |
| dd if="[$]1" bs=1 count=1 skip=7 2>/dev/null | hexdump -e '1/1 "%3d "' |
| echo |
| } |
| fi |
| AC_MSG_CHECKING([for Java compiler]) |
| dnl |
| dnl The support of GNU gcj for target-version and source-version: |
| dnl |
| dnl gcj 3.0.4 to 4.2 does not have a way to specify the target-version. |
| dnl It always assumes target-version=1.4 but labels the class files as 1.1. |
| dnl One consequence of this is that gcj compiles GetURL.java to invalid |
| dnl bytecode, which crashes with a VerifyError when executed by Sun Java |
| dnl 1.3.1. The bug is registered as java/7066, see |
| dnl http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7066 |
| dnl gcj 4.3 and newer has an option -ftarget=1.X. |
| dnl |
| dnl For gcj < 3.3, the source-version always is 1.3. |
| dnl For 3.3 <= gcj < 4.3, the source-version defaults to 1.4; option |
| dnl "-fno-assert" switches to source-version 1.3. |
| dnl gcj >= 4.3 has an option -fsource=1.X. |
| dnl |
| dnl The support of Sun javac for target-version and source-version: |
| dnl |
| dnl javac 1.3: -target 1.1 1.2 1.3 default: 1.1 |
| dnl source always: 1.3 |
| dnl |
| dnl javac 1.4: -target 1.1 1.2 1.3 1.4 default: 1.2 |
| dnl -source 1.3 1.4 default: 1.3 |
| dnl -target 1.1/1.2/1.3 only possible with -source 1.3 or no -source |
| dnl |
| dnl javac 1.5: -target 1.1 1.2 1.3 1.4 1.5 default: 1.5 |
| dnl -source 1.3 1.4 1.5 default: 1.5 |
| dnl -target 1.1/1.2/1.3 only possible with -source 1.3 |
| dnl -target 1.4 only possible with -source 1.3/1.4 |
| dnl |
| dnl javac 1.6: -target 1.1 1.2 1.3 1.4 1.5 1.6 default: 1.6 |
| dnl -source 1.3 1.4 1.5 1.6 default: 1.5 |
| dnl -target 1.1/1.2/1.3 only possible with -source 1.3 |
| dnl -target 1.4 only possible with -source 1.3/1.4 |
| dnl -target 1.5 only possible with -source 1.3/1.4/1.5 or no -source |
| dnl |
| dnl The support of jikes for target-version and source-version: |
| dnl |
| dnl jikes 1.14 does not have a way to specify the target-version. It |
| dnl always assumes target-version=1.1. |
| dnl |
| dnl For jikes 1.14, the source-version always is 1.3. |
| dnl |
| CONF_JAVAC= |
| HAVE_JAVAC_ENVVAR= |
| HAVE_GCJ_C= |
| HAVE_JAVAC= |
| HAVE_JIKES= |
| HAVE_JAVACOMP= |
| changequote(,)dnl |
| cat > conftestlib.java <<EOF |
| public class conftestlib { |
| public static void main (String[] args) { |
| } |
| } |
| EOF |
| changequote([,])dnl |
| echo "$goodcode" > conftest.java |
| echo "$failcode" > conftestfail.java |
| dnl If the user has set the JAVAC environment variable, use that, if it |
| dnl satisfies the constraints (possibly after adding -target and -source |
| dnl options). |
| if test -n "$JAVAC"; then |
| dnl Try the original $JAVAC. |
| if $JAVAC --version 2>/dev/null | sed -e 1q | grep gcj > /dev/null; then |
| dnl It's a version of gcj. |
| changequote(,)dnl |
| if $JAVAC --version 2>/dev/null | sed -e 's,^[^0-9]*,,' -e 1q | sed -e '/^4\.[012]/d' | grep '^[4-9]' >/dev/null; then |
| changequote([,])dnl |
| dnl It's a version of gcj >= 4.3. Assume the classfile versions are correct. |
| dnl Try $JAVAC. |
| rm -f conftest.class |
| if { echo "$as_me:__oline__: $JAVAC -d . conftest.java" >&AS_MESSAGE_LOG_FD |
| $JAVAC -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftest.class \ |
| && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then |
| dnl Try adding -fsource option if it is useful. |
| rm -f conftest.class |
| rm -f conftestfail.class |
| if { echo "$as_me:__oline__: $JAVAC -fsource=$source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD |
| $JAVAC -fsource="$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftest.class \ |
| && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD \ |
| && { echo "$as_me:__oline__: $JAVAC -d . conftestfail.java" >&AS_MESSAGE_LOG_FD |
| $JAVAC -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftestfail.class \ |
| && ! { echo "$as_me:__oline__: $JAVAC -fsource=$source_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD |
| $JAVAC -fsource="$source_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 |
| }; then |
| CONF_JAVAC="$JAVAC -fsource=$source_version" |
| HAVE_JAVAC_ENVVAR=1 |
| HAVE_JAVACOMP=1 |
| else |
| CONF_JAVAC="$JAVAC" |
| HAVE_JAVAC_ENVVAR=1 |
| HAVE_JAVACOMP=1 |
| fi |
| else |
| dnl Try with -fsource and -ftarget options. |
| rm -f conftest.class |
| rm -f conftestfail.class |
| if { echo "$as_me:__oline__: $JAVAC -fsource=$source_version -ftarget=$target_version -d . conftest.java" >&AS_MESSAGE_LOG_FD |
| $JAVAC -fsource="$source_version" -ftarget="$target_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftest.class \ |
| && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then |
| CONF_JAVAC="$JAVAC -fsource=$source_version -ftarget=$target_version" |
| HAVE_JAVAC_ENVVAR=1 |
| HAVE_JAVACOMP=1 |
| fi |
| fi |
| else |
| dnl It's a version of gcj < 4.3. Ignore the version of conftest.class. |
| if test "$target_version" = 1.4 && test "$source_version" = 1.4; then |
| dnl Try $JAVAC. |
| rm -f conftest.class |
| if { echo "$as_me:__oline__: $JAVAC -d . conftest.java" >&AS_MESSAGE_LOG_FD |
| $JAVAC -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftest.class; then |
| CONF_JAVAC="$JAVAC" |
| HAVE_JAVAC_ENVVAR=1 |
| HAVE_JAVACOMP=1 |
| fi |
| else |
| if test "$target_version" = 1.4 && test "$source_version" = 1.3; then |
| dnl Try $JAVAC and "$JAVAC -fno-assert". But add -fno-assert only if |
| dnl it makes a difference. (It could already be part of $JAVAC.) |
| javac_works= |
| rm -f conftest.class |
| if { echo "$as_me:__oline__: $JAVAC -d . conftest.java" >&AS_MESSAGE_LOG_FD |
| $JAVAC -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftest.class; then |
| javac_works=1 |
| fi |
| javac_noassert_works= |
| rm -f conftest.class |
| if { echo "$as_me:__oline__: $JAVAC -fno-assert -d . conftest.java" >&AS_MESSAGE_LOG_FD |
| $JAVAC -fno-assert -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftest.class; then |
| javac_noassert_works=1 |
| fi |
| if test -n "$javac_works" && test -n "$javac_noassert_works"; then |
| rm -f conftestfail.class |
| if { echo "$as_me:__oline__: $JAVAC -d . conftestfail.java" >&AS_MESSAGE_LOG_FD |
| $JAVAC -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftestfail.class \ |
| && ! { echo "$as_me:__oline__: $JAVAC -fno-assert -d . conftestfail.java" >&AS_MESSAGE_LOG_FD |
| $JAVAC -fno-assert -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 |
| }; then |
| dnl "$JAVAC -fno-assert" works better than $JAVAC. |
| javac_works= |
| fi |
| fi |
| if test -n "$javac_works"; then |
| CONF_JAVAC="$JAVAC" |
| HAVE_JAVAC_ENVVAR=1 |
| HAVE_JAVACOMP=1 |
| else |
| if test -n "$javac_noassert_works"; then |
| CONF_JAVAC="$JAVAC -fno-assert" |
| HAVE_JAVAC_ENVVAR=1 |
| HAVE_JAVACOMP=1 |
| fi |
| fi |
| fi |
| fi |
| fi |
| else |
| dnl It's not gcj. Assume the classfile versions are correct. |
| dnl Try $JAVAC. |
| rm -f conftest.class |
| if { echo "$as_me:__oline__: $JAVAC -d . conftest.java" >&AS_MESSAGE_LOG_FD |
| $JAVAC -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftest.class \ |
| && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then |
| dnl Try adding -source option if it is useful. |
| rm -f conftest.class |
| rm -f conftestfail.class |
| if { echo "$as_me:__oline__: $JAVAC -source $source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD |
| $JAVAC -source "$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftest.class \ |
| && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD \ |
| && { echo "$as_me:__oline__: $JAVAC -d . conftestfail.java" >&AS_MESSAGE_LOG_FD |
| $JAVAC -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftestfail.class \ |
| && ! { echo "$as_me:__oline__: $JAVAC -source $source_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD |
| $JAVAC -source "$source_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 |
| }; then |
| CONF_JAVAC="$JAVAC -source $source_version" |
| HAVE_JAVAC_ENVVAR=1 |
| HAVE_JAVACOMP=1 |
| else |
| CONF_JAVAC="$JAVAC" |
| HAVE_JAVAC_ENVVAR=1 |
| HAVE_JAVACOMP=1 |
| fi |
| else |
| dnl Try with -target option alone. (Sun javac 1.3.1 has the -target |
| dnl option but no -source option.) |
| rm -f conftest.class |
| if { echo "$as_me:__oline__: $JAVAC -target $target_version -d . conftest.java" >&AS_MESSAGE_LOG_FD |
| $JAVAC -target "$target_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftest.class \ |
| && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then |
| dnl Try adding -source option if it is useful. |
| rm -f conftest.class |
| rm -f conftestfail.class |
| if { echo "$as_me:__oline__: $JAVAC -target $target_version -source $source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD |
| $JAVAC -target "$target_version" -source "$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftest.class \ |
| && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD \ |
| && { echo "$as_me:__oline__: $JAVAC -target $target_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD |
| $JAVAC -target "$target_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftestfail.class \ |
| && ! { echo "$as_me:__oline__: $JAVAC -target $target_version -source $source_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD |
| $JAVAC -target "$target_version" -source "$source_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 |
| }; then |
| CONF_JAVAC="$JAVAC -target $target_version -source $source_version" |
| HAVE_JAVAC_ENVVAR=1 |
| HAVE_JAVACOMP=1 |
| else |
| CONF_JAVAC="$JAVAC -target $target_version" |
| HAVE_JAVAC_ENVVAR=1 |
| HAVE_JAVACOMP=1 |
| fi |
| else |
| dnl Maybe this -target option requires a -source option? Try with |
| dnl -target and -source options. (Supported by Sun javac 1.4 and |
| dnl higher.) |
| rm -f conftest.class |
| if { echo "$as_me:__oline__: $JAVAC -target $target_version -source $source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD |
| $JAVAC -target "$target_version" -source "$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftest.class \ |
| && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then |
| CONF_JAVAC="$JAVAC -target $target_version -source $source_version" |
| HAVE_JAVAC_ENVVAR=1 |
| HAVE_JAVACOMP=1 |
| fi |
| fi |
| fi |
| fi |
| fi |
| if test -z "$HAVE_JAVACOMP"; then |
| pushdef([AC_MSG_CHECKING],[:])dnl |
| pushdef([AC_CHECKING],[:])dnl |
| pushdef([AC_MSG_RESULT],[:])dnl |
| AC_CHECK_PROG([HAVE_GCJ_IN_PATH], [gcj], [yes]) |
| AC_CHECK_PROG([HAVE_JAVAC_IN_PATH], [javac], [yes]) |
| AC_CHECK_PROG([HAVE_JIKES_IN_PATH], [jikes], [yes]) |
| popdef([AC_MSG_RESULT])dnl |
| popdef([AC_CHECKING])dnl |
| popdef([AC_MSG_CHECKING])dnl |
| if test -z "$HAVE_JAVACOMP" && test -n "$HAVE_GCJ_IN_PATH"; then |
| dnl Test for a good gcj version (>= 3.0). |
| changequote(,)dnl |
| if gcj --version 2>/dev/null | sed -e 's,^[^0-9]*,,' -e 1q | sed -e '/^3\.[01]/d' | grep '^[3-9]' >/dev/null; then |
| changequote([,])dnl |
| dnl See if libgcj.jar is well installed. |
| if { echo "$as_me:__oline__: gcj -C -d . conftestlib.java" >&AS_MESSAGE_LOG_FD |
| gcj -C -d . conftestlib.java >&AS_MESSAGE_LOG_FD 2>&1 |
| }; then |
| dnl OK, gcj works. |
| changequote(,)dnl |
| if gcj --version 2>/dev/null | sed -e 's,^[^0-9]*,,' -e 1q | sed -e '/^4\.[012]/d' | grep '^[4-9]' >/dev/null; then |
| changequote([,])dnl |
| dnl It's a version of gcj >= 4.3. Assume the classfile versions are correct. |
| dnl Try gcj. |
| rm -f conftest.class |
| if { echo "$as_me:__oline__: gcj -C -d . conftest.java" >&AS_MESSAGE_LOG_FD |
| gcj -C -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftest.class \ |
| && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then |
| dnl Try adding -fsource option if it is useful. |
| rm -f conftest.class |
| rm -f conftestfail.class |
| if { echo "$as_me:__oline__: gcj -C -fsource=$source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD |
| gcj -C -fsource="$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftest.class \ |
| && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD \ |
| && { echo "$as_me:__oline__: gcj -C -d . conftestfail.java" >&AS_MESSAGE_LOG_FD |
| gcj -C -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftestfail.class \ |
| && ! { echo "$as_me:__oline__: gcj -C -fsource=$source_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD |
| gcj -C -fsource="$source_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 |
| }; then |
| CONF_JAVAC="gcj -C -fsource=$source_version" |
| HAVE_JAVAC_ENVVAR=1 |
| HAVE_JAVACOMP=1 |
| else |
| CONF_JAVAC="gcj -C" |
| HAVE_JAVAC_ENVVAR=1 |
| HAVE_JAVACOMP=1 |
| fi |
| else |
| dnl Try with -fsource and -ftarget options. |
| rm -f conftest.class |
| rm -f conftestfail.class |
| if { echo "$as_me:__oline__: gcj -C -fsource=$source_version -ftarget=$target_version -d . conftest.java" >&AS_MESSAGE_LOG_FD |
| gcj -C -fsource="$source_version" -ftarget="$target_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftest.class \ |
| && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then |
| CONF_JAVAC="gcj -C -fsource=$source_version -ftarget=$target_version" |
| HAVE_JAVAC_ENVVAR=1 |
| HAVE_JAVACOMP=1 |
| fi |
| fi |
| else |
| dnl It's a version of gcj < 4.3. Ignore the version of conftest.class. |
| dnl Now test whether it supports the desired target-version and |
| dnl source-version. |
| if test "$target_version" = 1.4 && test "$source_version" = 1.4; then |
| rm -f conftest.class |
| if { echo "$as_me:__oline__: gcj -C -d . conftest.java" >&AS_MESSAGE_LOG_FD |
| gcj -C -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftest.class; then |
| CONF_JAVAC="gcj -C" |
| HAVE_GCJ_C=1 |
| HAVE_JAVACOMP=1 |
| fi |
| else |
| if test "$target_version" = 1.4 && test "$source_version" = 1.3; then |
| dnl Try gcj and "gcj -fno-assert". But add -fno-assert only if |
| dnl it works (not gcj < 3.3). |
| rm -f conftest.class |
| if { echo "$as_me:__oline__: gcj -C -fno-assert -d . conftest.java" >&AS_MESSAGE_LOG_FD |
| gcj -C -fno-assert -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftest.class; then |
| CONF_JAVAC="gcj -C -fno-assert" |
| HAVE_GCJ_C=1 |
| HAVE_JAVACOMP=1 |
| else |
| rm -f conftest.class |
| if { echo "$as_me:__oline__: gcj -C -d . conftest.java" >&AS_MESSAGE_LOG_FD |
| gcj -C -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftest.class; then |
| CONF_JAVAC="gcj -C" |
| HAVE_GCJ_C=1 |
| HAVE_JAVACOMP=1 |
| fi |
| fi |
| fi |
| fi |
| fi |
| fi |
| fi |
| fi |
| if test -z "$HAVE_JAVACOMP" && test -n "$HAVE_JAVAC_IN_PATH"; then |
| dnl Test whether javac is usable. |
| if { javac -version >/dev/null 2>/dev/null || test $? -le 2; } \ |
| && ( if javac -help 2>&1 >/dev/null | grep at.dms.kjc.Main >/dev/null && javac -help 2>/dev/null | grep 'released.*2000' >/dev/null ; then exit 1; else exit 0; fi ); then |
| dnl OK, javac works. |
| dnl Now test whether it supports the desired target-version and |
| dnl source-version. |
| rm -f conftest.class |
| if { echo "$as_me:__oline__: javac -d . conftest.java" >&AS_MESSAGE_LOG_FD |
| javac -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftest.class \ |
| && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then |
| dnl Try adding -source option if it is useful. |
| rm -f conftest.class |
| rm -f conftestfail.class |
| if { echo "$as_me:__oline__: javac -source $source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD |
| javac -source "$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftest.class \ |
| && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD \ |
| && { echo "$as_me:__oline__: javac -d . conftestfail.java" >&AS_MESSAGE_LOG_FD |
| javac -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftestfail.class \ |
| && ! { echo "$as_me:__oline__: javac -source $source_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD |
| javac -source "$source_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 |
| }; then |
| CONF_JAVAC="javac -source $source_version" |
| HAVE_JAVAC=1 |
| HAVE_JAVACOMP=1 |
| else |
| CONF_JAVAC="javac" |
| HAVE_JAVAC=1 |
| HAVE_JAVACOMP=1 |
| fi |
| else |
| dnl Try with -target option alone. (Sun javac 1.3.1 has the -target |
| dnl option but no -source option.) |
| rm -f conftest.class |
| if { echo "$as_me:__oline__: javac -target $target_version -d . conftest.java" >&AS_MESSAGE_LOG_FD |
| javac -target "$target_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftest.class \ |
| && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then |
| dnl Try adding -source option if it is useful. |
| rm -f conftest.class |
| rm -f conftestfail.class |
| if { echo "$as_me:__oline__: javac -target $target_version -source $source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD |
| javac -target "$target_version" -source "$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftest.class \ |
| && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD \ |
| && { echo "$as_me:__oline__: javac -target $target_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD |
| javac -target "$target_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftestfail.class \ |
| && ! { echo "$as_me:__oline__: javac -target $target_version -source $source_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD |
| javac -target "$target_version" -source "$source_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 |
| }; then |
| CONF_JAVAC="javac -target $target_version -source $source_version" |
| HAVE_JAVAC=1 |
| HAVE_JAVACOMP=1 |
| else |
| CONF_JAVAC="javac -target $target_version" |
| HAVE_JAVAC=1 |
| HAVE_JAVACOMP=1 |
| fi |
| else |
| dnl Maybe this -target option requires a -source option? Try with |
| dnl -target and -source options. (Supported by Sun javac 1.4 and |
| dnl higher.) |
| rm -f conftest.class |
| if { echo "$as_me:__oline__: javac -target $target_version -source $source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD |
| javac -target "$target_version" -source "$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 |
| } \ |
| && test -f conftest.class \ |
| && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then |
| CONF_JAVAC="javac -target $target_version -source $source_version" |
| HAVE_JAVAC=1 |
| HAVE_JAVACOMP=1 |
| fi |
| fi |
| fi |
| fi |
| fi |
| if test -z "$HAVE_JAVACOMP" && test -n "$HAVE_JIKES_IN_PATH"; then |
| dnl Test whether jikes is usable. |
| if { jikes >/dev/null 2>/dev/null || test $? = 1; } \ |
| && ( |
| # See if the existing CLASSPATH is sufficient to make jikes work. |
| unset JAVA_HOME |
| jikes conftestlib.java >&AS_MESSAGE_LOG_FD 2>&1 |
| error=$? |
| rm -f conftestlib.class |
| exit $error |
| ); then |
| dnl OK, jikes works. |
| dnl Now test whether it supports the desired target-version and |
| dnl source-version. |
| if test "$source_version" = 1.3; then |
| CONF_JAVAC="jikes" |
| HAVE_JIKES=1 |
| HAVE_JAVACOMP=1 |
| fi |
| fi |
| fi |
| fi |
| rm -f conftest*.java conftest*.class |
| if test -n "$HAVE_JAVACOMP"; then |
| ac_result="$CONF_JAVAC" |
| else |
| ac_result="no" |
| fi |
| AC_MSG_RESULT([$ac_result]) |
| AC_SUBST([CONF_JAVAC]) |
| AC_SUBST([CLASSPATH]) |
| AC_SUBST([CLASSPATH_SEPARATOR]) |
| AC_SUBST([HAVE_JAVAC_ENVVAR]) |
| AC_SUBST([HAVE_GCJ_C]) |
| AC_SUBST([HAVE_JAVAC]) |
| AC_SUBST([HAVE_JIKES]) |
| ]) |