1 | Things libgcj hackers should know
|
---|
2 | ---------------------------------
|
---|
3 |
|
---|
4 | If you want to hack on the libgcj files you need to be aware of the
|
---|
5 | following things. There are probably lots of other things that should be
|
---|
6 | explained in this HACKING file. Please add them if you discover them :)
|
---|
7 |
|
---|
8 | --
|
---|
9 |
|
---|
10 | A lot of the standard library files come from the GNU Classpath project.
|
---|
11 | <http://www.gnu.org/software/classpath/>
|
---|
12 | The libgcj and Classpath project have officially merged, but the merge
|
---|
13 | is not yet complete. Our eventual goal is for Classpath to be an upstream
|
---|
14 | source provider for libgcj, however it will be some time before this becomes
|
---|
15 | reality: libgcj and Classpath have different implementations of many core
|
---|
16 | java classes. In order to merge them, we need to select the best (most
|
---|
17 | efficient, cleanest) implementation of each method/class/package, resolve
|
---|
18 | any conflicts created by the merge, and test the final result.
|
---|
19 |
|
---|
20 | The merged files can be recognized by the standard Classpath copyright
|
---|
21 | comments at the top of the file. If you make changes to these files
|
---|
22 | then you should also check in the fix to Classpath. For small changes
|
---|
23 | it may be easier to send a patch to the classpath mailinglist. For
|
---|
24 | large changes, if you have direct write access to the libgcj tree,
|
---|
25 | then you will also need to get a Classpath account and do the work
|
---|
26 | yourself.
|
---|
27 | <http://mail.gnu.org/mailman/listinfo/classpath/>
|
---|
28 | <mailto:classpath@gnu.org>
|
---|
29 |
|
---|
30 | If you merge a libgcj class with a classpath class then you must update the
|
---|
31 | copyright notice at the top of the file so others can see that this is a
|
---|
32 | shared libgcj/classpath file.
|
---|
33 |
|
---|
34 | --
|
---|
35 |
|
---|
36 | If you need to add new java files to libgcj then you have to edit the
|
---|
37 | Makefile.am file in the top (libjava) directory. And run automake.
|
---|
38 | But note the following (thanks to Bryce McKinlay):
|
---|
39 |
|
---|
40 | > Do you know the magic dance I have to do when adding files to Makefile.am
|
---|
41 | > so they will appear in Makefile.in and finally in the user generated
|
---|
42 | > Makefile?
|
---|
43 | Yup, you need the magic libgcj automake ;-)
|
---|
44 |
|
---|
45 | <ftp://sources.redhat.com/pub/java/automake-gcj-1.4.tar.gz>
|
---|
46 |
|
---|
47 | Install that (don't worry, it should still work for other projects), add your
|
---|
48 | files to the Makefile.am, then just type "automake" and it will regenerate the
|
---|
49 | Makefile.in. Easy!
|
---|
50 |
|
---|
51 | Tom Tromey adds:
|
---|
52 | If you add a class to java.lang, java.io, or java.util
|
---|
53 | (including sub-packages, like java.lang.ref).
|
---|
54 |
|
---|
55 | * Edit gcj/javaprims.h
|
---|
56 |
|
---|
57 | * Go to the `namespace java' line, and delete that entire block (the
|
---|
58 | entire contents of the namespace)
|
---|
59 |
|
---|
60 | * Then insert the output of `perl ../scripts/classes.pl' into the file
|
---|
61 | at that point.
|
---|
62 |
|
---|
63 | If you're generating a patch there is a program you can get to do an
|
---|
64 | offline `cvs add' (it will fake an `add' if you don't have write
|
---|
65 | permission yet). Then you can use `cvs diff -N' to generate the
|
---|
66 | patch. See http://www.red-bean.com/cvsutils/
|
---|
67 |
|
---|