# Aap recipe for Galician (Spain) 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    = gl_ES.aff gl_ES.dic

all: $SPELLDIR/gl.latin1.spl $SPELLDIR/gl.utf-8.spl ../README_gl.txt

$SPELLDIR/gl.latin1.spl : $FILES
        :sys env LANG=es_ES.ISO8859-1
		$VIM -u NONE -e -c "mkspell! $SPELLDIR/gl gl_ES" -c q

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

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


# vim: set sts=4 sw=4 :
