# 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_xmdlg.c gui_xmebw.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
    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
        hardcopy.c
	hashtable.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
	spell.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
AUTOSUBDIR = /autoload
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
### AUTOSUBLOC	location for standard autoload 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
AUTOSUBLOC	= $VIMRTLOC$AUTOSUBDIR
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
AUTOSOURCE = ../runtime/autoload

# 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_AUTO = $DESTDIR$AUTOSUBLOC
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_AUTO $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_AUTO $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 autoload files
	:copy $AUTOSOURCE/*.vim $AUTOSOURCE/README.txt $DEST_AUTO
	:chmod $HELPMOD $DEST_AUTO/*.vim $DEST_AUTO/README.txt
# 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_AUTO/*.vim $DEST_AUTO/README.txt
    :del {force} $DEST_PLUG/*.vim $DEST_PLUG/README.txt
    :deldir {force} $DEST_FTP $DEST_AUTO $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 :
