#!/bin/sh
#
# INSTALL - installation instructions and installation script.
#
# You need a C compiler such as the GNU C compiler (gcc, version 3.4.x
# or later -- note however that version 4.0 will not work) and GNU Make
# (3.69 or later).  Make sure that they are somewhere in your PATH.
# It is also helpful if you have GNU Readline or NetBSD Editline (libedit)
# installed in one of the standard locations (normally /usr/local or /usr),
# but this is not essential.
#
# The source distributions for gcc, GNU Make, and GNU Readline are
# available from <ftp://ftp.gnu.org/gnu/>.  The source distribution for
# NetBSD Editline is available from <https://thrysoee.dk/editline/>.
# Binaries for the above are included in almost all Linux distributions,
# Mac OS X and also in the Cygwin and MinGW distributions for Windows (see
# README.MS-Windows).
#
# Step 0.  Extract the files from the gzipped tar archive.
#
#      NOTE: do not extract the archive into a directory whose absolute
#      pathname contains spaces, as this will cause the installation to fail.
#
# Step 1.  Run `configure'.  (Just type `sh configure'.)
#
#          By default, the files will be installed in the directory
#          /usr/local/mercury-22.01.9-beta-2026-08-29.
#          If you want the files to be installed someplace else,
#          use the `--prefix <directory>' option to `configure'.
#          The directory name specified with the `--prefix' option
#          must not contain spaces.
#
#      NOTE: If you use the `--prefix' option to configure,
#      be aware that `mercury' is not automatically
#      appended.  That is, `--prefix=/usr/local' will put
#      files in /usr/local/bin, /usr/local/lib et cetera,
#      *not* /usr/local/mercury/bin, /usr/local/mercury/lib.
#
#          By default, the installation process will install the Mercury
#          standard library in a comprehensive set of grades, with each grade
#          supporting a given set of capabilities (debugging, profiling etc).
#          If you want to install a different set of grades, read the
#          "Finetuning" section below.
#
#          Some debugging output from running configure is automatically
#          save to the file `config.log'.
#
# Step 2.  Run `make'.
#          This step will take a long time.
#
#      NOTE: If you have problems installing a new version
#      of the compiler, you may find it helpful to either
#      completely remove any existing versions of the
#      compiler reachable on your PATH or, less drastically,
#      alter your PATH variable so that any existing version
#      of the mercury compiler is not accessible for the
#      purposes of installing the new version.
#
# Step 3.  Run `make install'.
#          This step will also take a long time.
#
#          BEWARE: if something goes wrong in this step, e.g. running
#          out of disk space, and the installation has already gotten
#          past installing the documentation, and started installing
#          the different grades of the libraries then in general it is
#          NOT sufficient to simply rerun `make install'.  Instead you
#          may need to start from scratch again.
#
# Step 4.  Check the permissions on the installed files.
#          Add /usr/local/mercury-22.01.9-beta-2026-08-29/bin to your PATH, and
#          add /usr/local/mercury-22.01.9-beta-2026-08-29/man to your MANPATH.
#          add /usr/local/mercury-22.01.9-beta-2026-08-29/info to your INFOPATH.
#          You can also add a WWW link to the Mercury documentation in
#          /usr/local/mercury-22.01.9-beta-2026-08-29/lib/mercury/html to your WWW home page,
#          and you may want to print out a hard-copy of the documentation
#          from the DVI files in /usr/local/mercury-22.01.9-beta-2026-08-29/lib/mercury/doc.
#
#          If step #1 enabled deep profiling, then check whether "make install"
#          was able to copy scripts/mdprof to your web server's CGI directory.
#          This directory is often writeable only by root or by the web server
#          administrator, so you may need more than your usual set of
#          privileges to do the copy (i.e. you may need to "su" to the
#          appropriate user). mdprof is also installed into the same directory
#          as other Mercury executables.
#
#          To use the emacs debugger interface ("M-x mdb"), you also need to
#          add the following lines to the `.emacs' file in your home directory:
#
#               (add-to-list 'load-path
#                 "/usr/local/mercury-22.01.9-beta-2026-08-29/lib/mercury/elisp")
#               (autoload 'mdb "gud" "Invoke the Mercury debugger" t)
#
# Step 5.  Run `make clean'.
#
# As a short-cut, steps 1-3 are listed below, so they can be replaced
# by just executing this file.  I suggest you run it in the background,
# and read the Mercury documentation in the `doc' directory while you are
# waiting.

if pwd | grep ' '
then
    echo "The name of the current directory contains spaces."
    echo "Mercury cannot be installed from such directories."
    exit 1
fi

if test ! -d boehm_gc
then
    echo "This directory does not contain a complete source distribution."
    echo "If you are trying to compile a workspace checked out of git,"
    echo "you will need to read and follow INSTALL.git, not INSTALL."
    exit 1
fi

sh configure &&
make &&
make install

# Fine-tuning:
# ------------
#
#          If your system has multiple CPUs and lots of RAM,
#          you can uncomment the definition of PARALLEL in the Makefile
#          to perform a parallel make.
#
#          By default the `make install' step will install a reasonable
#          set of library grades which should be appropriate for most uses.
#
#          The option --enable-libgrades=<gradelist> allows you to specify
#          precisely the list of library grades to be installed. The argument
#          of this option should be a comma-separated list of grades.
#          An empty list of grades will cause the library to be installed
#          only in the default grade.
#
#          The option --enable-minimal-install will install only the minimal
#          system that is required in order to bootstrap the Mercury compiler.
#
#          The option --disable-most-grades reduces the set of installed grades
#          to a "minimum" level for developers (just the default grade and the
#          grades corresponding to the `--debug' and `--high-level-code'
#          options).
#
#          The option --disable-nogc-grades prevents the installation
#          of grades without garbage collection.
#
#          The option --disable-prof-grades prevents the installation
#          of grades that support profiling.
#
#          The option --disable-old-prof-grades prevents the installation
#          of the old style profiling grades, i.e. all profiling grades
#          except the ones that do deep profiling.
#
#          The option --disable-trail-grades prevents the installation
#          of grades that support trailing.
#
#          The option --disable-par-grades prevents the installation
#          of thread-safe grades.
#
#          The option --enable-inefficient-grades causes the installation
#          of grades that do not exploit gcc extensions even when they are
#          available.
#
#          The option --enable-hlc-prof-grades causes the installation
#          of profiling versions of the high level code grades.
#
#          The option --enable-hlc-low-level-debug-grades causes the installation
#          of high-level code grades with C level debugging enabled. 
#
#          The option --enable-stseg-grades causes the installation of grades
#          that use stack segments.
#
#          The option --disable-java-grade prevents the installation of the
#          Java grade.  The Java grade will be installed by default if the
#          Java SDK is found.
#
#          The option --disable-csharp-grade prevents the installation of the
#          C# grade.  The C# grade will be installed by default if the
#          .NET SDK is found.
#
#          The option --enable-ssdebug-grades adds source-to-source debugging
#          grades hlc.gc.ssdebug and java.ssdebug, if hlc.gc or java grades
#          are also present.
#
#          The option --disable-shared-libs prevents the installation of shared
#          libraries, even if they are supported on this system.
#
#          The option --enable-deep-profiler=/some/dir/name enables the deep
#          profiler, and specifies the directory in which to install the
#          deep profiler's CGI script. The option --disable-deep-profiler
#          causes the deep profiler not to be installed, even if the underlying
#          system would be able to support it. The default is to enable the
#          deep profiler if the system has the required features.
#
#          The --without-readline and --without-editline options prevent the
#          use of GNU Readline and NetBSD Editline (libedit) with the debugger.
#          Note that GNU Readline will be used in preference to Editline if
#          the former is present and if --without-readline is not given.
#
#          If you are short on RAM, you can add -DSMALL_CONFIG to the CFLAGS
#          line in the file boehm_gc/Makefile.  (This tells the garbage
#          collector to tune itself for small physical memory.)
#
#          If your system supports shared libraries, but `configure' says
#          Mercury does not support shared libraries on this system,
#          contact us and we'll see if we can add support for shared libraries
#          on that system.
#
#          Efficiency will be much improved if Mercury can use gcc global
#          register variables.  Currently these are supported for
#          mips, hppa, sparc, alpha, rs6000, i386 and x86_64 architectures
#          (see runtime/regs.h and runtime/machdeps/*).
#          If you want to use Mercury on some other CPU, contact us and
#          we'll add support for gcc global registers for that CPU.
#
# De-installation:
# ----------------
#
# You may eventually want to uninstall this version of Mercury
# (to free up disk space so you can install the next version ;-).
# If you installed in the default location, you can simply
# use `rm -rf /usr/local/mercury-22.01.9-beta-2026-08-29' to uninstall.
# If you installed in a location such as `/usr/local' that also
# contains other files which you do not want removed, then
# run the command `make uninstall' in this directory.
