--          This file is part of SmallEiffel The GNU Eiffel Compiler.
--          Copyright (C) 1994-98 LORIA - UHP - CRIN - INRIA - FRANCE
--            Dominique COLNET and Suzanne COLLIN - colnet@loria.fr 
--                       http://SmallEiffel.loria.fr
-- SmallEiffel is  free  software;  you can  redistribute it and/or modify it 
-- under the terms of the GNU General Public License as published by the Free
-- Software  Foundation;  either  version  2, or (at your option)  any  later 
-- version. SmallEiffel is distributed in the hope that it will be useful,but
-- WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-- or  FITNESS FOR A PARTICULAR PURPOSE.   See the GNU General Public License 
-- for  more  details.  You  should  have  received a copy of the GNU General 
-- Public  License  along  with  SmallEiffel;  see the file COPYING.  If not,
-- write to the  Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-- Boston, MA 02111-1307, USA.
--
1. - What is SmallEiffel ? -
SmallEiffel is an Eiffel compiler for the Eiffel language.
SmallEiffel is the GNU Eiffel  Compiler.
Tools of SmallEiffel are free software distributed under the terms of
the GNU General Public License as published by the Free Software Foundation.
You can download the latest official version of SmallEiffel at:

   http://SmallEiffel.loria.fr

For more information about commercial applications written in SmallEiffel, 
please read the file SmallEiffelFAQ included in the man directory of this 
distribution.

2. - Brief Description of SmallEiffel -

It is intended to be a complete, though small and very fast, free Eiffel 
compiler. It is available for a very wide range of platforms: GNU/Linux, 
GNU/Hurd, FreeBSD, BSD/OS, NetBSD, OpenBSD, HP-UX, IRIX, XENIX, Solaris, 
DOS, OS2, WINDOWS NT/95/2000, Macintosh, NeXT, Amiga, BeOS, QNX, VMS, etc. 
Actually, SmallEiffel should run on any platform for which an ANSI C 
compiler exists.

The current distribution includes an Eiffel to C compiler, an Eiffel to 
Java bytecode compiler, a documentation tool, a pretty printer and various
other tools. 

SmallEiffel is the result of a research project of the LORIA, a join 
computer science research center in Nancy, France.
It has been developed by Dominique Colnet and the SmallEiffel group. 

This project began in 1994, and since the very first public release in 
September 1995, SmallEiffel has been used worldwide by increasingly 
numerous individuals and Universities. 

3. - Contents of the SmallEiffel directory -

3.1. - man directory - 
Miscellaneous help files. If you don't have outside connection to our WEB
site at http://SmallEiffel.loria.fr, you can browse the man directory using
the index.html file of this man directory. Actually, this directory also 
contains generated simple text files (i.e. *.txt files). There is a 
SmallEiffelFAQ and documentation for all commands of SmallEiffel. Do not
forget to read the "support.txt" file too. (If you don't have enough money to
support the SmallEiffel project, please, just send me a postcard. It is 
really important for us to receive this kind of feedback).

3.2. - bin directory -
The place where executable files will be put by the installation process.

3.3. - lib_show directory - 
Some demonstrations and examples in Eiffel.

3.4. - lib_std directory - 
The standard SmallEiffel library of Eiffel classes. All standard Eiffel
classes (string.e, integer.e, character.e, real.e, general.e, ...).
Various kins of collections (array.e, fixed_array.e, linked_list.e,
two_way_linked_list.e). Hash table (dictionary.e). Sets (set.e).

3.5. - lib_iterator directory - 
Most collection-like classes can be traversed using the iterator.e abstract
class. All implementation of our iterator.e class are stored in this 
directory. Also have a look in the lib_show directory to have examples.

3.6. - lib_number directory -
The arbitrary precision NUMBER library. This library is usefull to handle
very large numbers (i.e. greater than the one of the architecture).
See also lib_show directory fo examples.

3.7. - lib_random directory -
Random numbers generation. See also lib_show directory fo examples.

3.8. - lib_se directory - 
The Eiffel source code of all SmallEiffel tools (commands 'compile', 
'compile_to_c', 'pretty', 'short', 'compile_to_jvm', 'print_jvm_class',
`ace_check' ...). All files of this directory are closely related to
our Eiffel compilation tools. Please note that all files of this lib_se
are under GPL licence.

3.9. - bin_c directory -
The generated C code of command compile_to_c in -boost mode without GC
support. Those generated C files are used during the installation process
to bootstrap the compiler and tools.

3.10. - short directory -
This directory contains various available output format descriptions for 
the `short' command. See also the short command documentation in the man
directory.

3.11. - sys directory -
System information. This directory also contains hand written C code to
customize the runtime. (See also file system.txt of the man directory for
more information about this sys directory.)
 
3.12. - misc directory -
Miscellaneous files. Information about the history of the project is in
file HISTORY.txt. Credits are in file THANKS.txt. Also have a look at the 
WeNeedFeedBack.txt file too.

3.13. - contrib directory - 
Useful software not written by the SmallEiffel team.

4. - Installation -

4.1. - General information -
Command install is the installation program for SmallEiffel The GNU
Eiffel Compiler. This command (class install.e) is entirely written 
in Eiffel and is the recommanded one to install SmallEiffel The GNU
Eiffel Compiler. 

The install.e source code as well as the generated C code install.c 
are in the SmallEiffel directory.

The very first step in installing SmallEiffel is to unpack the 
SmallEiffel directory somewhere on disk. The second step is to set 
the "SmallEiffel" environment variable to the full path leading to
the "SmallEiffel/sys/system.se" file. The last step is to compile the
install.c file and to run it from the SmallEiffel directory. 
The install command will do the rest of the work and will try to report
possible problems.

4.1. - Installation on GNU/Linux/gcc -
Chose some place on the disk to unpack the se.tgz archive:
    cd InstallationDirectory; tar xzvf se.tgz
Update your .bashrc file with the following two lines:
    export SmallEiffel=InstallationDirectory/SmallEiffel/sys/system.se
    export PATH=InstallationDirectory/SmallEiffel/bin:$PATH
Then, in a freshly created shell window, just type:
    cd InstallationDirectory; cd SmallEiffel ; make automatic

4.2. - Installation on UNIX like platforms -
If you are under some UNIX (including GNU/Linux) system, and if you 
prefer to use a csh like shell.
Chose some place on the disk to unpack the se.tgz archive:
    cd InstallationDirectory; gunzip se.tgz ; tar xvf se.tar
Update your .cshrc file with the following two lines:
    setenv SmallEiffel InstallationDirectory/SmallEiffel/sys/system.se
    setenv PATH InstallationDirectory/SmallEiffel/bin:$PATH
Then, in a freshly created shell window, just type:
    cd InstallationDirectory; cd SmallEiffel ; make
Actually, the Makefile which is in the SmallEiffel directory C-compile 
and launch automatically the install command in -interactive mode.
Thus, you will be asked for the C compiler you prefer.

4.3. - Installation on Windows98/NT/2000 -
If you are using a Windows system, a precompiled install.exe is 
available too in the SmallEiffel directory, you just have to run it. 

4.4. - Installation on Amiga VP on Elate -
Thanks to Joe Kiniry <kiniry@acm.org>, SmallEiffel also work on Amiga
VP on Elate. If you have problems or questions about SmallEiffel on 
Amiga VP on Elate, please contact Joe Kiniry <kiniry@acm.org> first.

IMPORTANT: The AmigaDE/Elate 1.1 release still has several bugs in the
vpcc compiler, particularly in the optimizer.  This release should build
properly with the -O1 flag, but when building Eiffel programs in general
you'll have to try different optimization flags to see what works for
your particular situation.  In general, it is suggested that you always
try -O1 first, and if that doesn't work, try -O0 then -O2.  You will know
if a compilation failed due to optimizer bugs if you get a duplicate
symbol error or similar.

4.4.1. - How do I install the pre-built SmallEiffel from the AmigaDev or
         KindSoftware web sites? -

Change directory to the root of your Amiga filesystem and unpack the full
gzipped tar file.  E.g.
   cd /; tar xzf SmallEiffel-0.75-Elate.tgz
You must set a shell variable called "SmallEiffel" to location of 
"system.se" file in the install. Thus, typically, the following line goes
in your shell startup file (/home/default/shell.rc):
   set SmallEiffel /lang/eiffel/sys/system.se
If you are going to leave the Eiffel executables where they sit after the
build, you should add /lang/eiffel/bin to shell.path in your shell startup.
E.g.: New contents for /etc/shell.rc:
   # Pathnames
   set shell.path $shell.path /lang/eiffel/bin
   # SmallEiffel
   set SmallEiffel /lang/eiffel/sys/system.se
Otherwise, consider using the cpt tool to move all binaries in
/lang/eiffel/bin to /app/stdio.

4.4.2. - What do you need to know to build SmallEiffel on Amiga VP on Elate? -
If you are building your own release (i.e. you downloaded the source from 
the Loria web site), you install SmallEiffel on AmigaDE/Elate just like 
on all other systems; follow the install directions that come with the 
package, using AmigaDE/Elate conventions, and you are all set.

You must have the cpt ("copy tool") tool installed to build SmallEiffel. 
The build process initially writes executables in the bin_c directory. 
They are then moved later in the build process to the bin directory.

The cpt tool can currently be obtained from the Amiga Support Network
<http://www.amigadev.net/>.  The cpt tool was written by Jesse McClusky
<thought@weblink.org>.

If you choose, you can hand-move all executables/tools to the /app/stdio
directory with cpt, since this is the standard place on the new Amiga to
put stdio-based tools like your C compiler.  I just leave mine in
/SmallEiffel/bin after a source build or I move them to /lang/eiffel/bin.

As usual, you must have the aforementioned shell variable "SmallEiffel" 
set correctly before building.
To build from scratch, just type "make elate".

4.4.3. - What is known to work and not work on Amiga VP Elate? -
All the compiler tools work correctly, including compiling to JVM code.

The Elate garbage collector is robust but does not properly compile and 
link with all optimizer switches.  As mentioned above, there are several
known bugs in vpcc on AmigaDE/Elate.  Follow the directions above and you
should be able to get garbage collection working with any Eiffel program
on AmigaDE/Elate.

I have tested all inter-language feature call variants (Eiffel code to C
and C++, C and C++ from Eiffel, Java to and from Eiffel) and all of
these work great under the AmigaDE/Elate!
Problems?  Questions?  Drop me a line.
                     Joseph Kiniry
                    kiniry@acm.org
http://www.cs.caltech.edu/~kiniry/

4.5. - Installation on other systems -
On other systems, the very first step for installation is to C compile 
the install.c file in order to run it.


5. - Bug Reports -
Thank in advance for bug reports. Don't forget to have a look first in the
misc/NOT_YET_IMPLEMENTED.txt file. Please, try to isolate the bug as much 
as possible. The best is to be able to create a single file, as small a
possible (which includes the bug). Please report the bug in our 
mailing list:
http://SmallEiffel.loria.fr/support/mailing-list.html

July 19th 2001. D.Colnet - SmallEiffel@loria.fr
