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

all: $SPELLDIR/ga.latin1.spl $SPELLDIR/ga.utf-8.spl ../README_ga.txt

# I don't have an Irish locale, use the Dutch one instead.
$SPELLDIR/ga.latin1.spl : $FILES
        :sys env LANG=nl_NL.ISO8859-1
		$VIM -u NONE -e -c "mkspell! $SPELLDIR/ga ga_IE" -c q

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

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


# vim: set sts=4 sw=4 :
