Anonymous CVS Access
====================

Anonymous CVS access is now available to SILC CVS repository. The
repository includes everything related to SILC project; source codes,
documentation and web pages.

Also note that this is the closest to real time development you can get
thus you cannot expect that the source tree would work or even compile.
While it is our intention that the trunk would always at least compile
there might be situations when it will not.


Howto Checkout The Source Tree
==============================

The repository can be checked out by using anonymous pserver with CVS.
There are no password restrictions in the SILC anonymous CVS repository.

For those who are using sh/ksh/bash the check out is done as follows:

export CVSROOT=:pserver:cvs@cvs.silcnet.org:/cvs/silc
cvs login
cvs co silc

For those who are using csh/tcsh the check out is done as follows:

setenv CVSROOT :pserver:cvs@cvs.silcnet.org:/cvs/silc
cvs login
cvs co silc

If you don't want to set $CVSROOT environment variable you can set the
path to the cvs as command line options:

cvs -d:pserver:cvs@cvs.silcnet.org:/cvs/silc login
cvs -d:pserver:cvs@cvs.silcnet.org:/cvs/silc co silc

What ever method you decide to use, after you have done cvs login you will
be prompted for password:

	CVS password: silc

Type the password "silc" and press Enter.

The actual SILC source tree is checked out using the cvs co silc command,
described above. This command will fetch the source tree and save it into
directory named silc. SILC CVS repository currently does not have any
branches thus this will check out the trunk. The size of the trunk is
currently about 8 Mb but will grow in the future.


What SILC Source Tree Includes
==============================

SILC Source tree includes a lot more stuff that appears in public
distribution.  The source tree includes, for example, internal scripts,
configuration files, SILC webpages etc.  These never appear on a public
distribution.

Following directories currently exist in SILC source tree.

  doc/

        Includes all the SILC documentation.  Some of the documentation
        are generated when distribution is generated.  The automatically
        generated files must never be commited to CVS.

  includes/

        Includes SILC include files.

  irssi/

	Includes the Irssi SILC Client.

  lib/

        Includes SILC libraries.  There maybe libraries on the CVS that
        does not appear on public distribution.

  lib/contrib/

        Contrib directory for routines that some of the platforms might
        not have.  In that case these routines are provided by the SILC.

  lib/silcclient/

        The SILC Client library. Implementation of the SILC Client without
        the user interface.  The library provides an interface for user
        interface designers.

  lib/silccore/

        The SILC Protocol Core library.  Implementation of all the core
        components of the SILC Protocol.  This is used by all the SILC
        applications.

  lib/silccrypt/

        The SILC Crypto library. Provides all cryptographic algorithms
        used in the SILC.  Provides also the Cryptographically strong
        random number generator.

  lib/silcmath/

        The SILC Math library. Provides the Math and MP routines for
        SILC applications.  The MP library is actually the GMP.

  lib/silsim/

        The SILC Modules library.  Provides the dynamically loadable
        modules.

  lib/silcske/

        The SILC Key Exchange (SKE) library.  Implementation of the
        SKE protocol.  This is used by all SILC applications.

  lib/silcutil/

        The SILC Utility library.  Provides various utility functions
        for the applications.

  lib/silcutil/unix/

        The SILC Utility library.  Provides various Unix specific utility
        functions for the applications.

  lib/silcutil/win32/

        The SILC Utility library.  Provides various WIN32 specific utility
        functions for the applications.

  public_html/

        Includes the official SILC web pages and everything that relates
        to them.  This directory never appears on public distribution.

  silc/

	Includes an example implementation of ncurses based SILC client.
	It won't compile with current Toolkit since it is not being 
	updated.  It is still good example for Toolkit programmer to 
	figure out how to use SILC Toolkit.

  silcer/

	Includes an example implementation of GUI (Gnome) base SILC
	client.  Please read silcer/README for more information.

  silcd/

        Includes SILC server.  There can be some extra files that will
        never appear in public distribution, such as, configuration files.

  win32/

	Includes win32 Toolkit specific files.  It includes MSVC++
	Workspace files.  The win32/tests includes example code for
	use of SILC Toolkit and SILC Client Library on Win32 GUI 
	application.


Howto Compile SILC Source Tree
==============================

After checkout from CVS the SILC source tree must be prepared for 
configuration and compilation.  To compile the source tree, give,

	./prepare
	./configure --enable-debug
	make

The ./prepare script is included in to the source tree and it never
appears in public distribution.  The script prepares the source tree
by creating configuration scripts and Makefiles.  The prepare must be
run every time you make some changes to configuration scripts (however,
making changes to Makefile.am's does not require running ./prepare).

As a developer you should read the ./configure script's help by
giving ./configure --help and study all of its different options.  Also,
you should configure the script with --enable-debug option as it
compiles SILC with -g (debugging) option and it enables the 
SILC_LOG_DEBUG* scripts.  Warning is due here:  The debugging produced
by both cilent and server is very heavy, thus it is common to test
the programs as follows:

	./silc -d "*" -f configfile 2>log
	./silcd -d "*" -f configfile 2>log

The -d option enables the debug printing.  The argument for the -d option
is a string that is used to match the output debug.  The example "*" will
match for everything, and all debugs will be printed.  If you want to
limit the debugs you want to printout you can give for example a string
like "*server*,*rng*" to match all functions, and filenames that has
"server" or "rng" string in them.  Others will not be printed out.  You   
can freely define regural expressions as debug string.


Howto Clean SILC Source Tree
============================

To entirely clear the source tree to the state after it was checked out
from CVS, give,

	./prepare-clean

This calls `make distclean' plus removes automatically generated files
by hand.  It also removes *.log files. However, it will not remove
any other files you might have created.


Makefiles and configuration files
=================================

Developers should never directly write a Makefile.  All Makefiles are
always automatically generated by ./prepare and later by ./configure
scripts.  Instead, developers must write Makefile.am files.  There
are plenty of examples what they should look like.  If you change
Makefile.am during development you don't have to run ./prepare, just
run normal make.

Configuration files are the files that ./prepare automatically generates
and what will be included into public distribution.  ./prepare creates
for example the ./configure script that is not commited to the CVS.
`configure.in' is the file that developers must edit to change ./configure
script.  After changing one must run  ./prepare.
