The distcheck part of java.test on Solaris 2.6 fails with | CLASSPATH=.:../.:$CLASSPATH javac -d . ../a.java b.java | error: Can't read: b.java | 1 error | *** Error code 1 | make: Fatal error: Command failed for target `classdist_java.stamp' | Current working directory /tmp/build-sparc-sun-solaris2.6/tests/testSubDir/java-1.0/_build | *** Error code 1 | make: Fatal error: Command failed for target `distcheck' | FAIL: ../../automake-1.9a/tests/java.test
This is interesting and gives a clue to the issue: $ make -n | if test -n "a.java b.java"; then \ | echo 'CLASSPATH=.:../.:$CLASSPATH javac -d . ../a.java b.java' ; \ | CLASSPATH=.:../.:$CLASSPATH javac -d . \ | ../a.java b.java; \ | else :; fi | echo timestamp > classdist_java.stamp make forgets to add the directory for those elements of $? that are not "plain words", i.e., separated by white space. Luckily, all those issues have been fixed in Solaris 2.7 make and onwards. However, IRIX 6.5 make doesn't prepend the VPATH directory part at all. So, now I have two patches here: a hacky but efficient one that fixes things for Solaris only, or a longer one that manually adds $(srcdir) if deemed necessary. What do you think? Cheers, Ralf * lib/am/java.am (class%DIR%.stamp): Make sure `$?' is always expanded as a "plain word", i.e., surrounded by white space, so that Solaris 2.6 make correctly expands the VPATH directory prefix. Index: lib/am/java.am =================================================================== RCS file: /cvs/automake/automake/lib/am/java.am,v retrieving revision 1.24 diff -u -r1.24 java.am --- lib/am/java.am 14 May 2005 20:28:53 -0000 1.24 +++ lib/am/java.am 2 May 2006 19:23:36 -0000 @@ -27,9 +27,11 @@ class%DIR%.stamp: $(%DIR%_JAVA) @if test -n "$?"; then \ - echo '$(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) $?' ; \ +## The spaces after $? are intentional: they cause Solaris 2.6 make to +## behave and expand the VPATH directory part of the last entry of $?. + echo '$(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) $? ' ; \ $(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) \ - $(AM_JAVACFLAGS) $(JAVACFLAGS) $?; \ + $(AM_JAVACFLAGS) $(JAVACFLAGS) $? ; \ else :; fi echo timestamp > class%DIR%.stamp * lib/am/java.am (class%DIR%.stamp): Do not assume `$?' has the path of the prerequisite added; IRIX 6.5 make does not add it, Solaris 2.6 make is inconsistent about adding it. Fixes java.test failure. Index: lib/am/java.am =================================================================== RCS file: /cvs/automake/automake/lib/am/java.am,v retrieving revision 1.24 diff -u -r1.24 java.am --- lib/am/java.am 14 May 2005 20:28:53 -0000 1.24 +++ lib/am/java.am 2 May 2006 19:51:29 -0000 @@ -26,10 +26,13 @@ JAVAROOT = $(top_builddir) class%DIR%.stamp: $(%DIR%_JAVA) - @if test -n "$?"; then \ - echo '$(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) $?' ; \ - $(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) \ - $(AM_JAVACFLAGS) $(JAVACFLAGS) $?; \ + @list1='$?'; list2=; if test -n "$$list1"; then \ + for p in $$list1; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + list2="$$list2 $$d$$p"; \ + done; \ + echo '$(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) '"$$list2"; \ + $(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) $$list2; \ else :; fi echo timestamp > class%DIR%.stamp