Hi Martin:
I tried building just the openjdk6 jdk repo in (more or less) the usual way
using 'cd jdk/make && make...'
This works in openjdk7 but fails in openjdk6 (and has failed for quite a while)
------------------------------------------------------------
Recursively making smartcardio all @ Sun Apr 5 16:04:57 PDT 2009 ...
make[3]: Entering directory
`/usr/local/google/home/martin/ws/openjdk6/jdk/make/sun/security/smartcardio'
/bin/mkdir -p
../../../../build/linux-i586/tmp/sun/sun.security.smartcardio/j2pcsc/obj_g
rm -f
../../../../build/linux-i586/tmp/sun/sun.security.smartcardio/j2pcsc/obj_g/.class.headers.i586
# Running javah:
/usr/local/google/SLASH_JAVA/re/openjdk/6/promoted/latest/binaries/linux-i586/bin/javah
-bootclasspath ../../../../build/linux-i586/classes -d
../../../../build/linux-i586/tmp/sun/sun.security.smartcardio/j2pcsc/CClassHeaders/
\
sun.security.smartcardio.PCSC
sun.security.smartcardio.PlatformPCSC
error: cannot access sun.security.smartcardio.PCSC
class file for sun.security.smartcardio.PCSC not found
javadoc: error - Class sun.security.smartcardio.PCSC not found.
error: cannot access sun.security.smartcardio.PlatformPCSC
class file for sun.security.smartcardio.PlatformPCSC not found
javadoc: error - Class sun.security.smartcardio.PlatformPCSC not found.
Error: No classes were specified on the command line. Try -help.
make[3]: ***
[../../../../build/linux-i586/tmp/sun/sun.security.smartcardio/j2pcsc/obj_g/.class.headers.i586]
Error 15
make[3]: Leaving directory
`/usr/local/google/home/martin/ws/openjdk6/jdk/make/sun/security/smartcardio'
make[2]: *** [all] Error 1
make[2]: Leaving directory
`/usr/local/google/home/martin/ws/openjdk6/jdk/make/sun/security'
make[1]: *** [all] Error 1
make[1]: Leaving directory
`/usr/local/google/home/martin/ws/openjdk6/jdk/make/sun'
make: *** [all] Error 1
Command /usr/bin/nice /usr/bin/linux32 make SHELL=/bin/bash
VARIANT=DBG sanity all docs images failed: rc=2
------------------------------------------------------------
This fingerprint matches 6668260/6668018
Bug ID: 6668260 build in openjdk/jdk/make fails if openjdk/build exists
Bug ID: 6668018 Incremental/partial OpenJDK builds from jdk/make
subdirectories do not always work
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6668260
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6668018
Did you previously do a control build at the top level? If so, another
workaround is to rename that output directory. In your case, that would be:
mv /usr/local/google/home/martin/ws/openjdk6/build \
/usr/local/google/home/martin/ws/openjdk6/build.ignore
HTH - Tim
It's not obvious why a full control build doesn't encounter this issue.
After much frustrating debugging, I found that it's due to the control build
passing an absolute JDK_TOPDIR to the jdk repo sub-build.
So I have a fine workaround. Define JDK_TOPDIR to the absolute path
of the jdk directory. I still don't know where in the makefiles is a
dependency on JDK_TOPDIR not being relative. The smartcardio Makefile
appears to be blameless. This would be a P2 bug to fix,
were it not for the fact that openjdk6 does not see a lot of development.
Here's a snippet of perl I use in my build script:
{
# Work around bug in openjdk6, that requires an absolute JDK_TOPDIR
use Cwd 'getcwd';
my $dir = getcwd();
while ($dir ne '') {
sub isJdkDir($) { -r "$_[0]/make/common/Program.gmk" }
last if isJdkDir "$dir/jdk";
if (isJdkDir $dir) {
$ENV{JDK_TOPDIR} = $dir;
print "JDK_TOPDIR=$dir\n" if $verbose;
last;
}
$dir =~ s~/[^/]*$~~;
}
}
Hope this helps.
Martin