[fedora-java] ecj problem and patch

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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]);

[Index of Archives]     [Red Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]

  Powered by Linux