view src/main.aap @ 2894:fe9c7da98b5e v7.3.220

updated for version 7.3.220 Problem: Python 3: vim.error is a 'str' instead of an 'Exception' object, so 'except' or 'raise' it causes a 'SystemError' exception. Buffer objects do not support slice assignment. When exchanging text between Vim and Python, multibyte texts become gabage or cause Unicode Expceptions, etc. 'py3file' tries to read in the file as Unicode, sometimes causes UnicodeDecodeException Solution: Fix the problems. (lilydjwg)
author Bram Moolenaar <bram@vim.org>
date Sun, 19 Jun 2011 00:27:51 +0200
parents 073ff46fe397
children 04736b4030ec
line wrap: on
line source

# 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.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) | :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 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

# 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
        $SNIFF_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 Ukrananian.  Would somebody using Mac OS X in Ukranian
# *really* be upset that Carbon Vim was not localised in
# Ukranian?
#
#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 :