# A-A-P recipe for building Vim
#
# There are no user choices in here!
# Put configure arguments in the file config.arg.
# Later there will be a config.txt file that contains examples and
# explanations.
#
# Optional arguments:
#  PREFIX=dir		Overrules the install directory.
#			Can be specified when installing only.
#			Example: aap install PREFIX=$HOME
#

# Skip the configure stuff when "link.sh" is executing this recipe recursively
# to build pathdef.c or not building something and auto/config.aap does exist.
@if ((_no.TARGETARG != "pathdef" and has_build_target())
@	or not os.path.exists("auto/config.aap")):

    #
    # A U T O C O N F
    #

    # Run autoconf when configure.in has been changed since it was last run.
    # This is skipped when the signatures in "mysign" are up-to-date.  When
    # there is no autoconf program skip this (the signature is often the only
    # thing that's outdated)
    auto/configure {signfile = mysign} : configure.in
	@if not program_path("autoconf"):
	    :print Can't find autoconf, using existing configure script.
	@else:
            # Move configure aside, autoconf would overwrite it
            :move {exist} configure configure.save
            :sys autoconf
            :cat configure | :eval re.sub('\\./config.log', 'auto/config.log', stdin) >! auto/configure
            :chmod 755 auto/configure
            :move configure.save configure
            :del {force} auto/config.cache auto/config.status

    # Change the configure script to produce config.aap instead of config.mk.
    auto/configure.aap : auto/configure
	:print Adjusting auto/configure for A-A-P.
	:cat auto/configure | :eval re.sub("config.mk", "config.aap", stdin)
							>! auto/configure.aap
	:chmod 755 auto/configure.aap

    # The configure script uses the directory where it's located, use a link.
    configure.aap:  {buildcheck=}
	:symlink {f} auto/configure.aap configure.aap

    # Dependency: run configure.aap to update config.h and config.aap in the
    # "auto" directory.
    config {virtual} auto/config.h auto/config.aap :
			 auto/configure.aap configure.aap
			 config.arg config.h.in config.aap.in
	:sys CONFIG_STATUS=auto/config.status
                ./configure.aap `file2string("config.arg")`
                    --cache-file=auto/config.cache

    # Configure arguments: create an empty "config.arg" file when its missing
    config.arg:
	:touch {exist} config.arg

    # "auto/config.aap" contains a lot of settings, such as the name of the
    # executable "Target".
    # First update it, forcefully if the "reconfig" target was used.
    @if _no.TARGETARG != "comment" and _no.TARGETARG != "make":
	@if "reconfig" in var2list(_no.TARGETARG):
	    :del {force} auto/config.cache auto/config.status
	    :update {force} auto/config.aap
	@else:
	    :update auto/config.aap

# Include the recipe that autoconf generated.
:include auto/config.aap

# A "PREFIX=dir" argument overrules the value of $prefix
@if _no.get("PREFIX"):
    prefix = $PREFIX

# Don't want "~/" in prefix.
prefix = `os.path.expanduser(prefix)`

#
# G U I  variant
#
# The GUI is selected by configure, a lot of other things depend on it.
#
:variant GUI
    GTK
	GUI_SRC		= gui.c gui_gtk.c gui_gtk_x11.c pty.c gui_beval.c
			    gui_gtk_f.c
	GUI_OBJ		=
	GUI_DEFS	= -DFEAT_GUI_GTK $NARROW_PROTO
	GUI_IPATH	= $GUI_INC_LOC
	GUI_LIBS_DIR	= $GUI_LIB_LOC
	GUI_LIBS1	=
	GUI_LIBS2	= $GTK_LIBNAME
	GUI_TARGETS	= installglinks
	GUI_MAN_TARGETS	= installghelplinks
	GUI_TESTTARGET	= gui
    KDE
        GUI_SRC		= gui.c pty.c gui_kde.cc gui_kde_x11.cc
                            gui_kde_wid_moc.cc
                            kvim_iface_skel.cc
        GUI_OBJ		= $BDIR/gui_kde_wid.o
        GUI_DEFS	= -DFEAT_GUI_KDE $NARROW_PROTO
        GUI_IPATH	= $GUI_INC_LOC
        GUI_LIBS_DIR	= $GUI_LIB_LOC
        GUI_LIBS1	=
        GUI_LIBS2	=
	GUI_TARGETS	= installglinks installkdeicons
	GUI_MAN_TARGETS	= installghelplinks
        GUI_TESTTARGET  = gui

    MOTIF
	GUI_SRC		= gui.c gui_motif.c gui_x11.c pty.c gui_beval.c
	GUI_OBJ		=
	GUI_DEFS	= -DFEAT_GUI_MOTIF $NARROW_PROTO
	GUI_IPATH	= $GUI_INC_LOC
	GUI_LIBS_DIR	= $GUI_LIB_LOC
	GUI_LIBS1	=
	GUI_LIBS2	= $MOTIF_LIBNAME -lXt
	GUI_TARGETS	= installglinks
	GUI_MAN_TARGETS	= installghelplinks
	GUI_TESTTARGET	= gui
    ATHENA
	# XAW_LIB et al. can be overruled to use Xaw3d widgets
	XAW_LIB		?= -lXaw
	GUI_SRC		=  gui.c gui_athena.c gui_x11.c pty.c gui_beval.c \
			    gui_at_sb.c gui_at_fs.c
	GUI_OBJ		=
	GUI_DEFS	= -DFEAT_GUI_ATHENA $NARROW_PROTO
	GUI_IPATH	= $GUI_INC_LOC
	GUI_LIBS_DIR	= $GUI_LIB_LOC
	GUI_LIBS1	= $XAW_LIB
	GUI_LIBS2	= -lXt
	GUI_TARGETS	= installglinks
	GUI_MAN_TARGETS	= installghelplinks
	GUI_TESTTARGET	= gui
    NEXTAW
	# XAW_LIB et al. can be overruled to use Xaw3d widgets
	XAW_LIB		?= -lXaw
	GUI_SRC		=  gui.c gui_athena.c gui_x11.c pty.c gui_beval.c
			    gui_at_fs.c
	GUI_OBJ		=
	GUI_DEFS	= -DFEAT_GUI_ATHENA -DFEAT_GUI_NEXTAW $NARROW_PROTO
	GUI_IPATH	= $GUI_INC_LOC
	GUI_LIBS_DIR	= $GUI_LIB_LOC
	GUI_LIBS1	= $NEXTAW_LIB
	GUI_LIBS2	= -lXt
	GUI_TARGETS	= installglinks
	GUI_MAN_TARGETS	= installghelplinks
	GUI_TESTTARGET	= gui
    BEOSGUI
	GUI_SRC		= gui.c gui_beos.cc pty.c
	GUI_OBJ		=
	GUI_DEFS	= -DFEAT_GUI_BEOS
	GUI_IPATH	=
	GUI_LIBS_DIR	=
	GUI_LIBS1	= -lbe -lroot
	GUI_LIBS2	=
	GUI_TARGETS	= installglinks
	GUI_MAN_TARGETS	= installghelplinks
	GUI_TESTTARGET	= gui
    PHOTONGUI
	GUI_SRC		= gui.c gui_photon.c pty.c
	GUI_OBJ		=
	GUI_DEFS	= -DFEAT_GUI_PHOTON
	GUI_IPATH	=
	GUI_LIBS_DIR	=
	GUI_LIBS1	= -lph -lphexlib
	GUI_LIBS2	=
	GUI_TARGETS	= installglinks
	GUI_MAN_TARGETS	= installghelplinks
	GUI_TESTTARGET	= gui
    *
	GUI_SRC		=
	GUI_OBJ		=
	GUI_DEFS	=
	GUI_IPATH	=
	GUI_LIBS_DIR	=
	GUI_LIBS1	=
	GUI_LIBS2	=
	GUI_TARGETS	=
	GUI_MAN_TARGETS	=
	GUI_TESTTARGET	=


PRE_DEFS = -Iproto -I. $DEFS $GUI_DEFS $GUI_IPATH $CPPFLAGS $?(EXTRA_IPATHS)
POST_DEFS = $X_CFLAGS $MZSCHEME_CFLAGS $PERL_CFLAGS $PYTHON_CFLAGS $TCL_CFLAGS $RUBY_CFLAGS $?(EXTRA_DEFS)
CFLAGS = $PRE_DEFS $CONF_CFLAGS $?(PROFILE_CFLAGS) $POST_DEFS
CPPFLAGS =
# Need C++ flags for KDE
CXXFLAGS = $CFLAGS

ALL_LIB_DIRS = $GUI_LIBS_DIR $X_LIBS_DIR
LDFLAGS = $ALL_LIB_DIRS $CONF_LDFLAGS
LIBS = $GUI_LIBS1 $GUI_X_LIBS $GUI_LIBS2 $X_PRE_LIBS $X_LIBS $X_EXTRA_LIBS $CONF_LIBS $?(EXTRA_LIBS) $MZSCHEME_LIBS $PERL_LIBS $PYTHON_LIBS $TCL_LIBS $RUBY_LIBS $?(PROFILE_LIBS)

Target = $VIMNAME

# reconfig target also builds Vim (reconfiguration is handled above).
reconfig {virtual}: $Target


# Execute the test scripts.  Run these after compiling Vim, before installing.
#
# This will produce a lot of garbage on your screen, including a few error
# messages.  Don't worry about that.
# If there is a real error, there will be a difference between "test.out" and
# a "test99.ok" file.
# If everything is allright, the final message will be "ALL DONE".
#
test check:
    VimProg = ../$Target
    :execute testdir/main.aap $GUI_TESTTARGET

testclean {virtual}:
    :del {force} testdir/*.out testdir/test.log

CLEANFILES += gui_kde_wid_moc.cc kvim_iface_skel.cc *.kidl

# When no fetch target exists we are not a child of the ../main.aap recipe,
# Use ../main.aap to do the fetching.
# --- If you get an error here for wrong number of arguments, you need to
#     update to a newer version of A-A-P.
@if not has_target("fetch"):
    fetch:
	:execute ../main.aap fetch


# All the source files that need to be compiled.
# Some are optional and depend on configure.
# "version.c" is missing, it's always compiled (see below).
Source =
	buffer.c
	charset.c
	diff.c
	digraph.c
	edit.c
	eval.c
	ex_cmds.c
	ex_cmds2.c
	ex_docmd.c
	ex_eval.c
	ex_getln.c
	fileio.c
	fold.c
	getchar.c
	if_cscope.c
	if_xcmdsrv.c
	main.c
	mark.c
	memfile.c
	memline.c
	menu.c
	message.c
	misc1.c
	misc2.c
	move.c
	mbyte.c
	normal.c
	ops.c
	option.c
	os_unix.c
	auto/pathdef.c
	quickfix.c
	regexp.c
	screen.c
	search.c
	syntax.c
	tag.c
	term.c
	ui.c
	undo.c
	window.c
	$OS_EXTRA_SRC
	$GUI_SRC
	$HANGULIN_SRC
        $MZSCHEME_SRC
	$PERL_SRC
	$NETBEANS_SRC
	$PYTHON_SRC
	$TCL_SRC
	$RUBY_SRC
	$SNIFF_SRC
	$WORKSHOP_SRC

Objects =
	$GUI_OBJ

# TODO: make is still used for subdirectories, need to write a recipe.
MAKE ?= make

all: $Target

# This dependency is required to build auto/osdef.h before automatic
# dependencies are generated.
$Source version.c : auto/osdef.h

# Need to mention that the target also depends on version.c, since it's not
# inluded in $Source
$Target : version.c

# Some sources are to be found in the "auto" directory.
SRCPATH += auto

# When building Vim always compile version.c to get the timestamp.
:filetype
    declare my_prog
:attr {filetype = my_prog} $Target

:program $Target : $Source $Objects

:action build my_prog object
	version_obj = `src2obj("version.c")`
	:do compile {target = $version_obj} version.c
	#:do build {target = $target {filetype = program}} $source $version_obj
	link_sed = $BDIR/link.sed
	@if os.path.exists(link_sed):
	    :move {force} $link_sed auto/link.sed
	@else:
	    :del {force} auto/link.sed
	:update link2.sh
	:sys LINK="$?(PURIFY) $?(SHRPENV) $CC $LDFLAGS \
		-o $target $source $version_obj $LIBS" \
		MAKE="aap" sh ./link2.sh
	:copy {force} auto/link.sed $BDIR/link.sed

# "link.sh" must be modified for A-A-P
link2.sh : link.sh
    :print Adjusting $-source for A-A-P.
    :cat $source | :eval re.sub("objects/pathdef.o", "pathdef", stdin)
								      >! $target

xxd/xxd$EXESUF: xxd/xxd.c
    :sys cd xxd; CC="$CC" CFLAGS="$CPPFLAGS $CFLAGS" \
	    $MAKE -f Makefile

# Build the language specific files if they were unpacked.
# Generate the converted .mo files separately, it's no problem if this fails.
languages {virtual}:
	@if _no.MAKEMO:
	    :sys cd $PODIR; CC="$CC" $MAKE prefix=$DESTDIR$prefix
	    @try:
		:sys cd $PODIR; CC="$CC" $MAKE prefix=$DESTDIR$prefix converted
	    @except:
		:print Generated converted language files failed, continuing

# Update the *.po files for changes in the sources.  Only run manually.
update-po {virtual}:
	cd $PODIR; CC="$CC" $MAKE prefix=$DESTDIR$prefix update-po

auto/if_perl.c: if_perl.xs
	:sys $PERL -e 'unless ( $$] >= 5.005 ) { for (qw(na defgv errgv)) { print "#define PL_$$_ $$_\n" }}' > $target
	:sys $PERL $PERLLIB/ExtUtils/xsubpp -prototypes -typemap \
	    $PERLLIB/ExtUtils/typemap if_perl.xs >> $target

$BDIR/gui_kde_wid.o: gui_kde_wid.cc
        :sys $MOC -o gui_kde_wid_moc.cc gui_kde_wid.h
        @try:
            :sys $KDE_PREFIX/bin/dcopidl kvim_iface.h > kvim_iface.kidl
        @except:
            :del {f} kvim_iface.kidl
        :sys $KDE_PREFIX/bin/dcopidl2cpp --c++-suffix cc --no-stub kvim_iface.kidl
        :do compile gui_kde_wid.cc

gui_kde_wid_moc.cc: $BDIR/gui_kde_wid.o

kvim_iface_skel.cc: $BDIR/gui_kde_wid.o


auto/osdef.h: auto/config.h osdef.sh osdef1.h.in osdef2.h.in
	:sys CC="$CC $CFLAGS" srcdir=$srcdir sh $srcdir/osdef.sh

pathdef {virtual} : $BDIR/auto/pathdef$OBJSUF

auto/pathdef.c: auto/config.aap
	:print Creating $target
	:print >! $target /* pathdef.c */
	:print >> $target /* This file is automatically created by main.aap */
	:print >> $target /* DO NOT EDIT!  Change main.aap only. */
	:print >> $target $#include "vim.h"
	:print >> $target char_u *default_vim_dir = (char_u *)"$VIMRCLOC";
	:print >> $target char_u *default_vimruntime_dir = (char_u *)"$?VIMRUNTIMEDIR";
	v = $CC -c -I$srcdir $CFLAGS
        @v = string.replace(v, '"', '\\"')
	:print >> $target char_u *all_cflags = (char_u *)"$v";
	linkcmd = $CC $LDFLAGS -o $VIMTARGET $LIBS
	link_sed = $BDIR/link.sed
	@if os.path.exists(link_sed):
	    # filter $linkcmd through $BDIR/link.sed
	    :print $linkcmd | :syseval sed -f $link_sed | :eval re.sub("\n", "", stdin) | :assign linkcmd
        @linkcmd = string.replace(linkcmd, '"', '\\"')
	:print >> $target char_u *all_lflags = (char_u *)"$linkcmd";
	@if _no.get("COMPILEDBY"):
	    who = $COMPILEDBY
	    where = ''
	@else:
	    :syseval whoami | :eval re.sub("\n", "", stdin) | :assign who

	    :syseval hostname | :eval re.sub("\n", "", stdin) | :assign where
	:print >> $target char_u *compiled_user = (char_u *)"$who";
	:print >> $target char_u *compiled_sys = (char_u *)"$where";


### Names of the programs and targets
VIMTARGET	= $VIMNAME$EXESUF
EXTARGET	= $EXNAME$LNKSUF
VIEWTARGET	= $VIEWNAME$LNKSUF
GVIMNAME	= g$VIMNAME
GVIMTARGET	= $GVIMNAME$LNKSUF
GVIEWNAME	= g$VIEWNAME
GVIEWTARGET	= $GVIEWNAME$LNKSUF
RVIMNAME	= r$VIMNAME
RVIMTARGET	= $RVIMNAME$LNKSUF
RVIEWNAME	= r$VIEWNAME
RVIEWTARGET	= $RVIEWNAME$LNKSUF
RGVIMNAME	= r$GVIMNAME
RGVIMTARGET	= $RGVIMNAME$LNKSUF
RGVIEWNAME	= r$GVIEWNAME
RGVIEWTARGET	= $RGVIEWNAME$LNKSUF
VIMDIFFNAME	= $(VIMNAME)diff
GVIMDIFFNAME	= g$VIMDIFFNAME
VIMDIFFTARGET	= $VIMDIFFNAME$LNKSUF
GVIMDIFFTARGET	= $GVIMDIFFNAME$LNKSUF
EVIMNAME	= e$VIMNAME
EVIMTARGET	= $EVIMNAME$LNKSUF
EVIEWNAME	= e$VIEWNAME
EVIEWTARGET	= $EVIEWNAME$LNKSUF

### Names of the tools that are also made
TOOLS = xxd/xxd$EXESUF

# Root of the installation tree.  Empty for a normal install, set to an
# existing path to install into a special place (for generating a package).
DESTDIR ?=

### Location of man pages
MANSUBDIR = $MANDIR/man1

### Location of Vim files (should not need to be changed, and
### some things might not work when they are changed!)
VIMDIR = /vim
@r = re.compile('.*VIM_VERSION_NODOT\\s*"(vim\\d\\d[^"]*)".*', re.S)
VIMRTDIR = /`r.match(open("version.h").read()).group(1)`
HELPSUBDIR = /doc
COLSUBDIR = /colors
SYNSUBDIR = /syntax
INDSUBDIR = /indent
PLUGSUBDIR = /plugin
FTPLUGSUBDIR = /ftplugin
LANGSUBDIR = /lang
COMPSUBDIR = /compiler
KMAPSUBDIR = /keymap
MACROSUBDIR = /macros
TOOLSSUBDIR = /tools
TUTORSUBDIR = /tutor
PRINTSUBDIR = /print
PODIR = po

### VIMLOC	common root of the Vim files (all versions)
### VIMRTLOC	common root of the runtime Vim files (this version)
### VIMRCLOC	compiled-in location for global [g]vimrc files (all versions)
### VIMRUNTIMEDIR  compiled-in location for runtime files (optional)
### HELPSUBLOC	location for help files
### COLSUBLOC	location for colorscheme files
### SYNSUBLOC	location for syntax files
### INDSUBLOC	location for indent files
### PLUGSUBLOC	location for standard plugin files
### FTPLUGSUBLOC  location for ftplugin files
### LANGSUBLOC	location for language files
### COMPSUBLOC	location for compiler files
### KMAPSUBLOC	location for keymap files
### MACROSUBLOC	location for macro files
### TOOLSSUBLOC	location for tools files
### TUTORSUBLOC	location for tutor files
### PRINTSUBLOC	location for print files
### SCRIPTLOC	location for script files (menu.vim, bugreport.vim, ..)
### You can override these if you want to install them somewhere else.
### Edit feature.h for compile-time settings.
VIMLOC		= $DATADIR$VIMDIR
VIMRTLOC	= $DATADIR$VIMDIR$VIMRTDIR
VIMRCLOC	= $VIMLOC
HELPSUBLOC	= $VIMRTLOC$HELPSUBDIR
COLSUBLOC	= $VIMRTLOC$COLSUBDIR
SYNSUBLOC	= $VIMRTLOC$SYNSUBDIR
INDSUBLOC	= $VIMRTLOC$INDSUBDIR
PLUGSUBLOC	= $VIMRTLOC$PLUGSUBDIR
FTPLUGSUBLOC	= $VIMRTLOC$FTPLUGSUBDIR
LANGSUBLOC	= $VIMRTLOC$LANGSUBDIR
COMPSUBLOC	= $VIMRTLOC$COMPSUBDIR
KMAPSUBLOC	= $VIMRTLOC$KMAPSUBDIR
MACROSUBLOC	= $VIMRTLOC$MACROSUBDIR
TOOLSSUBLOC	= $VIMRTLOC$TOOLSSUBDIR
TUTORSUBLOC	= $VIMRTLOC$TUTORSUBDIR
PRINTSUBLOC	= $VIMRTLOC$PRINTSUBDIR
SCRIPTLOC	= $VIMRTLOC

### Only set VIMRUNTIMEDIR when VIMRTLOC is set to a different location and
### the runtime directory is not below it.
#VIMRUNTIMEDIR = $VIMRTLOC

### Name of the evim file target.
EVIM_FILE	= $DESTDIR$SCRIPTLOC/evim.vim
MSWIN_FILE	= $DESTDIR$SCRIPTLOC/mswin.vim

### Name of the menu file target.
SYS_MENU_FILE	= $DESTDIR$SCRIPTLOC/menu.vim
SYS_SYNMENU_FILE = $DESTDIR$SCRIPTLOC/synmenu.vim
SYS_DELMENU_FILE = $DESTDIR$SCRIPTLOC/delmenu.vim

### Name of the bugreport file target.
SYS_BUGR_FILE	= $DESTDIR$SCRIPTLOC/bugreport.vim

### Name of the file type detection file target.
SYS_FILETYPE_FILE = $DESTDIR$SCRIPTLOC/filetype.vim

### Name of the file type detection file target.
SYS_FTOFF_FILE	= $DESTDIR$SCRIPTLOC/ftoff.vim

### Name of the file type detection script file target.
SYS_SCRIPTS_FILE = $DESTDIR$SCRIPTLOC/scripts.vim

### Name of the ftplugin-on file target.
SYS_FTPLUGIN_FILE = $DESTDIR$SCRIPTLOC/ftplugin.vim

### Name of the ftplugin-off file target.
SYS_FTPLUGOF_FILE = $DESTDIR$SCRIPTLOC/ftplugof.vim

### Name of the indent-on file target.
SYS_INDENT_FILE = $DESTDIR$SCRIPTLOC/indent.vim

### Name of the indent-off file target.
SYS_INDOFF_FILE = $DESTDIR$SCRIPTLOC/indoff.vim

### Name of the option window script file target.
SYS_OPTWIN_FILE = $DESTDIR$SCRIPTLOC/optwin.vim

### Permissions for binaries
BINMOD = 755

### Permissions for man page
MANMOD = 644

### Permissions for help files
HELPMOD = 644

### Permissions for Perl and shell scripts
SCRIPTMOD = 755

### Permission for Vim script files (menu.vim, bugreport.vim, ..)
VIMSCRIPTMOD = 644

### Permissions for all directories that are created
DIRMOD = 755

### Permissions for all other files that are created
FILEMOD = 644

# Where to copy the man and help files from
HELPSOURCE = ../runtime/doc

# Where to copy the script files from (menu, bugreport)
SCRIPTSOURCE = ../runtime

# Where to copy the colorscheme files from
COLSOURCE = ../runtime/colors

# Where to copy the syntax files from
SYNSOURCE = ../runtime/syntax

# Where to copy the indent files from
INDSOURCE = ../runtime/indent

# Where to copy the standard plugin files from
PLUGSOURCE = ../runtime/plugin

# Where to copy the ftplugin files from
FTPLUGSOURCE = ../runtime/ftplugin

# Where to copy the macro files from
MACROSOURCE = ../runtime/macros

# Where to copy the tools files from
TOOLSSOURCE = ../runtime/tools

# Where to copy the tutor files from
TUTORSOURCE = ../runtime/tutor

# Where to look for language specific files
LANGSOURCE = ../runtime/lang

# Where to look for compiler files
COMPSOURCE = ../runtime/compiler

# Where to look for keymap files
KMAPSOURCE = ../runtime/keymap

# Where to look for print resource files
PRINTSOURCE = ../runtime/print

# abbreviations
DEST_BIN = $DESTDIR$BINDIR
DEST_VIM = $DESTDIR$VIMLOC
DEST_RT = $DESTDIR$VIMRTLOC
DEST_HELP = $DESTDIR$HELPSUBLOC
DEST_COL = $DESTDIR$COLSUBLOC
DEST_SYN = $DESTDIR$SYNSUBLOC
DEST_IND = $DESTDIR$INDSUBLOC
DEST_PLUG = $DESTDIR$PLUGSUBLOC
DEST_FTP = $DESTDIR$FTPLUGSUBLOC
DEST_LANG = $DESTDIR$LANGSUBLOC
DEST_COMP = $DESTDIR$COMPSUBLOC
DEST_KMAP = $DESTDIR$KMAPSUBLOC
DEST_MACRO = $DESTDIR$MACROSUBLOC
DEST_TOOLS = $DESTDIR$TOOLSSUBLOC
DEST_TUTOR = $DESTDIR$TUTORSUBLOC
DEST_SCRIPT = $DESTDIR$SCRIPTLOC
DEST_PRINT = $DESTDIR$PRINTSUBLOC
DEST_MAN = $DESTDIR$MANSUBDIR

# These are directories, create them when needed.
:attr {directory = $DIRMOD} $DEST_BIN $DEST_VIM $DEST_RT $DEST_HELP $DEST_COL
		$DEST_SYN $DEST_IND $DEST_PLUG $DEST_FTP $DEST_LANG
		$DEST_COMP $DEST_KMAP $DEST_MACRO $DEST_TOOLS $DEST_TUTOR
		$DEST_SCRIPT $DEST_PRINT $DEST_MAN

#
# I N S T A L L
#
install:
    @if not os.path.isdir(_no.DEST_BIN):
        @try:
            :mkdir $DEST_BIN
        @except:
        @   pass
    @if os.access(_no.DEST_BIN, os.W_OK):
        # Bin directory is writable, install directly.
        :update installvim installtools install-languages install-icons
    @else:
        # Bin directory is not writable, need to become root.
	:print The destination directory "$DEST_BIN" is not writable.
	:print If this is the wrong directory, use PREFIX to specify another one.
        :print Otherwise, type the root password to continue installing.
        :asroot $AAP install

installvim {virtual}: installvimbin installruntime installlinks \
			installhelplinks installmacros installtutor

installvimbin {virtual}{force}: $Target $DEST_BIN
	exe = $DEST_BIN/$VIMTARGET
	@if os.path.exists(exe):
	    # Move the old executable aside and delete it.  Any other method
	    # may cause a crash if the executable is currently being used.
	    :move {force} $exe $(exe).rm
	    :del {force} $(exe).rm
	:copy $VIMTARGET $DEST_BIN
	:do strip $exe
	:chmod $BINMOD $DEST_BIN/$VIMTARGET
# may create a link to the new executable from /usr/bin/vi
	@if _no.get("LINKIT"):
	    :sys $LINKIT

# install the help files; first adjust the contents for the location
installruntime {virtual}{force}: $HELPSOURCE/vim.1 $DEST_MAN $DEST_VIM
		$DEST_RT $DEST_HELP $DEST_COL $DEST_SYN $DEST_IND
		$DEST_FTP $DEST_PLUG $DEST_TUTOR $DEST_COMP $DEST_PRINT
	:print generating $DEST_MAN/$(VIMNAME).1
	:cat $HELPSOURCE/vim.1 |
		:eval re.sub("/usr/local/lib/vim", _no.VIMLOC, stdin) |
		:eval re.sub(_no.VIMLOC + "/doc", _no.HELPSUBLOC, stdin) |
		:eval re.sub(_no.VIMLOC + "/syntax", _no.SYNSUBLOC, stdin) |
		:eval re.sub(_no.VIMLOC + "/tutor", _no.TUTORSUBLOC, stdin) |
		:eval re.sub(_no.VIMLOC + "/vimrc",
					       _no.VIMRCLOC + "/vimrc", stdin) |
		:eval re.sub(_no.VIMLOC + "/gvimrc",
					      _no.VIMRCLOC + "/gvimrc", stdin) |
		:eval re.sub(_no.VIMLOC + "/menu.vim",
					   _no.SCRIPTLOC + "/menu.vim", stdin) |
		:eval re.sub(_no.VIMLOC + "/bugreport.vim",
				      _no.SCRIPTLOC + "/bugreport.vim", stdin) |
		:eval re.sub(_no.VIMLOC + "/filetype.vim",
				       _no.SCRIPTLOC + "/filetype.vim", stdin) |
		:eval re.sub(_no.VIMLOC + "/ftoff.vim",
					  _no.SCRIPTLOC + "/ftoff.vim", stdin) |
		:eval re.sub(_no.VIMLOC + "/scripts.vim",
					_no.SCRIPTLOC + "/scripts.vim", stdin) |
		:eval re.sub(_no.VIMLOC + "/optwin.vim",
					 _no.SCRIPTLOC + "/optwin.vim", stdin) |
		:eval re.sub(_no.VIMLOC + "/\\*.ps",
						 _no.SCRIPTLOC + "/*.ps", stdin)
		>! $DEST_MAN/$(VIMNAME).1
	:chmod $MANMOD $DEST_MAN/$(VIMNAME).1

	:print generating $DEST_MAN/$(VIMNAME)tutor.1
	:cat $HELPSOURCE/vimtutor.1 |
		:eval re.sub("/usr/local/lib/vim", _no.VIMLOC, stdin) |
		:eval re.sub(_no.VIMLOC + "/tutor", _no.TUTORSUBLOC, stdin)
		>! $DEST_MAN/$(VIMNAME)tutor.1
	:chmod $MANMOD $DEST_MAN/$(VIMNAME)tutor.1

	:copy $HELPSOURCE/vimdiff.1 $DEST_MAN/$(VIMDIFFNAME).1
	:chmod $MANMOD $DEST_MAN/$(VIMDIFFNAME).1

	:print generating $DEST_MAN/$(EVIMNAME).1
	:cat $HELPSOURCE/evim.1 |
		:eval re.sub("/usr/local/lib/vim", _no.SCRIPTLOC, stdin)
		>! $DEST_MAN/$(EVIMNAME).1
	:chmod $MANMOD $DEST_MAN/$(EVIMNAME).1

        :cd $HELPSOURCE
        @try:
            XTRA = `glob.glob("*.??x")` `glob.glob("tags-??")`
        @except:
            XTRA =       # It's OK if there are no matches.
	:copy *.txt tags $XTRA $DEST_HELP
        :cd -
        :cd $DEST_HELP
	:chmod $HELPMOD *.txt tags $XTRA
        :cd -
	:copy  $HELPSOURCE/*.pl $DEST_HELP
	:chmod $SCRIPTMOD $DEST_HELP/*.pl
# install the menu files
	:copy $SCRIPTSOURCE/menu.vim $SYS_MENU_FILE
	:chmod $VIMSCRIPTMOD $SYS_MENU_FILE
	:copy $SCRIPTSOURCE/synmenu.vim $SYS_SYNMENU_FILE
	:chmod $VIMSCRIPTMOD $SYS_SYNMENU_FILE
	:copy $SCRIPTSOURCE/delmenu.vim $SYS_DELMENU_FILE
	:chmod $VIMSCRIPTMOD $SYS_DELMENU_FILE
# install the evim file
	:copy $SCRIPTSOURCE/mswin.vim $MSWIN_FILE
	:chmod $VIMSCRIPTMOD $MSWIN_FILE
	:copy $SCRIPTSOURCE/evim.vim $EVIM_FILE
	:chmod $VIMSCRIPTMOD $EVIM_FILE
# install the bugreport file
	:copy $SCRIPTSOURCE/bugreport.vim $SYS_BUGR_FILE
	:chmod $VIMSCRIPTMOD $SYS_BUGR_FILE
# install the example vimrc files
	:copy $SCRIPTSOURCE/vimrc_example.vim $DEST_SCRIPT
	:chmod $VIMSCRIPTMOD $DEST_SCRIPT/vimrc_example.vim
	:copy $SCRIPTSOURCE/gvimrc_example.vim $DEST_SCRIPT
	:chmod $VIMSCRIPTMOD $DEST_SCRIPT/gvimrc_example.vim
# install the file type detection files
	:copy $SCRIPTSOURCE/filetype.vim $SYS_FILETYPE_FILE
	:chmod $VIMSCRIPTMOD $SYS_FILETYPE_FILE
	:copy $SCRIPTSOURCE/ftoff.vim $SYS_FTOFF_FILE
	:chmod $VIMSCRIPTMOD $SYS_FTOFF_FILE
	:copy $SCRIPTSOURCE/scripts.vim $SYS_SCRIPTS_FILE
	:chmod $VIMSCRIPTMOD $SYS_SCRIPTS_FILE
	:copy $SCRIPTSOURCE/ftplugin.vim $SYS_FTPLUGIN_FILE
	:chmod $VIMSCRIPTMOD $SYS_FTPLUGIN_FILE
	:copy $SCRIPTSOURCE/ftplugof.vim $SYS_FTPLUGOF_FILE
	:chmod $VIMSCRIPTMOD $SYS_FTPLUGOF_FILE
	:copy $SCRIPTSOURCE/indent.vim $SYS_INDENT_FILE
	:chmod $VIMSCRIPTMOD $SYS_INDENT_FILE
	:copy $SCRIPTSOURCE/indoff.vim $SYS_INDOFF_FILE
	:chmod $VIMSCRIPTMOD $SYS_INDOFF_FILE
	:copy $SCRIPTSOURCE/optwin.vim $SYS_OPTWIN_FILE
	:chmod $VIMSCRIPTMOD $SYS_OPTWIN_FILE
# install the print resource files
	:copy $PRINTSOURCE/*.ps $DEST_PRINT
	:chmod $FILEMOD $DEST_PRINT/*.ps
# install the colorscheme files
	:copy $COLSOURCE/*.vim $COLSOURCE/README.txt $DEST_COL
	:chmod $HELPMOD $DEST_COL/*.vim $DEST_COL/README.txt
# install the syntax files
	:copy $SYNSOURCE/*.vim $SYNSOURCE/README.txt $DEST_SYN
	:chmod $HELPMOD $DEST_SYN/*.vim $DEST_SYN/README.txt
# install the indent files
	:copy $INDSOURCE/*.vim $INDSOURCE/README.txt $DEST_IND
	:chmod $HELPMOD $DEST_IND/*.vim
# install the standard plugin files
	:copy $PLUGSOURCE/*.vim $PLUGSOURCE/README.txt $DEST_PLUG
	:chmod $HELPMOD $DEST_PLUG/*.vim $DEST_PLUG/README.txt
# install the ftplugin files
	:copy $FTPLUGSOURCE/*.vim $FTPLUGSOURCE/README.txt $DEST_FTP
	:chmod $HELPMOD $DEST_FTP/*.vim $DEST_FTP/README.txt
# install the compiler files
	:copy $COMPSOURCE/*.vim $COMPSOURCE/README.txt $DEST_COMP
	:chmod $HELPMOD $DEST_COMP/*.vim $DEST_COMP/README.txt

installmacros {virtual}{force}: $MACROSOURCE $DEST_VIM $DEST_RT $DEST_MACRO
	:copy {recursive}{force} $MACROSOURCE/* $DEST_MACRO
	# Delete any CVS and AAPDIR directories.
	# Use the ":tree" command if possible.  It was added later, fall back
	# to using "find" when it doesn't work.
	@try:
	   :tree $DEST_MACRO {dirname = CVS}
	      :del {recursive} $name
	   :tree $DEST_MACRO {dirname = AAPDIR}
	      :del {recursive} $name
	   :tree $DEST_MACRO {dirname = .*}
	      :chmod $DIRMOD $name
	   :tree $DEST_MACRO {filename = .*}
	      :chmod $FILEMOD $name
	@except:
	@  ok, cvsdirs = redir_system('find %s -name CVS -print' % _no.DEST_MACRO)
	@  if ok and cvsdirs:
	     :del {recursive} $cvsdirs
	   :sys chmod $DIRMOD ``find $DEST_MACRO -type d -print``
	   :sys chmod $FILEMOD ``find $DEST_MACRO -type f -print``
	:chmod $SCRIPTMOD $DEST_MACRO/less.sh

# install the tutor files
installtutor {virtual}{force}: $TUTORSOURCE $DEST_VIM $DEST_RT $DEST_TUTOR
	:copy vimtutor $DEST_BIN/$(VIMNAME)tutor
	:chmod $SCRIPTMOD $DEST_BIN/$(VIMNAME)tutor
	:copy $TUTORSOURCE/tutor* $TUTORSOURCE/README* $DEST_TUTOR
	:chmod $HELPMOD $DEST_TUTOR/*

# install helper program xxd
installtools {virtual}{force}: $TOOLS $DEST_BIN $DEST_MAN \
		$TOOLSSOURCE $DEST_VIM $DEST_RT $DEST_TOOLS
	xxd = $DEST_BIN/xxd$EXESUF
	@if os.path.exists(xxd):
	  :move {force} $xxd $(xxd).rm
	  :del $(xxd).rm
	:copy xxd/xxd$EXESUF $DEST_BIN
	:do strip $DEST_BIN/xxd$EXESUF
	:chmod $BINMOD $DEST_BIN/xxd$EXESUF
	:copy $HELPSOURCE/xxd.1 $DEST_MAN
	:chmod $MANMOD $DEST_MAN/xxd.1
# install the runtime tools
	@try:
	@  if aap_has(":tree"):
	      # New method: copy everything and delete CVS and AAPDIR dirs
	      :copy {recursive} $TOOLSSOURCE/* $DEST_TOOLS
	      :tree $DEST_TOOLS {dirname = CVS}
		 :delete {recursive} $name
	      :tree $DEST_TOOLS {dirname = AAPDIR}
		 :delete {recursive} $name
	@except:
	    # Old method: copy only specific files and directories.
	    :copy {recursive} $TOOLSSOURCE/README.txt $TOOLSSOURCE/[a-z]* $DEST_TOOLS
	:chmod $FILEMOD $DEST_TOOLS/*
# replace the path in some tools
	:progsearch perlpath perl
	@if perlpath:
	    :cat $TOOLSSOURCE/efm_perl.pl |
		    :eval re.sub("/usr/bin/perl", perlpath, stdin)
		    >! $DEST_TOOLS/efm_perl.pl
	@else:
	    :copy $TOOLSSOURCE/efm_perl.pl $DEST_TOOLS

	:progsearch awkpath nawk gawk awk
	@if awkpath:
	    :cat $TOOLSSOURCE/mve.awk |
		    :eval re.sub("/usr/bin/nawk", awkpath, stdin)
		    >! $DEST_TOOLS/mve.awk
	@else:
	    :copy $TOOLSSOURCE/mve.awk $DEST_TOOLS

	:sys chmod $SCRIPTMOD ``grep -l "^#!" $DEST_TOOLS/*``

# install the language specific files, if they were unpacked
install-languages {virtual}{force}: languages $DEST_LANG $DEST_KMAP
	@if _no.MAKEMO:
	   :sys cd $PODIR; $MAKE prefix=$DESTDIR$prefix \
		    LOCALEDIR=$DEST_LANG INSTALL_DATA=cp FILEMOD=$FILEMOD install
	@if os.path.exists(_no.LANGSOURCE):
	   :print installing language files
	   :copy $LANGSOURCE/README.txt $LANGSOURCE/*.vim $DEST_LANG
	   :chmod $FILEMOD $DEST_LANG/*.vim
	@if os.path.exists(_no.KMAPSOURCE):
	   :copy $KMAPSOURCE/README.txt $KMAPSOURCE/*.vim $DEST_KMAP
	   :chmod $FILEMOD $DEST_KMAP/*.vim

# Install the icons for the KDE GUI.  This differs from the KDE icons for
# other GUIs.
installkdeicons:
        :copy {mkdir} ../runtime/KVim.desktop $DESTDIR$KDE_PREFIX/share/applnk/Editors/
        :chmod 644 $DESTDIR$KDE_PREFIX/share/applnk/Editors/KVim.desktop
        :copy {mkdir} ../runtime/kvim32x32.png $DESTDIR$KDE_PREFIX/share/icons/hicolor/32x32/apps/gvim.png
        :chmod 644 $DESTDIR$KDE_PREFIX/share/icons/hicolor/32x32/apps/gvim.png
        :copy {mkdir} ../runtime/kvim48x48.png $DESTDIR$KDE_PREFIX/share/icons/hicolor/48x48/apps/gvim.png
        :chmod 644 $DESTDIR$KDE_PREFIX/share/icons/hicolor/48x48/apps/gvim.png
        :copy {mkdir} ../runtime/hi16-action-make.png $DESTDIR$KDE_PREFIX/share/icons/hicolor/16x16/actions/hi16-action-make.png
        :copy {mkdir} ../runtime/hi22-action-make.png $DESTDIR$KDE_PREFIX/share/icons/hicolor/22x22/actions/hi22-action-make.png
        :copy {mkdir} ../runtime/kde-tips $DESTDIR$KDE_PREFIX/share/apps/gvim/tips
        :chmod 644 $DESTDIR$KDE_PREFIX/share/apps/kvim/tips

# install the icons for KDE, if the directory exists and the icon doesn't.
ICON48PATH = $DESTDIR$DATADIR/icons/hicolor/48x48/apps
ICON32PATH = $DESTDIR$DATADIR/icons/locolor/32x32/apps
ICON16PATH = $DESTDIR$DATADIR/icons/locolor/16x16/apps
KDEPATH = $HOME/.kde/share/icons
install-icons {virtual}:
	gp = $ICON48PATH/gvim.png
	@if os.path.isdir(_no.ICON48PATH) and not os.path.exists(gp):
	   :copy $SCRIPTSOURCE/vim48x48.png $gp
	gp = $ICON32PATH/gvim.png
	@if os.path.isdir(_no.ICON32PATH) and not os.path.exists(gp):
	   :copy $SCRIPTSOURCE/vim32x32.png $gp
	gp = $ICON16PATH/gvim.png
	@if os.path.isdir(_no.ICON16PATH) and not os.path.exists(gp):
	   :copy $SCRIPTSOURCE/vim16x16.png $gp


$HELPSOURCE/vim.1 $MACROSOURCE $TOOLSSOURCE:
	@if not os.path.exists(_no.TOOLSSOURCE):
	    :print Runtime files not found.
	    :error You need to unpack the runtime archive before running "make install".

# create links from various names to vim.  This is only done when the links
# (or executables with the same name) don't exist yet.
installlinks {virtual}: $GUI_TARGETS \
			$DEST_BIN/$EXTARGET \
			$DEST_BIN/$VIEWTARGET \
			$DEST_BIN/$RVIMTARGET \
			$DEST_BIN/$RVIEWTARGET \
			$INSTALLVIMDIFF

installglinks {virtual}: $DEST_BIN/$GVIMTARGET \
			$DEST_BIN/$GVIEWTARGET \
			$DEST_BIN/$RGVIMTARGET \
			$DEST_BIN/$RGVIEWTARGET \
			$DEST_BIN/$EVIMTARGET \
			$DEST_BIN/$EVIEWTARGET \
			$INSTALLGVIMDIFF

installvimdiff {virtual}: $DEST_BIN/$VIMDIFFTARGET
installgvimdiff {virtual}: $DEST_BIN/$GVIMDIFFTARGET

# These dependencies use an empty buildcheck so that they are only done when
# the target doesn't exist.
$DEST_BIN/$EXTARGET: {buildcheck = }
    :sys cd $DEST_BIN; ln -s $VIMTARGET $EXTARGET

$DEST_BIN/$VIEWTARGET: {buildcheck = }
    :sys cd $DEST_BIN; ln -s $VIMTARGET $VIEWTARGET

$DEST_BIN/$GVIMTARGET: {buildcheck = }
    :sys cd $DEST_BIN; ln -s $VIMTARGET $GVIMTARGET

$DEST_BIN/$GVIEWTARGET: {buildcheck = }
    :sys cd $DEST_BIN; ln -s $VIMTARGET $GVIEWTARGET

$DEST_BIN/$RVIMTARGET: {buildcheck = }
    :sys cd $DEST_BIN; ln -s $VIMTARGET $RVIMTARGET

$DEST_BIN/$RVIEWTARGET: {buildcheck = }
    :sys cd $DEST_BIN; ln -s $VIMTARGET $RVIEWTARGET

$DEST_BIN/$RGVIMTARGET: {buildcheck = }
    :sys cd $DEST_BIN; ln -s $VIMTARGET $RGVIMTARGET

$DEST_BIN/$RGVIEWTARGET: {buildcheck = }
    :sys cd $DEST_BIN; ln -s $VIMTARGET $RGVIEWTARGET

$DEST_BIN/$VIMDIFFTARGET: {buildcheck = }
    :sys cd $DEST_BIN; ln -s $VIMTARGET $VIMDIFFTARGET

$DEST_BIN/$GVIMDIFFTARGET: {buildcheck = }
    :sys cd $DEST_BIN; ln -s $VIMTARGET $GVIMDIFFTARGET

$DEST_BIN/$EVIMTARGET: {buildcheck = }
    :sys cd $DEST_BIN; ln -s $VIMTARGET $EVIMTARGET

$DEST_BIN/$EVIEWTARGET: {buildcheck = }
    :sys cd $DEST_BIN; ln -s $VIMTARGET $EVIEWTARGET

# create links for the manual pages with various names to vim.	This is only
# done when the links (or manpages with the same name) don't exist yet.
installhelplinks {virtual}: $GUI_MAN_TARGETS \
			$DEST_MAN/$(EXNAME).1 \
			$DEST_MAN/$(VIEWNAME).1 \
			$DEST_MAN/$(RVIMNAME).1 \
			$DEST_MAN/$(RVIEWNAME).1

installghelplinks {virtual}: $DEST_MAN/$(GVIMNAME).1 \
			$DEST_MAN/$(GVIEWNAME).1 \
			$DEST_MAN/$(RGVIMNAME).1 \
			$DEST_MAN/$(RGVIEWNAME).1 \
			$DEST_MAN/$(GVIMDIFFNAME).1 \
			$DEST_MAN/$(EVIEWNAME).1

$DEST_MAN/$(EXNAME).1: {buildcheck = }
    :sys cd $DEST_MAN; ln -s $(VIMNAME).1 $(EXNAME).1

$DEST_MAN/$(VIEWNAME).1: {buildcheck = }
    :sys cd $DEST_MAN; ln -s $(VIMNAME).1 $(VIEWNAME).1

$DEST_MAN/$(GVIMNAME).1: {buildcheck = }
    :sys cd $DEST_MAN; ln -s $(VIMNAME).1 $(GVIMNAME).1

$DEST_MAN/$(GVIEWNAME).1: {buildcheck = }
    :sys cd $DEST_MAN; ln -s $(VIMNAME).1 $(GVIEWNAME).1

$DEST_MAN/$(RVIMNAME).1: {buildcheck = }
    :sys cd $DEST_MAN; ln -s $(VIMNAME).1 $(RVIMNAME).1

$DEST_MAN/$(RVIEWNAME).1: {buildcheck = }
    :sys cd $DEST_MAN; ln -s $(VIMNAME).1 $(RVIEWNAME).1

$DEST_MAN/$(RGVIMNAME).1: {buildcheck = }
    :sys cd $DEST_MAN; ln -s $(VIMNAME).1 $(RGVIMNAME).1

$DEST_MAN/$(RGVIEWNAME).1: {buildcheck = }
    :sys cd $DEST_MAN; ln -s $(VIMNAME).1 $(RGVIEWNAME).1

$DEST_MAN/$(GVIMDIFFNAME).1: {buildcheck = }
    :sys cd $DEST_MAN; ln -s $(VIMDIFFNAME).1 $(GVIMDIFFNAME).1

$DEST_MAN/$(EVIEWNAME).1: {buildcheck = }
    :sys cd $DEST_MAN; ln -s $(EVIMNAME).1 $(EVIEWNAME).1

#
# U N I N S T A L L
#
uninstall {virtual}{force}: uninstall_runtime
    :del {force} $DEST_BIN/$VIMTARGET
    :del {force} $DEST_MAN/$(VIMNAME).1 $DEST_MAN/$(VIMNAME)tutor.1
    :del {force} $DEST_BIN/vimtutor
    :del {force} $DEST_BIN/xxd$EXESUF $DEST_MAN/xxd.1
    :del {force} $DEST_BIN/$EXTARGET $DEST_BIN/$VIEWTARGET
    :del {force} $DEST_BIN/$GVIMTARGET $DEST_BIN/$GVIEWTARGET
    :del {force} $DEST_BIN/$RVIMTARGET $DEST_BIN/$RVIEWTARGET
    :del {force} $DEST_BIN/$RGVIMTARGET $DEST_BIN/$RGVIEWTARGET
    :del {force} $DEST_BIN/$VIMDIFFTARGET $DEST_BIN/$GVIMDIFFTARGET
    :del {force} $DEST_BIN/$EVIMTARGET $DEST_BIN/$EVIEWTARGET
    :del {force} $DEST_MAN/$(EXNAME).1 $DEST_MAN/$(VIEWNAME).1
    :del {force} $DEST_MAN/$(GVIMNAME).1 $DEST_MAN/$(GVIEWNAME).1
    :del {force} $DEST_MAN/$(RVIMNAME).1 $DEST_MAN/$(RVIEWNAME).1
    :del {force} $DEST_MAN/$(RGVIMNAME).1 $DEST_MAN/$(RGVIEWNAME).1
    :del {force} $DEST_MAN/$(VIMDIFFNAME).1 $DEST_MAN/$(GVIMDIFFNAME).1
    :del {force} $DEST_MAN/$(EVIMNAME).1 $DEST_MAN/$(EVIEWNAME).1

# Note: "deldir" will fail if any files were added after "make install", that
# is intentionally: Keep files the user added.
uninstall_runtime {virtual}{force}:
    :del {force} $DEST_HELP/*.txt $DEST_HELP/tags $DEST_HELP/*.pl
    :del {force} $SYS_MENU_FILE $SYS_SYNMENU_FILE $SYS_DELMENU_FILE
    :del {force} $SYS_BUGR_FILE $EVIM_FILE $MSWIN_FILE
    :del {force} $DEST_SCRIPT/gvimrc_example.vim $DEST_SCRIPT/vimrc_example.vim
    :del {force} $SYS_FILETYPE_FILE $SYS_FTOFF_FILE $SYS_SCRIPTS_FILE
    :del {force} $SYS_INDOFF_FILE $SYS_INDENT_FILE
    :del {force} $SYS_FTPLUGOF_FILE $SYS_FTPLUGIN_FILE
    :del {force} $SYS_OPTWIN_FILE
    :del {force} $DEST_COL/*.vim $DEST_COL/README.txt
    :del {force} $DEST_SYN/*.vim $DEST_SYN/README.txt
    :del {force} $DEST_IND/*.vim $DEST_IND/README.txt
    :del {force} $DEST_PRINT/*.ps
    :del {force}{recursive} $DEST_MACRO
    :del {force}{recursive} $DEST_TUTOR
    :del {force}{recursive} $DEST_TOOLS
    :del {force}{recursive} $DEST_LANG
    :del {force}{recursive} $DEST_KMAP
    :del {force}{recursive} $DEST_COMP
    :deldir {force} $DEST_HELP $DEST_COL $DEST_SYN $DEST_IND
    :del {force}{recursive} $DEST_FTP/*.vim $DEST_FTP/README.txt
    :del {force} $DEST_PLUG/*.vim $DEST_PLUG/README.txt
    :deldir {force} $DEST_FTP $DEST_PLUG $DEST_PRINT $DEST_RT
#	This will fail when other Vim versions are installed, no worries.
    @try:
	:deldir $DEST_VIM
    @except:
	:print Cannot delete $DEST_VIM


# vim: sts=4 sw=4 :
