INSTALLpc.txt - Installation of Vim on PC

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

More information can be found here:

	http://mywebpage.netscape.com/sharppeople/vim/howto/

The file "feature.h" can be edited to match your preferences. You can skip
this, then you will get the default behavior as is documented, which should
be fine for most people.


Contents:
1. MS-DOS
2. Win32 (Windows NT and Windows 95)
3. Windows NT with OpenNT
4. Windows 3.1
5. Using Mingw
6. Cross compiling for Win32 from a Linux machine
7. Building with Python support
8. Building with MzScheme support


1. MS-DOS
=========

Summary:
ren Make_bc3.mak Makefile; make      16 bit, Borland C++ and Turbo C++
ren Make_tcc.mak Makefile; make	     16 bit, Turbo C
make -f Make_djg.mak		     32 bit, DJGPP 2.0
make -f Make_bc5.mak		     32 bit, Borland C++ 5.x (edit it to
					     define DOS)

Warning: Be sure to use the right make.exe.  Microsoft C make doesn't work;
Borland make only works with Make_bc3.mak, Make_bc5.mak and Make_tcc.mak;
DJGPP/GNU make must be used for Make_djg.mak.

The Borland C++ compiler has been used to generate the MS-DOS executable; it
should work without problems. You will probably have to change the paths for
LIBPATH and INCLUDEPATH in the start of the Makefile.  You will get two
warnings which can be ignored (one about _chmod and one about precompiled
header files).

The "spawno" library by Ralf Brown was used in order to free memory when Vim
starts a shell or other external command.  Only about 200 bytes are taken from
conventional memory.  When recompiling get the spawno library from Simtel,
directory "msdos/c".  It is called something like "spwno413.zip".  Or follow
the instructions in the Makefile to remove the library.

The Turbo C Makefile has not been tested much lately. It is included for those
that don't have C++. You may need to make a few changes to get it to work.

DJGPP needs to be installed properly to compile Vim; you need a lot of things
before it works. When your setup is OK, Vim should compile with just one
warning (about an argument to signal()).

Make_bc5.mak is for those that have Borland C++ 5.0 or later.  At the top of
the file, there are some variables you can change to make either a 32-bit
Windows exe (GUI or console mode), or a 16-bit MS-DOS version.
NOTE: multi-byte support is broken in the Borland libraries, not everything
will work properly!  Esp. handling multi-byte file names.

If you get all kinds of strange error messages when compiling, try adding
changing the file format from "unix" to "dos".


2. Win32 (Windows NT and Windows 95)
====================================

Summary:
vcvars32				  Setup paths for nmake and MSVC

nmake -f Make_mvc.mak		console   Win32 SDK or Microsoft Visual C++
nmake -f Make_mvc.mak GUI=yes	GUI	  Microsoft Visual C++
nmake -f Make_mvc.mak OLE=yes	OLE	  Microsoft Visual C++
nmake -f Make_mvc.mak PERL=C:\Perl PYTHON=C:\Python etc.
				Perl, Python, etc.
					  Microsoft Visual C++

make  -f Make_bc5.mak		GUI	  Borland C++ 5.x
make  -f Make_bc5.mak		console	  Borland C++ 5.x (change the file)
nmake -f Make_ivc.mak CFG="Vim - Win32 Release gvim"
				GUI	  Microsoft Visual C++ 4.x or later
nmake -f Make_ivc.mak CFG="Vim - Win32 Release gvim OLE"
				OLE	  Microsoft Visual C++ 4.x or later

make  -f Make_cyg.mak		various   Cygnus gcc
make  -f Make_ming.mak		various   MingW with gcc

See the specific files for comments and options.

These files have been supplied by George V. Reilly, Ben Singer, Ken Scott and
Ron Aaron; they have been tested.  The Cygnus one many not fully work yet.
With Cygnus gcc you can use the Unix Makefile instead (you need to get the
Unix archive then).  Then you get a Cygwin application (feels like Vim is
runnin on Unix), while with Make_cyg.mak you get a Windows application (like
with the other makefiles).

You can also use the Visual C++ IDE: use File/Open workspace, select the
Make_ivc.mak file, then select Build/Build all.  This builds the GUI version
by default.

Vim for Win32 compiles with the Microsoft Visual C++ 2.0 compiler and later,
and with the Borland C++ 4.5 32-bit compiler and later.  It compiles on
Windows 95 and all four NT platforms: i386, Alpha, MIPS, and PowerPC.  The
NT/i386 and the Windows 95 binaries are identical.  Use Make_mvc.mak to
compile with Visual C++ and Make_bc5.mak to compile with Borland C++.

Make_mvc.mak allows a Vim to be built with various different features and
debug support.  Debugging with MS Devstudio is provided by Make_dvc.mak.
For a description of the use of Make_dvc.mak, look in Make_mvc.mak.

For compiling Gvim with IME support on far-east Windows, uncomment the
MULTI_BYTE_IME define in the src/feature.h file before compiling.

The Win32 console binary was compiled with Visual C++ version 5.0, using
Make_mvc.mak and Make_bc5.mak (Borland C).  Other compilers should also work.
If you get all kinds of strange error messages when compiling (you shouldn't
with the Microsoft or Borland 32-bit compilers), try adding <CR> characters
at the end of each line.

You probably need to run "vcvars32" before using "nmake".

For making the Win32s version, you need Microsoft Visual C++ 4.1 OR EARLIER.
In version 4.2 support for Win32s was dropped!  Use this command:
	nmake -f Make_mvc.mak GUI=yes

See the respective Makefiles for more comments.


3. Windows NT with OpenNT
=========================

(contributed by Michael A. Benzinger)

Building Vim on OpenNT 2.0 on Windows NT 4.0, with Softway's prerelease gcc:
1. export CONFIG_SHELL=//D/OpenNT/bin/sh
2. Make the following exports for modifying config.mk:
	export CFLAGS=-O -Wshadow
	export X_PRE_LIBS=-lXmu
2. Run configure as follows:
	configure --prefix=/vim --bindir=/bin/opennt --enable-gui=Motif
   If you don't have OpenNTif (Motif support), use this:
	configure --prefix=/vim --bindir=/bin/opennt --enable-gui=Athena
3. Edit Makefile to perform the following since the Makefile include syntax
   differs from that of gmake:
	#include config.mk
	.include "config.mk"
4. Change all install links to be "ln -f" and not "ln -s".
5. Change to the 'ctags' directory and configure.
6. Edit the Makefile and remove spurious spaces from lines 99 and 114.
7. Change slink to "ln -f" from "ln -s".
8. Return to the src directory.
9. make


4. Windows 3.1x
===============

make -f Make_w16.mak		     16 bit, Borland C++ 5.0

Warning: Be sure to use the right make.exe.  It should be Borland make.

You will almost certainly have to change the paths for libs and include files
in the Makefile.  Look for "D:\BC5" and "ctl3dv2".  You will get a number of
warnings which can be ignored ( _chmod, precompiled header files, and
"possibly incorrect assignment").

The makefile should also work for BC++ 4.0 and 4.5, but may need tweaking to
remove unsupported compiler & liker options.


5. Mingw
========

(written by Ron Aaron: <ronaharon@yahoo.com>)

This is about how to produce a Win32 binary of gvim with Mingw.

First, you need to get the 'mingw32' compiler, which is free for the download
at:

	http://www.mingw.org/

Once you have downloaded the compiler binaries, unpack them on your hard disk
somewhere, and put them on your PATH.  If you are on Win95/98 you can edit
your AUTOEXEC.BAT file with a line like:

	set PATH=C:\GCC-2.95.2\BIN;%PATH%

or on NT/2000, go to the Control Panel, System, and edit the environment from
there.

Test if gcc is on your path.  From a CMD (or COMMAND on '95/98):

	C:\> gcc --version
	2.95.2

	C:\> make --version
	GNU Make version 3.77 (...etc...)

Now you are ready to rock 'n' roll.  Unpack the vim sources (look on
www.vim.org for exactly which version of the vim files you need).

Change directory to 'vim\src':

	C:\> cd vim\src
	C:\VIM\SRC>

and you type:

	make -f Make_ming.mak gvim.exe

After churning for a while, you will end up with 'gvim.exe' in the 'vim\src'
directory.

You should not need to do *any* editing of any files to get vim compiled this
way.  If, for some reason, you want the console-mode-only version of vim (this
is NOT recommended on Win32, especially on '95/'98!!!), you need only change
the 'gvim.exe' to 'vim.exe' in the 'make' commands given above.

If you are dismayed by how big the EXE is, I strongly recommend you get 'UPX'
(also free!) and compress the file (typical compression is 50%). UPX can be
found at
	http://upx.tsx.org/


ADDITION: NLS support with Mingw

(by Eduardo F. Amatria <eferna1@platea.pntic.mec.es>)

If you want National Language Support, read the file src/po/README_mingw.txt.
You need to uncomment lines in Make_ming.mak to have NLS defined.


6. Cross compiling for Win32 from a Linux machine
=================================================

(written by Ron Aaron: <ronaharon@yahoo.com> with help from
Martin Kahlert <martin.kahlert@infineon.com>)

If you like, you can compile the 'mingw' Win32 version from the comfort of
your Linux (or other unix) box.  To do this, you need to follow a few steps:

	1) Install the mingw32 cross-compiler (if you have it, go to step 2)
		1a) from 'ftp://ftp.nanotech.wisc.edu/pub/khan/gnu-win32/mingw32/snapshots/gcc-2.95.2-1',
			get:
				binutils-19990818-1-src.tar.gz
				mingw-msvcrt-20000203.zip
				gcc-2.95.2-1-x86-win32.diff.gz
		1b) from 'http://gcc.gnu.org/' get:
				gcc-2.95.2.tar.gz
		1c) create a place to put the compiler source and binaries:
			(assuming you are in the home directory)
			mkdir gcc-bin
			mkdir gcc-src
		1d) unpack the sources:
			cd gcc-src
			tar xzf ../binutils-19990818-1-src.tar.gz
			tar xzf ../gcc-2.95.2.tar.gz
			unzip ../mingw-msvcrt-20000203
		1e) build the different tools:
			export PREFIX=~/gcc-bin/
			cd gcc-2.95.2
			zcat ../gcc-2.95.2-1-x86-win32.diff.gz | patch -p1 -E
			cd ../binutils-19990818
			./configure --target=i586-pc-mingw32msvc --prefix=$PREFIX
			make
			make install
			cd ../gcc-2.95.2
			./configure --target=i586-pc-mingw32msvc \
				--with-libs=~/gcc-bin/i386-mingw32msvc/lib \
				--with-headers=~/gcc-bin/i386-mingw32msvc/include \
				--enable-languages=c++ \
				--prefix=$PREFIX
			make
			make install
		1f) Add $PREFIX/bin to your $PATH.

	2) get the *unix* version of the vim sources
	3) in 'Make_ming.mak', set 'CROSS' to '1' instead of '0'.
	4) make -f Make_ming.mak gvim.exe

Now you have created the Windows binary from your Linux box!  Have fun...

7. Building with Python support
=================================================

(written by Ron Aaron: <ronaharon@yahoo.com>)

This has been tested with the mingw32 compiler, and the ActiveState
ActivePython:
    http://www.ActiveState.com/Products/ActivePython/

After installing the ActivePython, you will have to create a 'mingw32'
'libpython20.a' to link with:
   cd $PYTHON/libs
   pexports python20.dll > python20.def
   dlltool -d python20.def -l libpython20.a

Once that is done, edit the 'Make_ming.mak' so the PYTHON variable points to
the root of the Python installation (C:\Python20, for example).  If you are
cross-compiling on Linux with the mingw32 setup, you need to also convert all
the 'Include' files to *unix* line-endings.  This bash command will do it
easily:
   for fil in *.h ; do vim -e -c 'set ff=unix|w|q' $fil

Now just do:
   make -f Make_ming.mak gvim.exe

and you will end up with a Python-enabled, Win32 version.  Enjoy!

8. Building with MzScheme support
=================================================

(written by Sergey Khorev <sergey.khorev@gmail.com>)

Vim with MzScheme (http://www.plt-scheme.org/software/mzscheme) support can
be built with either MSVC, or MinGW, or Cygwin. Supported versions are 205 and
above (including 299 and 30x series).

The MSVC build is quite straightforward. Simply invoke (in one line)
nmake -fMake_mvc.mak MZSCHEME=<Path-to-MzScheme>
    [MZSCHEME_VER=<MzScheme-version>] [DYNAMIC_MZSCHEME=<yes or no>]
where <MzScheme-version> is the last seven characters from MzScheme dll name
(libmzschXXXXXXX.dll).
If DYNAMIC_MZSCHEME=yes, resulting executable will not depend on MzScheme
DLL's, but will load them in runtime on demand.

Building dynamic MzScheme support on MinGW and Cygwin is similar. Take into
account that <Path-to-MzScheme> should contain slashes rather than backslashes
(e.g. d:/Develop/MzScheme)

"Static" MzScheme support (Vim executable will depend on MzScheme DLLs
explicitly) on MinGW and Cygwin requires additional step.

libmzschXXXXXXX.dll and libmzgcXXXXXXX.dll should be copied from
%WINDOWS%\System32 to other location (either build directory, some temporary
dir or even MzScheme home).

Pass that path as MZSCHEME_DLLS parameter for Make. E.g.,
make -fMake_cyg.mak MZSCHEME=d:/Develop/MzScheme MZSCHEME_VER=209_000
    MZSCHEME_DLLS=c:/Temp DYNAMIC_MZSCHEME=no

After successful build these dlls can be freely removed, leaving them in
%WINDOWS%\System32 only.
