cvsimport
[fvwm.git] / docs / DEVELOPER-CVS
blobafb835cae2192a12ad1dc282c18c32e4b48fae03
1 CVS INFORMATION
2 ---------------
4 FVWM development uses a CVS server.
6 Note: the state of code in the CVS repository fluctuates wildly. It will
7 contain bugs, maybe ones that crash the program. It may not even compile for
8 you. Consider it alpha-quality code. You have been warned.
10 CONTENTS
12 Before You Begin Initial Setup Checking Out Source Code Building The Tree
13 Code Updates Starting a Project Hacking the Code Conflicts Getting Commit
14 Access Committing Changes Adding Directories and Files Deleting Directories
15 and Files Renaming/Moving Files Creating New Branches Creating New Source
16 Trees Working on the fvwm-web Source Tree Before You Begin [top]
18 To know what is going in with the source tree you should be reading mail on
19 the Fvwm Workers List. See the Mailing List Info page for more information.
21 To build FVWM from the CVS sources, you must have several GNU tools:
23 the CVS client version 1.9 or better, GCC, GNU make, autoconf, version 2.13
24 or better, and automake, version 1.4 or better.  Without these tools, you
25 won't be able to build out of the CVS source tree. But don't despair:
26 download one of the daily snapshots instead!
28 INITIAL SETUP
29 -------------
31 To make life easier on yourself, create the file `~/.cvsrc', and insert the
32 following lines. These set useful default options for the three most used
33 CVS commands. Do this now before going any further.
35     diff -u 
36     checkout -P 
37     update -d -P 
38     cvs -q 
40 The last line makes cvs operations quieter, but you still get full error
41 messages.
43 Also, if you are on a slow net link (like a dialup), you'll also want a line
44 containing `cvs -z3' in this file. This turns on a useful compression level
45 for all cvs commands. Setting it higher will only waste your CPU time.
47 Before you can download development source code for the first time, you must
48 login to the server:
50     cvs -d :pserver:anonymous@cvs.fvwm.org:/home/cvs/fvwm login
52 The password is `guest'. The command outputs nothing if it works, and an
53 error message if it failed. You only need to log in once; all subsequent CVS
54 commands read the password stored in the file `~/.cvspass'.
56 CHECKING OUT SOURCE CODE
57 ------------------------
59 Next, you checkout the source code. First you must decide what version
60 you're interested in. The structure of the CVS tree is as follows:
62 The latest code is always available at the tip of the main branch.  All
63 branches are labeled as branch-ver. So, for example, as development of the
64 2.3.x (latest) code continues on the main branch, a branch branch-2_2 has
65 been created for changes that would go into a 2.2.1 or future release.  At
66 various points we decide to checkpoint the code with a version number
67 change; there is always a label associated with every version number as
68 well. The label will have the format version-ver; for example,
69 version-2_1_13 or version-2_2_1.  Given these rules, you should be able to
70 translate the version of you want to retrieve to a label for use with the
71 checkout command below (or other CVS commands which might need them).
73 You use the CVS checkout (or co) command to retrieve an initial copy of the
74 code. The simplest form of this command, for retrieving the latest code,
75 doesn't require any label:
77     cvs -d :pserver:anonymous@cvs.fvwm.org:/home/cvs/fvwm checkout fvwm
79 This will create a new directory fvwm in your current directory, containing
80 the latest, up-to-the-minute code.
82 If you want to work on the latest code in the 2.2.x branch of the code, you
83 can use the branch label on the checkout command line:
85     cvs -d :pserver:anonymous@cvs.fvwm.org:/home/cvs/fvwm co -r branch-2_2 fvwm
87 This will put a copy of the very latest code on the 2.2.x branch into a
88 subdirectory fvwm. If you're going to be working on multiple branches at the
89 same time, or just feel like it, you can tell CVS to use a different name
90 for the directory with the checkout -d option:
92     cvs -d :pserver:anonymous@cvs.fvwm.org:/home/cvs/fvwm co -r branch-2_2 \
93         -d fvwm-2.2.x fvwm
95 Now the code will be checked out into a directory fvwm-2.2.x rather than
96 fvwm. In this way you can keep multiple copies of the source around and
97 "active" simultaneously. (It is also permissible to just checkout into fvwm
98 and rename the directory yourself.)
100 Finally, if you want to see a particular version of the sources you can use
101 a version label instead of a branch label on the checkout command:
103     cvs -d :pserver:anonymous@cvs.fvwm.org:/home/cvs/fvwm co -r \
104         version-2_1_10 -d fvwm-2.1.10 fvwm
106 Please note that if you check out a specific version, the update command
107 will be useless in that copy: after all, the code for that version hasn't
108 changed so there's nothing to update...
110 The version and branch labels "stick" to your copy of the tree, so that if
111 you check out a branch, all update commands will be handled with respect to
112 that branch. These are called "sticky tags"; please see the CVS
113 documentation for more details on these and how they work, or how to
114 "un-stick" a checked out version if you need to.
116 Note that when you are inside the working directory, you no longer need the
117 "-d :pserver:..." argument when issuing CVS commands.
119 CVS commands work from anywhere inside the source tree, and recurse
120 downwards. So if you happen to issue an update from inside the `docs'
121 subdirectory it will work fine, but only update the docs. In all of the
122 following command examples, we assume that you have cd'd to the top of the
123 source tree.
125 BUILDING THE TREE
126 -----------------
128 So, you now have a copy of the code. Get in there and get to work!
130 The first thing you need to do is create a configure script. The configure
131 script will also need the Makefile.in files in order to generate the
132 Makefiles. The autoconf and automake tools do this for you (you did remember
133 to install autoconf and automake, right?)
135 So, when you have a newly checked-out source tree the first thing to do is:
137     utils/configure_dev.sh
139 in the cvs tree, it may be run with usual ./configure arguments instead of
140 all auto commands above.
142 Once that's done, you can proceed to build the code as discussed in the
143 INSTALL.fvwm and INSTALL files:
145     ./configure && make && make install
147 with appropriate options and arguments, as you like.
149 CODE UPDATES
150 ------------ 
152 From time to time, the dedicated FVWM Workers will make changes to the CVS
153 repository. Announcements of this are automatically sent to the fvwm-workers
154 list. You will want to be subscribed to this list!
156 You can update your copy of the sources to match the master repository with
157 the update command. Note it's not necessary to check out a new copy! Using
158 update is significantly faster and simpler, as it will download only patches
159 instead of entire files, only update files that have changed since your last
160 update, and it will automatically merge any changes in the CVS repository
161 with any local changes you may have made.
163     cvs update
165 If you didn't use a tag when you checked out, this will update your sources
166 to the latest version on the main branch. If you used a branch tag, it will
167 update to the latest version on that branch. If you used a version tag, it
168 won't do anything (see above).
170 After updating the local source directory, it is usually enough to issue
171 make to rebuild everything. It is safe to manually run aclocal, automake and
172 autoconf if you think something should be rebuilt, but this sould be run
173 automatically on make.
175 STARTING A PROJECT
176 ------------------
178 Discuss your ideas on the workers list before you start. Someone may be
179 working on the same thing you have in mind. Or they may have good ideas
180 about how to go about it.
182 If you just have a small patch you want to make, you may just commit it to
183 the main branch. If the change is large, and lots of other work is going on,
184 you may want to do your changes on a "side branch" which will get merged
185 into the main branch later on. Before creating a branch, you discuss the
186 matter with the other workers. If you are new to CVS, you should read the
187 CVS documentation several times, and ask for help. The documentation is
188 sufficiently large and confusing that it is rather difficult to get right
189 the first few times.
191 HACKING THE CODE 
192 ----------------
194 So you've found a bug you want to fix?  Got a new feature to implement?
195 Hacking the code couldn't be easier. Just edit your copy of the sources.
196 No need to copy files to `.orig' or anything; CVS has copies of the originals.
198 When you have the code in a working state, generate a patch against the
199 current sources in the CVS repository.
201     cvs update 
202     cvs diff -u > patchfile
204 Mail the patch to the fvwm-workers list with a description of what you did.
205 But read the FAQ file about ChangeLog entries before doing so.
207 CONFLICTS
208 --------- 
210 If someone else has been working on the same files as you have, you may find
211 that you have made conflicting modifications. You'll discover this when you
212 try to update your sources.
214     $ cvs update
215     RCS file: /home/cvs/fvwm/fvwm/fvwm/icons.c,v
216     retrieving revision 1.5
217     retrieving revision 1.6
218     Merging differences between 1.5 and 1.6 into icons.c
219     rcsmerge: warning: conflicts during merge
220     cvs server: conflicts found in fvwm/icons.c
221     C fvwm/icons.c
223 Don't Panic! Your working file, as it existed before the update, is saved
224 under the filename `.#icons.c.1.5'; hence you can always recover it, should
225 things go horribly wrong. The file named `icons.c' now contains both the old
226 (i.e. your) version and new version of lines that conflicted. You simply
227 edit the file and resolve each conflict by deleting the unwanted version of
228 the lines involved.
230     <<<<<<< icons.c
231     XpmImage    my_image = {0};  /* testing */
232     =======
233     >>>>>>> 1.6
235 Don't forget to delete the lines with all the "<", "=", and ">" symbols.
237 GETTING COMMIT ACCESS 
238 ---------------------
240 Using the procedures described above, and being on the workers list are a
241 prerequisite to gaining update access. We expect to have heard from you more
242 than once on the fvwm-workers list so that we have some idea who you are.
244 Doing some testing, submitting some patches, and getting involved in the
245 discussions will help us know about you.
247 After you have been involved for a while, if we don't suggest it, then ask.
248 The FVWM development team is not a closed environment, we welcome new
249 members. There are no required duties, all work is strictly voluntary.
251 If there is agreement on the list that you should be given update access,
252 you will need to choose a CVS user ID and provide an encrypted password. The
253 latter can be obtained with the following Perl snippet:
255     perl -e 'print crypt("yourpass", join("", \
256         ((a..z, A..Z, 0..9)[rand(62), rand(62)]))), "\n"'
258 Change yourpass to whatever you want your password to be. Send the encrypted
259 password to Jason Tibbitts, (tibbs@math.uh.edu). Jason is the list
260 maintainer, and provides our CVS repository.
262 Once you have update access, re-do the login command above using your CVS
263 user ID in place of anonymous and your password in place of guest, and you
264 are on your way.
266 COMMITTING CHANGES
267 ------------------
269 Now that you have write permissions and have logged in with your CVS
270 username, you can commit changes. This is done (surprise!) with the CVS
271 commit command.
273 Note it's usually a good idea to run a cvs update just before you commit, to
274 make sure you've got the latest code. If you try to commit changes to a file
275 that someone else has changed since you last updated, CVS will complain and
276 not allow the commit. But, changes to other files could indirectly affect
277 your new code, as well. In general if you're doing development it really
278 pays to follow the old(?) adage, "Update early and often".
280 To commit all the modified files in your workspace, use:
282     cvs commit
284 CVS will pop up your favorite editor to allow you to enter comments about
285 what changes you've made. These comments will appear in the email sent to
286 fvwm-workers, so please write something useful.
288 Also, you will see a complete list of files that CVS thinks you have
289 changed. Please sanity-check this list! Make sure there's nothing you don't
290 expect there, and everything you do expect.
292 If you don't like the all-or-nothing approach, you can specify only certain
293 files to be committed:
295     cvs commit fvwm/fvwm.1 modules/FvwmAuto/FvwmAuto.1
297 Again, please sanity-check the list to be sure you have everything.
299 Adding Directories and Files [top]
301 First create the new directories and files locally. Then, assuming the new
302 directory is named `newdir' and the new file is `newmod.c':
304     cvs add -m "New directory for ..." newdir
305     cd newdir
306     cvs add -m "File newmod.c is a module that ..." newmod.c
307   
308 When adding new directories and files, please be sure to take a look at the
309 relevant Makefile.am files and modify them as appropriate! See the
310 DEVELOPERS file for more details on this.
312 DELETING DIRECTORIES AND FILES
313 ------------------------------
315 You don't directly delete directories, you delete all the files in a
316 directory and the directory goes away during an `update -dP'. To delete one
317 or more files:
319     cvs remove filename...  
320     cvs commit -m 'deleted files because' filename...
322 Again, when removing directories or files please be sure to update the
323 appropriate Makefile.am files. See DEVELOPERS.
325 RENAMING/MOVING FILES 
326 ---------------------
328 There is no perfect way to rename or move files in CVS. There are a few
329 different methods, each with good and bad points. For FVWM, we've chosen the
330 most straightforward method: remove the old file and add a new file. In
331 order to preserve some kind of link, please include a pointer to the old
332 file in the comments of the new file (and vice versa).
334 Again, when renaming or moving files please be sure to update the
335 appropriate Makefile.am files. See DEVELOPERS.
337 CREATING NEW BRANCHES
338 ---------------------
340 Please contact the fvwm-workers list and discuss any new branch you'd like
341 to create, just so we have an idea about what and why.
343 When creating a branch it's best to base it off of a previously-existing,
344 labeled checkpoint. Here we'll use the example of creating a new branch for
345 2.2.x development after the 2.2 release was made. Because of our rules, we
346 know that the new branch name should be branch-2_2, but if you're creating a
347 branch for a new feature you can use any valid label.
349 Once you know where you want to branch from and what you want to call the
350 new branch, use the cvs rtag command to create the branch (be sure you're in
351 the root of your checkout):
353     cvs rtag -b -r version-2_2_0 branch-2_2 .
355 The first thing you'll probably want to do on the new branch is edit the
356 configure.in file to change the version number, so people know it's
357 different. See the DEVELOPERS file for information on this.
359 CREATING NEW SOURCE TREES 
360 -------------------------
362 Please contact the fvwm-workers list and discuss any new source trees you'd
363 like to create, just so we have an idea about what and why.
365 The source code for Fvwm is in the "fvwm" source tree. At the time this
366 sentence was written, (September, 1999), there were 1 more source tree,
367 "fvwm-web".
369 If you have update access to "fvwm", you can also update the other source
370 trees and create new source trees.
372 WORKING ON THE FVWM-WEB SOURCE TREE
373 -----------------------------------
375 It's important to remember anything checked into the fvwm-web branch will
376 automatically appear on the fvwm web pages. Be careful to check your work
377 before you commit a change.
379 You can check to see what your changes will look like before a commit, by
380 using a "file:" URL to look at your changes with your browser. If you have
381 the fvwm-web source in /home/my/fvwm-web, your browser should be able to
382 view the source with the URL file:/home/my/fvwm-web. (This is one of the
383 reasons you want to use relative URLs to link one page to another.)
385 Some of the sub-directories in the fvwm-web branch can take a long time to
386 checkout or commit due to their large size. This is especially true over
387 dial-up connections. All of the CVS commands can be convinced to only work
388 on one directory or sub-directory by using the -l argument.
390 Some parts of the fvwm-web tree are generated from fvwm tree source files.
391 The generated files are in the directories:
393     fvwm-web/authors/ 
394     fvwm-web/news/ 
395     fvwm-web/documentation/faq/
396     fvwm-web/documentation/manpages/ 
397     fvwm-web/documentation/perllib/ 
399 Each directory has a script generating one or more php files. You would normally
400 run these scripts (at least in the first 3 directories) whenever you made a
401 change to fvwm/NEWS, fvwm/docs/FAQ or fvwm/AUTHORS that you want to appear
402 on the fvwm web site. Instructions are in the scripts.