This is Info file 769210024115174598, produced by Makeinfo-1.55 from
the input file installation.texinfo.

   This document describes the installation of version 1.6.4 of the
Inter-Language Unification (ILU) system.

Installing on a UNIX System
===========================

Prerequisites
-------------

   ILU requires the `imake' program from the MIT X Consortium release
of the X Window System, version 4 or later.  This is available via FTP
from the ftp servers `ftp.x.org' on the East Coast, or
`gatekeeper.dec.com' on the West Coast.

   The stubbers for ILU use the GNU program `bison', which may be
obtained via FTP from `prep.ai.mit.edu', in `pub/gnu/bison-1.XX.tar.Z'.
However, the release as distributed provides a C version of the parser,
so it is not necessary to have `bison' at your site.

   You will need an ANSI C compiler to build and install ILU, along
with an ANSI C-compliant `libc.a'.  We find that GNU `GCC' combined
with the GNU C Library, used in ANSI/POSIX mode, works fine, unless you
are building the Modula-3 support.  The SunOS runtime library for
release 2.8 of Modula-3 hard-codes in dependencies on Sun include
files, so they must be used.

   ILU provides support for a number of languages, currently ANSI C,
C++, Modula-3, and Common Lisp.
   * If you wish to build the support for Common Lisp, you will need
     Franz Allegro Common Lisp, version 4.1 or later.

   * If you wish to build the support for ANSI C, you will need a C
     compiler, and an ANSI C-compliant libc.

   * If you wish to build the support for C++, you will need a C++
     compiler that conforms to version 2.0 of the C++ specification.
     ILU does not use either C++ templates or exceptions, as these are
     too spottily implemented to be relied on.  The GNU C/C++ compiler
     `g++' seems to work well with ILU.  It has also been tested with
     Lucid's Energize `lcc' compiler, CenterLine's `CC' compiler, and
     Sun's `CC' compiler.

   * If  you wish to build support for Modula-3, you will need a
     Modula-3 system, release 2.8.  Several Modula-3 compilers can be
     obtained via anonymous FTP from `gatekeeper.dec.com'.

   No standard "name service" or binding service is provided.  We feel
that this is an area to be addressed independently, and we may include
a name service in future releases of ILU.  An experimental name service
interface can be seen in the ANSI C (`ILU_C_PublishObject',
`ILU_C_WithdrawObject', and `ILU_C_LookupObject') and Common Lisp
support (`ilu:publish', `ilu:withdraw', and `ilu:lookup'), but this is
not guaranteed to be present in future releases.

   ILU documentation is provided in a pre-formatted form, PostScript.
The source form of the documentation is called TIM, and is documented
in `ILUSRC/doc/tim.ps'.  It uses TeX for document formatting, but you
should not need to rebuild the documentation.  If for some reason you
do need to rebuild the documentation, you should have the system TeX;
the file `ILUSRC/doc/texinfo2.ps' contains information about obtaining
TeX.

Configuration
-------------

   Begin by creating two directories:  one, ILUHOME, to install the ILU
in, and the other, ILUSRC, to unpack the sources in, and build the
system in.  It is often convenient if ILUSRC is a sub-directory of
ILUHOME, but it is not necessary.  At PARC, we use `/import/ilu' for
ILUHOME, and `/import/ilu/src' for ILUSRC.

   Copy the tar file `ilu-1.6.4.tar' or `ilu-1.6.4.tar.Z' to ILUSRC.
Uncompress it if necessary with the `uncompress' program:

     % uncompress ilu-1.6.4.tar.Z

   Then unpack the tar file:

     % tar xf ilu-1.6.4.tar

   Next, edit the file ILUSRC/makefile.dist to change the value of the
variable `IMAKE' to point to your `imake' program.

   After that, copy the file `ILUSRC/imake/local.defs.default' to
`ILUSRC/imake/local.defs'.  Then configure the distribution by editing
`ILUSRC/imake/local.defs' to define the configuration of your system.
The following variables need to be set:

   * `IMAKE' - this should be set to the name of your imake program,
     typically something like /usr/X11/bin/imake.

   * `INSTALL' - your version of the `install(1)' program.  This can be
     a bit tricky, as we expect the version of `install' that
     recognizes the `-c' and `-m' flags.  The SGI `install', for
     example, is different enough to cause problems.  If worst comes to
     worst, you can edit the Install rules in `ILUSRC/imake/ilu.rules',
     as we've done for SGI.

   * `DESTDIR' - this should be the name of ILUHOME.

   * `ILUHOME' - this should also be the name of ILUHOME.  The two
     variables `DESTDIR' and `ILUHOME' are provided separately because
     a directory may have two different names that are used to access
     it in different ways.  At PARC, for instance, installation
     directories are often write-protected if named with their ordinary
     names, and a special name has to be given to enable writing in
     that directory.  If your site does not have this type of
     restriction, the variables `DESTDIR' and `ILUHOME' should probably
     have the same values.  Note that the default is `/tmp/ilu', which
     is OK for experimentation, but not for real use.

   * `REGISTRY_LAST_RESORT' - directory to look in for for program
     number registries for Sun RPC and Courier.  This is typically
     `ILUHOME/lib'.

   * `ANSI_C_COMPILER' - command to use to invoke your ANSI C compiler.

   * `ANSI_C_LIBRARY' - pathname of your ANSI C library.  If your
     system's normal `/usr/lib/libc.a' is already an ANSI C library,
     you may leave this blank.  Many systems should define this to be
     `/usr/lib/libm.a', which often contains functions like `floor()',
     which is defined by ANSI to be part of the ANSI C library.

   * `SIMPLE_BIND_DIRECTORY' - a world-writable directory on a network
     file system, for supporting the experimental name service
     bindings, if you wish to use them.

   * `SYSAUX_LIBRARIES' - additional flags that must be specified to
     the linker for C and C++ functions (and possibly for Modula-3 and
     Common Lisp; we don't know yet).  We found it necessary to define
     this to be `-lsocket -lnsl' on Solaris 2.3, for instance, to get
     the networking libraries linked in with the image.  On the other
     hand, for SunOS 4.1.3 and IRIX 5.2, this variable didn't have to
     be defined; the normal C libraries seemed to include all the
     necessary code.

   If you are going to have a need to build the documentation, you
should also define the following:

   * `PERL' - your version of the `perl' interpreter.  If you do not
     already have `perl', you can FTP it from `uunet.uu.net', from the
     `gnu/perl-*'.

   * `TEX' - your version of the `tex' program.  Normally only needs to
     be defined if you are going to build the documentation, which
     shouldn't be necessary.

   * `TEXINDEX' - your version of the `texindex' program, part of the
     GNU distribution, which sorts the TeX index files.  Normally only
     needs to be defined if you are going to build the documentation,
     which shouldn't be necessary.

   * `DVIPS' - your version of the program which converts TeX dvi
     format files into PostScript files.

   * `DVIPS4050' - your version of the program which converts TeX dvi
     format files into PostScript files suitable for printing on a
     Xerox 4050-series printer with Docuprint page decomposition
     software.  If you don't have a 4050 or Docuprint, just define this
     to be the same as `DVIPS'.

   * `MAKEINFO' - your version of the program which converts GNU texinfo
     files into GNU info files.

   Next, you should decide which transports you wish to build.  The
options are `in-memory' (keyword `INMEMORY'), `UDP datagrams' (keyword
`UDPSOCKET'), and `TCP/IP sockets' (keyword `TCPSOCKET').  (Currently,
we recommend building only the `TCPSOCKET' transport.) For each
transport that you wish to build, add a line
     #define ADD_TRANSPORT-KEYWORD_TRANSPORT 1

   Do the same for RPC protocols.  The current choices are `Sun RPC'
(keyword `SUNRPC').  For each protocol that you wish to include, add a
line
     #define ADD_PROTOCOL-KEYWORD_PROTOCOL 1

   Do the same for programming languages.  The current choices are C++
(keyword `CPLUSPLUS'), C (keyword `C'), Modula-3 (keyword `MODULA3'),
and Common Lisp (keyword `COMMONLISP').  (We recommend building only
those languages you are actually interested in using.)  For each
language that you decide to include, add a line
     #define ADD_LANGUAGE-KEYWORD_LANGUAGE 1

If you are building support for Common Lisp, you will need to specify
the command which invokes your Common Lisp program in batch mode, as
the value of the variable `LISP_BATCH_COMMAND', and the name of the
binary or fasl file extension as the value of the variable
`LISP_BIN_EXT'.  If you are building support for C++, you should define
the command to compile a C++ file as the value of the variable
`CPLUSPLUS_COMMAND'.  If you are building support for Modula-3, you
should define the command to compile a Modula-3 file as the value of
the variable `M3_COMMAND', and consider whether you like the definition
of the variable `M3DEBUGFLAGS'.  If you choose to build the ANSI C
support, the same compile command will be used compile a C file as you
have defined for the value of `ANSI_C_COMPILER'.

   You may need to add other defines to include various libraries, but
probably not.  If so, examine the file `ILUSRC/imake/ilu.rules' to see
what the possibilities are.

   If you are not using SunOS 4.x, you may have to edit the definitions
of AR, CC, and so on in the file `ILUSRC/imake/ilu.defs'.  This file
will probably be automatically constructed by GNU `autoconf' in future
releases.  In particular, SVR4 releases such as Sun's Solaris 2.3 and
SGI's IRIX 5.2 seem to need the following definitions:
        AR = ar r
        RANLIB = touch
   and possibly others.

Building
--------

   Now that you have configured the release, do the following to build
the system.  Note that the capitalization of the arguments to `make' is
important.

  1. Set your working directory to ILUSRC:
          % cd ILUSRC

  2. Build the Makefiles with the following commands:
          % make -f makefile.dist
          % make Makefiles

  3. Build the system with the command:
          % make

  4. If the build goes well, install the system with the command
          % make Install

  5. After the installation is complete, you may remove extra files in
     ILUSRC with the command
          % make Clean
     You may wish to use `make Clean' at any time, to get your system
     into a consistent state.

  6. If you change the configuration files, you should clean the system
     with the command ``make Clean'', and redo the installation
     starting at step 2.  If you run into problems that can be fixed
     without changing the configuration files, you can re-build the
     system by starting at step 3.

Environment Variables
---------------------

   ILU tools use a number of UNIX environment variables under the
covers.

   * The variable `ILUHOME' should be set to point to the value of
     ILUHOME.

   * The variable `ILUPATH' should be set to a colon-separated list of
     directories in which the tools look for interface files.  A
     minimal value for `ILUPATH' is probably `.:${ILUHOME}/interfaces'.

   * Your `PATH' environment variable should have the directory
     `ILUHOME/bin' on it.

   * Your `MANPATH' variable should have the directory `ILUHOME/man' on
     it.

   * If you are using Common Lisp, the portable DEFSYSTEM included with
     ILU uses the value of `SYSDCLPATH' to find system descriptions.
     It should be a colon-separated list of directories.  A good
     initial value might be `.:${ILUHOME}/lisp'.  See Appendix A of the
     reference manual for more details on the portable DEFSYSTEM.

   * The variable `ISLDEBUG' can optionally be set to any value to
     enable tracing in the ISL parser.

   * The variable `ILU_DEBUG' can be optionally be set to a
     colon-separated list of trace values to enable tracing in the ILU
     runtime kernel.  *Note Debugging ILU Programs::, for more
     information.

Examples
--------

   If you are interested in working with Common Lisp, we recommend
starting with the example system in `ILUHOME/examples/fs/'.  If you are
interested in working with Modula-3, we recommend starting with the
example system in `ILUHOME/examples/foogen/'.  If you are interested in
working with ANSI C, we recommend starting with the example system in
`ILUHOME/examples/test1/'.  If you are interested in working with C++,
we recommend starting with the example system in
`ILUHOME/examples/rwho2/'.  Read the `README' file in each directory
first.

Bug Reporting and Comments
==========================

   Report bugs (nah! - couldn't be!) to the Internet address
`ilu-bugs.parc@xerox.com', or to the XNS address `ILU-bugs:PARC:Xerox'.
Bug reports are more helpful with some information about the activity;
*please* read *Note Debugging ILU Programs::, for more information on
how to look at problems.  General comments and suggestions can be sent
to either `ILU@parc.xerox.com' or `ILU-bugs'.

