1# javacomp.m4 serial 12 2dnl Copyright (C) 2001-2003, 2006-2007, 2009-2012 Free Software Foundation, 3dnl Inc. 4dnl This file is free software; the Free Software Foundation 5dnl gives unlimited permission to copy and/or distribute it, 6dnl with or without modifications, as long as this notice is preserved. 7 8# Prerequisites of javacomp.sh. 9# gt_JAVACOMP([source-version], [target-version]) 10# Sets HAVE_JAVACOMP to nonempty if javacomp.sh will allow Java source code 11# according to source-version to be compiled to Java bytecode classes in the 12# target-version format. 13# 14# source-version can be: support for 15# 1.3 inner classes 16# 1.4 assert keyword 17# 1.5 generic classes and methods 18# 1.6 (not yet supported) 19# 20# target-version can be: classfile version: 21# 1.1 45.3 22# 1.2 46.0 23# 1.3 47.0 24# 1.4 48.0 25# 1.5 49.0 26# 1.6 50.0 27# The classfile version of a .class file can be determined through the "file" 28# command. More portably, the classfile major version can be determined through 29# "od -A n -t d1 -j 7 -N 1 classfile". 30# target-version can also be omitted. In this case, the required target-version 31# is determined from the found JVM (see macro gt_JAVAEXEC): 32# target-version for JVM 33# 1.1 JDK 1.1, jview 34# 1.2 JDK/JRE 1.2 35# 1.3 JDK/JRE 1.3, gij 3.3, 3.4 36# 1.4 JDK/JRE 1.4, gij 4.0, 4.1 37# 1.5 JDK/JRE 1.5 38# 1.6 JDK/JRE 1.6 39# Note: gij >= 3.3 can in some cases handle classes compiled with -target 1.4, 40# and gij >= 4.1 can in some cases partially handle classes compiled with 41# -target 1.5, but I have no idea how complete this support is. 42# 43# Specifying target-version is useful when building a library (.jar) that is 44# useful outside the given package. Omitting target-version is useful when 45# building an application. 46# 47# It is unreasonable to ask for: 48# - target-version < 1.4 with source-version >= 1.4, or 49# - target-version < 1.5 with source-version >= 1.5, or 50# - target-version < 1.6 with source-version >= 1.6, 51# because even Sun's javac doesn't support these combinations. 52# 53# It is redundant to ask for a target-version > source-version, since the 54# smaller target-version = source-version will also always work and newer JVMs 55# support the older target-versions too. Except for the case 56# target-version = 1.4, source-version = 1.3, which allows gcj versions 3.0 57# to 3.2 to be used. 58 59AC_DEFUN([gt_JAVACOMP], 60[ 61 ifelse([$2], [], [AC_REQUIRE([gt_JAVAEXEC])], []) 62 AC_EGREP_CPP([yes], [ 63#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ 64 yes 65#endif 66], CLASSPATH_SEPARATOR=';', CLASSPATH_SEPARATOR=':') 67 source_version=$1 68 test -n "$source_version" || { 69 AC_MSG_ERROR([missing source-version argument to gt_@&t@JAVACOMP]) 70 } 71 ifelse([$2], [], 72 [if test -n "$HAVE_JAVAEXEC"; then 73 dnl Use $CONF_JAVA to determine the JVM's version. 74changequote(,)dnl 75 cat > conftestver.java <<EOF 76public class conftestver { 77 public static void main (String[] args) { 78 System.out.println(System.getProperty("java.specification.version")); 79 } 80} 81EOF 82changequote([,])dnl 83 dnl A precompiled version of conftestver.java, compiled with 84 dnl "javac -target 1.1". This avoids having to compile conftestver.java 85 dnl during each test for a suitable Java compiler. 86 dnl For the conversion from binary to this ASCII encapsulation, avoiding 87 dnl to assume the presence of uudecode, use the command 88 dnl $ od -A n -t o1 < conftestver.class | tr ' ' '\012'| sort | uniq | sed -e '/^$/d' -e 's,^,\\,' | tr -d '\012' 89 dnl and the long tr command in opposite direction. 90 dnl Finally move the position corresponding to \055 to the last position, 91 dnl to work around a coreutils-5.x bug. 92 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' \ 93 | tr -d '\012\015' \ 94 | 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' \ 95 > conftestver.class 96 target_version=`{ 97 unset JAVA_HOME 98 echo "$as_me:__oline__: CLASSPATH=.${CLASSPATH:+$CLASSPATH_SEPARATOR$CLASSPATH} $CONF_JAVA conftestver" >&AS_MESSAGE_LOG_FD 99 CLASSPATH=.${CLASSPATH:+$CLASSPATH_SEPARATOR$CLASSPATH} $CONF_JAVA conftestver 2>&AS_MESSAGE_LOG_FD 100 }` 101 case "$target_version" in 102 1.1 | 1.2 | 1.3 | 1.4 | 1.5 | 1.6) ;; 103 null) 104 dnl JDK 1.1.X returns null. 105 target_version=1.1 ;; 106 *) AC_MSG_WARN([unknown target-version $target_version, please update gt_@&t@JAVACOMP macro]) 107 target_version=1.1 ;; 108 esac 109 else 110 target_version="1.1" 111 fi 112 ], 113 [target_version=$2]) 114 case "$source_version" in 115 1.3) goodcode='class conftest {}' 116 failcode='class conftestfail { static { assert(true); } }' ;; 117 1.4) goodcode='class conftest { static { assert(true); } }' 118 failcode='class conftestfail<T> { T foo() { return null; } }' ;; 119 1.5) goodcode='class conftest<T> { T foo() { return null; } }' 120 failcode='class conftestfail syntax error' ;; 121 *) AC_MSG_ERROR([invalid source-version argument to gt_@&t@JAVACOMP: $source_version]) ;; 122 esac 123 case "$target_version" in 124 1.1) cfversion=45 ;; 125 1.2) cfversion=46 ;; 126 1.3) cfversion=47 ;; 127 1.4) cfversion=48 ;; 128 1.5) cfversion=49 ;; 129 1.6) cfversion=50 ;; 130 *) AC_MSG_ERROR([invalid target-version argument to gt_@&t@JAVACOMP: $target_version]) ;; 131 esac 132 # Function to output the classfile version of a file (8th byte) in decimal. 133 if od -A x < /dev/null >/dev/null 2>/dev/null; then 134 # Use POSIX od. 135 func_classfile_version () 136 { 137 od -A n -t d1 -j 7 -N 1 "[$]1" 138 } 139 else 140 # Use BSD hexdump. 141 func_classfile_version () 142 { 143 dd if="[$]1" bs=1 count=1 skip=7 2>/dev/null | hexdump -e '1/1 "%3d "' 144 echo 145 } 146 fi 147 AC_MSG_CHECKING([for Java compiler]) 148 dnl 149 dnl The support of GNU gcj for target-version and source-version: 150 dnl 151 dnl gcj 3.0.4 to 4.2 does not have a way to specify the target-version. 152 dnl It always assumes target-version=1.4 but labels the class files as 1.1. 153 dnl One consequence of this is that gcj compiles GetURL.java to invalid 154 dnl bytecode, which crashes with a VerifyError when executed by Sun Java 155 dnl 1.3.1. The bug is registered as java/7066, see 156 dnl http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7066 157 dnl gcj 4.3 and newer has an option -ftarget=1.X. 158 dnl 159 dnl For gcj < 3.3, the source-version always is 1.3. 160 dnl For 3.3 <= gcj < 4.3, the source-version defaults to 1.4; option 161 dnl "-fno-assert" switches to source-version 1.3. 162 dnl gcj >= 4.3 has an option -fsource=1.X. 163 dnl 164 dnl The support of Sun javac for target-version and source-version: 165 dnl 166 dnl javac 1.3: -target 1.1 1.2 1.3 default: 1.1 167 dnl source always: 1.3 168 dnl 169 dnl javac 1.4: -target 1.1 1.2 1.3 1.4 default: 1.2 170 dnl -source 1.3 1.4 default: 1.3 171 dnl -target 1.1/1.2/1.3 only possible with -source 1.3 or no -source 172 dnl 173 dnl javac 1.5: -target 1.1 1.2 1.3 1.4 1.5 default: 1.5 174 dnl -source 1.3 1.4 1.5 default: 1.5 175 dnl -target 1.1/1.2/1.3 only possible with -source 1.3 176 dnl -target 1.4 only possible with -source 1.3/1.4 177 dnl 178 dnl javac 1.6: -target 1.1 1.2 1.3 1.4 1.5 1.6 default: 1.6 179 dnl -source 1.3 1.4 1.5 1.6 default: 1.5 180 dnl -target 1.1/1.2/1.3 only possible with -source 1.3 181 dnl -target 1.4 only possible with -source 1.3/1.4 182 dnl -target 1.5 only possible with -source 1.3/1.4/1.5 or no -source 183 dnl 184 dnl The support of jikes for target-version and source-version: 185 dnl 186 dnl jikes 1.14 does not have a way to specify the target-version. It 187 dnl always assumes target-version=1.1. 188 dnl 189 dnl For jikes 1.14, the source-version always is 1.3. 190 dnl 191 CONF_JAVAC= 192 HAVE_JAVAC_ENVVAR= 193 HAVE_GCJ_C= 194 HAVE_JAVAC= 195 HAVE_JIKES= 196 HAVE_JAVACOMP= 197changequote(,)dnl 198 cat > conftestlib.java <<EOF 199public class conftestlib { 200 public static void main (String[] args) { 201 } 202} 203EOF 204changequote([,])dnl 205 echo "$goodcode" > conftest.java 206 echo "$failcode" > conftestfail.java 207 dnl If the user has set the JAVAC environment variable, use that, if it 208 dnl satisfies the constraints (possibly after adding -target and -source 209 dnl options). 210 if test -n "$JAVAC"; then 211 dnl Try the original $JAVAC. 212 if $JAVAC --version 2>/dev/null | sed -e 1q | grep gcj > /dev/null; then 213 dnl It's a version of gcj. 214changequote(,)dnl 215 if $JAVAC --version 2>/dev/null | sed -e 's,^[^0-9]*,,' -e 1q | sed -e '/^4\.[012]/d' | grep '^[4-9]' >/dev/null; then 216changequote([,])dnl 217 dnl It's a version of gcj >= 4.3. Assume the classfile versions are correct. 218 dnl Try $JAVAC. 219 rm -f conftest.class 220 if { echo "$as_me:__oline__: $JAVAC -d . conftest.java" >&AS_MESSAGE_LOG_FD 221 $JAVAC -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 222 } \ 223 && test -f conftest.class \ 224 && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then 225 dnl Try adding -fsource option if it is useful. 226 rm -f conftest.class 227 rm -f conftestfail.class 228 if { echo "$as_me:__oline__: $JAVAC -fsource=$source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD 229 $JAVAC -fsource="$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 230 } \ 231 && test -f conftest.class \ 232 && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD \ 233 && { echo "$as_me:__oline__: $JAVAC -d . conftestfail.java" >&AS_MESSAGE_LOG_FD 234 $JAVAC -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 235 } \ 236 && test -f conftestfail.class \ 237 && ! { echo "$as_me:__oline__: $JAVAC -fsource=$source_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD 238 $JAVAC -fsource="$source_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 239 }; then 240 CONF_JAVAC="$JAVAC -fsource=$source_version" 241 HAVE_JAVAC_ENVVAR=1 242 HAVE_JAVACOMP=1 243 else 244 CONF_JAVAC="$JAVAC" 245 HAVE_JAVAC_ENVVAR=1 246 HAVE_JAVACOMP=1 247 fi 248 else 249 dnl Try with -fsource and -ftarget options. 250 rm -f conftest.class 251 rm -f conftestfail.class 252 if { echo "$as_me:__oline__: $JAVAC -fsource=$source_version -ftarget=$target_version -d . conftest.java" >&AS_MESSAGE_LOG_FD 253 $JAVAC -fsource="$source_version" -ftarget="$target_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 254 } \ 255 && test -f conftest.class \ 256 && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then 257 CONF_JAVAC="$JAVAC -fsource=$source_version -ftarget=$target_version" 258 HAVE_JAVAC_ENVVAR=1 259 HAVE_JAVACOMP=1 260 fi 261 fi 262 else 263 dnl It's a version of gcj < 4.3. Ignore the version of conftest.class. 264 if test "$target_version" = 1.4 && test "$source_version" = 1.4; then 265 dnl Try $JAVAC. 266 rm -f conftest.class 267 if { echo "$as_me:__oline__: $JAVAC -d . conftest.java" >&AS_MESSAGE_LOG_FD 268 $JAVAC -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 269 } \ 270 && test -f conftest.class; then 271 CONF_JAVAC="$JAVAC" 272 HAVE_JAVAC_ENVVAR=1 273 HAVE_JAVACOMP=1 274 fi 275 else 276 if test "$target_version" = 1.4 && test "$source_version" = 1.3; then 277 dnl Try $JAVAC and "$JAVAC -fno-assert". But add -fno-assert only if 278 dnl it makes a difference. (It could already be part of $JAVAC.) 279 javac_works= 280 rm -f conftest.class 281 if { echo "$as_me:__oline__: $JAVAC -d . conftest.java" >&AS_MESSAGE_LOG_FD 282 $JAVAC -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 283 } \ 284 && test -f conftest.class; then 285 javac_works=1 286 fi 287 javac_noassert_works= 288 rm -f conftest.class 289 if { echo "$as_me:__oline__: $JAVAC -fno-assert -d . conftest.java" >&AS_MESSAGE_LOG_FD 290 $JAVAC -fno-assert -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 291 } \ 292 && test -f conftest.class; then 293 javac_noassert_works=1 294 fi 295 if test -n "$javac_works" && test -n "$javac_noassert_works"; then 296 rm -f conftestfail.class 297 if { echo "$as_me:__oline__: $JAVAC -d . conftestfail.java" >&AS_MESSAGE_LOG_FD 298 $JAVAC -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 299 } \ 300 && test -f conftestfail.class \ 301 && ! { echo "$as_me:__oline__: $JAVAC -fno-assert -d . conftestfail.java" >&AS_MESSAGE_LOG_FD 302 $JAVAC -fno-assert -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 303 }; then 304 dnl "$JAVAC -fno-assert" works better than $JAVAC. 305 javac_works= 306 fi 307 fi 308 if test -n "$javac_works"; then 309 CONF_JAVAC="$JAVAC" 310 HAVE_JAVAC_ENVVAR=1 311 HAVE_JAVACOMP=1 312 else 313 if test -n "$javac_noassert_works"; then 314 CONF_JAVAC="$JAVAC -fno-assert" 315 HAVE_JAVAC_ENVVAR=1 316 HAVE_JAVACOMP=1 317 fi 318 fi 319 fi 320 fi 321 fi 322 else 323 dnl It's not gcj. Assume the classfile versions are correct. 324 dnl Try $JAVAC. 325 rm -f conftest.class 326 if { echo "$as_me:__oline__: $JAVAC -d . conftest.java" >&AS_MESSAGE_LOG_FD 327 $JAVAC -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 328 } \ 329 && test -f conftest.class \ 330 && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then 331 dnl Try adding -source option if it is useful. 332 rm -f conftest.class 333 rm -f conftestfail.class 334 if { echo "$as_me:__oline__: $JAVAC -source $source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD 335 $JAVAC -source "$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 336 } \ 337 && test -f conftest.class \ 338 && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD \ 339 && { echo "$as_me:__oline__: $JAVAC -d . conftestfail.java" >&AS_MESSAGE_LOG_FD 340 $JAVAC -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 341 } \ 342 && test -f conftestfail.class \ 343 && ! { echo "$as_me:__oline__: $JAVAC -source $source_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD 344 $JAVAC -source "$source_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 345 }; then 346 CONF_JAVAC="$JAVAC -source $source_version" 347 HAVE_JAVAC_ENVVAR=1 348 HAVE_JAVACOMP=1 349 else 350 CONF_JAVAC="$JAVAC" 351 HAVE_JAVAC_ENVVAR=1 352 HAVE_JAVACOMP=1 353 fi 354 else 355 dnl Try with -target option alone. (Sun javac 1.3.1 has the -target 356 dnl option but no -source option.) 357 rm -f conftest.class 358 if { echo "$as_me:__oline__: $JAVAC -target $target_version -d . conftest.java" >&AS_MESSAGE_LOG_FD 359 $JAVAC -target "$target_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 360 } \ 361 && test -f conftest.class \ 362 && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then 363 dnl Try adding -source option if it is useful. 364 rm -f conftest.class 365 rm -f conftestfail.class 366 if { echo "$as_me:__oline__: $JAVAC -target $target_version -source $source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD 367 $JAVAC -target "$target_version" -source "$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 368 } \ 369 && test -f conftest.class \ 370 && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD \ 371 && { echo "$as_me:__oline__: $JAVAC -target $target_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD 372 $JAVAC -target "$target_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 373 } \ 374 && test -f conftestfail.class \ 375 && ! { echo "$as_me:__oline__: $JAVAC -target $target_version -source $source_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD 376 $JAVAC -target "$target_version" -source "$source_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 377 }; then 378 CONF_JAVAC="$JAVAC -target $target_version -source $source_version" 379 HAVE_JAVAC_ENVVAR=1 380 HAVE_JAVACOMP=1 381 else 382 CONF_JAVAC="$JAVAC -target $target_version" 383 HAVE_JAVAC_ENVVAR=1 384 HAVE_JAVACOMP=1 385 fi 386 else 387 dnl Maybe this -target option requires a -source option? Try with 388 dnl -target and -source options. (Supported by Sun javac 1.4 and 389 dnl higher.) 390 rm -f conftest.class 391 if { echo "$as_me:__oline__: $JAVAC -target $target_version -source $source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD 392 $JAVAC -target "$target_version" -source "$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 393 } \ 394 && test -f conftest.class \ 395 && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then 396 CONF_JAVAC="$JAVAC -target $target_version -source $source_version" 397 HAVE_JAVAC_ENVVAR=1 398 HAVE_JAVACOMP=1 399 fi 400 fi 401 fi 402 fi 403 fi 404 if test -z "$HAVE_JAVACOMP"; then 405 pushdef([AC_MSG_CHECKING],[:])dnl 406 pushdef([AC_CHECKING],[:])dnl 407 pushdef([AC_MSG_RESULT],[:])dnl 408 AC_CHECK_PROG([HAVE_GCJ_IN_PATH], [gcj], [yes]) 409 AC_CHECK_PROG([HAVE_JAVAC_IN_PATH], [javac], [yes]) 410 AC_CHECK_PROG([HAVE_JIKES_IN_PATH], [jikes], [yes]) 411 popdef([AC_MSG_RESULT])dnl 412 popdef([AC_CHECKING])dnl 413 popdef([AC_MSG_CHECKING])dnl 414 if test -z "$HAVE_JAVACOMP" && test -n "$HAVE_GCJ_IN_PATH"; then 415 dnl Test for a good gcj version (>= 3.0). 416changequote(,)dnl 417 if gcj --version 2>/dev/null | sed -e 's,^[^0-9]*,,' -e 1q | sed -e '/^3\.[01]/d' | grep '^[3-9]' >/dev/null; then 418changequote([,])dnl 419 dnl See if libgcj.jar is well installed. 420 if { echo "$as_me:__oline__: gcj -C -d . conftestlib.java" >&AS_MESSAGE_LOG_FD 421 gcj -C -d . conftestlib.java >&AS_MESSAGE_LOG_FD 2>&1 422 }; then 423 dnl OK, gcj works. 424changequote(,)dnl 425 if gcj --version 2>/dev/null | sed -e 's,^[^0-9]*,,' -e 1q | sed -e '/^4\.[012]/d' | grep '^[4-9]' >/dev/null; then 426changequote([,])dnl 427 dnl It's a version of gcj >= 4.3. Assume the classfile versions are correct. 428 dnl Try gcj. 429 rm -f conftest.class 430 if { echo "$as_me:__oline__: gcj -C -d . conftest.java" >&AS_MESSAGE_LOG_FD 431 gcj -C -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 432 } \ 433 && test -f conftest.class \ 434 && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then 435 dnl Try adding -fsource option if it is useful. 436 rm -f conftest.class 437 rm -f conftestfail.class 438 if { echo "$as_me:__oline__: gcj -C -fsource=$source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD 439 gcj -C -fsource="$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 440 } \ 441 && test -f conftest.class \ 442 && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD \ 443 && { echo "$as_me:__oline__: gcj -C -d . conftestfail.java" >&AS_MESSAGE_LOG_FD 444 gcj -C -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 445 } \ 446 && test -f conftestfail.class \ 447 && ! { echo "$as_me:__oline__: gcj -C -fsource=$source_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD 448 gcj -C -fsource="$source_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 449 }; then 450 CONF_JAVAC="gcj -C -fsource=$source_version" 451 HAVE_JAVAC_ENVVAR=1 452 HAVE_JAVACOMP=1 453 else 454 CONF_JAVAC="gcj -C" 455 HAVE_JAVAC_ENVVAR=1 456 HAVE_JAVACOMP=1 457 fi 458 else 459 dnl Try with -fsource and -ftarget options. 460 rm -f conftest.class 461 rm -f conftestfail.class 462 if { echo "$as_me:__oline__: gcj -C -fsource=$source_version -ftarget=$target_version -d . conftest.java" >&AS_MESSAGE_LOG_FD 463 gcj -C -fsource="$source_version" -ftarget="$target_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 464 } \ 465 && test -f conftest.class \ 466 && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then 467 CONF_JAVAC="gcj -C -fsource=$source_version -ftarget=$target_version" 468 HAVE_JAVAC_ENVVAR=1 469 HAVE_JAVACOMP=1 470 fi 471 fi 472 else 473 dnl It's a version of gcj < 4.3. Ignore the version of conftest.class. 474 dnl Now test whether it supports the desired target-version and 475 dnl source-version. 476 if test "$target_version" = 1.4 && test "$source_version" = 1.4; then 477 rm -f conftest.class 478 if { echo "$as_me:__oline__: gcj -C -d . conftest.java" >&AS_MESSAGE_LOG_FD 479 gcj -C -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 480 } \ 481 && test -f conftest.class; then 482 CONF_JAVAC="gcj -C" 483 HAVE_GCJ_C=1 484 HAVE_JAVACOMP=1 485 fi 486 else 487 if test "$target_version" = 1.4 && test "$source_version" = 1.3; then 488 dnl Try gcj and "gcj -fno-assert". But add -fno-assert only if 489 dnl it works (not gcj < 3.3). 490 rm -f conftest.class 491 if { echo "$as_me:__oline__: gcj -C -fno-assert -d . conftest.java" >&AS_MESSAGE_LOG_FD 492 gcj -C -fno-assert -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 493 } \ 494 && test -f conftest.class; then 495 CONF_JAVAC="gcj -C -fno-assert" 496 HAVE_GCJ_C=1 497 HAVE_JAVACOMP=1 498 else 499 rm -f conftest.class 500 if { echo "$as_me:__oline__: gcj -C -d . conftest.java" >&AS_MESSAGE_LOG_FD 501 gcj -C -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 502 } \ 503 && test -f conftest.class; then 504 CONF_JAVAC="gcj -C" 505 HAVE_GCJ_C=1 506 HAVE_JAVACOMP=1 507 fi 508 fi 509 fi 510 fi 511 fi 512 fi 513 fi 514 fi 515 if test -z "$HAVE_JAVACOMP" && test -n "$HAVE_JAVAC_IN_PATH"; then 516 dnl Test whether javac is usable. 517 if { javac -version >/dev/null 2>/dev/null || test $? -le 2; } \ 518 && ( 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 519 dnl OK, javac works. 520 dnl Now test whether it supports the desired target-version and 521 dnl source-version. 522 rm -f conftest.class 523 if { echo "$as_me:__oline__: javac -d . conftest.java" >&AS_MESSAGE_LOG_FD 524 javac -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 525 } \ 526 && test -f conftest.class \ 527 && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then 528 dnl Try adding -source option if it is useful. 529 rm -f conftest.class 530 rm -f conftestfail.class 531 if { echo "$as_me:__oline__: javac -source $source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD 532 javac -source "$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 533 } \ 534 && test -f conftest.class \ 535 && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD \ 536 && { echo "$as_me:__oline__: javac -d . conftestfail.java" >&AS_MESSAGE_LOG_FD 537 javac -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 538 } \ 539 && test -f conftestfail.class \ 540 && ! { echo "$as_me:__oline__: javac -source $source_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD 541 javac -source "$source_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 542 }; then 543 CONF_JAVAC="javac -source $source_version" 544 HAVE_JAVAC=1 545 HAVE_JAVACOMP=1 546 else 547 CONF_JAVAC="javac" 548 HAVE_JAVAC=1 549 HAVE_JAVACOMP=1 550 fi 551 else 552 dnl Try with -target option alone. (Sun javac 1.3.1 has the -target 553 dnl option but no -source option.) 554 rm -f conftest.class 555 if { echo "$as_me:__oline__: javac -target $target_version -d . conftest.java" >&AS_MESSAGE_LOG_FD 556 javac -target "$target_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 557 } \ 558 && test -f conftest.class \ 559 && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then 560 dnl Try adding -source option if it is useful. 561 rm -f conftest.class 562 rm -f conftestfail.class 563 if { echo "$as_me:__oline__: javac -target $target_version -source $source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD 564 javac -target "$target_version" -source "$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 565 } \ 566 && test -f conftest.class \ 567 && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD \ 568 && { echo "$as_me:__oline__: javac -target $target_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD 569 javac -target "$target_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 570 } \ 571 && test -f conftestfail.class \ 572 && ! { echo "$as_me:__oline__: javac -target $target_version -source $source_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD 573 javac -target "$target_version" -source "$source_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 574 }; then 575 CONF_JAVAC="javac -target $target_version -source $source_version" 576 HAVE_JAVAC=1 577 HAVE_JAVACOMP=1 578 else 579 CONF_JAVAC="javac -target $target_version" 580 HAVE_JAVAC=1 581 HAVE_JAVACOMP=1 582 fi 583 else 584 dnl Maybe this -target option requires a -source option? Try with 585 dnl -target and -source options. (Supported by Sun javac 1.4 and 586 dnl higher.) 587 rm -f conftest.class 588 if { echo "$as_me:__oline__: javac -target $target_version -source $source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD 589 javac -target "$target_version" -source "$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 590 } \ 591 && test -f conftest.class \ 592 && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then 593 CONF_JAVAC="javac -target $target_version -source $source_version" 594 HAVE_JAVAC=1 595 HAVE_JAVACOMP=1 596 fi 597 fi 598 fi 599 fi 600 fi 601 if test -z "$HAVE_JAVACOMP" && test -n "$HAVE_JIKES_IN_PATH"; then 602 dnl Test whether jikes is usable. 603 if { jikes >/dev/null 2>/dev/null || test $? = 1; } \ 604 && ( 605 # See if the existing CLASSPATH is sufficient to make jikes work. 606 unset JAVA_HOME 607 jikes conftestlib.java >&AS_MESSAGE_LOG_FD 2>&1 608 error=$? 609 rm -f conftestlib.class 610 exit $error 611 ); then 612 dnl OK, jikes works. 613 dnl Now test whether it supports the desired target-version and 614 dnl source-version. 615 if test "$source_version" = 1.3; then 616 CONF_JAVAC="jikes" 617 HAVE_JIKES=1 618 HAVE_JAVACOMP=1 619 fi 620 fi 621 fi 622 fi 623 rm -f conftest*.java conftest*.class 624 if test -n "$HAVE_JAVACOMP"; then 625 ac_result="$CONF_JAVAC" 626 else 627 ac_result="no" 628 fi 629 AC_MSG_RESULT([$ac_result]) 630 AC_SUBST([CONF_JAVAC]) 631 AC_SUBST([CLASSPATH]) 632 AC_SUBST([CLASSPATH_SEPARATOR]) 633 AC_SUBST([HAVE_JAVAC_ENVVAR]) 634 AC_SUBST([HAVE_GCJ_C]) 635 AC_SUBST([HAVE_JAVAC]) 636 AC_SUBST([HAVE_JIKES]) 637]) 638