Hi Erik, Looks good.
As the comment says source only wins over a newer classfile from bootclasspath, usually rt.jar of the building jdk. A newer classfile in the build destination that were compiled in a previous compile won't trigger a recompile. cheers /Joel On 2014-10-28, Erik Joelsson wrote: > Hello, > > Please review this small fix when using sjavac. When using a bootjdk > that was built at a later date than when the source tree was > initially cloned, there is a risk that sjavac will pick up classes > from the boot classpath (rt.jar of boot jdk) instead of the source > files, concluding that the source files won't need to be built. This > is only an issue when building classes that are also present in the > boot classpath of the bootjdk, which we normally do since we are > building the jdk. > > The fix is to add a special option for this use case, which forces > sjavac to build source files if found, regardless of class file > dates. > > Bug: https://bugs.openjdk.java.net/browse/JDK-8047177 > Patch inline: > diff -r 12d3dc35f0e8 make/common/JavaCompilation.gmk > --- a/make/common/JavaCompilation.gmk > +++ b/make/common/JavaCompilation.gmk > @@ -583,8 +583,12 @@ > $$(if $$(filter-out $$($1_SRCS), $$?), $(FIND) $$(@D) -name > "*.class" $(FIND_DELETE)) > $$(call ListPathsSafely,$1_SRCS,\n, >> $$($1_BIN)/_the.$1_batch.tmp) > $(ECHO) Compiling $1 > + # Run with -XXuserPathsFirst to always build source files > even if there happens to > + # be class files in the boot classpath (rt.jar of boot jdk) > with a newer modified > + # time. > ($$($1_JVM) $$($1_SJAVAC) \ > $$($1_REMOTE) \ > + -XXuserPathsFirst \ > -j 1 \ > --permit-unidentified-artifacts \ > --permit-sources-without-package \ > > > /Erik