Compiling SILC from GIT Tree
============================
-The GIT tree must be prepared for compilation with Autodist. You can
-download the latest version of Autodist from:
+These instructions are meant for developers wanting to compile SILC
+directly from the GIT tree.
+
+To prepare the source tree for making official releases, read the
+README.DIST instead.
+
+To be able to prepare the GIT tree for configuration and compilation
+Autodist must be installed into the system. You can download the latest
+version of Autodist from:
http://autodist.silc.fi
command:
autodist client
-
-Then configure and compile:
-
./configure
make
command:
autodist server
-
-Then configure and compile:
-
./configure
make
-Preparing SILC Server
-=====================
+Preparing SILC Toolkit
+======================
To prepare SILC Toolkit distribution for compilation give the following
command:
autodist toolkit
-
-Then configure and compile:
-
./configure
make
command:
autodist
-
-Then configure and compile:
-
./configure
make
+
+The INLINE version is usually used when doing actual SILC development as
+it makes all code available for compilation, testing and debugging, while
+the other distributions limit the available code only to that used by the
+distribution.
+
+
+Running, Debugging and Developing
+=================================
+
+The autodist must be run every time you make some changes to configuration
+scripts.
+
+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.
+
+
+Makefiles and configuration files
+=================================
+
+Developers should never directly write a Makefile. All Makefiles are
+always automatically generated by autodist and later by ./configure
+scripts. Instead, developers must write Makefile.ad files or Makefile.am
+files. If the Makefile needs to include any distdefs (SILC_DIST_XXX),
+then Makefile.ad (.ad stands for autodist) must be written. If the
+Makefile is generic (common to all distributions) then Makefile.am may be
+written. Note that distdefs MUST NOT be used in Makefile.am files, as the
+autodist will modify them. See the source tree for examples. If you
+change Makefile.ad files, the autodist must be rerun.
+
+The autodist also creates the configure.ac script from which the autoconf
+then creates the ./configure script. All changes to configure must
+always be done into the configure.ad scripts. All changes made to
+configure.ac will be lost. The autodist distdefs may also be used in
+configure.ad files. It is also possible to write more than one
+configure.ad in the source tree. All configure.ad fragments will be
+collected from the source tree by autodist and combined into one
+configure.ac scripts. After making changes to configure.ad files the
+autodist must be rerun.
+
+The distdefs are defined in the corresponding distributions. All
+distributions live in distdir/ directory. The distdefs can be used in any
+file in the source tree, but mainly they are used in Makefile.ad,
+configure.ad and source and headers files. See autodist documentation for
+more information how to use distdefs.
+
+
+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, etc. These never appear on a public distribution.
+
+Following directories currently exist in SILC source tree.
+
+ apps/
+
+ All applications.
+
+ 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.
+
+ apps/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.
+
+ apps/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.
+
+ apps/silcer/
+
+ Includes an example implementation of GUI (Gnome) base SILC
+ client. Please read silcer/README for more information.
+
+ apps/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.