As discussed on #fedora-java IRC (irc.freenode.net), The Eclipse batch compiler appears to place bootclasspath before classpath, making it impossible to override classes in libgcj.jar. This is a problem for jpackages wanting to use xml-commons-apis, which provides an alternate version of org.w3c.dom. I produced the following patch, which needs to be applied last in our set of Eclipse patches. Another snag I hit was that the FC4 Eclipse SRPM doesn't build anymore, since the archived make files reference an outdated version of mozilla. swttmp/build.sh should probably contain something like this instead of hardcoded values: GECKO_INCLUDES=`pkg-config mozilla-gtkmozembed --cflags` GECKO_LIBS='pkg-config mozilla-gtkmozembed --libs` But I see that patching this isn't simple because build.sh is extracted from a .zip file at build time. Hopefully overholt has a good idea for fixing this. While eclipse didn't build - it did build enough to give me a jdtcore.jar file I could manually install (after generating jdtcore.jar.so by hand). My tests of the patched compiler indicate that this is a step closer to the right solution. Can we get this into FC4 and rawhide? AG
*** plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/M.java 2005-08-23 12:20:44.000000000 -0700 --- plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/Main.java 2005-08-23 15:35:07.000000000 -0700 *************** public class Main implements ProblemSeve *** 2204,2212 **** this.classpaths = new String[0]; } /* ! * We put the bootclasspath at the beginning of the classpath ! * entries, followed by the extension libraries, followed by ! * the sourcepath followed by the classpath. All classpath * entries are searched for both sources and binaries except * the sourcepath entries which are searched for sources only. */ --- 2204,2212 ---- this.classpaths = new String[0]; } /* ! * We put the sourcepath at the beginning of the classpath ! * entries, followed by the classpath, followed by the ! * extensions libraries followed by the bootclasspath. All classpath * entries are searched for both sources and binaries except * the sourcepath entries which are searched for sources only. */ *************** public class Main implements ProblemSeve *** 2224,2268 **** for (int i = 0; i < classpathModes.length; i++) classpathModes[i] = (ClasspathDirectory.SOURCE | ClasspathDirectory.BINARY); ! // copy classpath ! System.arraycopy( ! this.classpaths, ! 0, ! newclasspaths, ! bootclasspathCount + extlibsCount + sourcepathCount, ! pathCount); ! ! // copy sourcepath ! if (sourcepathCount != 0) { System.arraycopy( ! sourcepaths, 0, newclasspaths, ! bootclasspathCount + extlibsCount, ! sourcepathCount); ! for (int i = bootclasspathCount + extlibsCount; i < bootclasspathCount + extlibsCount + sourcepathCount; i++) ! classpathModes[i] = ClasspathDirectory.SOURCE; } ! // copy extlibs if (extlibsCount != 0) { System.arraycopy( extlibs, 0, newclasspaths, ! bootclasspathCount, extlibsCount); } ! // copy bootclasspath ! if (bootclasspathCount != 0) { System.arraycopy( ! bootclasspaths, 0, newclasspaths, 0, ! bootclasspathCount); } this.classpaths = newclasspaths; for (int i = 0, max = this.classpaths.length; i < max; i++) { File file = new File(this.classpaths[i]); --- 2224,2270 ---- for (int i = 0; i < classpathModes.length; i++) classpathModes[i] = (ClasspathDirectory.SOURCE | ClasspathDirectory.BINARY); ! // copy bootclasspath ! if (bootclasspathCount != 0) { System.arraycopy( ! bootclasspaths, 0, newclasspaths, ! sourcepathCount + pathCount + extlibsCount, ! bootclasspathCount); } ! // copy extlibs if (extlibsCount != 0) { System.arraycopy( extlibs, 0, newclasspaths, ! sourcepathCount + pathCount, extlibsCount); } ! // copy classpath ! System.arraycopy( ! this.classpaths, ! 0, ! newclasspaths, ! sourcepathCount, ! pathCount); ! ! // copy sourcepath ! if (sourcepathCount != 0) { System.arraycopy( ! sourcepaths, 0, newclasspaths, 0, ! sourcepathCount); ! ! for (int i = 0; i < sourcepathCount; i++) ! classpathModes[i] = ClasspathDirectory.SOURCE; } + this.classpaths = newclasspaths; for (int i = 0, max = this.classpaths.length; i < max; i++) { File file = new File(this.classpaths[i]);