INSTALLvms.txt - Installation of Vim on OpenVMS

Maintainer:   Zoltan Arpadffy <arpadffy@polarhome.com>
Last change:  2007 May 07

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

If you skip settings described here, then you will get the default Vim
behavior as it is documented, which should be fine for most users.

The file "feature.h" can be edited to match your preferences, but this files
does not describe possibilities hidden in feature.h acrobatics, however
parameters from MAKE_VMS.MMS actively uses and sets up parameters in relation
with feature.h

More information and case analysis you can found in os_vms.txt
([runtime.doc]os_vms.txt or :help vms from vim prompt)

Contents:
1. Download files
2. Configuration
3. Compilation DECC
4. Compilation VAXC
5. CTAGS, XXD
6. Deployment
7. GTK and other features
8. Notes
9. Authors

----------------------------------------------------------------------------
1. Download files

1.1. Visit the Vim ftp site (see ftp://ftp.vim.org/pub/vim/MIRRORS)
     and obtain the following three files:

     unix/vim-X.X-src.tar.gz
     unix/vim-X.X-rt.tar.gz
     extra/vim-X.X-extra.tar.gz

     where X.X is the version number.

1.2. Expand the three archives.

1.3. Apply patches if they exist.  (Patch files are found in the ftp
     site in the "patches" directory.)

1.4. You will need either the DECSET mms utility or the freely available clone
     of it called mmk (VMS has no make utility in the standard distribution).
     You can download mmk from http://www.openvms.digital.com/freeware/MMK/

1.5. If you want to have Perl, Python or Tcl support in Vim you will need VMS
     distributions for them as well.

1.6  If you want to have GTK executable, you need to have properly installed
     GTK libraries.

NOTE: procedure in chapter 1 describes source code preparation from multi OS
code, however it is available OpenVMS optimized (and tested) source code from:
ftp://ftp.polarhome.com/pub/vim/source/vms/
(http://www.polarhome.com/vim/files/source/vms/)

Current OpenVMS source code as .zip or .tar.gz file is possible to download
from CVS mirror ftp://ftp.polarhome.com/pub/cvs/SOURCE/
(http://www.polarhome.com/cvs/SOURCE/)

2.   Configuration

2.1. Edit vim-X.X/src/feature.h for your preference.  (You can skip
     this, then you will get the default behavior as is documented,
     which should be fine for most people.)

     For example, if you want to add the MULTI_BYTE feature, turn on
     #define MULTI_BYTE

2.2  Edit vim-X.X/src/Make_vms.mms to customize your Vim. Options are:

	Parameter name	: MODEL
	Description	: Build model selection
	Options:	: TINY	  - Almost no features enabled, not even
			  multiple windows
			  SMALL   - Few features enabled, as basic as possible
			  NORMAL  - A default selection of features enabled
			  BIG	  - Many features enabled, as rich as possible.
			  (OpenVMS default)
			  HUGE	  - All possible featues enabled.
			  Uncommented - will default to BIG
	Default		: MODEL = BIG

	Parameter name	: GUI
	Description	: GUI or terminal mode executable
	Options:	: YES - GUI executable
			  Uncommented - char only
	Default		: GUI = YES

	Parameter name	: GTK
	Description	: Enable GTK in GUI mode.
			  It enables features as toolbar etc.
	Options:	: YES - GTK executable
			  Uncommented - without GTK
	Default		: Uncommented

	Parameter name	: XPM
	Description	: Enable XPM libraries in GUI/Motif mode.
			  It enables features as toolbar etc.
	Options:	: YES - GUI executable
			  Uncommented - without XPM
	Default		: Uncommented

	Parameter name	: DECC
	Description	: Compiler selection
	Options:	: YES - DECC compiler
			  Uncommented - VAXC compiler
	Default		: DECC = YES

	Parameter name	: CCVER
	Description	: Compiler version with :ver command
	Options:	: YES - Compiler version info will be added
			  Uncommented - will not be added
	Default		: CCVER = YES

	Parameter name	: DEBUG
	Description	: Building a debug version
	Options:	: YES - debug version will be built
			  Uncommented - building normal executable
	Default		: Uncommented

	Parameter name	: VIM_TCL
	Description	: Add Tcl support
	Options:	: YES - Build with support
			  Uncommented - build without support.
	Default		: Uncommented

	Parameter name	: VIM_PERL
	Description	: Add Perl support
	Options:	: YES - Build with support
			  Uncommented - build without support.
	Default		: Uncommented

	Parameter name	: VIM_PYTHON
	Description	: Add Python support
	Options:	: YES - Build with support
			  Uncommented - build without support.
	Default		: Uncommented

	Parameter name	: VIM_XIM
	Description	: X Input Method. For entering special languages
			  like chinese and Japanese. Please define just
			  one: VIM_XIM or VIM_HANGULIN
	Options:	: YES - Build with support
			  Uncommented - build without support.
	Default		: Uncommented

	Parameter name	: VIM_HANGULIN
	Description	: Internal Hangul input method. GUI only.
			  Please define just one: VIM_XIM or VIM_HANGULIN
	Options:	: YES - Build with support
			  Uncommented - build without support.
	Default		: Uncommented

	Parameter name	: VIM_TAG_ANYWHITE
	Description	: Allow any white space to separate the fields in a
			  tags file
			  When not defined, only a TAB is allowed.
	Options:	: YES - Build with support
			  Uncommented - build without support.
	Default		: Uncommented

     You can edit the *_INC and *_LIB qualifiers, but it is really
     not recommended for beginners.

3. Compilation DECC

3.1. If you have MSS on your system, the command

	mms /descrip=Make_vms.mms

     will start building your own customized version of Vim.
     The adequate command for mmk is:

	mmk /descrip=Make_vms.mms

     NOTE: Because of empty /auto/config.h (needed for Unix configure) build
     will fail with very strange messages. Therefore before building, it is
     recommended to make one clean up, to prepare everything for OpenVMS
     development. The command is:

	mms /descrip=Make_vms.mms clean

4. Compilation VAXC

4.1. VAXC compiler is not fully ANSI C compatible in pre-processor directives
     semantics, therefore you have to use a converter program what will do the
     lion part of the job.

	@os_vms_fix.com *.c *.h <.proto>*.pro

     more information can be found in os_vms_fix.com file itself.

     NOTE: even if os_vms_fix.com will fix all pre-processor directives it will
     leave singe (long) line directives. You have to fix them manually.
     Known problematic files are option.h and option.c

4.2. After the conversion you can continue building as it has been described
     above.

5. CTAGS, XXD

5.1. MMS_VIM.EXE is building together with VIM.EXE, but for CTAGS.EXE and
     XXD.EXE you should change to subdirectory <.CTAGS> or <.XXD> and build
     them separately.

5.2. In these directories you can found one make file for VMS as well.
     Please read the detailed build instructions in the related *.MMS file.

6.   Deployment

6.1. Copy over all executables to the deployment directory.

6.2. Vim uses a special directory structure to hold the document and runtime
     files:

   vim (or wherever)
    |-- doc
    |-- syntax
    vimrc    (system rc files)
    gvimrc

6.3 Define logicals VIM

	define/nolog VIM device:[leading-path-here.vim]

     to get vim.exe to find its document, filetype, and syntax files.

     Now, if you are lucky you should have one own built, customized and
     working Vim.

7.   GTK and other features

7.1  General notes

     To be able to build external GUI or language support wyo have to enable
     related feature in MAKE_VMS.MMS file. Usually it need some extra tuning
     around include files, shared libraries etc.

     Please note, that leading "," are valuable for MMS/MMK syntax.

     MAKE_VMS.MMS uses defines as described below:

7.1.1   feature_DEF = ,"SOME_FEATURE"

     Submits definition to compiler preprocessor to enable code blocks
     defined with
     #ifdef SOME_FEATURE
     {some code here}
     #endif

     Example:  TCL_DEF = ,"FEAT_TCL"


7.1.2   feature_SRC = code1.c code2.c

     Defines source code related with particular feature.
     Example:  TCL_SRC = if_tcl.c

7.1.3   feature_OBJ = code1.obj code2.obj

     Lists objects created from source codes listed in feature_SRC
     Example: PERL_OBJ = if_perlsfio.obj if_perl.obj

7.1.4  feature_LIB = ,OS_VMS_TCL.OPT/OPT

     Defines the libraries that have to be used for build.
     If it is an OPT file then MAKE_VMS.MMS creates OPT files
     in gen_feature procedure.

     Example:
     PERL_LIB = ,OS_VMS_PERL.OPT/OPT

.IFDEF VIM_PERL
perl_env :
	-@ write sys$output "creating OS_VMS_PERL.OPT file."
	-@ open/write opt_file OS_VMS_PERL.OPT
	-@ write opt_file "PERLSHR /share"
	-@ close opt_file
.ELSE
perl_env :
	-@ !
.ENDIF


7.1.5  feature_INC = ,dka0:[tcl80.generic]

     Defines the directory where the necessary include files are.
     Example: TCL_INC = ,dka0:[tcl80.generic]

7.2  GTK

     To build VIM with GTK you have to install GTK on your OpenVMS.
     So far it works just on Alpha and IA64. More information at:
     http://www.openvms.compaq.com/openvms/products/ips/gtk.html

     You need also the OpenVMS Porting Library:
     http://www.openvms.compaq.com/openvms/products/ips/porting.html

     Source code for GTK and porting library that is used to build
     VMS executables at polarhome.com are at
     http://www.polarhome.com/vim/files/source/vms/

     Enable GTK in make_vms.mms file with GTK = YES
     Define GTK_ROOT that points to your GTK root directory.

     You will need to edit GTKDIR variable in order to point
     to GTK header files and libraries.

     GTK_DIR  = ALPHA$DKA0:[GTK128.]

     ".]" at the end is very important.

     Build it as normally.

     Used sharable images are:
	gtk_root:[glib]libglib.exe /share,-
	gtk_root:[glib.gmodule]libgmodule.exe /share,-
	gtk_root:[gtk.gdk]libgdk.exe /share,-
	gtk_root:[gtk.gtk]libgtk.exe /share

     During runtime it is suggested to have all these files installed and
     copied to SYS$LIBRARY: to be able to use it without problems.
     Also VMS_JACKETS.EXE from OpenVMS Porting Library.

     Please note, that GTK uses /name=(as_is,short)/float=ieee/ieee=denorm
     complier directives that is not compatible with "standard" VMS usage,
     therefore other external features might fail as PERL, PYTHON and TCL
     support.

7.3  PERL

     You have to install OpenVMS perl package from:
     http://www.openvms.compaq.com/openvms/products/ips/apache/csws_perl_relnotes.html or build on your own from sources downloaded from http://www.perl.org

     You need defined PERLSHR logical that points to PERL shareable image
     (or you can just copy over to SYS$LIBRARY:)

     Enable Perl feature at make_vms.mms with VIM_PERL = YES

     Edit PERL_INC = to point to perl includes directory where is extern.h

     Build as usually.

7.4  PYTHON

     You have to install an OpenVMS python package.
     Set up the normal Python work environment.

     You have to have defined PYTHON_INCLUDE and PYTHON_OLB logicals.
     PYTHON_INCLUDE should point to Python include files where for ex:
     python.h is located.
     Enable Python feature at make_vms.mms with VIM_PYTHON = YES

     Build as usually.

7.5  TCL

     You have to install an OpenVMS TCL package.
     Set up the normal TCL work environment.

     You have to have defined TCLSHR logical that points to shareable image.

     Enable TCL feature at make_vms.mms with VIM_TCL = YES

     Edit TCL_INC = to point to TCL includes directory where is tcl.h

     Build as usually.

8.   Notes

8.1. New Compaq C compiler

     If you are using Compaq C compiler V6.2 or newer, Informational messages
     of the type QUESTCOMPARE will be displayed. You should ignore those
     messages ; they are generated only because some test comparisons are done
     with variables which type vary depending on the OS. Under VMS, those are
     "unsigned" and the compiler issue a message whenever the comparison is
     done with '<=' to 0. However, the code is correct and will behave as
     expected.
     ( Jerome Lauret <JLAURET@mail.chem.sunysb.edu> Vim 6.0n )
	NOTE: from version 6.0ad Vim code has been reviewed and these warnings
	have been corrected.

9.   Authors

     Initial version, 2000 Jul 19, Zoltan Arpadffy <arpadffy@polarhome.com>
