- Changed more (all?) references to actions to the
[privoxy.git] / doc / text / developer-manual.txt
index 46c16d0..99df01d 100644 (file)
@@ -1,27 +1,12 @@
 Privoxy Developer Manual
 
-By: Privoxy Developers
+Copyright © 2001, 2002 by Privoxy Developers
 
-$Id: developer-manual.sgml,v 1.33 2002/04/12 03:49:53 hal9 Exp $
+$Id: developer-manual.sgml,v 1.42 2002/05/05 20:26:02 hal9 Exp $
 
 The developer manual gives the users information on how to help the developer
 team. It provides guidance on coding, testing, documentation and other issues.
 
-Privoxy is a web proxy with advanced filtering capabilities for protecting
-privacy, filtering web page content, managing cookies, controlling access, and
-removing ads, banners, pop-ups and other obnoxious Internet junk. Privoxy has a
-very flexible configuration and can be customized to suit individual needs and
-tastes. Privoxy has application for both stand-alone systems and multi-user
-networks.
-
-Privoxy is based on the code of the Internet Junkbuster (tm). Junkbuster was
-originally written by Junkbusters Corporation, and was released as free
-open-source software under the GNU GPL. Stefan Waldherr made many improvements,
-and started the SourceForge project to continue development.
-
-Privoxy continues the Junkbuster tradition, but adds many refinements,
-enhancements and new features.
-
 You can find the latest version of the this manual at http://www.privoxy.org/
 developer-manual/. Please see the Contact section on how to contact the
 developers.
@@ -29,110 +14,127 @@ developers.
 -------------------------------------------------------------------------------
 
 Table of Contents
 1. Introduction
-3. Quickstart to Privoxy Development
-4. Documentation Guidelines
    
-    4.1. Quickstart to Docbook and SGML
-    4.2. Privoxy Documentation Style
-    4.3. Privoxy Custom Entities
+    1.1. Quickstart to Privoxy Development
+   
+2. The CVS Repository
+   
+    2.1. Access to CVS
+    2.2. CVS Commit Guideline
+    2.3. Discussing Changes First
    
-5. Coding Guidelines
+3. Documentation Guidelines
    
-    5.1. Introduction
-    5.2. Using Comments
+    3.1. Quickstart to Docbook and SGML
+    3.2. Privoxy Documentation Style
+    3.3. Privoxy Custom Entities
+   
+4. Coding Guidelines
+   
+    4.1. Introduction
+    4.2. Using Comments
        
-        5.2.1. Comment, Comment, Comment
-        5.2.2. Use blocks for comments
-        5.2.3. Keep Comments on their own line
-        5.2.4. Comment each logical step
-        5.2.5. Comment All Functions Thoroughly
-        5.2.6. Comment at the end of braces if the content is more than one
+        4.2.1. Comment, Comment, Comment
+        4.2.2. Use blocks for comments
+        4.2.3. Keep Comments on their own line
+        4.2.4. Comment each logical step
+        4.2.5. Comment All Functions Thoroughly
+        4.2.6. Comment at the end of braces if the content is more than one
             screen length
        
-    5.3. Naming Conventions
+    4.3. Naming Conventions
        
-        5.3.1. Variable Names
-        5.3.2. Function Names
-        5.3.3. Header file prototypes
-        5.3.4. Enumerations, and #defines
-        5.3.5. Constants
+        4.3.1. Variable Names
+        4.3.2. Function Names
+        4.3.3. Header file prototypes
+        4.3.4. Enumerations, and #defines
+        4.3.5. Constants
        
-    5.4. Using Space
+    4.4. Using Space
        
-        5.4.1. Put braces on a line by themselves.
-        5.4.2. ALL control statements should have a block
-        5.4.3. Do not belabor/blow-up boolean expressions
-        5.4.4. Use white space freely because it is free
-        5.4.5. Don't use white space around structure operators
-        5.4.6. Make the last brace of a function stand out
-        5.4.7. Use 3 character indentions
+        4.4.1. Put braces on a line by themselves.
+        4.4.2. ALL control statements should have a block
+        4.4.3. Do not belabor/blow-up boolean expressions
+        4.4.4. Use white space freely because it is free
+        4.4.5. Don't use white space around structure operators
+        4.4.6. Make the last brace of a function stand out
+        4.4.7. Use 3 character indentions
        
-    5.5. Initializing
+    4.5. Initializing
        
-        5.5.1. Initialize all variables
+        4.5.1. Initialize all variables
        
-    5.6. Functions
+    4.6. Functions
        
-        5.6.1. Name functions that return a boolean as a question.
-        5.6.2. Always specify a return type for a function.
-        5.6.3. Minimize function calls when iterating by using variables
-        5.6.4. Pass and Return by Const Reference
-        5.6.5. Pass and Return by Value
-        5.6.6. Names of include files
-        5.6.7. Provide multiple inclusion protection
-        5.6.8. Use `extern "C"` when appropriate
-        5.6.9. Where Possible, Use Forward Struct Declaration Instead of
+        4.6.1. Name functions that return a boolean as a question.
+        4.6.2. Always specify a return type for a function.
+        4.6.3. Minimize function calls when iterating by using variables
+        4.6.4. Pass and Return by Const Reference
+        4.6.5. Pass and Return by Value
+        4.6.6. Names of include files
+        4.6.7. Provide multiple inclusion protection
+        4.6.8. Use `extern "C"` when appropriate
+        4.6.9. Where Possible, Use Forward Struct Declaration Instead of
             Includes
        
-    5.7. General Coding Practices
+    4.7. General Coding Practices
        
-        5.7.1. Turn on warnings
-        5.7.2. Provide a default case for all switch statements
-        5.7.3. Try to avoid falling through cases in a switch statement.
-        5.7.4. Use 'long' or 'short' Instead of 'int'
-        5.7.5. Don't mix size_t and other types
-        5.7.6. Declare each variable and struct on its own line.
-        5.7.7. Use malloc/zalloc sparingly
-        5.7.8. The Programmer Who Uses 'malloc' is Responsible for Ensuring
+        4.7.1. Turn on warnings
+        4.7.2. Provide a default case for all switch statements
+        4.7.3. Try to avoid falling through cases in a switch statement.
+        4.7.4. Use 'long' or 'short' Instead of 'int'
+        4.7.5. Don't mix size_t and other types
+        4.7.6. Declare each variable and struct on its own line.
+        4.7.7. Use malloc/zalloc sparingly
+        4.7.8. The Programmer Who Uses 'malloc' is Responsible for Ensuring
             'free'
-        5.7.9. Add loaders to the `file_list' structure and in order
-        5.7.10. "Uncertain" new code and/or changes to existing code, use FIXME
+        4.7.9. Add loaders to the `file_list' structure and in order
+        4.7.10. "Uncertain" new code and/or changes to existing code, use FIXME
        
-    5.8. Addendum: Template for files and function comment blocks:
+    4.8. Addendum: Template for files and function comment blocks:
    
-6. Version Control Guidelines
-7. Testing Guidelines
+5. Testing Guidelines
    
-    7.1. Testplan for releases
-    7.2. Test reports
+    5.1. Testplan for releases
+    5.2. Test reports
    
-8. Releasing a new version
+6. Releasing a New Version
    
-    8.1. Before the Release
-    8.2. Update the webserver
-    8.3. SuSE or Red Hat
-    8.4. OS/2
-    8.5. Solaris
-    8.6. Windows
-    8.7. Debian
-    8.8. Mac OSX
-    8.9. FreeBSD
-    8.10. Tarball
-    8.11. HP-UX 11
-    8.12. Amiga OS
-    8.13. AIX
+    6.1. Version numbers
+    6.2. Before the Release: Freeze
+    6.3. Building and Releasing the Packages
+       
+        6.3.1. Source Tarball
+        6.3.2. SuSE or Red Hat RPM
+        6.3.3. OS/2
+        6.3.4. Solaris
+        6.3.5. Windows
+        6.3.6. Debian
+        6.3.7. Mac OSX
+        6.3.8. FreeBSD
+        6.3.9. HP-UX 11
+        6.3.10. Amiga OS
+        6.3.11. AIX
+       
+    6.4. Uploading and Releasing Your Package
+    6.5. After the Release
    
-9. Contacting the developers, Bug Reporting and Feature Requests
-10. Copyright and History
+7. Update the Webserver
+8. Contacting the developers, Bug Reporting and Feature Requests
    
-    10.1. Copyright
-    10.2. History
+    8.1. Get Support
+    8.2. Report bugs
+    8.3. Request new features
+    8.4. Report ads or other filter problems
+    8.5. Other
    
-11. See also
-
--------------------------------------------------------------------------------
+9. Privoxy Copyright, License and History
+   
+    9.1. License
+    9.2. History
+   
+10. See also
 
 1. Introduction
 
@@ -147,30 +149,84 @@ porting, are all important jobs as well.
 
 -------------------------------------------------------------------------------
 
-3. Quickstart to Privoxy Development
+1.1. Quickstart to Privoxy Development
 
 You'll need an account on Sourceforge to support our development. Mail your ID
 to the list and wait until a project manager has added you.
 
-For the time being (read, this section is under construction), please note the
-following guidelines for changing stuff in the code. If it is
+For the time being (read, this section is under construction), please refer to
+the extensive comments in the source code.
+
+-------------------------------------------------------------------------------
+
+2. The CVS Repository
+
+If you intend to help us with programming, documentation or packaging you will
+need write access to our holy grail, the CVS repository. Please read this
+chapter completely before accessing via CVS.
+
+-------------------------------------------------------------------------------
+
+2.1. Access to CVS
+
+The project's CVS repository is hosted on SourceForge. Please refer to the
+chapters 6 and 7 in SF's site documentation for the technical access details
+for your operating system. For historical reasons, the CVS server is called
+cvs.ijbswa.sourceforge.net, the repository is called ijbswa, and the source
+tree module is called current.
+
+-------------------------------------------------------------------------------
+
+2.2. CVS Commit Guideline
+
+The source tree is the heart of every software project. Every effort must be
+made to ensure that it is readable, compilable and consistent at all times. We
+therefore ask anyone with CVS access to strictly adhere to the following
+guidelines:
+
+  * Never (read: never, ever) be tempted to commit that small change without
+    testing it thoroughly first. When we're close to a public release, ask a
+    fellow developer to review your changes.
+   
+  * Your commit message should give a concise overview of what you changed (no
+    big details) and why you changed it Just check previous messages for good
+    examples.
+   
+  * Don't use the same message on multiple files, unless it equally applies to
+    all those files.
+   
+  * If your changes span multiple files, and the code won't recompile unless
+    all changes are commited (e.g. when changing the signature of a function),
+    then commit all files one after another, without long delays in beween. If
+    necessary, prepare the commit messages in advance.
+   
+  * Before changing things on CVS, make sure that your changes are in line with
+    the team's general consensus on what should be done (see below).
+   
+-------------------------------------------------------------------------------
+
+2.3. Discussing Changes First
+
+We don't have a too formal policy on this, just use common sense. Hints: If it
+is..
 
- 1. A bugfix / clean-up / cosmetic thing: shoot
+ 1. ..a bugfix / clean-up / cosmetic thing: shoot
    
- 2. A new feature that can be turned off: shoot
+ 2. ..a new feature that can be turned off: shoot
    
- 3. A clear improvement w/o side effects on other parts of the code: shoot
+ 3. ..a clear improvement w/o side effects on other parts of the code: shoot
    
- 4. A matter of taste: ask the list
+ 4. ..a matter of taste: ask the list
    
- 5. A major redesign of some part of the code: ask the list
+ 5. ..a major redesign of some part of the code: ask the list
    
 Note that near a major public release, we get a bit more cautious - if unsure,
-it doesn't hurt to ask first.
+it doesn't hurt to ask first. There is always the possibility to submit a patch
+to the patches tracker instead.
 
 -------------------------------------------------------------------------------
 
-4. Documentation Guidelines
+3. Documentation Guidelines
 
 All formal documents are maintained in Docbook SGML and located in the doc/
 source/* directory. You will need Docbook, the Docbook DTD's and the Docbook
@@ -213,7 +269,7 @@ been updated (this is done just prior to a new release).
 
 -------------------------------------------------------------------------------
 
-4.1. Quickstart to Docbook and SGML
+3.1. Quickstart to Docbook and SGML
 
 If you are not familiar with SGML, it is a markup language similar to HTML.
 Actually, not a mark up language per se, but a language used to define markup
@@ -240,24 +296,26 @@ sufficient for our purposes.
 
 Some common elements that you likely will use:
 
-, paragraph delimiter. Most text needs to be within paragraph elements (there  
-are some exceptions).                                                          
-, the stylesheets make this italics.                                           
-, files and directories.                                                       
-, command examples.                                                            
-, like                                                                         
-, more or less.                                                                
-, list with bullets.                                                           
-, member of the above.                                                         
-, screen output, implies .                                                     
-, like HTML tag.                                                               
-, for, doh, quoting text.                                                      
+<para></para>, paragraph delimiter. Most text needs to be within paragraph     
+elements (there are some exceptions).                                          
+<emphasis></emphasis>, the stylesheets make this italics.                      
+<filename></filename>, files and directories.                                  
+<command></command>, command examples.                                         
+<literallayout></literallayout>, like <pre>, more or less.                     
+<itemizedlist></itemizedlist>, list with bullets.                              
+<listitem></listitem>, member of the above.                                    
+<screen></screen>, screen output, implies <literallayout>.                     
+<ulink url="example.com"></ulink>, like HTML <a> tag.                          
+<quote></quote>, for, doh, quoting text.                                       
 
 Look at any of the existing docs for examples of all these and more.
 
+You might also find "Writing Documentation Using DocBook - A Crash Course"
+useful.
+
 -------------------------------------------------------------------------------
 
-4.2. Privoxy Documentation Style
+3.2. Privoxy Documentation Style
 
 It will be easier if everyone follows a similar writing style. This just makes
 it easier to read what someone else has written if it is all done in a similar
@@ -328,7 +386,7 @@ Here it is:
    
 -------------------------------------------------------------------------------
 
-4.3. Privoxy Custom Entities
+3.3. Privoxy Custom Entities
 
 Privoxy documentation is using a number of customized "entities" to facilitate
 documentation maintenance.
@@ -358,7 +416,7 @@ entities are listed below. See any of the main docs for examples.
    
   * Commonly used "internal entities":
    
-    p-version: the Privoxy version string, e.g. "2.9.14".                      
+    p-version: the Privoxy version string, e.g. "2.9.15".                      
     p-status: the project status, either "alpha", "beta", or "stable".         
     p-not-stable: use to conditionally include text in "not stable" releases   
     (e.g. "beta").                                                             
@@ -370,9 +428,9 @@ Read the source!
 
 -------------------------------------------------------------------------------
 
-5. Coding Guidelines
+4. Coding Guidelines
 
-5.1. Introduction
+4.1. Introduction
 
 This set of standards is designed to make our lives easier. It is developed
 with the simple goal of helping us keep the "new and improved Privoxy"
@@ -385,9 +443,9 @@ changes/improvements and in general feel good about ourselves. ;->
 
 -------------------------------------------------------------------------------
 
-5.2. Using Comments
+4.2. Using Comments
 
-5.2.1. Comment, Comment, Comment
+4.2.1. Comment, Comment, Comment
 
 Explanation:
 
@@ -422,7 +480,7 @@ is actually being done.
 
 -------------------------------------------------------------------------------
 
-5.2.2. Use blocks for comments
+4.2.2. Use blocks for comments
 
 Explanation:
 
@@ -462,7 +520,7 @@ line as the code.
 
 -------------------------------------------------------------------------------
 
-5.2.3. Keep Comments on their own line
+4.2.3. Keep Comments on their own line
 
 Explanation:
 
@@ -512,7 +570,7 @@ short DoSomethingVeryImportant(
 
 -------------------------------------------------------------------------------
 
-5.2.4. Comment each logical step
+4.2.4. Comment each logical step
 
 Explanation:
 
@@ -527,7 +585,7 @@ these are usually major logic containers.
 
 -------------------------------------------------------------------------------
 
-5.2.5. Comment All Functions Thoroughly
+4.2.5. Comment All Functions Thoroughly
 
 Explanation:
 
@@ -544,7 +602,7 @@ document.
 
 -------------------------------------------------------------------------------
 
-5.2.6. Comment at the end of braces if the content is more than one screen
+4.2.6. Comment at the end of braces if the content is more than one screen
 length
 
 Explanation:
@@ -577,9 +635,9 @@ if ( 1 == X )
 
 -------------------------------------------------------------------------------
 
-5.3. Naming Conventions
+4.3. Naming Conventions
 
-5.3.1. Variable Names
+4.3.1. Variable Names
 
 Explanation:
 
@@ -599,7 +657,7 @@ int msiis5hack = 0; int msIis5Hack = 0;
 
 -------------------------------------------------------------------------------
 
-5.3.2. Function Names
+4.3.2. Function Names
 
 Explanation:
 
@@ -620,7 +678,7 @@ int loadSomeFile( struct client_state *csp )
 
 -------------------------------------------------------------------------------
 
-5.3.3. Header file prototypes
+4.3.3. Header file prototypes
 
 Explanation:
 
@@ -640,7 +698,7 @@ Instead of:
 
 -------------------------------------------------------------------------------
 
-5.3.4. Enumerations, and #defines
+4.3.4. Enumerations, and #defines
 
 Explanation:
 
@@ -667,7 +725,7 @@ Example:
 
 -------------------------------------------------------------------------------
 
-5.3.5. Constants
+4.3.5. Constants
 
 Explanation:
 
@@ -693,9 +751,9 @@ Instead of:
 
 -------------------------------------------------------------------------------
 
-5.4. Using Space
+4.4. Using Space
 
-5.4.1. Put braces on a line by themselves.
+4.4.1. Put braces on a line by themselves.
 
 Explanation:
 
@@ -738,7 +796,7 @@ while ( more lines are read )
 
 -------------------------------------------------------------------------------
 
-5.4.2. ALL control statements should have a block
+4.4.2. ALL control statements should have a block
 
 Explanation:
 
@@ -768,7 +826,7 @@ above also applies.
 
 -------------------------------------------------------------------------------
 
-5.4.3. Do not belabor/blow-up boolean expressions
+4.4.3. Do not belabor/blow-up boolean expressions
 
 Example:
 
@@ -784,7 +842,7 @@ knowledge of C/C++. (Hope I do not offend by that last comment ... 8-)
 
 -------------------------------------------------------------------------------
 
-5.4.4. Use white space freely because it is free
+4.4.4. Use white space freely because it is free
 
 Explanation:
 
@@ -804,7 +862,7 @@ firstValue = oldValue + ( ( someValue - anotherValue ) - whatever )
 
 -------------------------------------------------------------------------------
 
-5.4.5. Don't use white space around structure operators
+4.4.5. Don't use white space around structure operators
 
 Explanation:
 
@@ -825,7 +883,7 @@ Instead of: aStruct -> aMember; aStruct . aMember; FunctionName ();
 
 -------------------------------------------------------------------------------
 
-5.4.6. Make the last brace of a function stand out
+4.4.6. Make the last brace of a function stand out
 
 Example:
 
@@ -856,7 +914,7 @@ of function comments.
 
 -------------------------------------------------------------------------------
 
-5.4.7. Use 3 character indentions
+4.4.7. Use 3 character indentions
 
 Explanation:
 
@@ -889,9 +947,9 @@ int function1( ... )
 
 -------------------------------------------------------------------------------
 
-5.5. Initializing
+4.5. Initializing
 
-5.5.1. Initialize all variables
+4.5.1. Initialize all variables
 
 Explanation:
 
@@ -914,9 +972,9 @@ Status: developer-discretion if and only if the variable is assigned a value
 
 -------------------------------------------------------------------------------
 
-5.6. Functions
+4.6. Functions
 
-5.6.1. Name functions that return a boolean as a question.
+4.6.1. Name functions that return a boolean as a question.
 
 Explanation:
 
@@ -931,7 +989,7 @@ IsWebPageBlank();
 
 -------------------------------------------------------------------------------
 
-5.6.2. Always specify a return type for a function.
+4.6.2. Always specify a return type for a function.
 
 Explanation:
 
@@ -941,7 +999,7 @@ type if the function does not need to return anything.
 
 -------------------------------------------------------------------------------
 
-5.6.3. Minimize function calls when iterating by using variables
+4.6.3. Minimize function calls when iterating by using variables
 
 Explanation:
 
@@ -981,7 +1039,7 @@ loop.
 
 -------------------------------------------------------------------------------
 
-5.6.4. Pass and Return by Const Reference
+4.6.4. Pass and Return by Const Reference
 
 Explanation:
 
@@ -998,7 +1056,7 @@ should too.
 
 -------------------------------------------------------------------------------
 
-5.6.5. Pass and Return by Value
+4.6.5. Pass and Return by Value
 
 Explanation:
 
@@ -1011,7 +1069,7 @@ would not work. So, to be consistent, we should declare all prototypes with
 
 -------------------------------------------------------------------------------
 
-5.6.6. Names of include files
+4.6.6. Names of include files
 
 Explanation:
 
@@ -1023,20 +1081,20 @@ other header files.
 
 Example:
 
-#include      /* This is not a local include */                                
+#include <iostream.h>     /* This is not a local include */                    
 #include "config.h"       /* This IS a local include */                        
 
 Exception:
 
 /* This is not a local include, but requires a path element. */                
-#include                                                                       
+#include <sys/fileName.h>                                                      
 
 Note: Please! do not add "-I." to the Makefile without a _very_ good reason.
 This duplicates the #include "file.h" behavior.
 
 -------------------------------------------------------------------------------
 
-5.6.7. Provide multiple inclusion protection
+4.6.7. Provide multiple inclusion protection
 
 Explanation:
 
@@ -1055,7 +1113,7 @@ Example:
 
 -------------------------------------------------------------------------------
 
-5.6.8. Use `extern "C"` when appropriate
+4.6.8. Use `extern "C"` when appropriate
 
 Explanation:
 
@@ -1078,7 +1136,7 @@ extern "C"
 
 -------------------------------------------------------------------------------
 
-5.6.9. Where Possible, Use Forward Struct Declaration Instead of Includes
+4.6.9. Where Possible, Use Forward Struct Declaration Instead of Includes
 
 Explanation:
 
@@ -1101,9 +1159,9 @@ Status: Use with discretion.
 
 -------------------------------------------------------------------------------
 
-5.7. General Coding Practices
+4.7. General Coding Practices
 
-5.7.1. Turn on warnings
+4.7.1. Turn on warnings
 
 Explanation
 
@@ -1113,7 +1171,7 @@ possible.
 
 -------------------------------------------------------------------------------
 
-5.7.2. Provide a default case for all switch statements
+4.7.2. Provide a default case for all switch statements
 
 Explanation:
 
@@ -1153,7 +1211,7 @@ Status: Programmer discretion is advised.
 
 -------------------------------------------------------------------------------
 
-5.7.3. Try to avoid falling through cases in a switch statement.
+4.7.3. Try to avoid falling through cases in a switch statement.
 
 Explanation:
 
@@ -1172,7 +1230,7 @@ fall through and reason why you felt it was necessary.
 
 -------------------------------------------------------------------------------
 
-5.7.4. Use 'long' or 'short' Instead of 'int'
+4.7.4. Use 'long' or 'short' Instead of 'int'
 
 Explanation:
 
@@ -1186,7 +1244,7 @@ forget the exact typedefs now). Should we add these to IJB now that we have a
 
 -------------------------------------------------------------------------------
 
-5.7.5. Don't mix size_t and other types
+4.7.5. Don't mix size_t and other types
 
 Explanation:
 
@@ -1198,7 +1256,7 @@ can.
 
 -------------------------------------------------------------------------------
 
-5.7.6. Declare each variable and struct on its own line.
+4.7.6. Declare each variable and struct on its own line.
 
 Explanation:
 
@@ -1227,7 +1285,7 @@ Status: developer-discretion.
 
 -------------------------------------------------------------------------------
 
-5.7.7. Use malloc/zalloc sparingly
+4.7.7. Use malloc/zalloc sparingly
 
 Explanation:
 
@@ -1244,7 +1302,7 @@ list, then it should definitely be allocated via `malloc'.
 
 -------------------------------------------------------------------------------
 
-5.7.8. The Programmer Who Uses 'malloc' is Responsible for Ensuring 'free'
+4.7.8. The Programmer Who Uses 'malloc' is Responsible for Ensuring 'free'
 
 Explanation:
 
@@ -1270,7 +1328,7 @@ and freeing data structures (complex or nested).
 
 -------------------------------------------------------------------------------
 
-5.7.9. Add loaders to the `file_list' structure and in order
+4.7.9. Add loaders to the `file_list' structure and in order
 
 Explanation:
 
@@ -1283,7 +1341,7 @@ KILLPOPUPs, it is clear that it should come first.
 
 -------------------------------------------------------------------------------
 
-5.7.10. "Uncertain" new code and/or changes to existing code, use FIXME
+4.7.10. "Uncertain" new code and/or changes to existing code, use FIXME
 
 Explanation:
 
@@ -1308,11 +1366,11 @@ from the project).
 
 -------------------------------------------------------------------------------
 
-5.8. Addendum: Template for files and function comment blocks:
+4.8. Addendum: Template for files and function comment blocks:
 
 Example for file comments:
 
-const char FILENAME_rcs[] = "$Id: developer-manual.sgml,v 1.33 2002/04/12 03:49:53 hal9 Exp $"; 
+const char FILENAME_rcs[] = "$Id: developer-manual.sgml,v 1.42 2002/05/05 20:26:02 hal9 Exp $"; 
 /*********************************************************************                          
  *                                                                                              
  * File        :  $Source$                                                                      
@@ -1369,7 +1427,7 @@ Example for file header comments:
 
 #ifndef _FILENAME_H                                                                           
 #define _FILENAME_H                                                                           
-#define FILENAME_H_VERSION "$Id: developer-manual.sgml,v 1.33 2002/04/12 03:49:53 hal9 Exp $" 
+#define FILENAME_H_VERSION "$Id: developer-manual.sgml,v 1.42 2002/05/05 20:26:02 hal9 Exp $" 
 /*********************************************************************                        
  *                                                                                            
  * File        :  $Source$                                                                    
@@ -1460,20 +1518,13 @@ create a "self-documenting" web page.
 
 -------------------------------------------------------------------------------
 
-6. Version Control Guidelines
-
-To be filled. note on cvs comments. Don't only comment what you did, but also
-why you did it!
-
--------------------------------------------------------------------------------
-
-7. Testing Guidelines
+5. Testing Guidelines
 
 To be filled.
 
 -------------------------------------------------------------------------------
 
-7.1. Testplan for releases
+5.1. Testplan for releases
 
 Explain release numbers. major, minor. developer releases. etc.
 
@@ -1502,7 +1553,7 @@ Explain release numbers. major, minor. developer releases. etc.
    
 -------------------------------------------------------------------------------
 
-7.2. Test reports
+5.2. Test reports
 
 Please submit test reports only with the test form at sourceforge. Three simple
 steps:
@@ -1518,120 +1569,184 @@ Do not mail to the mailinglist (we cannot keep track on issues there).
 
 -------------------------------------------------------------------------------
 
-8. Releasing a new version
+6. Releasing a New Version
+
+When we release versions of Privoxy, our work leaves our cozy secret lab and
+has to work in the cold RealWorld[tm]. Once it is released, there is no way to
+call it back, so it is very important that great care is taken to ensure that
+everything runs fine, and not to introduce problems in the very last minute.
 
-To minimize trouble with distribution contents, web-page errors and the like,
-we strongly encourage you to follow this section if you prepare a new release
-of code or new pages on the webserver.
+So when releasing a new version, please adhere exactly to the procedure
+outlined in this chapter.
 
 The following programs are required to follow this process: ncftpput (ncftp),
-scp (ssh), gmake (GNU's version of make), autoconf, cvs, ???.
+scp, ssh (ssh), gmake (GNU's version of make), autoconf, cvs.
 
-Replace X, Y and Z with the actual version number (X = major, Y = minor, Z =
-point):
+-------------------------------------------------------------------------------
+
+6.1. Version numbers
+
+First you need to determine which version number the release will have. Privoxy
+version numbers consist of three numbers, separated by dots, like in X.Y.Z,
+where:
 
+  * X, the version major, is rarely ever changed. It is increased by one if
+    turning a development branch into stable substantially changes the
+    functionality, user interface or configuration syntax. Majors 1 and 2 were
+    Junkbuster, and 3 will be the first stable Privoxy release.
+   
+  * Y, the version minor, represents the branch within the major version. At
+    any point in time, there are two branches being maintained: The stable
+    branch, with an even minor, say, 2N, in which no functionality is being
+    added and only bugfixes are made, and 2N+1, the development branch, in
+    which the further development of Privoxy takes place. This enables us to
+    turn the code upside down and inside out, while at the same time providing
+    and maintaining a stable version. The minor is reset to zero (and one) when
+    the major is inrcemented. When a development branch has matured to the
+    point where it can be turned into stable, the old stable branch 2N is given
+    up (i.e. no longer maintained), the former development branch 2N+1 becomes
+    the new stable branch 2N+2, and a new development branch 2N+3 is opened.
+   
+  * Z, the point or sub version, represents a release of the software within a
+    branch. It is therefore incremented immediately before each code freeze. In
+    development branches, only the even point versions correspond to actual
+    releases, while the odd ones denote the evolving state of the sources on
+    CVS in between. It follows that Z is odd on CVS in development branches
+    most of the time. There, it gets increased to an even number immediately
+    before a code freeze, and is increased to an odd number again immediately
+    thereafter. This ensures that builds from CVS snapshots are easily
+    distinguished from released versions. The point version is reset to zero
+    when the minor changes.
+   
 -------------------------------------------------------------------------------
 
-8.1. Before the Release
+6.2. Before the Release: Freeze
 
 The following must be done by one of the developers prior to each new release.
 
   * Make sure that everybody who has worked on the code in the last couple of
     days has had a chance to yell "no!" in case they have pending changes/fixes
-    in their pipelines.
+    in their pipelines. Announce the freeze so that nobody will interfere with
+    last minute changes.
    
-  * Increment the version number in configure.in in CVS. Also, increase or
-    reset the RPM release number in configure.in as appropriate. Do NOT touch
-    version information after export from CVS. All packages will use the
-    version and release data from configure.in. Local files should not be
-    changed, except prior to a CVS commit!!! This way we are all on the same
-    page!
+  * Increment the version number (point from odd to even in development
+    branches!) in configure.in.
    
-  * If the default actionsfile has changed since last release, bump up its
-    version info in this line:
+  * If default.action has changed since last release (i.e. software release or
+    standalone actions file release), bump up its version info to A.B in this
+    line:
    
       {+add-header{X-Actions-File-Version: A.B} -filter -no-popups}    
-                                                                       
    
     Then change the version info in doc/webserver/actions/index.php, line:
     '$required_actions_file_version = "A.B";'
    
+  * If the HTML documentation is not in sync with the SGML sources you need to
+    regenerate and upload it to the webserver. (If in doubt, just do it.) See
+    the Section "Updating the webserver" in this manual for details.
+   
   * Commit all files that were changed in the above steps!
    
   * Tag all files in CVS with the version number with "cvs tag v_X_Y_Z". Don't
     use vX_Y_Z, ver_X_Y_Z, v_X.Y.Z (won't work) etc.
    
-  * The first package uploaded should be the official "tarball" release, as
-    required by the GPL. This is built with the "make tarball-dist" Makefile
-    target, and then can be uploaded with "make tarball-upload" (see below).
+  * If the release was in a development branch, increase the point version from
+    even to odd (X.Y.(Z+1)) again in configure.in and commit your change.
+   
+  * On the webserver, copy the user manual to a new top-level directory called
+    X.Y.Z. This ensures that help links from the CGI pages, which have the
+    version as a prefix, will go into the right version of the manual. If this
+    is a development branch release, also symlink X.Y.(Z-1) to X.Y.Z and X.Y.
+    (Z+1) to . (i.e. dot).
    
 -------------------------------------------------------------------------------
 
-8.2. Update the webserver
+6.3. Building and Releasing the Packages
 
-All files must be group-readable and group-writable (or no one else will be
-able to change them)! To update the webserver, create any pages locally in the
-doc/webserver/* directory (or create new directories under doc/webserver), then
-do
+Now the individual packages can be built and released. Note that for GPL
+reasons the first package to be released is always the source tarball.
 
-  make webserver                                                               
-                                                                               
+For all types of packages, including the source tarball, you must make sure
+that you build from clean sources by exporting the right version from CVS into
+an empty directory:.
+
+  mkdir dist # delete or choose different name if it already exists                                
+  cd dist                                                                                          
+  cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login                        
+  cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r v_X_Y_Z current
 
-This will do the upload to the webserver (www.privoxy.org).
+Do NOT change a single bit, including, but not limited to version information
+after export from CVS. This is to make sure that all release packages, and with
+them, all future bug reports, are based on exactly the same code.
 
-Note that "make dok" (or "make redhat-dok") creates doc/webserver/user-manual,
-doc/webserver/developer-manual, doc/webserver/faq and doc/webserver/index.html
-automatically. (doc/webserver/man-page/privoxy-man-page.html is created by a
-separate Makefile target, "make man", due to dependencies on some obscure perl
-scripts. See comments in GNUmakefile.)
+Please find additional instructions for the source tarball and the individual
+platform dependent binary packages below.
 
-Someone should also commit these to CVS so that packagers without the ability
-to build docs locally, have access to them. This is a separate step, and should
-also be done before each official release.
+-------------------------------------------------------------------------------
+
+6.3.1. Source Tarball
+
+First, make sure that you have freshly exported the right version into an empty
+directory. (See "Building and releasing packages" above). Then run:
 
-Please do NOT use any other means of transferring files to the webserver. "make
-webserver" not only uploads, but will make sure that the appropriate
-permissions are preserved for shared group access.
+  cd current                                                                   
+  autoheader && autoconf && ./configure                                        
+
+Then do:
+
+  make tarball-dist                                                            
+
+To upload the package to Sourceforge, simply issue
+
+  make tarball-upload                                                          
+
+Go to the displayed URL and release the file publicly on Sourceforge. For the
+change log field, use the relevant section of the ChangeLog file.
 
 -------------------------------------------------------------------------------
 
-8.3. SuSE or Red Hat
+6.3.2. SuSE or Red Hat RPM
+
+In following text, replace dist with either "rh" for Red Hat or "suse" for
+SuSE.
 
-Ensure that you have the latest code version. Hence run:
+First, make sure that you have freshly exported the right version into an empty
+directory. (See "Building and releasing packages" above).
 
-  cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login                           
-  cvs -z3  -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r  v_X_Y_Z current 
-  cd current                                                                                          
-                                                                                                      
+As the only exception to not changing anything after export from CVS, now
+examine the file privoxy-dist.spec and make sure that the version information
+and the RPM release number are correct. The RPM release numbers for each
+version start at one. Hence it must be reset to one if this is the first RPM
+for dist which is built from version X.Y.Z. Check the file list if unsure.
+Else, it must be set to the highest already available RPM release number for
+that version plus one.
 
-first.
+Then run:
 
+  cd current                                                                   
   autoheader && autoconf && ./configure                                        
-                                                                               
 
 Then do
 
-  make suse-dist or make redhat-dist                                           
-                                                                               
+  make dist-dist                                                               
 
 To upload the package to Sourceforge, simply issue
 
-  make suse-upload (or make redhat-upload)                                     
-                                                                               
+  make dist-upload rpm_packagerev                                              
 
-Go to the displayed URL and release the file publicly on Sourceforge.
+where rpm_packagerev is the RPM release number as determined above. Go to the
+displayed URL and release the file publicly on Sourceforge. Use the release
+notes and change log from the source tarball package.
 
 -------------------------------------------------------------------------------
 
-8.4. OS/2
+6.3.3. OS/2
 
-Ensure that you have the latest code version. Hence run:
+First, make sure that you have freshly exported the right version into an empty
+directory. (See "Building and releasing packages" above). Then get the OS/2
+Setup module:
 
-  cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login                          
-  cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r  v_X_Y_Z current 
-  cd ..                                                                                              
-  cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa co os2setup                
-                                                                                                     
+  cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa co os2setup
 
 You will need a mix of development tools. The main compilation takes place with
 IBM Visual Age C++. Some ancillary work takes place with GNU tools, available
@@ -1643,116 +1758,94 @@ Change directory to the os2setup directory. Edit the os2build.cmd file to set
 the final executable filename. For example,
 
   installExeName='privoxyos2_setup_X.Y.Z.exe'                                  
-                                                                               
 
 Next, edit the IJB.wis file so the release number matches in the PACKAGEID
 section:
 
   PACKAGEID="Privoxy Team\Privoxy\Privoxy Package\X\Y\Z"                       
-                                                                               
 
 You're now ready to build. Run:
 
   os2build                                                                     
-                                                                               
 
-And in the ./files directory you will have the WarpIN-installable executable.
+You will find the WarpIN-installable executable in the ./files directory.
 Upload this anonymously to uploads.sourceforge.net/incoming, create a release
-for it, and you're done.
+for it, and you're done. Use the release notes and Change Log from the source
+tarball package.
 
 -------------------------------------------------------------------------------
 
-8.5. Solaris
+6.3.4. Solaris
 
-Login to Sourceforge's compilefarm via ssh
+Login to Sourceforge's compilefarm via ssh:
 
   ssh cf.sourceforge.net                                                       
-                                                                               
 
-Choose the right operating system (not the Debian one). If you have downloaded
-Privoxy before,
-
-  cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login                           
-  cvs -z3  -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r  v_X_Y_Z current 
-  cd current                                                                                          
-                                                                                                      
-
-If not, please checkout Privoxy via CVS first. Run:
+Choose the right operating system (not the Debian one). When logged in, make
+sure that you have freshly exported the right version into an empty directory.
+(See "Building and releasing packages" above). Then run:
 
+  cd current                                                                   
   autoheader && autoconf && ./configure                                        
-                                                                               
 
 Then run
 
   gmake solaris-dist                                                           
-                                                                               
 
 which creates a gzip'ed tar archive. Sadly, you cannot use make solaris-upload
 on the Sourceforge machine (no ncftpput). You now have to manually upload the
-archive to Sourceforge's ftp server and release the file publicly.
+archive to Sourceforge's ftp server and release the file publicly. Use the
+release notes and Change Log from the source tarball package.
 
 -------------------------------------------------------------------------------
 
-8.6. Windows
+6.3.5. Windows
 
 You should ensure you have the latest version of Cygwin (from http://
 www.cygwin.com/). Run the following commands from within a Cygwin bash shell.
 
-First check out a clean copy of the correct code version, by running:
-
-        mkdir dist                                                                                    
-        cd dist                                                                                       
-        cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login                     
-        cvs -z3  -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r  v_X_Y_Z . 
-                                                                                                      
+First, make sure that you have freshly exported the right version into an empty
+directory. (See "Building and releasing packages" above). Then get the Windows
+setup module:
 
-(Note: It is important that this is a clean copy of the code, do not re-use a
-working directory after you have manually compiled there).
+        cvs -z3  -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa co winsetup
 
 Then you can build the package. This is fully automated, and is controlled by
 winsetup/GNUmakefile. All you need to do is:
 
         cd winsetup                                                            
         make                                                                   
-                                                                               
 
 Now you can manually rename privoxy_setup.exe to privoxy_setup_X_Y_Z.exe, and
-upload it to SourceForge.
+upload it to SourceForge. When releasing the package on SourceForge, use the
+release notes and Change Log from the source tarball package.
 
 -------------------------------------------------------------------------------
 
-8.7. Debian
+6.3.6. Debian
 
-Ensure that you have the latest code version. Hence run:
-
-  cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login                           
-  cvs -z3  -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r  v_X_Y_Z current 
-  cd current                                                                                          
-                                                                                                      
-
-first. Run:
+First, make sure that you have freshly exported the right version into an empty
+directory. (See "Building and releasing packages" above). Then, run:
 
+  cd current                                                                   
   autoheader && autoconf && ./configure                                        
-                                                                               
 
 Then do FIXME.
 
 -------------------------------------------------------------------------------
 
-8.8. Mac OSX
+6.3.7. Mac OSX
 
-Ensure that you have the latest code version. Hence run:
+First, make sure that you have freshly exported the right version into an empty
+directory. (See "Building and releasing packages" above). Then get the Mac OSX
+setup module:
 
-  cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login                          
-  cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r  v_X_Y_Z current 
-  cd ..                                                                                              
-  cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa co osxsetup                
-                                                                                                     
+  cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa co osxsetup
 
-From the osxsetup directory, run:
+Then run:
 
+  cd osxsetup                                                                  
   build                                                                        
-                                                                               
 
 This will run autoheader, autoconf and configure as well as make. Finally, it
 will copy over the necessary files to the ./osxsetup/files directory for
@@ -1764,198 +1857,234 @@ specify ./Privoxy.pkg as the output package name, you can then create the
 distributable zip file with the command:
 
 zip -r privoxyosx_setup_x.y.z.zip Privoxy.pkg                                  
-                                                                               
 
 You can then upload privoxyosx_setup_x.y.z.zip anonymously to
-uploads.sourceforge.net/incoming, create a release for it, and you're done.
+uploads.sourceforge.net/incoming, create a release for it, and you're done. Use
+the release notes and Change Log from the source tarball package.
 
 -------------------------------------------------------------------------------
 
-8.9. FreeBSD
-
-Change the version number of Privoxy in the configure.in file. Run:
-
-  autoheader && autoconf && ./configure                                        
-                                                                               
-
-Then ...
+6.3.8. FreeBSD
 
 Login to Sourceforge's compilefarm via ssh:
 
   ssh cf.sourceforge.net                                                       
-                                                                               
-
-Choose the right operating system.
-
-  cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login                           
-  cvs -z3  -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r  v_X_Y_Z current 
-  cd current                                                                                          
-                                                                                                      
 
-Run:
+Choose the right operating system. When logged in, make sure that you have
+freshly exported the right version into an empty directory. (See "Building and
+releasing packages" above). Then run:
 
+  cd current                                                                   
   autoheader && autoconf && ./configure                                        
-                                                                               
 
 Then run:
 
   gmake freebsd-dist                                                           
-                                                                               
 
 which creates a gzip'ed tar archive. Sadly, you cannot use make freebsd-upload
 on the Sourceforge machine (no ncftpput). You now have to manually upload the
-archive to Sourceforge's ftp server and release the file publicly.
+archive to Sourceforge's ftp server and release the file publicly. Use the
+release notes and Change Log from the source tarball package.
 
 -------------------------------------------------------------------------------
 
-8.10. Tarball
-
-Ensure that you have the right code version. Hence run:
+6.3.9. HP-UX 11
 
-  cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login                           
-  cvs -z3  -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r  v_X_Y_Z current 
-  cd current                                                                                          
-                                                                                                      
-
-first. Run:
+First, make sure that you have freshly exported the right version into an empty
+directory. (See "Building and releasing packages" above). Then run:
 
+  cd current                                                                   
   autoheader && autoconf && ./configure                                        
-                                                                               
 
-Then do:
+Then do FIXME.
 
-  make tarball-dist                                                            
-                                                                               
+-------------------------------------------------------------------------------
 
-To upload the package to Sourceforge, simply issue
+6.3.10. Amiga OS
 
-  make tarball-upload                                                          
-                                                                               
+First, make sure that you have freshly exported the right version into an empty
+directory. (See "Building and releasing packages" above). Then run:
 
-Goto the displayed URL and release the file publicly on Sourceforge.
+  cd current                                                                   
+  autoheader && autoconf && ./configure                                        
+
+Then do FIXME.
 
 -------------------------------------------------------------------------------
 
-8.11. HP-UX 11
+6.3.11. AIX
 
-Ensure that you have the latest code version. Hence run:
+Login to Sourceforge's compilefarm via ssh:
 
-  cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login                           
-  cvs -z3  -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r  v_X_Y_Z current 
-  cd current                                                                                          
-                                                                                                      
+  ssh cf.sourceforge.net                                                       
 
-first. Run:
+Choose the right operating system. When logged in, make sure that you have
+freshly exported the right version into an empty directory. (See "Building and
+releasing packages" above). Then run:
 
+  cd current                                                                   
   autoheader && autoconf && ./configure                                        
-                                                                               
 
-Then do FIXME.
+Then run:
+
+  make aix-dist                                                                
+
+which creates a gzip'ed tar archive. Sadly, you cannot use make aix-upload on
+the Sourceforge machine (no ncftpput). You now have to manually upload the
+archive to Sourceforge's ftp server and release the file publicly. Use the
+release notes and Change Log from the source tarball package.
 
 -------------------------------------------------------------------------------
 
-8.12. Amiga OS
+6.4. Uploading and Releasing Your Package
 
-Ensure that you have the latest code version. Hence run:
+After the package is ready, it is time to upload it to SourceForge, and go
+through the release steps. The upload is done via FTP:
 
-  cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login                           
-  cvs -z3  -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r  v_X_Y_Z current 
-  cd current                                                                                          
-                                                                                                      
+  * Upload to: ftp://upload.sourceforge.net/incoming
+   
+  * user: anonymous
+   
+  * password: ijbswa-developers@lists.sourceforge.net
+   
+Once this done go to http://sourceforge.net/project/admin/editpackages.php?
+group_id=11118, making sure you are logged in. Find your target platform in the
+second column, and click Add Release. You will then need to create a new
+release for your package, using the format of $VERSION ($CODE_STATUS), e.g.
+2.9.15 (beta).
 
-first. Run:
+Now just follow the prompts. Be sure to add any appropriate Release notes. You
+should see your freshly uploaded packages in "Step 2. Add Files To This
+Release". Check the appropriate box(es). Remember at each step to hit the
+"Refresh/Submit" buttons! You should now see your file(s) listed in Step 3.
+Fill out the forms with the appropriate information for your platform, being
+sure to hit "Update" for each file. If anyone is monitoring your platform,
+check the "email" box at the very bottom to notify them of the new package.
+This should do it!
 
-  autoheader && autoconf && ./configure                                        
-                                                                               
+If you have made errors, or need to make changes, you can go through
+essentially the same steps, but select Edit Release, instead of Add Release.
 
-Then do FIXME.
+-------------------------------------------------------------------------------
+
+6.5. After the Release
+
+When all (or: most of the) packages have been uploaded and made available, send
+an email to the announce mailing list, Subject: "Version X.Y.Z available for
+download". Be sure to include the download location, the release notes and the
+change log.
 
 -------------------------------------------------------------------------------
 
-8.13. AIX
+7. Update the Webserver
 
-Login to Sourceforge's compilefarm via ssh:
+When updating the webserver, please follow these steps to make sure that no
+broken links, incosistent contents or permission problems will occur:
 
-  ssh cf.sourceforge.net                                                       
-                                                                               
+If you have changed anything in the documentation source SGML files, do:
 
-Choose the right operating system. If you have downloaded Privoxy before:
+  make dok # (or make redkat-dok if make dok doesn't work for you)             
 
-  cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login                           
-  cvs -z3  -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r  v_X_Y_Z current 
-  cd current                                                                                          
-                                                                                                      
+That will generate doc/webserver/user-manual, doc/webserver/developer-manual,
+doc/webserver/faq and doc/webserver/index.html automatically.
 
-If not, please checkout Privoxy via CVS first. Run:
+If you changed the manual page source, generate doc/webserver/man-page/
+privoxy-man-page.html by running "make man". (This is a separate target due to
+dependencies on some obscure perl scripts. See comments in GNUmakefile.)
 
-  autoheader && autoconf && ./configure                                        
-                                                                               
+If you want to add new files to the webserver, create them locally in the doc/
+webserver/* directory (or create new directories under doc/webserver).
 
-Then run:
+Next, commit any changes from the above steps to CVS. All set? Then do
 
-  make aix-dist                                                                
-                                                                               
+  make webserver                                                               
 
-which creates a gzip'ed tar archive. Sadly, you cannot use make aix-upload on
-the Sourceforge machine (no ncftpput). You now have to manually upload the
-archive to Sourceforge's ftp server and release the file publicly.
+This will do the upload to the webserver (www.privoxy.org) and ensure all files
+and directories there are group writable.
+
+Please do NOT use any other means of transferring files to the webserver to
+avoid permission problems.
 
 -------------------------------------------------------------------------------
 
-9. Contacting the developers, Bug Reporting and Feature Requests
+8. Contacting the developers, Bug Reporting and Feature Requests
 
 We value your feedback. However, to provide you with the best support, please
-note:
+note the following sections.
+
+-------------------------------------------------------------------------------
+
+8.1. Get Support
+
+To get support, use the Sourceforge Support Forum:
+
+    http://sourceforge.net/tracker/?group_id=11118&atid=211118
 
-  * Use the Sourceforge Support Forum to get help:
-       
-        http://sourceforge.net/tracker/?group_id=11118&atid=211118
-       
-   
-  * Submit bugs only through our Sourceforge Bug Forum:
-     
-        http://sourceforge.net/tracker/?group_id=11118&atid=111118. 
-        
-   
-    Make sure that the bug has not already been submitted. Please try to verify
-    that it is a Privoxy bug, and not a browser or site bug first. If you are
-    using your own custom configuration, please try the stock configs to see if
-    the problem is a configuration related bug. And if not using the latest
-    development snapshot, please try the latest one. Or even better, CVS
-    sources. Please be sure to include the Privoxy/Junkbuster version,
-    platform, browser, any pertinent log data, any other relevant details
-    (please be specific) and, if possible, some way to reproduce the bug.
-   
-  * Submit feature requests only through our Sourceforge feature request forum:
-     
-        http://sourceforge.net/tracker/?atid=361118&group_id=11118&func=browse.
-       
-   
-  * You can also send feedback on websites that Privoxy has problems with. Please bookmark
-    the following link: "Privoxy - Submit Filter Feedback"
-    . Once you surf to a page with problems, use the
-    bookmark to send us feedback. We will look into the issue as soon as possible.
-       
-   
-  * For any other issues, feel free to use the mailing lists:
-     
-        http://sourceforge.net/mail/?group_id=11118.
-     
-   
-    Anyone interested in actively participating in development and related
-    discussions can also join the appropriate mailing list. Archives are
-    available, too.
-   
 -------------------------------------------------------------------------------
 
-10. Copyright and History
+8.2. Report bugs
+
+To submit bugs, use the Sourceforge Bug Forum:
+
+    http://sourceforge.net/tracker/?group_id=11118&atid=111118. 
+
+Make sure that the bug has not already been submitted. Please try to verify
+that it is a Privoxy bug, and not a browser or site bug first. If you are using
+your own custom configuration, please try the stock configs to see if the
+problem is a configuration related bug. And if not using the latest development
+snapshot, please try the latest one. Or even better, CVS sources. Please be
+sure to include the Privoxy version, platform, browser, any pertinent log data,
+any other relevant details (please be specific) and, if possible, some way to
+reproduce the bug.
+
+-------------------------------------------------------------------------------
 
-10.1. Copyright
+8.3. Request new features
+
+To submit ideas on new features, use the Sourceforge feature request forum:
+
+    http://sourceforge.net/tracker/?atid=361118&group_id=11118&func=browse.
+
+-------------------------------------------------------------------------------
+
+8.4. Report ads or other filter problems
+
+You can also send feedback on websites that Privoxy has problems with. Please
+bookmark the following link: "Privoxy - Submit Filter Feedback". Once you surf
+to a page with problems, use the bookmark to send us feedback. We will look
+into the issue as soon as possible.
+
+New, improved default.action files will occasionally be made available based on
+your feedback. These will be announced on the ijbswa-announce list.
+
+-------------------------------------------------------------------------------
+
+8.5. Other
+
+For any other issues, feel free to use the mailing lists:
+    http://sourceforge.net/mail/?group_id=11118.
+
+Anyone interested in actively participating in development and related
+discussions can also join the appropriate mailing list. Archives are available,
+too. See the page on Sourceforge.
+
+-------------------------------------------------------------------------------
+
+9. Privoxy Copyright, License and History
+
+Copyright © 2001, 2002 by Privoxy Developers <developers@privoxy.org>
+
+Some source code is based on code Copyright © 1997 by Anonymous Coders and
+Junkbusters, Inc. and licensed under the GNU General Public License.
+
+-------------------------------------------------------------------------------
+
+9.1. License
 
 Privoxy is free software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the Free Software
-Foundation; either version 2 of the License, or (at your option) any later
-version.
+terms of the GNU General Public License, version 2, as published by the Free
+Software Foundation.
 
 This program is distributed in the hope that it will be useful, but WITHOUT ANY
 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
@@ -1964,12 +2093,16 @@ is available from the Free Software Foundation, Inc, 59 Temple Place - Suite
 330, Boston, MA 02111-1307, USA.
 
 You should have received a copy of the GNU General Public License along with
-this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-Place, Suite 330, Boston, MA 02111-1307 USA.
+this program; if not, write to the
+
+ Free Software
+ Foundation, Inc. 59 Temple Place - Suite 330
+ Boston, MA 02111-1307
+ USA 
 
 -------------------------------------------------------------------------------
 
-10.2. History
+9.2. History
 
 Privoxy is evolved, and derived from, the Internet Junkbuster, with many
 improvments and enhancements over the original.
@@ -1983,7 +2116,7 @@ grown whiskers ;-).
 
 -------------------------------------------------------------------------------
 
-11. See also
+10. See also
 
 Other references and sites of interest to Privoxy users:
 
@@ -1995,8 +2128,8 @@ Sourceforge.
 http://p.p/, access Privoxy from your browser. Alternately, http://            
 config.privoxy.org may work in some situations where the first does not.       
 
-http://p.p/, and select "actions file feedback system" to submit "misses" to   
-the developers.                                                                
+http://p.p/, and select "Privoxy - Submit Filter Feedback" to submit "misses"  
+to the developers.                                                             
 
 http://www.junkbusters.com/ht/en/cookies.html