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: (Very stale now.)

    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.

With the exception of two sections (Windows 3.1 and MS-DOS), this document
assumes that you are building Vim for Win32 or later.
(Windows 95/98/Me/NT/2000/XP/2003/Vista/7)


Contents:
1. Microsoft Visual C++
2. Using MinGW
3. Cygwin
4. Borland
5. Cross compiling for Win32 from a Linux machine
6. Building with Python support
7. Building with MzScheme support
8. Windows 3.1
9. MS-DOS

10. Installing after building from sources


The currently preferred method is using the free Visual C++ Toolkit 2008
|msvc-2008-express|, the produced binary runs on most MS-Windows systems.  If
you need the executable to run on Windows 98 or ME, use the 2003 one
|msvc-2003-toolkit|.


1. Microsoft Visual C++
=======================

Visual Studio
-------------

Building with Visual Studio (VS 98, VS .NET, VS .NET 2003, VS 2005, and VS 2008)
is straightforward. (These instructions should also work for VS 4 and VS 5.)

Using VS C++ 2008 Express is recommended, the binaries build with that run on
nearly all platforms.  Binaries from later versions may not run on Windows 95
or XP.

To build Vim from the command line with MSVC, use Make_mvc.mak.
Visual Studio installed a batch file called vcvars32.bat, which you must
run to set up 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.

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, add IME=yes
to the parameters you pass to Make_mvc.mak.

To build Vim from within the Visual Studio IDE, open the Make_ivc.mak project.
(Note: Make_ivc.mak is not as rich as Make_mvc.mak, which allows for
far more configuration.) Make_ivc.mak can also be built with nmake.

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

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.


Visual C++ Toolkit 2003				*msvc-2003-toolkit*
-----------------------

You could download the Microsoft Visual C++ Toolkit 2003 from
    http://msdn.microsoft.com/visualc/vctoolkit2003/
Unfortunately this URL is no longer valid.  Inofficial downloads appear to be
available from links mentioned on these pages (use at your own risk):
   http://www.filewatcher.com/m/VCToolkitSetup.exe.32952488.0.0.html
   http://feargame.net/wiki/index.php?title=Building_Source_with_the_VC2003_Toolkit

This contains the command-line tools (compiler, linker, CRT headers,
and libraries) for Visual Studio .NET 2003, but not the Visual Studio IDE.
To compile and debug Vim with the VC2003 Toolkit, you will also need
|ms-platform-sdk|, |dotnet-1.1-redist|, |dotnet-1.1-sdk|,
and |windbg-download|.

It's easier to download Visual C++ 2008 Express Edition, |msvc-2008-express|,
which is freely available in perpetuity.

The free Code::Blocks IDE works with the VC2003 Toolkit, as described at
    http://wiki.codeblocks.org/index.php?title=Integrating_Microsoft_Visual_Toolkit_2003_with_Code::Blocks_IDE
(This site also takes you through configuring a number of other
free C compilers for Win32.)

To compile Vim using the VC2003 Toolkit and Make_mvc.mak, you must first
execute the following commands in a cmd.exe window (the msvcsetup.bat batch
file can be used):

    set PATH=%SystemRoot%\Microsoft.NET\Framework\v1.1.4322;%PATH%
    call "%VCToolkitInstallDir%vcvars32.bat"
    set MSVCVer=7.1
    call "%ProgramFiles%\Microsoft Platform SDK\SetEnv.Cmd"
    set LIB=%ProgramFiles%\Microsoft Visual Studio .NET 2003\Vc7\lib;%LIB%

Now you can build Vim with Make_mvc.mak.


Getting the Windows Platform SDK	    *ms-platform-sdk*

You will also need a copy of the Windows Platform SDK from
    http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
Specifically, you need the Windows Core SDK subset of the Platform SDK,
which contains the Windows headers and libraries.


Getting the .NET Framework 1.1 Runtime      *dotnet-1.1-redist*

You need the .NET Framework 1.1 Redistributable Package from
    http://www.microsoft.com/downloads/details.aspx?familyid=262d25e3-f589-4842-8157-034d1e7cf3a3
or from Windows Update:
    http://windowsupdate.microsoft.com/
This is needed to install |dotnet-1.1-sdk|. It also contains cvtres.exe,
which is needed to link Vim.


Getting the .NET Framework 1.1 SDK	    *dotnet-1.1-sdk*

You need the .NET Framework 1.1 SDK from
    http://www.microsoft.com/downloads/details.aspx?familyid=9b3a2ca6-3647-4070-9f41-a333c6b9181d
This contains some additional libraries needed to compile Vim,
such as msvcrt.lib. You must install |dotnet-1.1-redist| before
installing the .NET 1.1 SDK.


Getting the WinDbg debugger		    *windbg-download*

The Debugging Tools for Windows can be downloaded from
    http://www.microsoft.com/whdc/devtools/debugging/default.mspx
This includes the WinDbg debugger, which you will want if you ever need
to debug Vim itself. An earlier version of the Debugging Tools
is also available through the Platform SDK, |ms-platform-sdk|.


Visual C++ 2005 Express Edition       *msvc-2005-express*
-------------------------------

Visual C++ 2005 Express Edition can be downloaded for free from:
    http://msdn.microsoft.com/vstudio/express/visualC/default.aspx
This includes the IDE and the debugger. You will also need
|ms-platform-sdk|. You can build Vim with Make_mvc.mak.

Instructions for integrating the Platform SDK into VC Express:
    http://msdn.microsoft.com/vstudio/express/visualc/usingpsdk/default.aspx


Visual C++ 2008 Express Edition       *msvc-2008-express*
-------------------------------

Visual C++ 2008 Express Edition can be downloaded for free from:
    http://www.microsoft.com/express/downloads/
This includes the IDE and the debugger.

To set the environment execute the msvc2008.bat script.  You can then build
Vim with Make_mvc.mak.

For building 64 bit binaries you also need to install the SDK:
"Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1"
You don't need the examples and documentation.


Visual C++ 2010 Express Edition       *msvc-2010-express*
-------------------------------

Visual C++ 2010 Express Edition can be downloaded for free from:
    http://www.microsoft.com/express/vc/Default.aspx
This includes the IDE and the debugger.

To set the environment execute the msvc2010.bat script.  You can then build
Vim with Make_mvc.mak.


Targeting Windows XP with new MSVC      *new-msvc-windows-xp*
----------------------------------

Beginning with Visual C++ 2010, Microsoft changed the behavior of LINK.EXE
so that it targets Windows 6.0 (Vista) by default.  In order to override
this, the target Windows version number needs to be passed to LINK like
follows:
    LINK ... /subsystem:console,5.01

Make_mvc.mak now supports a macro SUBSYSTEM_VER to pass the Windows version.
Use lines like follows to target Windows XP (assuming using Visual C++ 2012
under 64-bit Windows):
    set WinSdk71=%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.1A
    set SDK_INCLUDE_DIR=%WinSdk71%\Include
    set INCLUDE=%WinSdk71%\Include;%INCLUDE%
    set LIB=%WinSdk71%\Lib;%LIB%
    set PATH=%WinSdk71%\Bin;%PATH%
    set CL=/D_USING_V110_SDK71_
    nmake -f Make_mvc.mak ... WINVER=0x0501 SUBSYSTEM_VER=5.01

The following Visual C++ team blog can serve as a reference page:
    http://blogs.msdn.com/b/vcblog/archive/2012/10/08/windows-xp-targeting-with-c-in-visual-studio-2012.aspx


2. 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/

or you can use 'MinGW-w64' compiler.

    http://mingw-w64.sourceforge.net/

Or a compiler provided on msys2:

    https://msys2.github.io/

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:\MinGW\bin;%PATH%

or on NT/2000/XP, go to the Control Panel, (Performance and Maintenance),
System, Advanced, and edit the environment from there. If you use msys2
compilers, set your installed paths:

    C:\msys2\mingw32\bin

for 32bit. And 64bit:

    C:\msys2\mingw64\bin

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

    C:\> gcc --version
    gcc (GCC) 4.8.1

    C:\> mingw32-make --version
    GNU Make 3.82.90 (...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:

    mingw32-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 can use:

    mingw32-make -f Make_ming.mak GUI=no vim.exe

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://www.upx.org/

As of 2011, UPX still does not support compressing 64-bit EXE's; if you have
built a 64-bit vim then an alternative to UPX is 'MPRESS'. MPRESS can be found
at:
    http://www.matcode.com/mpress.htm


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.


3. Cygwin
=========

Use Make_cyg.mak with Cygwin's GCC. See
    http://users.skynet.be/antoine.mechelynck/vim/compile.htm

With Cygnus gcc you should use the Unix Makefile instead (you need to get the
Unix archive then).  Then you get a Cygwin application (feels like Vim is
running on Unix), while with Make_cyg.mak you get a Windows application (like
with the other makefiles).


4. Borland
===========

Use Make_bc5.mak with Borland C++ 5.x. See
    http://users.skynet.be/antoine.mechelynck/vim/compile.htm


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

[Update of 1) needs to be verified]

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. See
	http://www.mingw.org/wiki/LinuxCrossMinGW
	http://www.libsdl.org/extras/win32/cross/README.txt
    2) Get and unpack both the Unix sources and the extra archive
    3) in 'Make_cyg_ming.mak', set 'CROSS' to 'yes' instead of 'no'.
       Make further changes to 'Make_cyg_ming.mak' and 'Make_ming.mak' as you
       wish.  If your cross-compiler prefix differs from the predefined value,
       set 'CROSS_COMPILE' corresponding.
    4) make -f Make_ming.mak gvim.exe

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


6. Building with Python support
===============================

For building with MSVC 2008 the "Windows Installer" from www.python.org
works fine.

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

Building 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 if you use msys2 to build python support (as one line):

    mingw32-make -f Make_ming.mak PYTHON=c:/msys64/mingw64
        PYTHON_HOME=c:/msys64/mingw64
        PYTHONINC=-Ic:/msys64/mingw64/include/python2.7
        DYNAMIC_PYTHON=yes
        PYTHON_VER=27
        DYNAMIC_PYTHON_DLL=libpython2.7.dll
        ARCH=x86-64
        STATIC_STDCPLUS=yes

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


7. 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 -f Make_cyg.mak MZSCHEME=d:/Develop/MzScheme MZSCHEME_VER=209_000
    MZSCHEME_DLLS=c:/Temp DYNAMIC_MZSCHEME=no

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


8. 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.

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


9. 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 changing
the file format from "unix" to "dos".


10. Installing after building from sources
==========================================

[provided by Michael Soyka]

After you've built the Vim binaries as described above, you're ready to
install Vim on your system.  However, if you've obtained the Vim sources
using Mercurial or by downloading them as a unix tar file, you must first
create a "vim73" directory.  If you instead downloaded the sources as
zip files, you can skip this setup as the zip archives already have the
correct directory structure.

  A.  Create a Vim "runtime" subdirectory named "vim73"
  -----------------------------------------------------
  If you obtained your Vim sources as zip files, you can skip this step.
  Otherwise, continue reading.

  Go to the directory that contains the Vim "src" and "runtime"
  directories and create a new subdirectory named "vim73".

  Copy the "runtime" files into "vim73":
     copy runtime\* vim73

  B.  Copy the new binaries into the "vim73" directory
  ----------------------------------------------------
  Regardless of how you installed the Vim sources, you need to copy the
  new binaries you created above into "vim73":

     copy src\*.exe vim73
     copy src\GvimExt\gvimext.dll vim73
     copy src\xxd\xxd.exe vim73

  C.  Move the "vim73" directory into the Vim installation subdirectory
  ---------------------------------------------------------------------
  Move the "vim73" subdirectory into the subdirectory where you want Vim
  to be installed.  Typically, this subdirectory will be named "vim".
  If you already have a "vim73" subdirectory in "vim", delete it first
  by running its uninstal.exe program.

  D.  Install Vim
  ---------------
  "cd" to your Vim installation subdirectory "vim\vim73" and run the
  "install.exe" program.  It will ask you a number of questions about
  how you would like to have your Vim setup.  Among these are:
  - You can tell it to write a "_vimrc" file with your preferences in the
    parent directory.
  - It can also install an "Edit with Vim" entry in the Windows Explorer
    popup menu.
  - You can have it create batch files, so that you can run Vim from the
    console or in a shell.  You can select one of the directories in your
    PATH or add the directory to PATH using the Windows Control Panel.
  - Create entries for Vim on the desktop and in the Start menu.

Happy Vimming!
