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