Fix segfault setting MenuFace pixmap style for menus.
[fvwm.git] / docs / DEVELOPERS
blob0e832fee5e0064999f21faf4acadf9e21bd26d5a
1                         Notes for Developers                         -*-text-*-
2                         --------------------
4 Last updated on 08-Jan-2006
6 You will need to install several GNU tools to be able to use the
7 cvs sources.  If you do not have these tools available, build from
8 the tar file distribution instead, available from ftp.fvwm.org.
10 To build from the CVS sources, you will need:
11   * GNU gcc
12   * GNU make
13   * autoconf (version >= 2.53)
14   * automake (version >= 1.4)
17 After the *initial* checkout of the sources, (see cvs.html) you
18 will need to execute the following commands from the top of the
19 source tree.
21     aclocal
22     autoheader
23     automake --add-missing
24     autoconf
26 There will be some warnings, which are ignorable as long as you
27 get a working configure script: the configure script will fix all
28 those problems.
30 Now, configure and build as per INSTALL.fvwm and INSTALL.  If
31 configure fails, please look through `config.log' for clues.
34 Development Rules of the Road
35 -----------------------------
37  1) _Every_ change must be properly ChangeLogged, listing the name
38     of the changed function.  If you use Emacs, you can do this
39     oh-so-trivially with the "C-x 4 a" command; it will add a
40     header (if it's a new day), the name of the file, and even the
41     name of the function you're currently in.  There is a
42     vim-script utils/changelog.vim that does the same when yoi
43     type ":ChangeLog".
45     If you start adding them as you change functions, it'll soon
46     become second-nature and we'll get proper ChangeLogs.
48     If you don't use Emacs, please mimic the format of all the
49     other log entries when adding your own.
51  2) If you make a user-visible change please add a blurb about it
52     to the NEWS file.  A couple sentences is fine; don't repeat
53     the documentation but give folks enough of an idea so they can
54     decide if they want to learn more.  Bug fixes (unless they're
55     _really_ user visible) shouldn't be noted in the NEWS file.
57  3) If you add a new user-visible feature, don't forget to update
58     the appropriate man pages at the same time!
60  4) Bug fixes may be committed at any time (unless we're in code
61     freeze for a release), usually without much review (unless you
62     want someone else to look at it).  All our code freezes,
63     etc. are merely procedural, not enforced, so it's important
64     you read fvwm-workers and keep up-to-date with the current
65     state of the tree.
67  5) New features should be discussed on the list to ensure
68     everyone thinks they're "appropriate" (one of the goals of
69     fvwm is to be relatively efficient, remember, which means we
70     don't necessarily want the kitchen sink).
72  6) If the new feature is large enough, unstable enough, or not
73     targeted at the next release, it should go on a private
74     branch.  Otherwise, consensus will probably have it installed
75     on the main branch.
77  7) Before adding a new feature think twice if it could perhaps be
78     implemented as a module (perhaps after some extension of the
79     fvwm<->module communication protocol). Moving features in
80     modules helps to keep fvwm itself clean and efficient.
82  8) See CONVENTIONS for more details.
84         ** Of course, compile and test before committing! **
87 Dealing with CVS
88 ----------------
90 All details about dealing with CVS should be found in cvs.html.
91 Go look there!
94 Doing the JitterBug
95 -------------------
97 If you haven't already noticed them, now is the time to visit our
98 bug tracking pages:
100   http://www.fvwm.org/cgi-bin/fvwm-bug
102 Anybody can submit or view bug reports there.
104 Developers with CVS write access can also update the bug database
105 (whee!).  To do so, you have to go to the Jitterbug page, but then
106 tack a ".private" on to the end of the URL:
108   http://www.fvwm.org/cgi-bin/fvwm-bug.private
110 Then you'll be asked to authenticate.  The username and password
111 are the same as you use for the CVS repository.
113 You'll probably want to bookmark that page.
116 Changing a Makefile
117 -------------------
119 First of all, NEVER edit anything named Makefile or Makefile.in.
120 These are both derived from the corresponding Makefile.am.  The
121 most common reason for editing is to change the list of sources.
123 Steps: 1. edit foo/blah/Makefile.am
124        2. re-run "make" from the top of the build directory
126 Step 2 will take care of rebuilding the Makefile.in and Makefile
127 from your changed Makefile.am.
129 Makefile.am has a simple format, basically:
131         bin_PROGRAMS = fvwm
133         fvwm_SOURCES = blah.c blah.h foo.c foo.h ...
135 Notice that you have to add all files, C-code *and* headers, to
136 the _SOURCES line.  This is vital, because this is the list of
137 files that are packed into the distribution.  If you leave one
138 out, nobody will be able to build the distributed tar file!
141 Changing configure.ac
142 ---------------------
144 The most common reason to do this is to change the version string.
145 If you're editing it for any other reason, I will assume you know
146 what you're doing.
148 Steps: 1. edit configure.ac, and find the line containing
149           AM_INIT_AUTOMAKE(fvwm, x.y.z) at the top of the file
150        2. change x.y.z to the new version string
151        3. re-run "make" from the top of the build directory
153 Step 3 will take care of rebuilding the configure script, and
154 usually all the other Makefiles.
157 Building an official distribution
158 ---------------------------------
160 By this, I mean the files fvwm-x.y.z.tar.gz and
161 fvwm-x.y.z.tar.bz2.  It is important to do all steps in the given
162 order!
164 Preparations:
166   - Make sure you have all optional libraries installed.
167   - When building a release, update the CVS sources first. For a
168     stable release it is best to throw away the whole source tree
169     and check it out from scratch to ensure all source files have
170     been added to CVS.
171   - Change the dates in configure.ac and fill in the release date
172     in NEWS.  Note: For releases prior to 2.5.3, the date has to be
173     updated in docs/fvwm.lsm.in and fvwm/fvwm.1 instead of
174     configure.ac.
175   - Verify that the version variable at the very beginning of
176     configure.ac has the value of the going to be released version
177     and set ISRELEASED to "yes".  It should be "yes" in the
178     released tarballs.
179   - Update docs/ANNOUNCE file.  For the first version of a major
180     release (e.g. 2.6.0) all user visible changes have to be
181     mentioned.  For the following maintenance releases *all* code
182     changes have to be listed.  This is usually done by copying
183     all entries from the NEWS file.  Don't forget to proof read
184     the file as it will be sent to the fvwm-announce mailing list.
185   - Update the ChangeLog for all the changes above.
186   - Commit these changes.
188 Configuration tests:
190   Note that you need to have actually built everything before
191   packing the distribution.  Among other things, this generates
192   the proper dependency information for insertion into
193   Makefile.in's generated by "make distcheck2".
195   - Run
196      $ aclocal && autoheader && automake --add-missing && autoconf
197   - If you are building a stable release, remove the config.cache
198     file if there is one (autoconf 2.52 does no longer generate
199     this file by default).  Of course doing this for a development
200     release won't hurt either.
201   - Run
202      $ ./configure --enable-htmldoc
203   - Make sure configure detects all optional libraries except the
204     ones that are recommended not to be used.  Repeat the previous
205     step until configure finds everything.  Building a release
206     without any optional library should be a rare exception.
208 Compile tests:
210   - Run
211      $ make clean
212     even if you checked out from scratch.  It is a useful
213     additional check.
214   - Double check that you get no warnings during the build:
215      $ make CFLAGS="-g -O2 -Wall -Wpointer-arith -fno-strict-aliasing -Werror"
216     On some systems, the system include files generate warnings.
217     On such a system you have to omit the -Werror option and check
218     the output of the compilation run for warnings manually.  It
219     is important to use the -O2 option because gcc can not
220     generate some warnings without it.  If your gcc-version does
221     not know the option "-fno-strict-aliasing", remove it. If you
222     have gcc >= 3.4 you should also use -Wdeclaration-after-statement
223     since it will catch code that won't compile on all C89 compilers.
224   - Fix all warnings and problems, commit the changes and repeat
225     the previous step until no more warnings occur.
227 Build and test the release tarballs:
229   The next step will create the tar file, then unpack it and
230   attempt to build fvwm from it and install to a scratch
231   directory.  This makes sure that you really *did* include all
232   the files necessary to build the package into the tar file.  It
233   may be hard to appreciate how useful this is, until it has
234   reminded you that you forgot file "foo.h" in some _SOURCES line.
235   But trust me, it will save your bacon in this way some day!
237   - Run
238      $ make distcheck2
239   - Ensure that you see the messages
240       "fvwm-x.y.z.tar.gz is ready for distribution"
241     and
242       "fvwm-x.y.z.tar.bz2 - ready for distribution"
244 Tag the release:
246 * Important note: Before you proceed, please ask yourself if the
247   code is ready to be released:
249   * Have you committed patches only hours or even minutes ago?
250   * Have there been any big changes in the last few days?
251   * Are there any important parts that are not well tested?
252   * Are you tired from work or have you been hacking fvwm for many
253     hours in a row?
255   Should your answer to any of these questions be 'yes', please do
256   take a break now and reconsider, especially if this is going to
257   be a stable release.
259   The steps above are not critical and can not screw up anything
260   bad.  This is not true for what follows.  If you do something
261   wrong now, you will have a hard time cleaning up the mess.
262   Should something go wrong and you are not sure about the correct
263   fixes, please ask on the fvwm-workers list for help.
265   It's important that the files included in the release tarballs
266   and the tagged files are identical.
268   - Tag the CVS tree (replace x, y and z):
269      $ cvs tag version-x_y_z
271 Upload the release:
273   Hopefully you didn't change any files after the last commit.
274   Otherwise commit your changes and return to the previous sections,
275   i.e. rebuild tarballs using "make distcheck2" and retag the tree.
277   - Upload the files fvwm-x.y.z.tar.gz and fvwm-x.y.z.tar.bz2 to
278     ftp://ftp.fvwm.org/pub/incoming/fvwm
279   - Notify fvwm-owner@fvwm.org of the upload.
281 Increase the version number:
283   - Increase the version number in the very beginning of
284     configure.ac (see above) and set ISRELEASED to "no".
285   - Create a new section for future changes in the NEWS file.
286   - Add a ChangeLog entry indicating that a new version started.
287   - Commit these three changes.
288   - For a stable release, copy the NEWS from the stable branch to
289     the development branch and update the link in the same
290     document.
292 Update fvwm-web:
294   - Update the release numbers at the bottom of definitions.inc file.
295   - If this is the head development version, then run a shell script
296     in fvwm-web called regenerate_pages to update the web pages for
297     NEWS, FAQ and AUTHORS.  It should usually work without parameters
298     for a typical setup (when fvwm and fvwm-web trees are sibling
299     directories), optionally pass a parameter to regenerate_pages -
300     the fvwm location relative to fvwm-web.
301      $ cd fvwm-web
302      $ ./regenerate_pages
303   - Update the html documentation: go to the directory
304     doc and run the script
305     $ ./updatedoc
306   - Generate the man pages: go to the directory
307     documentation/manpages and run the script
308      $ ./manpages2php
309     It needs the program "man2html" installed.
310   - Generate ChangeLog entries for all these changes and commit them.
312 Announce the release:
314   - Once the tarballs are in place, mail the ANNOUNCE file to the
315     usual places, at least to fvwm-announce.