X-Git-Url: http://www.privoxy.org/gitweb/?a=blobdiff_plain;f=doc%2Ftext%2Fdeveloper-manual.txt;h=99df01d2841beda4ce63ac20fee730b58f6abb6b;hb=94e54af218937c38ccb7b9e4edfb6df1bdd58a78;hp=46c16d072067f07d5448ef63c2dd3f2902184105;hpb=0eb052b2d480ed7354480491a5982ebad16d7d82;p=privoxy.git
diff --git a/doc/text/developer-manual.txt b/doc/text/developer-manual.txt
index 46c16d07..99df01d2 100644
--- a/doc/text/developer-manual.txt
+++ b/doc/text/developer-manual.txt
@@ -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.
+
, more or less. +, list with bullets. + , member of the above. + , screen output, implies . + , like HTML tag. + , 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/* 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 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 + +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