All of the source code for fossil is contained in the src/ subdirectory.
But there is a lot of generated code, so you will probably want to
use the Makefile.  To do a complete build, just type:

   make

That should work out-of-the-box on Macs and Linux systems. If you are
building on a Windows box, install MinGW as well as MinGW's make (or
MSYS). You can then type:

  make -f Makefile.w32

If you have trouble, or you want to do something fancy, just look at
top level makefile. There are 5 configuration options that are all well
commented. Instead of editing the Makefile, create a new file named
config.mak (for Macs and Linux systems) or config.w32 (for Windows) and
override any settings you wish there.

Out of source builds?
--------------------------------------------------------------------------

An out of source build is pretty easy:

  1. Make a new directory to do the builds in.
  2. Create a config.mak (or .w32 ... explained above) and add something
  along the lines of:

    SRCDIR=../src

  3. From that directory, type:

    Macs and Linux:
      $ make -f ../Makefile

    Windows:
      C:\fossil\build> make -f ../Makefile.w32

This will now keep all generates files seperate from the maintained
source code.

--------------------------------------------------------------------------

Here are some notes on what is happening behind the scenes:

* The Makefile just sets up a few macros and then invokes the
  real makefile in src/main.mk.  The src/main.mk makefile is
  automatically generated by a TCL script found at src/makemake.tcl.
  Do not edit src/main.mk directly.  Update src/makemake.tcl and
  then rerun it.

* The *.h header files are automatically generated using a program
  called "makeheaders".  Source code to the makeheaders program is
  found in src/makeheaders.c.  Documentation is found in 
  src/makeheaders.html.

* Most *.c source files are preprocessed using a program called
  "translate".  The sources to translate are found in src/translate.c.
  A header comment in src/translate.c explains in detail what it does.

* The src/mkindex.c program generates some C code that implements
  static lookup tables.  See the header comment in the source code
  for details on what it does.
