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

all: $SPELLDIR/el.iso-8859-7.spl $SPELLDIR/el.utf-8.spl ../README_el.txt

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

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

../README_el.txt : README_el_GR.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%} el_GR.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.
el_GR.aff el_GR.dic: {buildcheck=}
        :assertpkg unzip patch
        :fetch el_GR.zip
        :sys $UNZIP el_GR.zip
        :delete el_GR.zip
        @if not os.path.exists('el_GR.orig.aff'):
            :copy el_GR.aff el_GR.orig.aff
        @if not os.path.exists('el_GR.orig.dic'):
            :copy el_GR.dic el_GR.orig.dic
        @if os.path.exists('el_GR.diff'):
            :sys patch <el_GR.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 el_GR.orig.aff el_GR.aff >el_GR.diff
        :sys {force} diff -a -C 1 el_GR.orig.dic el_GR.dic >>el_GR.diff


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

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


# vim: set sts=4 sw=4 :
