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

all: $SPELLDIR/fo.latin1.spl $SPELLDIR/fo.utf-8.spl ../README_fo.txt

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

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

../README_fo.txt : README_fo_FO.txt Copyright
        :cat $source >! $target

#
# Fetching the files from OpenOffice.org.
#
OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
:attr {fetch = $OODIR/%file%} fo_FO.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.
fo_FO.aff fo_FO.dic: {buildcheck=}
        :assertpkg unzip patch
        :fetch fo_FO.zip
        :sys $UNZIP fo_FO.zip
        :delete fo_FO.zip
        :delete contributors fo_FO.excluded Makefile COPYING
        @if not os.path.exists('fo_FO.orig.aff'):
            :copy fo_FO.aff fo_FO.orig.aff
        @if not os.path.exists('fo_FO.orig.dic'):
            :copy fo_FO.dic fo_FO.orig.dic
        @if os.path.exists('fo_FO.diff'):
            :sys patch <fo_FO.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 fo_FO.orig.aff fo_FO.aff >fo_FO.diff
        :sys {force} diff -a -C 1 fo_FO.orig.dic fo_FO.dic >>fo_FO.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 fo_FO.zip
        :mkdir tmp
        :cd tmp
        @try:
            @import stat
            :sys $UNZIP ../fo_FO.zip
            :sys {force} diff ../fo_FO.orig.aff fo_FO.aff >d
            @if os.stat('d')[stat.ST_SIZE] > 0:
                :copy fo_FO.aff ../fo_FO.new.aff
            :sys {force} diff ../fo_FO.orig.dic fo_FO.dic >d
            @if os.stat('d')[stat.ST_SIZE] > 0:
                :copy fo_FO.dic ../fo_FO.new.dic
        @finally:
            :cd ..
            :delete {r}{f}{q} tmp
            :delete fo_FO.zip


# vim: set sts=4 sw=4 :
