HACKING 6.61 KB
Newer Older
1 2
Requirements
------------
3 4
If you want to hack on the GIMP project, it will make your life easier
to have the following packages (or newer versions) installed:
5

Sven Neumann's avatar
Sven Neumann committed
6
    * GNU autoconf 2.54
7
        - ftp://ftp.gnu.org/gnu/autoconf/
Sven Neumann's avatar
Sven Neumann committed
8
    * GNU automake 1.9 (automake 1.8 should also work)
9
        - ftp://ftp.gnu.org/gnu/automake/
10
    * GNU libtool 1.4  (libtool 1.5 if you are compiling on Win32)
11
        - ftp://ftp.gnu.org/gnu/libtool/
Manish Singh's avatar
Manish Singh committed
12

13 14
Fine GNU mirrors are listed at http://www.gnu.org/prep/ftp.html
Beta software can be found at alpha.gnu.org.
15

Sven Neumann's avatar
Sven Neumann committed
16
    * pkg-config 0.15.0 (or preferably a newer version)
17
        - http://www.freedesktop.org/software/pkgconfig/
18

19
    * intltoolize 0.31.1 (or preferably a newer version)
20
        - ftp://ftp.gnome.org/pub/gnome/sources/intltool/
21

22 23 24
    * gtkdocize
        - http://ftp.gnome.org/pub/GNOME/sources/gtk-doc/

25 26 27
    * xsltproc
        - ftp://ftp.gnome.org/pub/GNOME/sources/libxslt/1.1/

28
These are only the additional requirements if you want to compile from
29
CVS. The file INSTALL lists the various libraries we depend on.
30

31 32 33

Compilation
-----------
Sven Neumann's avatar
Sven Neumann committed
34
If you are accessing gimp via CVS, then you will need to take several
35 36
steps to get it to compile.  You can do all these steps at once
by running:
37

38
    cvsroot/gimp$ ./autogen.sh
39

40
Basically this does the following for you:
41

Sven Neumann's avatar
Sven Neumann committed
42
    cvsroot/gimp$ aclocal-1.9; libtoolize; automake-1.9 -a;
43
    cvsroot/gimp$ autoconf; glib-gettextize; intltoolize
44

45 46
The above commands create the "configure" script.  Now you can run the
configure script in cvsroot/gimp to create all the Makefiles.
47

48
Before running autogen.sh or configure, make sure you have libtool in
49
your path. Also make sure glib-2.0.m4 glib-gettext.m4, gtk-2.0.m4,
Sven Neumann's avatar
Sven Neumann committed
50 51
pkg.m4 and intltool.m4 are either installed in the same
$prefix/share/aclocal relative to your automake/aclocal installation
52
or call autogen.sh as follows:
53

54
    $ ACLOCAL_FLAGS="-I $prefix/share/aclocal" ./autogen.sh
55 56

Note that autogen.sh runs configure for you.  If you wish to pass
57 58
options like --prefix=/usr to configure you can give those options to
autogen.sh and they will be passed on to configure.
59

60 61 62 63 64
If AUTOGEN_CONFIGURE_ARGS is set, these options will also be passed to
the configure script. If for example you want to enable the build of
the GIMP API reference manuals, you can set AUTOGEN_CONFIGURE_ARGS to
"--enable-gtk-doc". Please note that you will then need a recent
version of gtk-doc as well as a working setup for handling DocBook/XML.
65

66 67 68 69 70
If you do not have a recent version of gtk-doc, you can pass the
option "--disable-gtk-doc" to autogen.sh.  This will completely
disable the support for gtk-doc so you will not be able to generate
the API documentation.

71 72 73

CVS
---
74
GIMP is available from GNOME CVS. You can also grab glib, pango, atk,
Sven Neumann's avatar
Sven Neumann committed
75 76 77
gtk+, libart, gtkhtml2 as well as intltool and gtk-doc from the same
CVS server. You can use the following commands to get them from the
anonymous CVS server:
78

79 80 81 82
    $ export CVSROOT=':pserver:anonymous@anoncvs.gimp.org:/cvs/gnome'
    $ cvs login
         (there is no password, just hit return)
    $ cvs -z3 checkout [-r <branch>] <module>
83

Sven Neumann's avatar
Sven Neumann committed
84
The interesting modules and the suggested stable branches to use are:
85

86
    * gimp
87 88 89 90
    * glib        (glib-2-8)
    * atk         (gnome-2-12)
    * pango       (pango-1-10)
    * gtk+        (gtk-2-8)
91 92 93 94
    * libart_lgpl
    * gtkhtml2
    * intltool
    * gtk-doc
95

96 97 98

Patches
-------
99

100
The best way to submit patches is to file a bug report at
101 102 103 104 105 106 107 108 109
http://bugzilla.gnome.org/ and attach your patch to it as a plain text
file, not compressed. If your patch is reasonably small you can submit
it to the gimp-developer@lists.xcf.berkeley.edu mailing list. If the
patch needs to be discussed, you should also consider using the
mailing list instead of Bugzilla because bug reports tend to be hard
to read if they contain too many comments. For the code, please try to
follow the guidelines given in Hackordnung, below.  You can create the
patch file with "cvs diff", preferably with a ~/.cvsrc containing
"diff -up".  All kinds of contributions are appreciated.
110

111 112 113

Autogenerated Files
-------------------
Sven Neumann's avatar
Sven Neumann committed
114 115 116 117 118 119 120 121
Please notice that some files in the source are generated from other
sources. All those files have a short notice about being autogenerated
somewhere at the top. Among them are the files ending in _pdb.[ch] in
the libgimp directory and the files ending in _cmds.c in the app/pdb
subdirectory. Those are generated from the respective .pdb files in
tools/pdbgen/pdb. The list of contributors is used in several files
which are for that reason generated from the file contributors in
tools/authorsgen.
122 123 124 125


Hackordnung
-----------
Sven Neumann's avatar
Sven Neumann committed
126 127 128
We encourage you to follow the GIMP coding style throughout the GIMP
project.  For the core components (application and libs) this coding
style is enforced.  The GIMP coding style is defined as follows:
129

Sven Neumann's avatar
Sven Neumann committed
130
    * There's a single space between the function name and the opening
131
      paren.
Sven Neumann's avatar
Sven Neumann committed
132

133 134 135 136 137 138
    * Function names are lowercase, words separated by underscores.

    * Macros and enums are all uppercase, words seperated by
      underscores.

    * Types are all words capitalized, no separators between words.
139

140
    * All functions in header files need to be prototyped.
141

142 143
    * Indentation rules are GNU coding style, in particular:
        - 2 characters indentation level
144 145 146 147 148 149 150 151
        - Do not use tabs (of course your editor can accept the TAB key
          as a command, typically to indent the current line properly
          or to add spaces at the cursor until the next multiple of 8
          columns, but it should not put TAB characters in the file).
        - When editing files that still have TABs in them, make sure your
          editor interprets the TABs correctly, that is, has tab stops
          at 8 column intervals.
        - Opening braces are on a new line and indented one level.
152 153 154
        - Function header have the return type on one line, the name
          starting in the first column of the following line. All
          parameters are prototyped and there's a new line for each.
155

Sven Neumann's avatar
Sven Neumann committed
156 157 158 159
Try to make use of GLib's object system as much as possible. Do not
create wrappers around functions of parent classes. If you end up
duplicating code, try to create a common parent class and implement
the common methods there.
160

161
Don't include headers in headers except where unavoidable (e.g. for
Michael Natterer's avatar
Michael Natterer committed
162
deriving objects). Opaque typedefs go to app/base/base-types.h,
163 164
app/core/core-types.h etc. See devel-docs/includes.txt for a
detailed description of the include policy.
165

166 167
Don't use the GTK wrappers around the GLib object and signal system.

Sven Neumann's avatar
Sven Neumann committed
168 169 170 171
One goal of GIMP development is to make the GIMP code more readable
and understandable. Please help us to achieve this goal by cleaning up
the present code and make sure that all new code follows the coding
guidelines.