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

all: $SPELLDIR/ro.iso-8859-2.spl $SPELLDIR/ro.utf-8.spl \
        $SPELLDIR/ro.cp1250.spl ../README_ro.txt

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

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

$SPELLDIR/ro.cp1250.spl : $FILES
        :sys $VIM -u NONE -e -c "set enc=cp1250" -c "mkspell! $SPELLDIR/ro ro_RO" -c q

../README_ro.txt: README_ro_RO.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%} ro_RO.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.
# This is a bit tricky, since the file name includes the date.
ro_RO.aff ro_RO.dic: {buildcheck=}
        :assertpkg unzip patch
        :fetch ro_RO.zip
        :sys $UNZIP ro_RO.zip
        :delete ro_RO.zip
        @if not os.path.exists('ro_RO.orig.aff'):
            :copy ro_RO.aff ro_RO.orig.aff
        @if not os.path.exists('ro_RO.orig.dic'):
            :copy ro_RO.dic ro_RO.orig.dic
        @if os.path.exists('ro_RO.diff'):
            :sys patch <ro_RO.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 ro_RO.orig.aff ro_RO.aff >ro_RO.diff
        :sys {force} diff -a -C 1 ro_RO.orig.dic ro_RO.dic >>ro_RO.diff


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

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


# vim: set sts=4 sw=4 :
