# Aap recipe for Lithuanian 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    = lt_LT.aff lt_LT.dic

all: $SPELLDIR/lt.iso-8859-13.spl $SPELLDIR/lt.utf-8.spl \
         ../README_lt.txt

$SPELLDIR/lt.iso-8859-13.spl : $FILES
        :sys env LANG=lt_LT.ISO8859-13 $VIM -u NONE -e -c "mkspell! $SPELLDIR/lt lt_LT" -c q

$SPELLDIR/lt.utf-8.spl : $FILES
        :sys env LANG=lt_LT.UTF-8 $VIM -u NONE -e -c "mkspell! $SPELLDIR/lt lt_LT" -c q

../README_lt.txt: README_lt_LT.txt
        :copy $source $target

#
# Fetching the files from OpenOffice.org.
#
OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
:attr {fetch = $OODIR/%file%} lt_LT.zip

# The files don't depend on the .zip file so that we can delete it.
# Only download the zip file if the targets don't exist.
# This is a bit tricky, since the file name includes the date.
lt_LT.aff lt_LT.dic: {buildcheck=}
        :assertpkg unzip patch
        :fetch lt_LT.zip
        :sys $UNZIP lt_LT.zip
        :delete lt_LT.zip
        @if not os.path.exists('lt_LT.orig.aff'):
            :copy lt_LT.aff lt_LT.orig.aff
        @if not os.path.exists('lt_LT.orig.dic'):
            :copy lt_LT.dic lt_LT.orig.dic
        @if os.path.exists('lt_LT.diff'):
            :sys patch <lt_LT.diff


# Generate diff files, so that others can get the OpenOffice files and apply
# the diffs to get the Vim versions.

diff:
        :assertpkg diff
        :sys {force} diff -a -C 1 lt_LT.orig.aff lt_LT.aff >lt_LT.diff
        :sys {force} diff -a -C 1 lt_LT.orig.dic lt_LT.dic >>lt_LT.diff


# Check for updated spell files.  When there are changes the
# ".new.aff" and ".new.dic" files are left behind for manual inspection.

check:
        :assertpkg unzip diff
        :fetch lt_LT.zip
        :mkdir tmp
        :cd tmp
        @try:
            @import stat
            :sys $UNZIP ../lt_LT.zip
            :sys {force} diff ../lt_LT.orig.aff lt_LT.aff >d
            @if os.stat('d')[stat.ST_SIZE] > 0:
                :copy lt_LT.aff ../lt_LT.new.aff
            :sys {force} diff ../lt_LT.orig.dic lt_LT.dic >d
            @if os.stat('d')[stat.ST_SIZE] > 0:
                :copy lt_LT.dic ../lt_LT.new.dic
        @finally:
            :cd ..
            :delete {r}{f}{q} tmp
            :delete lt_LT.zip


# vim: set sts=4 sw=4 :
