jdk-repo-only-build broken in openjdk6

Tim Bell Tim.Bell at Sun.COM
Mon Apr 6 21:33:02 UTC 2009


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




More information about the build-dev mailing list