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

# I don't have a Kurdish locale, us the Turkish one.
all: $SPELLDIR/ku.iso-8859-9.spl $SPELLDIR/ku.utf-8.spl \
        ../README_ku.txt

$SPELLDIR/ku.iso-8859-9.spl : $FILES
        :sys env LANG=tr_TR.ISO8859-9 $VIM -u NONE -e -c "mkspell! $SPELLDIR/ku ku_TR" -c q

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

../README_ku.txt: README_ku_TR.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%} ku_TR.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.
ku_TR.aff ku_TR.dic: {buildcheck=}
        :assertpkg unzip patch
        :fetch ku_TR.zip
        :sys $UNZIP ku_TR.zip
        :delete ku_TR.zip
        :sys $VIM ku_TR.aff -u NONE -e -c "set ff=unix" -c update -c q
        :sys $VIM ku_TR.dic -u NONE -e -c "set ff=unix" -c update -c q
        :sys $VIM README_ku_TR.txt -u NONE -e -c "set ff=unix" -c update -c q
        @if not os.path.exists('ku_TR.orig.aff'):
            :copy ku_TR.aff ku_TR.orig.aff
        @if not os.path.exists('ku_TR.orig.dic'):
            :copy ku_TR.dic ku_TR.orig.dic
        @if os.path.exists('ku_TR.diff'):
            :sys patch <ku_TR.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 ku_TR.orig.aff ku_TR.aff >ku_TR.diff
        :sys {force} diff -a -C 1 ku_TR.orig.dic ku_TR.dic >>ku_TR.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 ku_TR.zip
        :mkdir tmp
        :cd tmp
        @try:
            @import stat
            :sys $UNZIP ../ku_TR.zip
            :sys {force} diff ../ku_TR.orig.aff ku_TR.aff >d
            @if os.stat('d')[stat.ST_SIZE] > 0:
                :copy ku_TR.aff ../ku_TR.new.aff
            :sys {force} diff ../ku_TR.orig.dic ku_TR.dic >d
            @if os.stat('d')[stat.ST_SIZE] > 0:
                :copy ku_TR.dic ../ku_TR.new.dic
        @finally:
            :cd ..
            :delete {r}{f}{q} tmp
            :delete ku_TR.zip


# vim: set sts=4 sw=4 :
