# Aap recipe for Scottish Gaelic 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    = gd_GB.aff gd_GB.dic

all: $SPELLDIR/gd.latin1.spl $SPELLDIR/gd.utf-8.spl ../README_gd.txt

$SPELLDIR/gd.latin1.spl : $FILES
        :sys env LANG=gd_GB.ISO8859-15
		$VIM -u NONE -e -c "mkspell! $SPELLDIR/gd gd_GB" -c q

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

../README_gd.txt : README_gd_GB.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%} gd_GB.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.
gd_GB.aff gd_GB.dic: {buildcheck=}
        :assertpkg unzip patch
        :fetch gd_GB.zip
        :sys $UNZIP gd_GB.zip
        :delete gd_GB.zip
        @if not os.path.exists('gd_GB.orig.aff'):
            :copy gd_GB.aff gd_GB.orig.aff
        @if not os.path.exists('gd_GB.orig.dic'):
            :copy gd_GB.dic gd_GB.orig.dic
        @if os.path.exists('gd_GB.diff'):
            :sys patch <gd_GB.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 gd_GB.orig.aff gd_GB.aff >gd_GB.diff
        :sys {force} diff -a -C 1 gd_GB.orig.dic gd_GB.dic >>gd_GB.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 gd_GB.zip
        :mkdir tmp
        :cd tmp
        @try:
            @import stat
            :sys $UNZIP ../gd_GB.zip
            :sys {force} diff ../gd_GB.orig.aff gd_GB.aff >d
            @if os.stat('d')[stat.ST_SIZE] > 0:
                :copy gd_GB.aff ../gd_GB.new.aff
            :sys {force} diff ../gd_GB.orig.dic gd_GB.dic >d
            @if os.stat('d')[stat.ST_SIZE] > 0:
                :copy gd_GB.dic ../gd_GB.new.dic
        @finally:
            :cd ..
            :delete {r}{f}{q} tmp
            :delete gd_GB.zip


# vim: set sts=4 sw=4 :
