DESYNC build and installation instructions
Justin Finnerty
Last Updated Mon Oct 31 15:44:39 2005


  SUPPORTED PLATFORMS AND COMPILERS:
  ==================================

Desync has been developed on a linux platform and compilers; However
it should compile on any POSIX compliant system supported by the
autoconf system with one of the target compilers.

Tested system:

- Linux, with the GCC compiler and Eiffel Studio or SmartEiffel or
Visual Eiffel.
 - (gcc v3.2 or greater)
 - (Eiffel Studio 5.6)
 - (SmartEiffel 2.2)
 - (Visual Eiffel 5)
 - (GOBO 3.4)

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

  BEFORE YOU START TO COMPILE DESYNC:
  ===================================

Since you're reading this file, you've successfully expanded the .tbz2
file you downloaded.

You should notice the following files/folders inside of desync_e:


  | **configure**      | Used for configuring build environment
  | **doc/**           | Contains documentation files doc/desync.html and doc/desync.man
  | **test1.tbz2**     | Contains directory for testing desyncs ability to handle bad directory and file structures
  | **test2.tbz2**     | Contains a second example directory for testing and demonstrating desync
  | **test3.tbz2**     | Contains a third example directory for testing and demonstrating desync
  | **LICENSE**        | The licensing terms for DESYNC
  | **INSTALL**        | This file
  | **system.xace**    | The top-level DESYNC system ace file (processed by gexace)
  | **README**         | General information and release notes (if any)

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

  UNIX BUILD/INSTALL INSTRUCTIONS:
  ================================


	The configure script
	====================

In general, the configure command will look like:

   ./configure [EC=<ec|se|vec>] [GOBO=<path/to/gobo>]

where <ec|se|vec> is the eiffel compiler name.

You only need to specify GOBO if it is not already in your
environment.  Additionally the GOBO tools (dexace and gepp) will need
to be visible in your path variable.

If no arguments are given configure will automatically find one of
Eiffel compilers with names listed above.  If more than one is present
then the first one in the order shown will be selected.

Type:

   ./configure --help

for a complete list of options.


	Making the system
	=================

After running the configure script the system is ready for
compiling. To perform the compilation simply type:

   make

Some of the Eiffel compilers may ask for user input. Generally these
are yes/no questions and it is safe to answer yes.


	Testing the system (optional)
	=============================

After compilation a executable should have been produced.  For Eiffel
Studio this will be in a subdirectory of EIFGEN, for SmartEiffel and
Visual Eiffel it will be in the main directory.


		First test
		==========

Your first test of the program asks for the help messages.  Type the
following commands in the directory with the desync executable.


  ./desync -h


This will give you a short list of options.


  ./desync -help


This will give slightly more detailed help instructions.


	Second test
	===========

The second test checks the ability of desync to correctly process a
convoluted directory tree (which has circular references and dangling
symlinks)

Untar the test directory using:


  tar jxpf test1.tbz2


Process the directory using:


  ./desync -peer test-dir1


This test should result in no actions. Simply follow the prompts until
the program finishes.


	Third test
	==========

The third test exercises the clean up capabilities of the
program.

Untar the second test directory using:


  tar jxpf test2.tbz2


Process the directory using:


  ./desync -peer test-dir2


This will ask a series of multi-choice questions that you can respond
with "1" each time. For more details on what these choices mean please
see the documentation.

If you answered "1" to all the questions, at the end of the run a new
directory should have been created (test-dir2.<date/time>) and a
log file (LOG).  The test-dir2.<date/time> directory contains all
the files removed from test-dir2 and LOG contains the list of
actions performed.  A program to replay the LOG file and reverse the
effects of desync is on my TODO list.  

During real operations you could check the files in
test-dir2.<date/time> to ensure that no important files had
accidentally been removed then delete the directory.


	Fourth test
	===========

The fourth test exercises the symbolic linking capabilities of the
program.

Untar the third test directory using:


  tar jxpf test3.tbz2


Process the directory using:


  ./desync -peer test-dir2


This will ask a series of multi-choice questions that you can respond
with "2" or "3" when it asks to link directories, "1" at other
times. For more details on what these choices mean please see the
documentation.

If you answered "2" or "3" when asked to link directories, at the end
of the run a new directory should have been created
(test-dir3.<date/time>) and a log file (LOG).  The
test-dir3.<date/time> directory contains all the files removed from
test-dir3 and LOG contains the list of actions performed.  If you look
in the subdirectories of test-dir3 you will find one has a symbolic
link to the other for each file that was moved to
test-dir3.<date/time>.  A program to replay the LOG file and reverse
the effects of desync is on my TODO list. The

During real operations you could check the files in
test-dir3.<date/time> to ensure that no important files had
accidentally been removed then delete the directory.


	Installing the system
	=====================

To install the system type:


  make install


This will install files into the directory defined by the --prefix
option to the configure script, which defaults to /use/local. The
following files will be copied (to the given locations):


  <prefix>/bin/desync
  <prefix>/man/man1/desync.1
  <prefix>/share/desync/desync.html
  <prefix>/share/desync/test2.tbz2
  <prefix>/share/desync/test3.tbz2



	Uninstalling the system
	=======================

To uninstall the system type:


  make uninstall


This will install files into the directory defined by the --prefix
option to the configure script, which defaults to /use/local.  You may
need to rerun the configure script with the original --prefix option
if you ran "make distclean" or deleted the source directory.


	Program development
	===================

When developing the program you can compile source code using:


  make development


This does not "finalize" the program. This allows the incremental
features of Eiffel Studio to work. To obtain a self-contained
executable you need to run make (without arguments) before you run
make install.


	Compiling with multiple compilers
	=================================

The make system has been designed to assist with compiling with
multiple compilers.  You can use a brute force or manual approach.
The brute force approach deletes all files relating to the currently
configured compiler and gives a clean compilation environment.  The
manual approach does not delete the compiler specific files, so allows
concurrent development with retention of the incremental files from
each compiler.

The brute force approach is:


  make distclean
  ./configure EC=??


The manual approach is:


  make clean


Then change the EC=?? line in makefile.sys

Note that with the manual approach the "make distclean" will only
remove files for the currently configured compiler.  To obtain a
completely clean directory after using the manual approach you must
use the configure script and then "make distclean" for each compiler
used.  This is because the "make distclean" command deletes the
makefiles.

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

  NOTES ON KNOWN PROBLEMS:
  ========================

There are no known problems with compiling this program under Linux.


	Compiling C source from Eiffel code
	===================================

The C compiler may issue a series of warnings when compiling the C
source code produced by the Eiffel compilers.  These warnings relate
to output from the Eiffel compilers independent of this Eiffel source.
If you find any warning that relate directly to the source code of
this project, please inform the project maintainer.





