Proposal: eliminate GNU Classpath <-> libgcj merging

Bryce McKinlay mckinlay@redhat.com
Tue Feb 15 23:30:00 GMT 2005


Thomas Fitzsimmons wrote:
>On IRC today, we discussed ways to eliminate the need for merging
>between GNU Classpath and libgcj. We came up with this potential
>solution:
>>In the GCC repository, we'd add a new sub-directory,
>gcc/libjava/classpath. This directory would contain a recent snapshot
>of Classpath. How recent is up for debate as I'll explain later.
>>The gcj-specific parts of libgcj would still reside in gcc/libjava but
>all the Classpath/libgcj shared code would reside in
>gcc/libjava/classpath.
>>We'd add a --with-libgcj option to Classpath's configury that would
>allow Classpath to be built as part of libgcj, looking for libgcj-
>specific code in "..". Otherwise Classpath CVS would remain the same as
>it is now.
>>
Rather than modify classpath's configury to be aware of native GCJ 
builds, I think it would be more pragmatic modify libgcj's configury to 
be aware of classpath. We'd maintain a list of unmerged classes - things 
like Object, String and the VM* classes, for example, for which the 
libgcj versions would be kept outside of gcc/libjava/classpath/, and 
compile those in preference to any matching class found in 
gcc/libjava/classpath/.
This would provide a bit more flexibility to change the way things get 
built in the native environment, rather than trying to shoehorn native 
compilation support into classpath's configury which isn't really set up 
for it.
>- Is the risk of build-breakage increased? For example if a libgcj
>developer makes a libgcj-specific change that depends on Classpath CVS
>HEAD, the build will be broken until the next Classpath ->
>gcc/libjava/classpath merge.
>>Yes, this would definitely be a concern. Having libgcj developers using 
a different version of classpath to what is actually checked into CVS 
would be a very bad idea! If something depends on the newest Classpath 
HEAD, then that developer would need to check in the latest Classpath 
along with the other changes. Its inevitable that certain compiler and 
VM/runtime patches will require simultaneous changes to generic class 
libraries.
Likewise, if a libgcj developer fixes an important class library bug 
affecting GCJ applications, then we need the ability to have that fix 
reflected immediately in the libgcj tree - not wait until a subsequent 
merge.
So, perhaps we need to allow interim fixes to be committed to 
gcc/libjava/classpath/, between merges. Of course, this would come with 
the strict rule that any such patches must be committed simultaneously 
to the classpath HEAD! That way, merging the latest classpath would 
remain as simple as dropping it into the libgcj tree.
>- How would this affect casual builders of libgcj? It would mean that
>an extra step would be required to take advantage of Classpath CVS HEAD.
>>Since merges will now be trivial, we could do classpath->libgcj drops 
weekly or whenever we feel that enough has changed upstream to make it 
worthwhile. Casual builders of libgcj will use whatever classpath we 
happen to have in a given tree or release - this is the version will 
have been tested as part of libgcj, and they're unlikely to care that it 
may not always be current classpath HEAD.
In fact, for a casual user, things wouldn't be much different from the 
status quo, except that we should be better about keeping everything 
current with Classpath.
>Obviously any action we take on this will have to wait until 4.0 has
>branched, but I'd like to see this discussed at FOSDEM. Merging is a
>tedious process that takes time away from real development.
>>
Sounds good - I think this proposal is a good step in the right direction.
Bryce


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /