diff --git a/src/config.aap.in b/src/config.aap.in
deleted file mode 100644
index 34ddfa6..0000000
--- a/src/config.aap.in
+++ /dev/null
@@ -1,129 +0,0 @@
-# config.aap.in: recipe transformed into auto/config.aap by configure.
-
-VIMNAME		= @VIMNAME@
-EXNAME		= @EXNAME@
-VIEWNAME	= @VIEWNAME@
-
-CC		= @CC@
-DEFS		= @DEFS@
-CONF_CFLAGS	= @CFLAGS@
-CPPFLAGS	= @CPPFLAGS@
-srcdir		= @srcdir@
-VPATH		= @srcdir@
-CONF_LDFLAGS	= @LDFLAGS@
-CONF_LIBS	= @LIBS@
-TAGPRG		= @TAGPRG@
-
-CPP		= @CPP@
-CPP_MM		= @CPP_MM@
-X_CFLAGS	= @X_CFLAGS@
-X_LIBS_DIR	= @X_LIBS@
-X_PRE_LIBS	= @X_PRE_LIBS@
-X_EXTRA_LIBS	= @X_EXTRA_LIBS@
-X_LIBS		= @X_LIB@
-
-LUA_LIBS	= @LUA_LIBS@
-LUA_SRC		= @LUA_SRC@
-LUA_OBJ		= @LUA_OBJ@
-LUA_CFLAGS	= @LUA_CFLAGS@
-LUA_PRO		= @LUA_PRO@
-
-MZSCHEME_LIBS	= @MZSCHEME_LIBS@
-MZSCHEME_SRC	= @MZSCHEME_SRC@
-MZSCHEME_OBJ	= @MZSCHEME_OBJ@
-MZSCHEME_CFLAGS	= @MZSCHEME_CFLAGS@
-MZSCHEME_PRO	= @MZSCHEME_PRO@
-
-PERL		= @vi_cv_path_perl@
-PERLLIB		= @vi_cv_perllib@
-PERL_LIBS	= @PERL_LIBS@
-SHRPENV		= @shrpenv@
-PERL_SRC	= @PERL_SRC@
-PERL_OBJ	= @PERL_OBJ@
-PERL_PRO	= @PERL_PRO@
-PERL_CFLAGS	= @PERL_CFLAGS@
-
-PYTHON_SRC	= @PYTHON_SRC@
-PYTHON_OBJ	= @PYTHON_OBJ@
-PYTHON_CFLAGS	= @PYTHON_CFLAGS@
-PYTHON_LIBS	= @PYTHON_LIBS@
-
-TCL		= @vi_cv_path_tcl@
-TCL_SRC		= @TCL_SRC@
-TCL_OBJ		= @TCL_OBJ@
-TCL_PRO		= @TCL_PRO@
-TCL_CFLAGS	= @TCL_CFLAGS@
-TCL_LIBS	= @TCL_LIBS@
-
-HANGULIN_SRC	= @HANGULIN_SRC@
-HANGULIN_OBJ	= @HANGULIN_OBJ@
-
-WORKSHOP_SRC	= @WORKSHOP_SRC@
-WORKSHOP_OBJ	= @WORKSHOP_OBJ@
-
-NETBEANS_SRC	= @NETBEANS_SRC@
-NETBEANS_OBJ	= @NETBEANS_OBJ@
-CHANNEL_SRC	= @CHANNEL_SRC@
-CHANNEL_OBJ	= @CHANNEL_OBJ@
-
-RUBY		= @vi_cv_path_ruby@
-RUBY_SRC	= @RUBY_SRC@
-RUBY_OBJ	= @RUBY_OBJ@
-RUBY_PRO	= @RUBY_PRO@
-RUBY_CFLAGS	= @RUBY_CFLAGS@
-RUBY_LIBS	= @RUBY_LIBS@
-
-AWK		= @AWK@
-
-STRIP		= @STRIP@
-
-EXEEXT		= @EXEEXT@
-
-COMPILEDBY	= @compiledby@
-
-INSTALLVIMDIFF	= @dovimdiff@
-INSTALLGVIMDIFF	= @dogvimdiff@
-INSTALL_LANGS	= @INSTALL_LANGS@
-INSTALL_TOOL_LANGS	= @INSTALL_TOOL_LANGS@
-
-### Line break character as octal number for "tr"
-NL		= @line_break@
-
-### Top directory for everything
-#   Can be overruled with "PREFIX=dir", thus delay using it.
-prefix		= @prefix@
-
-### Top directory for the binary
-exec_prefix	$= @exec_prefix@
-
-### Prefix for location of data files
-BINDIR		$= @bindir@
-
-### For autoconf 2.60 and later (avoid a warning)
-datarootdir	$= @datarootdir@
-
-### Prefix for location of data files
-DATADIR		$= @datadir@
-
-### Prefix for location of man pages
-MANDIR		$= @mandir@
-
-### Do we have a GUI
-GUI		= @GUITYPE@
-NARROW_PROTO	= @NARROW_PROTO@
-GTK_LIBNAME	= @GTK_LIBNAME@
-MOTIF_LIBNAME	= @MOTIF_LIBNAME@
-GUI_INC_LOC	= @GUI_INC_LOC@
-GUI_LIB_LOC	= @GUI_LIB_LOC@
-GUI_X_LIBS	= @GUI_X_LIBS@
-
-### Any OS dependent extra source and object file
-OS_EXTRA_SRC	= @OS_EXTRA_SRC@
-OS_EXTRA_OBJ	= @OS_EXTRA_OBJ@
-
-### If the *.po files are to be translated to *.mo files.
-MAKEMO		= @MAKEMO@
-
-# Make sure that "make first" will run "make all" once configure has done its
-# work.  This is needed when using the Makefile in the top directory.
-first: all
diff --git a/src/main.aap b/src/main.aap
deleted file mode 100644
index 19bc97d..0000000
--- a/src/main.aap
+++ /dev/null
@@ -1,1228 +0,0 @@
-# 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
-#
-@if os.name != "posix":
-    :error Sorry, this recipe only works for Unix-like systems.
-
-# 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.ac 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.ac
-        @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) | :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.
-    # NOTE: we can only build for one architecture, because -MM doesn't work
-    # when building for both.
-    config {virtual} auto/config.h auto/config.aap :
-                         auto/configure.aap configure.aap
-                         config.arg config.h.in config.aap.in
-        # Use "uname -a" to detect the architecture of the system.
-        @ok, uname = redir_system('uname -a', 0)
-        @if string.find(uname, "i386") >= 0:
-        @   arch = "i386"
-        @else:
-        @   arch = "ppc"
-        :print Building for $arch system
-        config_args = `file2string("config.arg")`
-        :sys CONFIG_STATUS=auto/config.status
-                ./configure.aap $config_args
-                    --with-mac-arch=$arch
-                    --cache-file=auto/config.cache
-
-    # Configure arguments: create an empty "config.arg" file when it's 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
-
-# Unfortunately "-M" doesn't work when building for two architectures.  Switch
-# back to PPC only.
-@if string.find(_no.CPPFLAGS, "-arch i386 -arch ppc") >= 0:
-    CPPFLAGS = `string.replace(_no.CPPFLAGS, "-arch i386 -arch ppc", "-arch ppc")`
-
-# A "PREFIX=dir" argument overrules the value of $prefix
-# But don't use the default "/usr/local".
-@if _no.get("PREFIX") and _no.get("PREFIX") != '/usr/local':
-    prefix = $PREFIX
-
-# Don't want "~/" in prefix.
-prefix = `os.path.expanduser(prefix)`
-
-# For Mac.
-APPDIR = $(VIMNAME).app
-
-### 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
-
-#
-# 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_INSTALL     = install_normal
-        GUI_TARGETS     = installglinks
-        GUI_MAN_TARGETS = yes
-        GUI_TESTTARGET  = gui
-        GUI_BUNDLE      =
-        GUI_TESTARG     =
-    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_INSTALL     = install_normal
-        GUI_TARGETS     = installglinks
-        GUI_MAN_TARGETS = yes
-        GUI_TESTTARGET  = gui
-        GUI_BUNDLE      =
-        GUI_TESTARG     =
-    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_INSTALL     = install_normal
-        GUI_TARGETS     = installglinks
-        GUI_MAN_TARGETS = yes
-        GUI_TESTTARGET  = gui
-        GUI_BUNDLE      =
-        GUI_TESTARG     =
-    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_INSTALL     = install_normal
-        GUI_TARGETS     = installglinks
-        GUI_MAN_TARGETS = yes
-        GUI_TESTTARGET  = gui
-        GUI_BUNDLE      =
-        GUI_TESTARG     =
-    CARBONGUI
-        GUI_SRC         =  gui.c gui_mac.c pty.c
-        GUI_OBJ         =
-        GUI_DEFS        = -DFEAT_GUI_MAC -fno-common -fpascal-strings \
-                            -Wall -Wno-unknown-pragmas -mdynamic-no-pic -pipe
-        GUI_IPATH       = $GUI_INC_LOC
-        GUI_LIBS_DIR    = $GUI_LIB_LOC
-        GUI_LIBS1       = -framework Carbon
-        GUI_LIBS2       =
-        GUI_INSTALL     = install_macosx
-        GUI_TARGETS     = installglinks
-        GUI_MAN_TARGETS = yes
-        GUI_TESTTARGET  = gui
-        GUI_BUNDLE      = gui_bundle
-        GUI_TESTARG     = VIMPROG=../$(APPDIR)/Contents/MacOS/$(VIMTARGET)
-    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_INSTALL     = install_normal
-        GUI_TARGETS     = installglinks
-        GUI_MAN_TARGETS = yes
-        GUI_TESTTARGET  = gui
-        GUI_BUNDLE      =
-        GUI_TESTARG     =
-    *
-        GUI_SRC         =
-        GUI_OBJ         =
-        GUI_DEFS        =
-        GUI_IPATH       =
-        GUI_LIBS_DIR    =
-        GUI_LIBS1       =
-        GUI_LIBS2       =
-        GUI_INSTALL     = install_normal
-        GUI_TARGETS     =
-        GUI_MAN_TARGETS =
-        GUI_TESTTARGET  =
-        GUI_BUNDLE      =
-        GUI_TESTARG     =
-
-
-PRE_DEFS = -Iproto -I. $DEFS $GUI_DEFS $GUI_IPATH $CPPFLAGS $?(EXTRA_IPATHS)
-POST_DEFS = $X_CFLAGS $LUA_CFLAGS $MZSCHEME_CFLAGS $PERL_CFLAGS $PYTHON_CFLAGS $TCL_CFLAGS $RUBY_CFLAGS $?(EXTRA_DEFS)
-CFLAGS = $PRE_DEFS $CONF_CFLAGS $?(PROFILE_CFLAGS) $POST_DEFS
-CPPFLAGS =
-
-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) $LUA_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
-
-distclean: clean
-    :del {force} auto/config.h auto/config.aap
-    :del {force} auto/config.cache auto/config.status
-
-
-# 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 alright, the final message will be "ALL DONE".  If not you
-# get "TEST FAILURE".
-#
-test check:
-    VimProg = ../$Target
-    :execute testdir/main.aap $GUI_TESTTARGET $GUI_TESTARG
-
-testclean {virtual}:
-    :del {force} testdir/*.out testdir/test.log
-
-# 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 =
-        blowfish.c
-        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
-        hashtab.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
-        popupmnu.c
-        quickfix.c
-        regexp.c
-        screen.c
-        search.c
-        sha256.c
-        spell.c
-        syntax.c
-        tag.c
-        term.c
-        ui.c
-        undo.c
-        window.c
-        $OS_EXTRA_SRC
-        $GUI_SRC
-        $HANGULIN_SRC
-        $LUA_SRC
-        $MZSCHEME_SRC
-        $PERL_SRC
-        $NETBEANS_SRC
-        $PYTHON_SRC
-        $TCL_SRC
-        $RUBY_SRC
-        $WORKSHOP_SRC
-
-Objects =
-        $GUI_OBJ
-
-# TODO: make is still used for subdirectories, need to write a recipe.
-MAKE ?= make
-
-all: $Target $GUI_BUNDLE
-
-# 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
-# included 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
-
-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
-        @who = string.replace(who, '"', '\\"')
-        @where = string.replace(where, '"', '\\"')
-        :print >> $target char_u *compiled_user = (char_u *)"$who";
-        :print >> $target char_u *compiled_sys = (char_u *)"$where";
-
-
-### 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 under $MANTOPDIR
-MAN1DIR = /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
-SPELLSUBDIR = /spell
-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
-@if not _no.get("VIMRTLOC"):
-    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
-SPELLSUBLOC	= $VIMRTLOC$SPELLSUBDIR
-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 copy the spell files from
-SPELLSOURCE = ../runtime/spell
-
-# 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_SPELL = $DESTDIR$SPELLSUBLOC
-DEST_SCRIPT = $DESTDIR$SCRIPTLOC
-DEST_PRINT = $DESTDIR$PRINTSUBLOC
-DEST_MAN_TOP = $DESTDIR$?(MANDIR)
-
-# We assume that the ".../man/xx/man1/" directory is for latin1 manual pages.
-# Some systems use UTF-8, but these should find the ".../man/xx.UTF-8/man1/"
-# directory first.
-# FreeBSD uses ".../man/xx.ISO8859-1/man1" for latin1, use that one too.
-DEST_MAN = $(DEST_MAN_TOP)$(MAN1DIR)
-DEST_MAN_FR = $(DEST_MAN_TOP)/fr$(MAN1DIR)
-DEST_MAN_FR_I = $(DEST_MAN_TOP)/fr.ISO8859-1$(MAN1DIR)
-DEST_MAN_FR_U = $(DEST_MAN_TOP)/fr.UTF-8$(MAN1DIR)
-DEST_MAN_IT = $(DEST_MAN_TOP)/it$(MAN1DIR)
-DEST_MAN_IT_I = $(DEST_MAN_TOP)/it.ISO8859-1$(MAN1DIR)
-DEST_MAN_IT_U = $(DEST_MAN_TOP)/it.UTF-8$(MAN1DIR)
-DEST_MAN_PL = $(DEST_MAN_TOP)/pl.ISO8859-2$(MAN1DIR)
-DEST_MAN_PL_U = $(DEST_MAN_TOP)/pl.UTF-8$(MAN1DIR)
-DEST_MAN_RU = $(DEST_MAN_TOP)/ru.KOI8-R$(MAN1DIR)
-DEST_MAN_RU_U = $(DEST_MAN_TOP)/ru.UTF-8$(MAN1DIR)
-
-# 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_AUTO/xml $DEST_PLUG
-                $DEST_FTP $DEST_LANG
-                $DEST_COMP $DEST_KMAP $DEST_MACRO $DEST_TOOLS $DEST_TUTOR
-                $DEST_SCRIPT $DEST_PRINT $DEST_MAN $DEST_SPELL
-                $DEST_MAN_FR $DEST_MAN_FR_I $DEST_MAN_FR_U $DEST_MAN_IT
-                $DEST_MAN_IT_I $DEST_MAN_IT_U
-                $DEST_MAN_PL $DEST_MAN_PL_U
-                $DEST_MAN_RU $DEST_MAN_RU_U
-
-#
-# I N S T A L L
-#
-install: $GUI_INSTALL
-
-install_normal:
-    @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_LANGS 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  installtutorbin \
-                        installruntime installlinks installmanlinks
-
-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
-
-# Long list of arguments for the shell script that installs the manual pages
-# for one language.
-INSTALLMANARGS = $(VIMLOC) $(SCRIPTLOC) $(VIMRCLOC) $(HELPSOURCE) $(MANMOD) \
-		$(VIMNAME) $(VIMDIFFNAME) $(EVIMNAME)
-
-# Install most of the runtime files
-installruntime {virtual}: installrtbase installmacros installtutor installspell
-
-# install the help files; first adjust the contents for the location
-installrtbase {virtual}{force}: $HELPSOURCE/vim.1 $DEST_VIM
-                $DEST_RT $DEST_HELP $DEST_COL $DEST_SYN $DEST_IND
-                $DEST_FTP $DEST_AUTO $DEST_AUTO/xml $DEST_PLUG $DEST_TUTOR
-                $DEST_COMP $DEST_SPELL $DEST_PRINT
-        :chmod 755 installman.sh
-        :sys ./installman.sh install $(DEST_MAN) "" $(INSTALLMANARGS)
-
-        :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
-        :copy $AUTOSOURCE/xml/*.vim $DEST_AUTO/xml
-        :chmod $HELPMOD $DEST_AUTO/xml/*.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
-installtutorbin {virtual}{force}: $DEST_VIM
-        :copy vimtutor $DEST_BIN/$(VIMNAME)tutor
-        :chmod $SCRIPTMOD $DEST_BIN/$(VIMNAME)tutor
-
-installtutor {virtual}{force}: $DEST_RT $DEST_TUTOR
-        :copy $TUTORSOURCE/tutor* $TUTORSOURCE/README* $DEST_TUTOR
-        :chmod $HELPMOD $DEST_TUTOR/*
-
-# Install the spell files, if they exist.  This assumes at least the English
-# spell file is there.
-installspell {virtual}: $(DEST_VIM) $(DEST_RT) $(DEST_SPELL)
-	enspl = $(SPELLSOURCE)/en.latin1.spl
-        @if os.path.exists(enspl):
-            :copy $(SPELLSOURCE)/*.spl $(SPELLSOURCE)/*.vim $(DEST_SPELL)
-            :chmod $(HELPMOD) $(DEST_SPELL)/*.spl $(DEST_SPELL)/*.vim
-            @try:
-                :copy $(SPELLSOURCE)/*.sug $(DEST_SPELL)
-                :chmod $(HELPMOD) $(DEST_SPELL)/*.sug
-            @except:
-            @   pass
-
-# install helper program xxd
-installtools {virtual}{force}: $TOOLS $DEST_BIN $DEST_MAN \
-                $TOOLSSOURCE $DEST_VIM $DEST_RT $DEST_TOOLS \
-                $INSTALL_TOOL_LANGS
-        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
-        :chmod 755 installman.sh
-        :sys ./installman.sh xxd $(DEST_MAN) "" $(INSTALLMANARGS)
-#
-# 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 for tools, if they were unpacked
-install-tool-languages:
-        :chmod 755 installman.sh
-        :sys ./installman.sh xxd $(DEST_MAN_FR) "-fr" $(INSTALLMANARGS)
-	:sys ./installman.sh xxd $(DEST_MAN_FR_I) "-fr" $(INSTALLMANARGS)
-	:sys ./installman.sh xxd $(DEST_MAN_FR_U) "-fr.UTF-8" $(INSTALLMANARGS)
-	:sys ./installman.sh xxd $(DEST_MAN_IT) "-it" $(INSTALLMANARGS)
-	:sys ./installman.sh xxd $(DEST_MAN_IT_I) "-it" $(INSTALLMANARGS)
-	:sys ./installman.sh xxd $(DEST_MAN_IT_U) "-it.UTF-8" $(INSTALLMANARGS)
-	:sys ./installman.sh xxd $(DEST_MAN_PL) "-pl" $(INSTALLMANARGS)
-	:sys ./installman.sh xxd $(DEST_MAN_PL_U) "-pl.UTF-8" $(INSTALLMANARGS)
-	:sys ./installman.sh xxd $(DEST_MAN_RU) "-ru" $(INSTALLMANARGS)
-	:sys ./installman.sh xxd $(DEST_MAN_RU_U) "-ru.UTF-8" $(INSTALLMANARGS)
-
-# install the language specific files, if they were unpacked
-install-languages {virtual}{force}: languages $DEST_LANG $DEST_KMAP
-        :chmod 755 installman.sh
-        :sys ./installman.sh install $(DEST_MAN_FR) "-fr" $(INSTALLMANARGS)
-	:sys ./installman.sh install $(DEST_MAN_FR_I) "-fr" $(INSTALLMANARGS)
-	:sys ./installman.sh install $(DEST_MAN_FR_U) "-fr.UTF-8" $(INSTALLMANARGS)
-	:sys ./installman.sh install $(DEST_MAN_IT) "-it" $(INSTALLMANARGS)
-	:sys ./installman.sh install $(DEST_MAN_IT_I) "-it" $(INSTALLMANARGS)
-	:sys ./installman.sh install $(DEST_MAN_IT_U) "-it.UTF-8" $(INSTALLMANARGS)
-	:sys ./installman.sh install $(DEST_MAN_PL) "-pl" $(INSTALLMANARGS)
-	:sys ./installman.sh install $(DEST_MAN_PL_U) "-pl.UTF-8" $(INSTALLMANARGS)
-	:sys ./installman.sh install $(DEST_MAN_RU) "-ru" $(INSTALLMANARGS)
-	:sys ./installman.sh install $(DEST_MAN_RU_U) "-ru.UTF-8" $(INSTALLMANARGS)
-        :chmod 755 installml.sh
-	:sys ./installml.sh install "$(GUI_MAN_TARGETS)" \
-		$(DEST_MAN_FR) $(INSTALLMLARGS)
-        :sys ./installml.sh install "$(GUI_MAN_TARGETS)" \
-		$(DEST_MAN_FR_I) $(INSTALLMLARGS)
-        :sys ./installml.sh install "$(GUI_MAN_TARGETS)" \
-		$(DEST_MAN_FR_U) $(INSTALLMLARGS)
-        :sys ./installml.sh install "$(GUI_MAN_TARGETS)" \
-		$(DEST_MAN_IT) $(INSTALLMLARGS)
-        :sys ./installml.sh install "$(GUI_MAN_TARGETS)" \
-		$(DEST_MAN_IT_I) $(INSTALLMLARGS)
-        :sys ./installml.sh install "$(GUI_MAN_TARGETS)" \
-		$(DEST_MAN_IT_U) $(INSTALLMLARGS)
-        :sys ./installml.sh install "$(GUI_MAN_TARGETS)" \
-		$(DEST_MAN_PL) $(INSTALLMLARGS)
-        :sys ./installml.sh install "$(GUI_MAN_TARGETS)" \
-		$(DEST_MAN_PL_U) $(INSTALLMLARGS)
-        :sys ./installml.sh install "$(GUI_MAN_TARGETS)" \
-		$(DEST_MAN_RU) $(INSTALLMLARGS)
-        :sys ./installml.sh install "$(GUI_MAN_TARGETS)" \
-		$(DEST_MAN_RU_U) $(INSTALLMLARGS)
-
-        @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 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.
-INSTALLMLARGS = $(VIMNAME) $(VIMDIFFNAME) $(EVIMNAME) \
-		$(EXNAME) $(VIEWNAME) $(RVIMNAME) $(RVIEWNAME) \
-		$(GVIMNAME) $(GVIEWNAME) $(RGVIMNAME) $(RGVIEWNAME) \
-		$(GVIMDIFFNAME) $(EVIEWNAME)
-
-installmanlinks {virtual}:
-    :chmod 755 installml.sh
-    :sys ./installml.sh install "$(GUI_MAN_TARGETS)" \
-		$(DEST_MAN) $(INSTALLMLARGS)
-
-#
-# U N I N S T A L L
-#
-uninstall {virtual}{force}: uninstall_runtime
-    :del {force} $DEST_BIN/$VIMTARGET
-    :del {force} $DEST_BIN/vimtutor
-    :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_BIN/xxd$EXESUF
-
-# Note: "deldir" will fail if any files were added after "make install", that
-# is intentionally: Keep files the user added.
-uninstall_runtime {virtual}{force}:
-    :chmod 755 installman.sh
-    :sys ./installman.sh uninstall $(DEST_MAN) "" $(INSTALLMANARGS)
-    :sys ./installman.sh uninstall $(DEST_MAN_FR) "" $(INSTALLMANARGS)
-    :sys ./installman.sh uninstall $(DEST_MAN_FR_I) "" $(INSTALLMANARGS)
-    :sys ./installman.sh uninstall $(DEST_MAN_FR_U) "" $(INSTALLMANARGS)
-    :sys ./installman.sh uninstall $(DEST_MAN_IT) "" $(INSTALLMANARGS)
-    :sys ./installman.sh uninstall $(DEST_MAN_IT_I) "" $(INSTALLMANARGS)
-    :sys ./installman.sh uninstall $(DEST_MAN_IT_U) "" $(INSTALLMANARGS)
-    :sys ./installman.sh uninstall $(DEST_MAN_PL) "" $(INSTALLMANARGS)
-    :sys ./installman.sh uninstall $(DEST_MAN_PL_U) "" $(INSTALLMANARGS)
-    :sys ./installman.sh uninstall $(DEST_MAN_RU) "" $(INSTALLMANARGS)
-    :sys ./installman.sh uninstall $(DEST_MAN_RU_U) "" $(INSTALLMANARGS)
-    :chmod 755 installml.sh
-    :sys ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
-            $(DEST_MAN) $(INSTALLMLARGS)
-    :sys ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
-            $(DEST_MAN_FR) $(INSTALLMLARGS)
-    :sys ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
-            $(DEST_MAN_FR_I) $(INSTALLMLARGS)
-    :sys ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
-            $(DEST_MAN_FR_U) $(INSTALLMLARGS)
-    :sys ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
-            $(DEST_MAN_IT) $(INSTALLMLARGS)
-    :sys ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
-            $(DEST_MAN_IT_I) $(INSTALLMLARGS)
-    :sys ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
-            $(DEST_MAN_IT_U) $(INSTALLMLARGS)
-    :sys ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
-            $(DEST_MAN_PL) $(INSTALLMLARGS)
-    :sys ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
-            $(DEST_MAN_PL_U) $(INSTALLMLARGS)
-    :sys ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
-            $(DEST_MAN_RU) $(INSTALLMLARGS)
-    :sys ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
-            $(DEST_MAN_RU_U) $(INSTALLMLARGS)
-    :del {force} $DEST_MAN/xxd.1
-    :del {force} $(DEST_MAN_FR)/xxd.1 $(DEST_MAN_FR_I)/xxd.1 $(DEST_MAN_FR_U)/xxd.1
-    :del {force} $(DEST_MAN_IT)/xxd.1 $(DEST_MAN_IT_I)/xxd.1 $(DEST_MAN_IT_U)/xxd.1
-    :del {force} $(DEST_MAN_PL)/xxd.1 $(DEST_MAN_PL_U)/xxd.1
-    :del {force} $(DEST_MAN_RU)/xxd.1 $(DEST_MAN_RU_U)/xxd.1
-
-    :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_SPELL
-    :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 $DEST_AUTO/xml/*.vim
-    :del {force} $DEST_PLUG/*.vim $DEST_PLUG/README.txt
-    :deldir {force} $DEST_FTP $DEST_AUTO/xml $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
-
-###############################################################################
-### MacOS X installation
-###
-### This installs a runnable Vim.app in $(prefix)
-
-REZ    = /Developer/Tools/Rez
-RESDIR = $(APPDIR)/Contents/Resources
-@r = re.compile('.*VIM_VERSION_SHORT\\s*"(\\d[^"]*)".*', re.S)
-VERSION = /`r.match(open("version.h").read()).group(1)`
-
-### Common flags
-M4FLAGSX = $?(M4FLAGS) -DAPP_EXE=$(VIMNAME) -DAPP_NAME=$(VIMNAME) \
-		-DAPP_VER=$(VERSION)
-
-# Resources used for the Mac are in one directory.
-RSRC_DIR = os_mac_rsrc
-
-:attr {directory = $DIRMOD} $RESDIR
-
-install_macosx {virtual}: gui_bundle
-# Remove the link to the runtime dir, don't want to copy all of that.
-        :delete {force} $(RESDIR)/vim/runtime
-        :copy {r} $APPDIR $DESTDIR$prefix
-        :tree $DESTDIR$prefix {dirname = AAPDIR}
-             :delete {recursive} $name
-# Install the runtime files.  Recursive!
-	:mkdir {r}{f} $DESTDIR$prefix/$RESDIR/vim/runtime
-#	:mkdir $(DESTDIR)$(prefix)/$(APPDIR)/bin
-        :execute main.aap PREFIX=$DESTDIR$prefix/$RESDIR/vim VIMRTLOC=$DESTDIR$prefix/$RESDIR/vim/runtime installruntime
-# Put the link back.
-        :symlink `os.getcwd()`/../runtime $RESDIR/vim/runtime
-# TODO: Create the vimtutor application.
-
-gui_bundle {virtual}: $(RESDIR) bundle-dir bundle-executable bundle-info \
-                        bundle-resource bundle-language
-
-bundle-dir {virtual}: $(APPDIR)/Contents $(VIMTARGET)
-# Make a link to the runtime directory, so that we can try out the executable
-# without installing it.
-        :mkdir {r}{f} $(RESDIR)/vim
-        :symlink {quiet} `os.getcwd()`/../runtime $(RESDIR)/vim/runtime
-
-bundle-executable {virtual}: $(VIMTARGET)
-        :mkdir {r}{f} $(APPDIR)/Contents/MacOS
-        :copy $(VIMTARGET) $(APPDIR)/Contents/MacOS/$(VIMTARGET)
-
-bundle-info {virtual}:  bundle-dir
-        :print Creating PkgInfo
-        :print "APPLVIM!" >! $(APPDIR)/Contents/PkgInfo
-        :print Creating Info.plist
-        :sys m4 $(M4FLAGSX) infplist.xml > $(APPDIR)/Contents/Info.plist
-
-bundle-resource {virtual}: bundle-dir bundle-rsrc
-        :copy {force} $(RSRC_DIR)/*.icns $(RESDIR)
-
-### Classic resources
-# Resource fork (in the form of a .rsrc file) for Classic Vim (Mac OS 9)
-# This file is also required for OS X Vim.
-bundle-rsrc {virtual}: os_mac.rsr.hqx
-    :print Creating resource fork
-    :sys python dehqx.py $source
-    :del {force} gui_mac.rsrc
-    :move gui_mac.rsrc.rsrcfork $(RESDIR)/$(VIMNAME).rsrc
-
-# po/Make_osx.pl says something about generating a Mac message file
-# for Ukrainian.  Would somebody using Mac OS X in Ukrainian
-# *really* be upset that Carbon Vim was not localised in
-# Ukrainian?
-#
-#bundle-language: bundle-dir po/Make_osx.pl
-#	cd po && perl Make_osx.pl --outdir ../$(RESDIR) $(MULTILANG)
-bundle-language {virtual}: bundle-dir
-
-$(APPDIR)/Contents:
-    :mkdir {r} $(APPDIR)/Contents/MacOS
-    :mkdir {r} $(RESDIR)/English.lproj
-
-
-# vim: sts=4 sw=4 :
diff --git a/src/testdir/main.aap b/src/testdir/main.aap
deleted file mode 100644
index a4d0295..0000000
--- a/src/testdir/main.aap
+++ /dev/null
@@ -1,57 +0,0 @@
-#
-# Makefile to run all tests for Vim
-#
-
-VimProg ?= ../vim
-
-Scripts = test1.out test2.out test3.out test6.out
-		test11.out
-		test13.out test14.out test17.out
-		test18.out test21.out
-		test27.out test29.out test30.out
-		test37.out
-		test39.out test42.out
-		test44.out test46.out test47.out
-		test48.out test49.out test74.out
-
-ScriptsGUI = test16.out
-
-# Build "nongui" when no target was specified.
-nongui:	newlog $Scripts
-	:print
-	:cat test.log
-	:print ALL DONE
-
-# Build "ngui" when specified.
-gui:	newlog $Scripts $ScriptsGUI
-	:print
-	:cat test.log
-	:print ALL DONE
-
-$Scripts $ScriptsGUI: $VimProg
-
-clean:
-	:del {r}{force} *.out test.log tiny.vim small.vim mbyte.vim mzscheme.vim test.ok X*
-
-# test1 is special, it checks for features
-test1.out: test1.in
-	:del {force} test1.failed tiny.vim small.vim mbyte.vim mzscheme.vim
-	:sys {i} $VimProg -u unix.vim -U NONE --noplugin -s dotest.in test1.in
-	@if os.system("diff test.out test1.ok") != 0:
-		:error test1 FAILED - Something basic is wrong
-	:move {force} test.out test1.out
-	:del {r}{force} X*
-
-:rule %.out : %.in
-	:del {force} $(match).failed test.ok
-	:copy $(match).ok test.ok
-	:sys {i} $VimProg -u unix.vim -U NONE --noplugin -s dotest.in $(match).in
-	@if os.system("diff test.out " + match + ".ok") != 0:
-		:print $match FAILED >>test.log
-		:move {force} test.out $(match).failed
-	@else:
-		:move {force} test.out $(match).out
-	:del {r}{force} X* test.ok
-
-newlog:
-	:print Test results: >! test.log
diff --git a/src/version.c b/src/version.c
index 5d4845d..b0ed507 100644
--- a/src/version.c
+++ b/src/version.c
@@ -795,6 +795,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    346,
+/**/
     345,
 /**/
     344,
