# Aap recipe for Yiddish Vim spell files.

# Use a freshly compiled Vim if it exists.
@if os.path.exists('../../../src/vim'):
    VIM = ../../../src/vim
@else:
    :progsearch VIM vim

SPELLDIR    = ..
FILES       = yi.dic yi.aff
WORDFILE    = wordlist.utf8.txt
FILES_TR    = yi_tr.dic yi_tr.aff
WORDFILE_TR = wordlist.txt

all: $SPELLDIR/yi.utf-8.spl $SPELLDIR/yi-tr.utf-8.spl \
        $SPELLDIR/yi.latin1.spl ../README_yi.txt

$SPELLDIR/yi.utf-8.spl : $FILES
    :sys $VIM -u NONE -e -c "set enc=utf-8"
            -c "mkspell! $SPELLDIR/yi yi" -c q

$SPELLDIR/yi-tr.utf-8.spl : $FILES_TR
    :sys $VIM -u NONE -e -c "set enc=utf-8"
            -c "mkspell! $SPELLDIR/yi-tr yi_tr" -c q

$SPELLDIR/yi.latin1.spl : $FILES_TR
    :sys $VIM -u NONE -e -c "set enc=latin1"
            -c "mkspell! $SPELLDIR/yi yi_tr" -c q

../README_yi.txt : README.txt
    :copy $source $target

#
# Fetch the word list when needed.
#
URLDIR = http://www.cs.uky.edu/~raphael/yiddish
:attr {fetch = $URLDIR/%file%} $WORDFILE $WORDFILE_TR

# We use the word list as a .dic file, so that we can use an affix file to
# define a few extra things.
$FILES: {buildcheck=}
        :assertpkg patch
        :fetch $WORDFILE
        :copy $WORDFILE yi.dic
        :touch {force} yi.aff
        @if os.path.exists('yi.diff'):
            :sys patch < yi.diff

$FILES_TR: {buildcheck=}
        :assertpkg patch
        :fetch $WORDFILE_TR
        :copy $WORDFILE_TR yi_tr.dic
        :touch {force} yi_tr.aff
        @if os.path.exists('yi_tr.diff'):
            :sys patch < yi_tr.diff

diff {virtual}:
    :assertpkg diff
    # Using a context of two lines to work around a bug in FreeBSD patch.
    :sys {force} diff -a -C 2 $WORDFILE yi.dic > yi.diff
    :sys {force} diff -a -N -C 1 /dev/null yi.aff >> yi.diff
    :sys {force} diff -a -C 2 $WORDFILE_TR yi_tr.dic > yi_tr.diff
    :sys {force} diff -a -N -C 1 /dev/null yi_tr.aff >> yi_tr.diff

# vim: set sts=4 sw=4 :
