SelfImage BUILDING NOTES
------------------------

Requirements
------------
To build SelfImage you will need:
 - Borland C++ Builder 6 (BCB6)
 - Shalom Help (to build the help file)
 - Jedi Code Library (JCL) version 1.95 build 1848
 - Jedi Visual Component Library (JVCL) version 3.00
 - SelfImage source tree
 - TMultiReadExclusiveWriteSynchronizer (TMREWS) update for Delphi 6
   (optional)

Components
----------
SelfImage makes use of several non-standard (not included with BCB6)
components from the Jedi Visual Component Library (JVCL).  The JVCL in turn
relies on the Jedi Code Library.  You can download both in one package from:
http://sourceforge.net/project/showfiles.php?group_id=45786
The file needed is: 'JVCL300CompleteJCL195-Build1848.zip'.

Once downloaded and unzipped, there will be JCL and JVCL directories, each
with (among others) the file 'install.bat'.  Run that batch file from each
directory, starting with JCL.  The batch file will in turn start an actual
installer.


TMultiReadExclusiveWriteSynchronizer
------------------------------------
The TMultiReadExclusiveWriteSynchronizer VCL class (or TMREWS) is used by
SelfImage.  This class is an alternative to using critical sections in certain
multi-threaded code.  Borland has issued an update to this class which
addresses deadlocking issues.  Although it has been, as of the time of this
writing, almost four years since this update was released, it is still
considered to be a "public beta" and "has not yet been certified".  Also, the
problem intended to be fixed by this update reportedly arises when "lots of
threads are using the same TMREWS object at the same time."  Despite the fact
that the update is a beta and that SelfImage doesn't have lots of threads
using the same TMREWS object, it is suggested that this update be used.
Licensing restrictions prevent the update from being distributed with
SelfImage, so it must be downloaded from Borland's CodeCentral.  See the
Borland Developer Network article at
http://bdn.borland.com/article/0,1410,28599,00.html for details.

This update is in the form of a replacement for the pascal SysUtils unit.  The
project file for SelfImage already references SysUtils.pas - all you need to
do is place the updated SysUtils.pas file in the main directory where the rest
of SelfImage is, and it will be built and the updated code included in the
resulting binaries.


Building
--------
To build simply load the SelfImage.bpr project.  There's no particular magic
building once the JVCL components are installed.  If you decide not to build
with the above-mentioned TMREWS update, then you can remove SysUtils.pas from
the project.  Otherwise, once it is present and the JVCL components are
installed, it should build normally and without warnings.


Logging
-------
A logging version can be built in one of two ways.  Either you can turn on
debugging (which causes the _DEBUG macro to be defined), or by defining
the ENABLE_LOGGING macro.  See the LOGGING comment in SelfImage.cpp for details
on setting the log level.

If logging is not enabled with either the _DEBUG or ENABLE_LOGGING #define,
then the log macros throughout the project will actually expand to nothing.
Thus, logging statements have zero overhead on a production build, so feel
free to add as many as you wish.


Shalom Help
-----------
The help file for SelfImage was created using the Shalom Help help authoring
program.  You can download it free of charge from:
  http://www.danish-shareware.dk/soft/shelpm/


Problems
--------
If you have problems building SelfImage, feel free to contact me at:
kfitzner@excelcia.org.

Don't, however, bring me issues about porting SelfImage to MSVC, Delphi, or
earlier versions of C++ Builder.