INSTALL - Installation of Vim on different machines.

This file contains instructions for compiling Vim. If you already have an
executable version of Vim, you don't need this.

Contents:
1. Generic
2. Unix
3. OS/2 (with EMX 0.9b)
4. Atari MiNT

See INSTALLami.txt              for Amiga
See INSTALLmac.txt              for Macintosh
See INSTALLpc.txt               for PC (Windows XP/Vista/7/8/10)
See INSTALLvms.txt              for VMS
See INSTALLx.txt		for cross-compiling on Unix
See ../READMEdir/README_390.txt for z/OS and OS/390 Unix
See ../runtime/doc/os_haiku.txt	for Haiku

1. Generic
==========

If you compile Vim without specifying anything, you will get the default
behaviour as is documented, which should be fine for most people.

For features that you can't enable/disable in another way, you can edit the
file "feature.h" to match your preferences.


2. Unix
=======

Summary:
1. make			run configure, compile and link
2. make install		installation in /usr/local

This will include the GUI and X11 libraries, if you have them.  If you want a
version of Vim that is small and starts up quickly, see the Makefile for how
to disable the GUI and X11.  If you don't have GUI libraries and/or X11, these
features will be disabled automatically.

See the start of Makefile for more detailed instructions about how to compile
Vim.

If you need extra compiler and/or linker arguments, set $CFLAGS and/or $LIBS
before starting configure.  Example:

	env  CFLAGS=-I/usr/local/include  LIBS=-lm  make

This is only needed for things that configure doesn't offer a specific argument
for or figures out by itself.  First try running configure without extra
arguments.

GNU Autoconf and a few other tools have been used to make Vim work on many
different Unix systems.  The advantage of this is that Vim should compile
on most systems without any adjustments.  The disadvantage is that when
adjustments are required, it takes some time to understand what is happening.

If configure finds all library files and then complains when linking that some
of them can't be found, your linker doesn't return an error code for missing
libraries.  Vim should be linked fine anyway, mostly you can just ignore these
errors.

If you run configure by hand (not using the Makefile), remember that any
changes in the Makefile have no influence on configure.  This may be what you
want, but maybe not!

The advantage of running configure separately, is that you can write a script
to build Vim, without changing the Makefile or feature.h.  Example (using sh):

	CFLAGS=-DCOMPILER_FLAG ./configure --enable-gui=motif

One thing to watch out for: If the configure script itself changes, running
"make" will execute it again, but without your arguments.  Do "make clean" and
run configure again.

If you are compiling Vim for several machines, for each machine:
  a.    make shadow
  b.    mv shadow machine_name
  c.    cd machine_name
  d.    make; make install

[Don't use a path for machine_name, just a directory name, otherwise the links
that "make shadow" creates won't work.]


Unix: COMPILING WITH/WITHOUT GUI

NOTE: This is incomplete, look in Makefile for more info.

These configure arguments can be used to select which GUI to use:
--enable-gui=gtk      or: gtk2, motif, athena or auto
--disable-gtk-check
--disable-motif-check
--disable-athena-check

--enable-gui defaults to "auto", so it will automatically look for a GUI (in
the order of GTK, Motif, then Athena).  If one is found, then is uses it and
does not proceed to check any of the remaining ones.  Otherwise, it moves on
to the next one.

--enable-{gtk,gtk2,kde,motif,athena}-check all default to "yes", such that if
--enable-gui is "auto" (which it is by default), GTK, Motif, and Athena will
be checked for.  If you want to *exclude* a certain check, then you use
--disable-{gtk,gtk2,kde,motif,athena}-check.

For example, if --enable-gui is set to "auto", but you don't want it look for
Motif, you then also specify --disable-motif-check.  This results in only
checking for GTK and Athena.

Lastly, if you know which one you want to use, then you can just do
--enable-gui={gtk,gtk2,kde,motif,athena}.  So if you wanted to only use Motif,
then you'd specify --enable-gui=motif.  Once you specify what you want, the
--enable-{gtk,gtk2,kde,motif,athena}-check options are ignored.

On Linux you usually need GUI "-devel" packages.  You may already have GTK
libraries installed, but that doesn't mean you can compile Vim with GTK, you
also need the header files.

For compiling with the GTK+ GUI, you need a recent version of glib and gtk+.
Configure checks for at least version 1.1.16.  An older version is not selected
automatically.  If you want to use it anyway, run configure with
"--disable-gtktest".
GTK requires an ANSI C compiler.  If you fail to compile Vim with GTK+ (it
is the preferred choice), try selecting another one in the Makefile.
If you are sure you have GTK installed, but for some reason configure says you
do not, you may have left-over header files and/or library files from an older
(and incompatible) version of GTK.  if this is the case, please check
auto/config.log for any error messages that may give you a hint as to what's
happening.

There used to be a KDE version of Vim, using Qt libraries, but since it didn't
work very well and there was no maintainer it was dropped.


Unix: COMPILING WITH MULTI-BYTE

When you want to compile with the multi-byte features enabled, make sure you
compile on a machine where the locale settings actually work, otherwise the
configure tests may fail.  You need to compile with "big" features:

    ./configure --with-features=big

Unix: COMPILING ON LINUX

On Linux, when using -g to compile (which is default for gcc), the executable
will probably be statically linked.  If you don't want this, remove the -g
option from CFLAGS.

Unix: PUTTING vimrc IN /etc

Some Linux distributions prefer to put the global vimrc file in /etc, and the
Vim runtime files in /usr.  This can be done with:
	./configure --prefix=/usr
	make VIMRCLOC=/etc VIMRUNTIMEDIR=/usr/share/vim MAKE="make -e"

Unix: COMPILING ON NeXT

Add the "-posix" argument to the compiler by using one of these commands:
	setenv CC 'cc -posix' (csh)
	export CC='cc -posix' (sh)
And run configure with "--disable-motif-check".

Unix: LOCAL HEADERS AND LIBRARIES NOT IN /usr/local

Sometimes it is necessary to search different path than /usr/local for locally
installed headers (/usr/local/include) and libraries (/usr/local/lib).
To search /stranger/include and /stranger/lib for locally installed
headers and libraries, use:
	./configure --with-local-dir=/stranger
And to not search for locally installed headers and libraries at all, use:
	./configure --without-local-dir


3. OS/2
=======

OS/2 support was removed in patch 7.4.1008


4. Atari MiNT
=============

Atari MiNT support was removed in patch 8.2.1215.
