<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[
-<!entity % dummy "INCLUDE">
+<!entity % dummy "IGNORE">
<!entity supported SYSTEM "supported.sgml">
<!entity newfeatures SYSTEM "newfeatures.sgml">
<!entity p-intro SYSTEM "privoxy.sgml">
<!entity seealso SYSTEM "seealso.sgml">
<!entity contacting SYSTEM "contacting.sgml">
<!entity copyright SYSTEM "copyright.sgml">
-<!entity p-version "2.9.13">
+<!entity license SYSTEM "license.sgml">
+<!entity p-version "2.9.15">
<!entity p-status "beta">
<!entity % p-not-stable "INCLUDE">
<!entity % p-stable "IGNORE">
<!entity % p-text "IGNORE"> <!-- define we are not a text only doc -->
<!entity % p-doc "INCLUDE"> <!-- and we are a formal doc -->
+<!entity my-copy "©"> <!-- kludge for docbook2man -->
]>
<!--
File : $Source: /cvsroot/ijbswa/current/doc/source/developer-manual.sgml,v $
This file belongs into
ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/
- $Id: developer-manual.sgml,v 1.25 2002/04/06 05:07:28 hal9 Exp $
-
- Written by and Copyright (C) 2001 the SourceForge
- Privoxy team. http://www.privoxy.org/
-
- Based on the Internet Junkbuster originally written
- by and Copyright (C) 1997 Anonymous Coders and
- Junkbusters Corporation. http://www.junkbusters.com
+ $Id: developer-manual.sgml,v 1.44 2002/05/15 03:55:17 hal9 Exp $
+ Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
+ See LICENSE.
========================================================================
NOTE: Please read developer-manual/documentation.html before touching
<article id="index">
<artheader>
<title>Privoxy Developer Manual</title>
+ <pubdate>
+ <subscript>
+ <!-- Completely the wrong markup, but very little is allowed -->
+ <!-- in this part of an article. FIXME -->
+ <link linkend="copyright">Copyright</link> &my-copy; 2001, 2002 by
+ <ulink url="http://www.privoxy.org">Privoxy Developers</ulink>
+ </subscript>
+ </pubdate>
- <pubdate>$Id: developer-manual.sgml,v 1.25 2002/04/06 05:07:28 hal9 Exp $</pubdate>
- <authorgroup>
- <author>
- <affiliation>
- <orgname>By: Privoxy Developers</orgname>
- </affiliation>
- </author>
- </authorgroup>
+ <pubdate>$Id: developer-manual.sgml,v 1.44 2002/05/15 03:55:17 hal9 Exp $</pubdate>
+
+<!--
+
+Note: this should generate a separate page, and a live link to it.
+But it doesn't for some mysterious reason. Please leave commented
+unless it can be fixed proper. For the time being, the copyright
+statement will be in copyright.smgl.
+
+Hal.
+
+<legalnotice id="legalnotice">
+ <para>
+ text goes here ........
+ </para>
+</legalnotice>
+
+-->
<abstract>
+
<![%dummy;[
<para>
<comment>
<!-- Include privoxy.sgml boilerplate text: -->
- &p-intro;
+<!-- &p-intro; Someone interested enough in the project to contribute
+ will already know at this point what Privoxy is. -->
<!-- end boilerplate -->
<para>
You can find the latest version of the this manual at <ulink
url="http://www.privoxy.org/developer-manual/">http://www.privoxy.org/developer-manual/</ulink>.
- Please see the Contact section on how to contact the developers.
+ Please see <link linkend="contact">the Contact section</link>
+ on how to contact the developers.
</para>
-
<!-- <para> -->
<!-- Feel free to send a note to the developers at <email>ijbswa-developers@lists.sourceforge.net</email>. -->
<!-- </para> -->
</abstract>
</artheader>
-<!-- ~~~~~ New section ~~~~~ -->
-<sect1 id="intro" label=""><title></title>
-<!-- dummy section to force TOC on page by itself -->
-<!-- DO NOT REMOVE! please ;) -->
-<para> </para>
-</sect1>
<!-- ~~~~~ New section ~~~~~ -->
-
-
-<!-- ~~~~~ New section ~~~~~ -->
- <sect1 label="1" id="introduction"><title>Introduction</title>
+ <sect1 id="introduction"><title>Introduction</title>
<!--
I don't like seeing blank space :) So added *something* here.
One does not have to be a programmer to contribute. Packaging, testing,
and porting, are all important jobs as well.
</para>
+
+ <!-- ~~~~~ New section ~~~~~ -->
+ <sect2 id="quickstart"><title>Quickstart to Privoxy Development</title>
+ <para>
+ You'll need an account on <ulink
+ url="http://sourceforge.net/">Sourceforge</ulink> to support our
+ development. Mail your ID to <ulink
+ url="mailto:developers@privoxy.org">the list</ulink> and wait until a
+ project manager has added you.
+ </para>
+ <para>
+ For the time being (read, this section is under construction), please
+ refer to the extensive comments in the source code.
+ </para>
+ </sect2>
</sect1>
<!-- ~~~~~ New section ~~~~~ -->
- <sect1 id="quickstart"><title>Quickstart to Privoxy Development</title>
+ <sect1 id="cvs"><title>The CVS Repository</title>
<para>
-You'll need an account on <ulink
-url="http://sourceforge.net">Sourceforge</ulink> to support our development.
-Mail your ID to the list and wait until a project manager has added you.
-</para>
+ 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.
+ </para>
-<para>
-For the time being (read, this section is under construction), please note the
-following guidelines for changing stuff in the code. If it is
- <orderedlist numeration="arabic">
- <listitem><para>
- A bugfix / clean-up / cosmetic thing: shoot
- </para></listitem>
- <listitem><para>
- A new feature that can be turned off: shoot
- </para></listitem>
- <listitem><para>
- A clear improvement w/o side effects on other parts of the code: shoot
- </para></listitem>
- <listitem><para>
- A matter of taste: ask the list
- </para></listitem>
- <listitem><para>
- A major redesign of some part of the code: ask the list
- </para></listitem>
- </orderedlist>
- </para>
-</sect1>
+ <sect2 id="cvsaccess"><title>Access to CVS</title>
+ <para>
+ The project's CVS repository is hosted on
+ <ulink url="http://sourceforge.net/">SourceForge.</ulink>
+ Please refer to the chapters 6 and 7 in
+ <ulink url="http://sourceforge.net/docman/?group_id=1">SF's site
+ documentation</ulink> for the technical access details for your
+ operating system. For historical reasons, the CVS server is
+ called <literal>cvs.ijbswa.sourceforge.net</literal>, the repository is
+ called <literal>ijbswa</literal>, and the source tree module is called
+ <literal>current</literal>.
+ </para>
+ </sect2>
+
+ <sect2 id="cvscommit"><title>CVS Commit Guideline</title>
+ <para>
+ 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:
+ <itemizedlist>
+ <listitem><para>
+ Never (read: <emphasis>never, ever</emphasis>) 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.
+ </para></listitem>
+ <listitem><para>
+ Your commit message should give a concise overview of <emphasis>what you
+ changed</emphasis> (no big details) and <emphasis>why you changed it</emphasis>
+ Just check previous messages for good examples.
+ </para></listitem>
+ <listitem><para>
+ Don't use the same message on multiple files, unless it equally applies to
+ all those files.
+ </para></listitem>
+ <listitem><para>
+ 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.
+ </para></listitem>
+ <listitem><para>
+ 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).
+ </para></listitem>
+ </itemizedlist>
+ </para>
+ </sect2>
+
+ <sect2 id="cvswhenask"><title>Discussing Changes First</title>
+ <para>
+ We don't have a too formal policy on this, just use common sense. Hints: If it is..
+ <orderedlist numeration="arabic">
+ <listitem><para>
+ ..a bugfix / clean-up / cosmetic thing: shoot
+ </para></listitem>
+ <listitem><para>
+ ..a new feature that can be turned off: shoot
+ </para></listitem>
+ <listitem><para>
+ ..a clear improvement w/o side effects on other parts of the code: shoot
+ </para></listitem>
+ <listitem><para>
+ ..a matter of taste: <ulink url="mailto:developers@privoxy.org">ask the list</ulink>
+ </para></listitem>
+ <listitem><para>
+ ..a major redesign of some part of the code: <ulink url="mailto:developers@privoxy.org">ask
+ the list</ulink>
+ </para></listitem>
+ </orderedlist>
+ </para>
+ <para>
+ Note that near a major public release, we get a bit more cautious - if
+ unsure, it doesn't hurt to ask first. There is always the possibility
+ to submit a patch to the <ulink
+ url="http://sourceforge.net/tracker/?atid=311118&group_id=11118&func=browse">patches
+ tracker</ulink> instead.
+ </para>
+ </sect2>
+ </sect1>
<!-- ~~~~~ New section ~~~~~ -->
<sect1 id="documentation"><title>Documentation Guidelines</title>
<para>
- All formal documents are maintained in docbook SGML and located in the
+ All formal documents are maintained in Docbook SGML and located in the
<computeroutput>doc/source/*</computeroutput> directory. You will need
- <ulink url="http://www.docbook.org">docbook</ulink> and the docbook
- stylesheets (or comparable alternatives), and either
- <application>jade</application> or <application>openjade</application>
- (recommended) installed in order to build docs from source. Currently
- there is <ulink
+ <ulink url="http://www.docbook.org">Docbook</ulink>, the Docbook
+ DTD's and the Docbook modular stylesheets (or comparable alternatives),
+ and either <application>jade</application> or
+ <application>openjade</application> (recommended) installed in order to
+ build docs from source. Currently there is <ulink
url="../user-manual/index.html"><citetitle>user-manual</citetitle></ulink>,
- <ulink url="../faq/index.html"><citetitle>FAQ</citetitle></ulink>, and,
- of course this, the <citetitle>developer-manual</citetitle> in this
- format. The <citetitle>README</citetitle>, <citetitle>AUTHORS</citetitle>
- <citetitle>privoxy.1</citetitle> (man page)
- files are also now maintained
- as SGML. The finished files are all in the top-level source
- directory are generated files! Also, <filename>index.html</filename>,
- the <application>Privoxy</application> home page, is maintained
- as sgml. <emphasis>DO NOT edit these
- directly</emphasis>. Edit the SGML source, or contact someone
- involved in the documentation (at present Stefan and Hal).
+ <ulink url="../faq/index.html"><citetitle>FAQ</citetitle></ulink>, and, of
+ course this, the <citetitle>developer-manual</citetitle> in this format.
+ The <citetitle>README</citetitle>, <citetitle>AUTHORS</citetitle>
+ <citetitle>privoxy.1</citetitle> (man page) files are also now maintained
+ as Docbook SGML. The finished files are all in the top-level source
+ directory are generated files! Also, <filename>index.html</filename>, the
+ <application>Privoxy</application> home page, is maintained as SGML.
+ <emphasis>DO NOT edit these directly</emphasis>. Edit the SGML source, or
+ contact someone involved in the documentation (at present Stefan and
+ Hal).
</para>
<para>
- Other, less formal documents (e.g. LICENSE, INSTALL) are maintained as
- plain text files in the toplevel source directory. At least for the
- time being.
+ Other, less formal documents (e.g. <filename>LICENSE</filename>,
+ <filename>INSTALL</filename>) are maintained as plain text files in the
+ top-level source directory. At least for the time being.
</para>
<para>
Packagers are encouraged to include this documentation. For those without
<computeroutput>make dok</computeroutput>, or alternately
<computeroutput>make redhat-dok</computeroutput>. If you have problems,
try both. The build process uses the document SGML sources in
- <computeroutput>doc/source/*</computeroutput> to update all text files in
+ <computeroutput>doc/source/*/*</computeroutput> to update all text files in
<computeroutput>doc/text/</computeroutput> and to update all HTML
documents in <computeroutput>doc/webserver/</computeroutput>.
</para>
<para>
Documentation writers should please make sure documents build
- successfully before committing to CVS.
+ successfully before committing to CVS, if possible.
</para>
<para>
How do you update the webserver (i.e. the pages on privoxy.org)?
</orderedlist>
</para>
+ <para>
+ Finished docs should be occasionally submitted to CVS
+ (<filename>doc/webserver/*/*.html</filename>) so that those without
+ the ability to build them locally, have access to them if needed.
+ This is especially important just prior to a new release! Please
+ do this <emphasis>after</emphasis> the <literal>$VERSION</literal> and
+ other release specific data in <filename>configure.in</filename> has been
+ updated (this is done just prior to a new release).
+ </para>
<!-- ~~~~~ New section ~~~~~ -->
<sect2 id="sgml">
<title>Quickstart to Docbook and SGML</title>
<para>
If you are not familiar with SGML, it is a markup language similar to HTML.
- In fact, HTML is an SGML application. Both use <quote>tags</quote>
- to format text and other content. SGML tags are much more varied,
- and flexible, but do much of the same kinds of things. The tags,
- or <quote>elements</quote>, are definable in SGML. There is no
- set <quote>standards</quote>. Since we are using
- <application>Docbook</application>, our tags are those that are
- defined by <application>Docbook</application>. Much of how the
- finish document is rendered is determined by the <quote>stylesheets</quote>.
- The stylesheets determine how each tag gets translated to HTML, or
- other formats.
+ Actually, not a mark up language per se, but a language used to define
+ markup languages. In fact, HTML is an SGML application. Both will use
+ <quote>tags</quote> to format text and other content. SGML tags can be much
+ more varied, and flexible, but do much of the same kinds of things. The tags,
+ or <quote>elements</quote>, are definable in SGML. There is no set
+ <quote>standards</quote>. Since we are using
+ <application>Docbook</application>, our tags are those that are defined by
+ <application>Docbook</application>. Much of how the finish document is
+ rendered is determined by the <quote>stylesheets</quote>.
+ The stylesheets determine how each tag gets translated to HTML, or other
+ formats.
</para>
<para>
- Tags in SGML need to be always <quote>closed</quote>. If not, you
- will likely generate errors. Example:
- <literal><title>My Title</title></literal>. They are
- also case-insensitive, but we strongly suggest using all lower
- case. This keeps compatibility with [Docbook] <application>XML</application>.
+ Tags in Docbook SGML need to be always <quote>closed</quote>. If not, you
+ will likely generate errors. Example: <literal><title>My
+ Title</title></literal>. They are also case-insensitive, but we
+ strongly suggest using all lower case. This keeps compatibility with
+ [Docbook] <application>XML</application>.
</para>
<para>
Some common elements that you likely will use:
</para>
-<simplelist>
- <member>
- <emphasis><para></para></emphasis>, paragraph delimiter. Most
- text needs to be within paragraph elements.
- </member>
- <member>
- <emphasis><emphasis></emphasis></emphasis>, stylesheets make this
- italics.
- </member>
- <member>
- <emphasis><filename></filename></emphasis>, files and directories.
- </member>
- <member>
- <emphasis><command></command></emphasis>, command examples.
- </member>
- <member>
- <emphasis><literallayout></literllayout></emphasis>, like
- <literal><pre></literal>, more or less.
- </member>
- <member>
- <emphasis><itemizedlist></itemizdelist></emphasis>, list with bullets.
- </member>
- <member>
- <emphasis><listitem></listitem></emphasis>, member of the above.
- </member>
- <member>
- <emphasis><screen></screen></emphasis>, screen output, implies
- <literal><literallayout></literal>.
- </member>
- <member>
- <emphasis><ulink url="example.com"></ulink></emphasis>, like
- HTML <literal><a></literal> tag.
- </member>
- <member>
- <emphasis><quote></quote></emphasis>, for, doh, quoting text.
- </member>
-</simplelist>
+<para>
+ <simplelist>
+ <member>
+ <emphasis><para></para></emphasis>, paragraph delimiter. Most
+ text needs to be within paragraph elements (there are some exceptions).
+ </member>
+ <member>
+ <emphasis><emphasis></emphasis></emphasis>, the stylesheets
+ make this italics.
+ </member>
+ <member>
+ <emphasis><filename></filename></emphasis>, files and directories.
+ </member>
+ <member>
+ <emphasis><command></command></emphasis>, command examples.
+ </member>
+ <member>
+ <emphasis><literallayout></literallayout></emphasis>, like
+ <literal><pre></literal>, more or less.
+ </member>
+ <member>
+ <emphasis><itemizedlist></itemizedlist></emphasis>, list with bullets.
+ </member>
+ <member>
+ <emphasis><listitem></listitem></emphasis>, member of the above.
+ </member>
+ <member>
+ <emphasis><screen></screen></emphasis>, screen output, implies
+ <literal><literallayout></literal>.
+ </member>
+ <member>
+ <emphasis><ulink url="example.com"></ulink></emphasis>, like
+ HTML <literal><a></literal> tag.
+ </member>
+ <member>
+ <emphasis><quote></quote></emphasis>, for, doh, quoting text.
+ </member>
+ </simplelist>
+</para>
<para>
Look at any of the existing docs for examples of all these and more.
</para>
+<para>
+ You might also find <quote><ulink
+ url="http://www.bureau-cornavin.com/opensource/crash-course/">Writing Documentation
+ Using DocBook - A Crash Course</ulink></quote> useful.
+</para>
</sect2>
-
<!-- ~~~~~ New section ~~~~~ -->
<sect2 id="docstyle">
<title><application>Privoxy</application> Documentation Style</title>
</listitem>
<listitem>
<para>
- Tags delimiting a <emphasis>block</emphasis> of text should be on their
- own line. Like:
+ Tags delimiting a <emphasis>block</emphasis> of text (even small
+ blocks) should be on their own line. Like:
<literallayout>
<para>
Some text goes here.
</listitem>
<listitem>
<para>
- Tags should be nested and step indented like (except in-line tags):
- <literallayout>
+ Tags should be nested and step indented for block text like: (except
+ in-line tags)
+ <literallayout>
<para>
<itemizedlist>
<para>
<listitem>
<para>
We have an international audience. Refrain from slang, or English
- idiosyncrasies (too many to list :).
+ idiosyncrasies (too many to list :). Humor also does not translate
+ well sometimes.
</para>
</listitem>
<listitem>
<para>
Try to keep overall line lengths in source files to 80 characters or less
- for obvious reasons. This is not always possible, with lenghty URLs for
+ for obvious reasons. This is not always possible, with lengthy URLs for
instance.
</para>
</listitem>
<literal>p-version</literal> entity that contains the current
<application>Privoxy</application> version string. You are strongly
encouraged to use these where possible. Some of these obviously
- require re-setting with each release. A sampling of custom entities are
- listed below. See any of the main docs for examples.
+ require re-setting with each release (done by the Makefile). A sampling of
+ custom entities are listed below. See any of the main docs for examples.
</para>
<para>
<itemizedlist>
<listitem>
<para>
- Re-cyclable <quote>boilerplate</quote> text entities are defined like:
+ Re- <quote>boilerplate</quote> text entities are defined like:
</para>
<para>
<literal><!entity supported SYSTEM "supported.sgml"></literal>
<simplelist>
<member>
<emphasis>p-version</emphasis>: the <application>Privoxy</application>
- version string, e.g. <quote>2.9.13</quote>.
+ version string, e.g. <quote>&p-version;</quote>.
</member>
<member>
<emphasis>p-status</emphasis>: the project status, either
- <quote>ALPHA</quote>, <quote>BETA</quote>, or <quote>STABLE</quote>.
+ <quote>alpha</quote>, <quote>beta</quote>, or <quote>stable</quote>.
</member>
<member>
<emphasis>p-not-stable</emphasis>: use to conditionally include
- text in <quote>not stable</quote> releases (e.g. <quote>BETA</quote>).
+ text in <quote>not stable</quote> releases (e.g. <quote>beta</quote>).
</member>
<member>
<emphasis>p-stable</emphasis>: just the opposite.
<para><emphasis>Exception:</emphasis></para>
<para>If you are trying to add a small logic comment and do not
- wish to "disrubt" the flow of the code, feel free to use a 1
+ wish to "disrupt" the flow of the code, feel free to use a 1
line comment which is NOT on the same line as the code.</para>
<para><emphasis>Explanation:</emphasis></para>
- <para>Use all lowercase, and seperate words via an underscore
+ <para>Use all lowercase, and separate words via an underscore
('_'). Do not start an identifier with an underscore. (ANSI C
reserves these for use by the compiler and system headers.) Do
not use identifiers which are reserved in ANSI C++. (E.g.
<para><emphasis>Explanation:</emphasis></para>
- <para>Use all lowercase, and seperate words via an underscore
+ <para>Use all lowercase, and separate words via an underscore
('_'). Do not start an identifier with an underscore. (ANSI C
reserves these for use by the compiler and system headers.) Do
not use identifiers which are reserved in ANSI C++. (E.g.
<para><emphasis>Note:</emphasis> In the special case that the if-statement is
inside a loop, and it is trivial, i.e. it tests for a
- condidtion that is obvious from the purpose of the block,
+ condition that is obvious from the purpose of the block,
one-liners as above may optically preserve the loop structure
and make it easier to read.</para>
- <para><emphasis>Status:</emphasis> developer-discrection.</para>
+ <para><emphasis>Status:</emphasis> developer-discretion.</para>
<para><emphasis>Example exception:</emphasis></para>
<programlisting>
<para>if ( condition ) { structure->flag = 1; } else {
structure->flag = 0; }</para>
- <para><emphasis>Note:</emphasis> The former is readable and consice. The later
+ <para><emphasis>Note:</emphasis> The former is readable and concise. The later
is wordy and inefficient. Please assume that any developer new
to the project has at least a "good" knowledge of C/C++. (Hope
I do not offend by that last comment ... 8-)</para>
function2( ... ) { }</para>
<para><emphasis>Note:</emphasis> Use 1 blank line before the closing brace and 2
- lines afterwards. This makes the end of function standout to
+ lines afterward. This makes the end of function standout to
the most casual viewer. Although function comments help
- seperate functions, this is still a good coding practice. In
+ separate functions, this is still a good coding practice. In
fact, I follow these rules when using blocks in "for", "while",
"do" loops, and long if {} statements too. After all whitespace
is free!</para>
- <para><emphasis>Status:</emphasis> developer-discrection on the number of blank
+ <para><emphasis>Status:</emphasis> developer-discretion on the number of blank
lines. Enforced is the end of function comments.</para>
and not 129FA012; or arrayPtr[20] causes a SIGSEV vs.
arrayPtr[0].</para>
- <para><emphasis>Status:</emphasis> developer-discrection if and only if the
+ <para><emphasis>Status:</emphasis> developer-discretion if and only if the
variable is assigned a value "shortly after" declaration.</para>
</sect3>
<para><emphasis>Note:</emphasis> Please! do not add "-I." to the Makefile
without a _very_ good reason. This duplicates the #include
- "file.h" behaviour.</para>
+ "file.h" behavior.</para>
</sect3>
<para><emphasis>Note:</emphasis> If you declare "file_list xyz;" (without the
pointer), then including the proper header file is necessary.
If you only want to prototype a pointer, however, the header
- file is unneccessary.</para>
+ file is unnecessary.</para>
- <para><emphasis>Status:</emphasis> Use with discrection.</para>
+ <para><emphasis>Status:</emphasis> Use with discretion.</para>
</sect3>
default :
log_error( ... );
- ... anomly code goes here ...
+ ... anomaly code goes here ...
continue; / break; / exit( 1 ); / etc ...
} /* end switch( hash_string( cmd ) ) */</programlisting>
This API call *should* be included in a default statement.</para>
<para><emphasis>Another Note:</emphasis> This is not so much a readability issue
- as a robust programming issue. The "anomly code goes here" may
+ as a robust programming issue. The "anomaly code goes here" may
be no more than a print to the STDERR stream (as in
load_config). Or it may really be an ABEND condition.</para>
on 1 line. You should, although, provide a good comment on
their functions.</para>
- <para><emphasis>Status:</emphasis> developer-discrection.</para>
+ <para><emphasis>Status:</emphasis> developer-discretion.</para>
</sect3>
<para><emphasis>Explanation:</emphasis></para>
- <para>Create a local stuct (on the stack) if the variable will
+ <para>Create a local struct (on the stack) if the variable will
live and die within the context of one function call.</para>
<para>Only "malloc" a struct (on the heap) if the variable's life
<para><emphasis>Example:</emphasis></para>
<programlisting>
If a function creates a struct and stores a pointer to it in a
-list, then it should definately be allocated via `malloc'.
+list, then it should definitely be allocated via `malloc'.
</programlisting>
</sect3>
responsible for ensuring that deletion is timely (i.e. not too
soon, not too late). This is known as "low-coupling" and is a
"good thing (tm)". You may need to offer a
- free/unload/destuctor type function to accomodate this.</para>
+ free/unload/destuctor type function to accommodate this.</para>
<para><emphasis>Example:</emphasis></para>
<programlisting>
functions for C run-time library functions ... such as
`strdup'.</para>
- <para><emphasis>Status:</emphasis> developer-discrection. The "main" use of this
+ <para><emphasis>Status:</emphasis> developer-discretion. The "main" use of this
standard is for allocating and freeing data structures (complex
or nested).</para>
<sect3 id="s45"><title>"Uncertain" new code and/or changes to
- exitinst code, use FIXME</title>
+ existing code, use FIXME</title>
<para><emphasis>Explanation:</emphasis></para>
<para>If you have enough confidence in new code or confidence in
- your changes, but are not *quite* sure of the reprocussions,
+ your changes, but are not *quite* sure of the repercussions,
add this:</para>
<para>/* FIXME: this code has a logic error on platform XYZ, *
- attempthing to fix */ #ifdef PLATFORM ...changed code here...
+ attempting to fix */ #ifdef PLATFORM ...changed code here...
#endif</para>
<para>or:</para>
<para><emphasis>Note:</emphasis> If you make it clear that this may or may not
be a "good thing (tm)", it will be easier to identify and
- include in the project (or conversly exclude from the
+ include in the project (or conversely exclude from the
project).</para>
<para><emphasis>Example for file comments:</emphasis></para>
<programlisting>
-const char FILENAME_rcs[] = "$Id: developer-manual.sgml,v 1.25 2002/04/06 05:07:28 hal9 Exp $";
+const char FILENAME_rcs[] = "$Id: developer-manual.sgml,v 1.44 2002/05/15 03:55:17 hal9 Exp $";
/*********************************************************************
*
* File : $S<!-- Break CVS Substitution -->ource$
<para><emphasis>Note:</emphasis> The formfeed character that is present right
after the comment flower box is handy for (X|GNU)Emacs users to
- skip the verbige and get to the heart of the code (via
+ skip the verbiage and get to the heart of the code (via
`forward-page' and `backward-page'). Please include it if you
can.</para>
<programlisting>
#ifndef _FILENAME_H
#define _FILENAME_H
-#define FILENAME_H_VERSION "$Id: developer-manual.sgml,v 1.25 2002/04/06 05:07:28 hal9 Exp $"
+#define FILENAME_H_VERSION "$Id: developer-manual.sgml,v 1.44 2002/05/15 03:55:17 hal9 Exp $"
/*********************************************************************
*
* File : $S<!-- Break CVS Substitution -->ource$
</sect1>
- <!-- ~~~~~ New section ~~~~~ -->
- <sect1 id="cvs"><title>Version Control Guidelines</title>
- <para>To be filled. note on cvs comments. Don't only comment what you did,
- but also why you did it!
-</para>
- </sect1>
-
<!-- ~~~~~ New section ~~~~~ -->
<sect1 id="testing"><title>Testing Guidelines</title>
<para>To be filled.
</sect1>
<!-- ~~~~~ New section ~~~~~ -->
- <sect1 id="newrelease"><title>Releasing a new version</title>
+ <sect1 id="newrelease"><title>Releasing a New Version</title>
<para>
- To minimize trouble with distribution contents, webpage
- 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.
+ When we release versions of <application>Privoxy</application>,
+ 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.
</para>
+ <para>
+ So when releasing a new version, please adhere exactly to the
+ procedure outlined in this chapter.
+ </para>
+
<para>
The following programs are required to follow this process:
- <filename>ncftpput</filename> (ncftp), <filename>scp</filename> (ssh),
-<filename>gmake</filename> (GNU's version of make), autoconf, cvs, ???.
+ <filename>ncftpput</filename> (ncftp), <filename>scp, ssh</filename> (ssh),
+ <filename>gmake</filename> (GNU's version of make), autoconf, cvs.
+ </para>
+
+ <sect2 id="versionnumbers">
+ <title>Version numbers</title>
+
+ <para>
+ First you need to determine which version number the release will have.
+ <application>Privoxy</application> version numbers consist of three numbers,
+ separated by dots, like in X.Y.Z, where:
+ <itemizedlist>
+ <listitem>
+ <para>
+ 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
+ <application>Junkbuster</application>, and 3 will be the first stable
+ <application>Privoxy</application> release.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ 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 <application>Privoxy</application> 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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ 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.
+ </para>
+ </listitem>
+ </itemizedlist>
</para>
+
+ </sect2>
<sect2 id="beforerelease">
- <title>Before the Release</title>
+ <title>Before the Release: Freeze</title>
<para>
The following <emphasis>must be done by one of the
- developers</emphasis> prior to each new release:
+ developers</emphasis> prior to each new release.
</para>
<para>
<itemizedlist>
<para>
Make sure that everybody who has worked on the code in the last
couple of days has had a chance to yell <quote>no!</quote> in case
- they have pending changes/fixes in their pipelines.
+ they have pending changes/fixes in their pipelines. Announce the
+ freeze so that nobody will interfere with last minute changes.
</para>
</listitem>
<listitem>
<para>
- Increment the version number in <filename>configure.in</filename> in
- CVS. Also, the RPM release number in
- <filename>configure.in</filename>. Do NOT touch version information
- after export from CVS. <emphasis>All packages</emphasis> will use the
- version and release data from <filename>configure.in</filename>.
- 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 <filename>configure.in</filename>.
</para>
</listitem>
<listitem>
<para>
- If the default actionsfile has changed since last release,
- bump up its version info in this line:
+ If <filename>default.action</filename> 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:
</para>
<para>
<programlisting>
{+add-header{X-Actions-File-Version: A.B} -filter -no-popups}
- </programlisting>
+</programlisting>
</para>
<para>
Then change the version info in doc/webserver/actions/index.php,
line: '$required_actions_file_version = "A.B";'
</para>
+ </listitem>
+ <listitem>
+ <para>
+ 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.
+ </para>
</listitem>
+ <listitem>
+ <para>
+ <emphasis>Commit all files that were changed in the above steps!</emphasis>
+ </para>
+ </listitem>
<listitem>
<para>
Tag all files in CVS with the version number with
- <quote><command>cvs tag v_X_Y_Z</command></quote> (where X = major, Y
- = minor, Z = point). Don't use vX_Y_Z, ver_X_Y_Z, v_X.Y.Z (won't work)
- etc.
+ <quote><command>cvs tag v_X_Y_Z</command></quote>.
+ Don't use vX_Y_Z, ver_X_Y_Z, v_X.Y.Z (won't work) etc.
</para>
</listitem>
- <listitem>
+ <listitem>
<para>
- The first package uploaded should be the official
- <quote>tarball</quote> release. This is built with the
- <quote><command>make tarball-dist</command></quote> Makefile
- target, and then can be uploaded with
- <quote><command>make tarball-upload</command></quote> (see below).
+ If the release was in a development branch, increase the point version
+ from even to odd (X.Y.(Z+1)) again in <filename>configure.in</filename> and
+ commit your change.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ On the webserver, copy the user manual to a new top-level directory
+ called <filename>X.Y.Z</filename>. 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 <filename>X.Y.(Z-1)</filename>
+ to <filename>X.Y.Z</filename> and <filename>X.Y.(Z+1)</filename> to
+ <filename>.</filename> (i.e. dot).
</para>
</listitem>
</itemizedlist>
</para>
</sect2>
- <sect2 id="newrelease-web"><title>Update the webserver</title>
+ <sect2 id="therelease">
+ <title>Building and Releasing the Packages</title>
+ <para>
+ 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.
+ </para>
+
+ <para>
+ For <emphasis>all</emphasis> types of packages, including the source tarball,
+ <emphasis>you must make sure that you build from clean sources by exporting
+ the right version from CVS into an empty directory:</emphasis>.
+ </para>
+
+ <para>
+ <programlisting>
+ 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
+</programlisting>
+ </para>
+
+ <para>
+ <emphasis>Do NOT change</emphasis> 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.
+ </para>
+
+ <para>
+ Please find additional instructions for the source tarball and the
+ individual platform dependent binary packages below. And details
+ on the Sourceforge release process below that.
+ </para>
+
+ <sect3 id="pack-guidelines">
+ <title>Note on Privoxy Packaging</title>
+ <para>
+ Please keep these general guidelines in mind when putting together
+ your package. These apply to <emphasis>all</emphasis> platforms!
+ </para>
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <application>Privoxy</application> <emphasis>requires</emphasis>
+ write access to: all <filename>*.action</filename> files, all
+ logfiles, and the <filename>trust</filename> file. You will
+ need to determine the best way to do this for your platform.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Please include up to date documentation. At a bare minimum:
+ </para>
+ <simplelist>
+ <member>
+ <filename>LICENSE</filename> (toplevel directory)
+ </member>
+ </simplelist>
+ <simplelist>
+ <member>
+ <filename>README</filename> (toplevel directory)
+ </member>
+ </simplelist>
+ <simplelist>
+ <member>
+ <filename>AUTHORS</filename> (toplevel directory)
+ </member>
+ </simplelist>
+ <simplelist>
+ <member>
+ <filename>man page</filename> (toplevel directory, Unix-like
+ platforms only)
+ </member>
+ </simplelist>
+ <simplelist>
+ <member>
+ <filename>The User Manual</filename> (doc/webserver/user-manual/)
+ </member>
+ </simplelist>
+ <simplelist>
+ <member>
+ <filename>FAQ</filename> (doc/webserver/faq/)
+ </member>
+ </simplelist>
+ <para>
+ Also suggested: <filename>Developer Manual</filename>
+ (doc/webserver/devel-manual) and <filename>ChangeLog</filename>
+ (toplevel directory). <filename>FAQ</filename> and the manuals are
+ HTML docs. There are also text versions in
+ <filename>doc/text/</filename> which could conceivably also be
+ included.
+ </para>
+ <para>
+ The documentation has been designed such that the manuals are linked
+ to each other from parallel directories, and should be packaged
+ that way. <filename>index.html</filename> can also be included and
+ can serve as a focal point for docs and other links of interest.
+ This should be one level up from the manuals. There are two
+ css stylesheets that can be included for better presentation:
+ <filename>p_doc.css</filename> and <filename>p_web.css</filename>.
+ These should be in the same directory with
+ <filename>index.html</filename>, (i.e. one level up from the manual
+ directories).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <filename>user.action</filename> is designed for local preferences.
+ Make sure this does not get overwritten!
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Other configuration files should be installed as the new defaults,
+ but all previously installed configuration files should be preserved
+ as backups. This is just good manners :-)
+ </para>
+ </listitem>
+ <listitem>
<para>
- 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 <filename>doc/webserver</filename> directory (or
- create new directories under <filename>doc/webserver</filename>), then do
+ Please check platform specific notes in this doc, if you haven't
+ done <quote>Privoxy</quote> packaging before for other platform
+ specific issues. Conversely, please add any notes that you know
+ are important for your platform (or contact one of the doc
+ maintainers to do this if you can't).
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ </para>
+
+ </sect3>
+
+ <sect3 id="newrelease-tarball"><title>Source Tarball</title>
+ <para>
+ First, <emphasis>make sure that you have freshly exported the right
+ version into an empty directory</emphasis>. (See "Building and releasing
+ packages" above). Then run:
</para>
<para>
- <programlisting>
- make webserver
- </programlisting>
+ <programlisting>
+ cd current
+ autoheader && autoconf && ./configure
+</programlisting>
</para>
<para>
- Note that <quote><command>make dok</command></quote>
- (or <quote><command>make redhat-dok</command></quote>) creates
- <filename>doc/webserver/user-manual</filename>,
- <filename>doc/webserver/developer-manual</filename>,
- <filename>doc/webserver/faq</filename> and
- <filename>doc/webserver/man-page</filename> automatically.
- </para>
- <para>
- Please do NOT use any other means of transferring files to the
- webserver. <quote><command>make webserver</command></quote> not only
- uploads, but will make sure that the appropriate permissions are
- preserved for shared group access.
+ Then do:
+ </para>
+ <para>
+ <programlisting>
+ make tarball-dist
+</programlisting>
+ </para>
+ <para>
+ To upload the package to Sourceforge, simply issue
+ </para>
+ <para>
+ <programlisting>
+ make tarball-upload
+</programlisting>
+ </para>
+ <para>
+ Go to the displayed URL and release the file publicly on Sourceforge.
+ For the change log field, use the relevant section of the
+ <filename>ChangeLog</filename> file.
</para>
- </sect2>
+ </sect3>
- <sect2 id="newrelease-rpm"><title>SuSE or Red Hat</title>
- <para>
- Ensure that you have the latest code version. Hence run:
+ <sect3 id="newrelease-rpm"><title>SuSE, Conectiva or Red Hat RPM</title>
+ <para>
+ In following text, replace <replaceable class="parameter">dist</replaceable>
+ with either <quote>rh</quote> for Red Hat or <quote>suse</quote> for SuSE.
+ </para>
+ <para>
+ First, <emphasis>make sure that you have freshly exported the right
+ version into an empty directory</emphasis>. (See "Building and releasing
+ packages" above).
</para>
<para>
- <programlisting>
- cd current
- 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
- </programlisting>
+ As the only exception to not changing anything after export from CVS,
+ now examine the file <filename>privoxy-</filename><replaceable class="parameter">dist</replaceable><filename>.spec</filename>
+ 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
+ <replaceable class="parameter">dist</replaceable> which is built from version
+ X.Y.Z. Check the
+ <ulink url="http://sourceforge.net/project/showfiles.php?group_id=11118">file
+ list</ulink> if unsure. Else, it must be set to the highest already available RPM
+ release number for that version plus one.
</para>
<para>
- first.
+ Then run:
</para>
<para>
<programlisting>
+ cd current
autoheader && autoconf && ./configure
- </programlisting>
+</programlisting>
</para>
<para>
Then do
</para>
<para>
<programlisting>
- make suse-dist or make redhat-dist
- </programlisting>
+ make <replaceable class="parameter">dist</replaceable>-dist
+</programlisting>
</para>
<para>
To upload the package to Sourceforge, simply issue
</para>
<para>
<programlisting>
- make suse-upload or make redhat-upload
- </programlisting>
+ make <replaceable class="parameter">dist</replaceable>-upload <replaceable class="parameter">rpm_packagerev</replaceable>
+</programlisting>
</para>
<para>
+ where <replaceable class="parameter">rpm_packagerev</replaceable> 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.
</para>
- </sect2>
+ </sect3>
- <sect2 id="newrelease-os2"><title>OS/2</title>
+ <sect3 id="newrelease-os2"><title>OS/2</title>
<para>
- Ensure that you have the latest code version. Hence run:
+ First, <emphasis>make sure that you have freshly exported the right
+ version into an empty directory</emphasis>. (See "Building and releasing
+ packages" above). Then get the OS/2 Setup module:
</para>
<para>
<programlisting>
- cd current
- 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
- </programlisting>
+</programlisting>
</para>
<para>
You will need a mix of development tools.
Change directory to the <filename>os2setup</filename> directory.
Edit the os2build.cmd file to set the final executable filename.
For example,
+ </para>
+ <para>
<programlisting>
installExeName='privoxyos2_setup_X.Y.Z.exe'
- </programlisting>
+</programlisting>
+ </para>
+ <para>
Next, edit the <filename>IJB.wis</filename> file so the release number matches
in the <filename>PACKAGEID</filename> section:
- <programlisting>
+ </para>
+ <para>
+ <programlisting>
PACKAGEID="Privoxy Team\Privoxy\Privoxy Package\X\Y\Z"
- </programlisting>
+</programlisting>
+ </para>
+ <para>
You're now ready to build. Run:
+ </para>
+ <para>
<programlisting>
os2build
- </programlisting>
- And in the <filename>./files</filename> directory you will have the
- WarpIN-installable executable.
- Upload this anonymously to
- <filename>uploads.sourceforge.net/incoming</filename>, create a release
- for it, and you're done.
+</programlisting>
</para>
- </sect2>
+ <para>
+ You will find the WarpIN-installable executable in the
+ <filename>./files</filename> directory. Upload this anonymously to
+ <filename>uploads.sourceforge.net/incoming</filename>, create a release
+ for it, and you're done. Use the release notes and Change Log from the
+ source tarball package.
+ </para>
+ </sect3>
- <sect2 id="newrelease-solaris"><title>Solaris</title>
+ <sect3 id="newrelease-solaris"><title>Solaris</title>
<para>
- Login to Sourceforge's compilefarm via ssh
+ Login to Sourceforge's compilefarm via ssh:
</para>
<para>
<programlisting>
ssh cf.sourceforge.net
- </programlisting>
+</programlisting>
</para>
<para>
- Choose the right operating system (not the Debian one). If you have
- downloaded <application>Privoxy</application> before,
+ Choose the right operating system (not the Debian one).
+ When logged in, <emphasis>make sure that you have freshly exported the right
+ version into an empty directory</emphasis>. (See "Building and releasing
+ packages" above). Then run:
</para>
<para>
<programlisting>
cd current
- 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
- </programlisting>
- </para>
- <para>
- If not, please <ulink
- url="http://www.privoxy.org/user-manual/user-manual/installation.html#INSTALLATION-SOURCE">checkout
- Privoxy via CVS first</ulink>. Run:
- </para>
- <para>
- <programlisting>
autoheader && autoconf && ./configure
- </programlisting>
+</programlisting>
</para>
<para>
Then run
<para>
<programlisting>
gmake solaris-dist
- </programlisting>
+</programlisting>
</para>
<para>
which creates a gzip'ed tar archive. Sadly, you cannot use <command>make
solaris-upload</command> on the Sourceforge machine (no ncftpput). You now have
to manually upload the archive to Sourceforge's ftp server and release
- the file publicly.
+ the file publicly. Use the release notes and Change Log from the
+ source tarball package.
</para>
- </sect2>
+ </sect3>
- <sect2 id="newrelease-windows"><title>Windows</title>
+ <sect3 id="newrelease-windows"><title>Windows</title>
<para>
- Ensure that you have the latest code version. Hence run
- </para>
- <para>
- <programlisting>
- cd current
- 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
- </programlisting>
- </para>
- <para>
- Run:
- </para>
- <para>
- <programlisting>
- autoheader && autoconf && ./configure
- </programlisting>
- </para>
- <para>
- Then do FIXME.
- </para>
- </sect2>
+ You should ensure you have the latest version of Cygwin (from
+ <ulink url="http://www.cygwin.com/">http://www.cygwin.com/</ulink>).
+ Run the following commands from within a Cygwin bash shell.
+ </para>
+ <para>
+ First, <emphasis>make sure that you have freshly exported the right
+ version into an empty directory</emphasis>. (See "Building and releasing
+ packages" above). Then get the Windows setup module:
+ </para>
+ <para>
+ <programlisting>
+ cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa co winsetup
+</programlisting>
+ </para>
+ <para>
+ Then you can build the package. This is fully automated, and is
+ controlled by <filename>winsetup/GNUmakefile</filename>.
+ All you need to do is:
+ </para>
+ <para>
+ <programlisting>
+ cd winsetup
+ make
+</programlisting>
+ </para>
+ <para>
+ Now you can manually rename <filename>privoxy_setup.exe</filename> to
+ <filename>privoxy_setup_X_Y_Z.exe</filename>, and upload it to
+ SourceForge. When releasing the package on SourceForge, use the release notes
+ and Change Log from the source tarball package.
+ </para>
+ </sect3>
- <sect2 id="newrelease-debian"><title>Debian</title>
+ <sect3 id="newrelease-debian"><title>Debian</title>
<para>
- Ensure that you have the latest code version. Hence run:
+ First, <emphasis>make sure that you have freshly exported the right
+ version into an empty directory</emphasis>. (See "Building and releasing
+ packages" above). Then, run:
</para>
<para>
<programlisting>
cd current
- 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
- </programlisting>
- </para>
- <para>
- first. Run:
- </para>
- <para>
- <programlisting>
autoheader && autoconf && ./configure
- </programlisting>
+</programlisting>
</para>
<para>
Then do FIXME.
</para>
- </sect2>
+ </sect3>
- <sect2 id="newrelease-macosx"><title>Mac OSX</title>
+ <sect3 id="newrelease-macosx"><title>Mac OSX</title>
<para>
- Ensure that you have the latest code version. Hence run:
+ First, <emphasis>make sure that you have freshly exported the right
+ version into an empty directory</emphasis>. (See "Building and releasing
+ packages" above). Then get the Mac OSX setup module:
</para>
<para>
<programlisting>
- cd current
- 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
- </programlisting>
+</programlisting>
+ </para>
+ <para>
+ Then run:
</para>
<para>
- From the osxsetup directory, run:
<programlisting>
+ cd osxsetup
build
- </programlisting>
+</programlisting>
</para>
<para>
This will run <filename>autoheader</filename>, <filename>autoconf</filename> and
name to match the release, and hit the "Create package" button.
If you specify ./Privoxy.pkg as the output package name, you can then create
the distributable zip file with the command:
+ </para>
+ <para>
<programlisting>
zip -r privoxyosx_setup_x.y.z.zip Privoxy.pkg
- </programlisting>
+</programlisting>
+ </para>
+ <para>
You can then upload <filename>privoxyosx_setup_x.y.z.zip</filename> anonymously to
<filename>uploads.sourceforge.net/incoming</filename>,
- create a release for it, and you're done.
+ create a release for it, and you're done. Use the release notes
+ and Change Log from the source tarball package.
</para>
- </sect2>
+ </sect3>
- <sect2 id="newrelease-freebsd"><title>FreeBSD</title>
- <para>
- Change the version number of <application>Privoxy</application> in the
- configure.in file. Run:
- <programlisting>
- autoheader && autoconf && ./configure
- </programlisting>
- Then ...
- </para>
+ <sect3 id="newrelease-freebsd"><title>FreeBSD</title>
<para>
Login to Sourceforge's compilefarm via ssh:
</para>
<para>
<programlisting>
ssh cf.sourceforge.net
- </programlisting>
+</programlisting>
</para>
<para>
- Choose the right operating system. If you have downloaded Privoxy
- before,
+ Choose the right operating system.
+ When logged in, <emphasis>make sure that you have freshly exported the right
+ version into an empty directory</emphasis>. (See "Building and releasing
+ packages" above). Then run:
</para>
<para>
<programlisting>
cd current
- 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
- </programlisting>
- </para>
- <para>
- If not, please <ulink
- url="http://www.privoxy.org/user-manual/user-manual/installation.html#INSTALLATION-SOURCE">checkout
- Privoxy via CVS first</ulink>. Run:
- </para>
- <para>
- <programlisting>
autoheader && autoconf && ./configure
- </programlisting>
+</programlisting>
</para>
<para>
Then run:
<para>
<programlisting>
gmake freebsd-dist
- </programlisting>
+</programlisting>
</para>
<para>
which creates a gzip'ed tar archive. Sadly, you cannot use <command>make
freebsd-upload</command> on the Sourceforge machine (no ncftpput). You now have
to manually upload the archive to Sourceforge's ftp server and release
- the file publicly.
+ the file publicly. Use the release notes and Change Log from the
+ source tarball package.
</para>
- </sect2>
+ </sect3>
- <sect2 id="newrelease-tarball"><title>Tarball</title>
+ <sect3 id="newrelease-hpux"><title>HP-UX 11</title>
<para>
- Ensure that you have the latest code version. Hence run:
+ First, <emphasis>make sure that you have freshly exported the right
+ version into an empty directory</emphasis>. (See "Building and releasing
+ packages" above). Then run:
</para>
<para>
<programlisting>
cd current
- 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
- </programlisting>
- </para>
- <para>
- first. Run:
- </para>
- <para>
- <programlisting>
- make clobber
- autoheader && autoconf && ./configure
- </programlisting>
- </para>
- <para>
- Then do:
- </para>
- <para>
- <programlisting>
- make tarball-dist
- </programlisting>
- </para>
- <para>
- To upload the package to Sourceforge, simply issue
- </para>
- <para>
- <programlisting>
- make tarball-upload
- </programlisting>
- </para>
- <para>
- Goto the displayed URL and release the file publicly on Sourceforge.
- </para>
- </sect2>
-
- <sect2 id="newrelease-hpux"><title>HP-UX 11</title>
- <para>
- Ensure that you have the latest code version. Hence run:
- </para>
- <para>
- <programlisting>
- cd current
- 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
- </programlisting>
- </para>
- <para>
- first. Run:
- </para>
- <para>
- <programlisting>
autoheader && autoconf && ./configure
- </programlisting>
+</programlisting>
</para>
<para>
Then do FIXME.
</para>
- </sect2>
+ </sect3>
- <sect2 id="newrelease-amiga"><title>Amiga OS</title>
+ <sect3 id="newrelease-amiga"><title>Amiga OS</title>
<para>
- Ensure that you have the latest code version. Hence run:
+ First, <emphasis>make sure that you have freshly exported the right
+ version into an empty directory</emphasis>. (See "Building and releasing
+ packages" above). Then run:
</para>
<para>
<programlisting>
cd current
- 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
- </programlisting>
- </para>
- <para>
- first. Run:
- </para>
- <para>
- <programlisting>
autoheader && autoconf && ./configure
- </programlisting>
+</programlisting>
</para>
<para>
Then do FIXME.
</para>
- </sect2>
+ </sect3>
- <sect2 id="newrelease-aix"><title>AIX</title>
+ <sect3 id="newrelease-aix"><title>AIX</title>
<para>
Login to Sourceforge's compilefarm via ssh:
</para>
<para>
<programlisting>
ssh cf.sourceforge.net
- </programlisting>
+</programlisting>
</para>
<para>
- Choose the right operating system. If you have downloaded Privoxy
- before:
+ Choose the right operating system.
+ When logged in, <emphasis>make sure that you have freshly exported the right
+ version into an empty directory</emphasis>. (See "Building and releasing
+ packages" above). Then run:
</para>
<para>
<programlisting>
cd current
- 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
- </programlisting>
- </para>
- <para>
- If not, please <ulink
- url="http://www.privoxy.org/user-manual/user-manual/installation.html#INSTALLATION-SOURCE">checkout
- Privoxy via CVS first</ulink>. Run:
- </para>
- <para>
- <programlisting>
autoheader && autoconf && ./configure
- </programlisting>
+</programlisting>
</para>
<para>
Then run:
<para>
<programlisting>
make aix-dist
- </programlisting>
+</programlisting>
</para>
<para>
which creates a gzip'ed tar archive. Sadly, you cannot use <command>make
aix-upload</command> on the Sourceforge machine (no ncftpput). You now have
to manually upload the archive to Sourceforge's ftp server and release
- the file publicly.
+ the file publicly. Use the release notes and Change Log from the
+ source tarball package.
</para>
- </sect2>
+ </sect3>
+ </sect2>
+
+ <sect2 id="releasing">
+ <title>Uploading and Releasing Your Package</title>
+ <para>
+ 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:
+ </para>
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Upload to: <ulink url="ftp://upload.sourceforge.net/incoming">ftp://upload.sourceforge.net/incoming</ulink>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ user: <literal>anonymous</literal>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ password: <literal>ijbswa-developers@lists.sourceforge.net</literal>
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ <para>
+ Or use the <command>make</command> targets as described above.
+ </para>
+ <para>
+ Once this done go to <ulink url="http://sourceforge.net/project/admin/editpackages.php?group_id=11118">http://sourceforge.net/project/admin/editpackages.php?group_id=11118</ulink>,
+ making sure you are logged in. Find your target platform in the
+ second column, and click <literal>Add Release</literal>. You will
+ then need to create a new release for your package, using the format
+ of <literal>$VERSION ($CODE_STATUS)</literal>, e.g. <emphasis>&p-version;
+ (beta)</emphasis>.
+ </para>
+ <para>
+ Now just follow the prompts. Be sure to add any appropriate Release
+ notes. You should see your freshly uploaded packages in
+ <quote>Step 2. Add Files To This Release</quote>. Check the
+ appropriate box(es). Remember at each step to hit the
+ <quote>Refresh/Submit</quote> 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 <quote>Update</quote>
+ for each file. If anyone is monitoring your platform, check the
+ <quote>email</quote> box at the very bottom to notify them of
+ the new package. This should do it!
+ </para>
+ <para>
+ If you have made errors, or need to make changes, you can go through
+ essentially the same steps, but select <literal>Edit Release</literal>,
+ instead of <literal>Add Release</literal>.
+ </para>
+ </sect2>
+
+ <sect2 id="afterrelease">
+ <title>After the Release</title>
+ <para>
+ When all (or: most of the) packages have been uploaded and made available,
+ send an email to the <ulink url="mailto:ijbswa-announce@lists.sourceforge.net">announce
+ mailing list</ulink>, Subject: "Version X.Y.Z available for download". Be sure to
+ include the
+ <ulink url="http://sourceforge.net/project/showfiles.php?group_id=11118">download
+ location</ulink>, the release notes and the change log.
+ </para>
+ </sect2>
</sect1>
+ <!-- ~~~~~ New section ~~~~~ -->
+ <sect1 id="webserver-update"><title>Update the Webserver</title>
+ <para>
+ When updating the webserver, please follow these steps to make
+ sure that no broken links, incosistent contents or permission
+ problems will occur:
+ </para>
+ <para>
+ If you have changed anything in the documentation source SGML files,
+ do:
+ </para>
+ <para>
+ <programlisting>
+ make dok # (or make redkat-dok if make dok doesn't work for you)
+</programlisting>
+ </para>
+ <para>
+ That will generate <filename>doc/webserver/user-manual</filename>,
+ <filename>doc/webserver/developer-manual</filename>,
+ <filename>doc/webserver/faq</filename> and
+ <filename>doc/webserver/index.html</filename> automatically.
+ </para>
+ <para>
+ If you changed the manual page source, generate
+ <filename>doc/webserver/man-page/privoxy-man-page.html</filename>
+ by running <quote><command>make man</command></quote>. (This is
+ a separate target due to dependencies on some obscure perl scripts.
+ See comments in <filename>GNUmakefile</filename>.)
+ </para>
+ <para>
+ If you want to add new files to the webserver, create them locally in
+ the <filename>doc/webserver/*</filename> directory (or
+ create new directories under <filename>doc/webserver</filename>).
+ </para>
+ <para>
+ Next, commit any changes from the above steps to CVS. All set? Then do
+ </para>
+ <para>
+ <programlisting>
+ make webserver
+</programlisting>
+ </para>
+ <para>
+ This will do the upload to <ulink url="http://www.privoxy.org/">the
+ webserver</ulink> (www.privoxy.org) and ensure all files and directories
+ there are group writable.
+ </para>
+ <para>
+ Please do <emphasis>NOT</emphasis> use any other means of transferring
+ files to the webserver to avoid permission problems.
+ </para>
+ </sect1>
+
<!-- ~~~~~ New section ~~~~~ -->
<sect1 id="contact"><title>Contacting the developers, Bug Reporting and Feature Requests</title>
<!-- Include contacting.sgml -->
<!-- end contacting -->
</sect1>
- <!-- ~~~~~ New section ~~~~~ -->
- <sect1 id="copyright"><title>Copyright and History</title>
-<sect2><title>Copyright</title>
+<!-- ~~~~~~~~ New section Header ~~~~~~~~~ -->
+<sect1 id="copyright"><title>Privoxy Copyright, License and History</title>
+
<!-- Include copyright.sgml -->
©right;
<!-- end -->
+
+<!-- ~~~~~ New section ~~~~~ -->
+<sect2><title>License</title>
+<!-- Include copyright.sgml: -->
+ &license;
+<!-- end copyright -->
</sect2>
+<!-- ~ End section ~ -->
+<!-- ~~~~~ New section ~~~~~ -->
<sect2><title>History</title>
<!-- Include history.sgml -->
&history;
<!-- end -->
</sect2>
- </sect1>
+</sect1>
<!-- ~~~~~ New section ~~~~~ -->
<sect1 id="seealso"><title>See also</title>
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
$Log: developer-manual.sgml,v $
+ Revision 1.44 2002/05/15 03:55:17 hal9
+ Fix ulink -> link, and minor modification to release process section for
+ clarification.
+
+ Revision 1.43 2002/05/10 01:48:19 hal9
+ This is mostly proposed copyright/licensing additions and changes. Docs
+ are still GPL, but licensing and copyright are more visible. Also, copyright
+ changed in doc header comments (eliminate references to JB except FAQ).
+
+ Revision 1.42 2002/05/05 20:26:02 hal9
+ Sorting out license vs copyright in these docs.
+
+ Revision 1.41 2002/05/04 08:44:44 swa
+ bumped version
+
+ Revision 1.40 2002/05/04 00:43:43 hal9
+ -Remove TOC/first page kludge with proper stylesheet fix.
+ -Combined the two very brief sections: Intro and Quickstart.
+
+ Revision 1.39 2002/05/02 15:08:25 oes
+ Added explanation about version numbers and RPM package revisions
+
+ Revision 1.38 2002/04/29 02:20:31 hal9
+ Add info on steps for uploading and the release process on SF.
+
+ Revision 1.37 2002/04/26 17:23:29 swa
+ bookmarks cleaned, changed structure of user manual, screen and programlisting cleanups, and numerous other changes that I forgot
+
+ Revision 1.36 2002/04/26 05:25:23 hal9
+ Mass commit to catch a few scattered fixes.
+
+ Revision 1.35 2002/04/17 15:16:15 oes
+ Added link to docbook crash course
+
+ Revision 1.34 2002/04/15 23:39:32 oes
+ - Extended & fixed the release section
+ - Added CVS guideline sections
+ - Separated webserver section from release section
+ - Commented out boilerplate inclusion (If you don't know yet what it is,
+ you shouldn't mess with its code ;-)
+ - Nits & fixes
+
+ Revision 1.33 2002/04/12 03:49:53 hal9
+ Spell checked. Clarification on where docs are kept.
+
+ Revision 1.32 2002/04/11 21:29:58 jongfoster
+ Documenting Win32 release procedure
+
+ Revision 1.31 2002/04/11 09:32:52 oes
+ more nits
+
+ Revision 1.30 2002/04/11 09:24:53 oes
+ nits
+
+ Revision 1.29 2002/04/10 18:45:14 swa
+ generated
+
+ Revision 1.28 2002/04/08 22:59:26 hal9
+ Version update. Spell chkconfig correctly :)
+
+ Revision 1.27 2002/04/08 15:31:18 hal9
+ Touch ups to documentation section.
+
+ Revision 1.26 2002/04/07 23:50:08 hal9
+ Documentation changes to reflect HTML docs now in CVS, and new generated files
+ list.
+
Revision 1.25 2002/04/06 05:07:28 hal9
-Add privoxy-man-page.sgml, for man page.
-Add authors.sgml for AUTHORS (and p-authors.sgml)